🎯要点
🎯合成大肠杆菌生物学网络 | 🎯量化基因型-表型图 | 🎯化学诱导离散浓度下培养细菌评估整个浓度范围内的表达模式 | 🎯定性更改合成模型拓扑结构、定量更改相互作用的强度 | 🎯开发机械数学模型 | 🎯微生物生长和荧光蛋白简化模型纳入常微分方程模型
📜微生物图拓扑用例
📜Python和C++骨髓细胞进化解析数学模型
📜Python成像质谱流式细胞术病理生理学
📜Python药物副作用生物图分析算法和矩阵降维算法
📜C++和R穿刺针吸活检肿瘤算法模型模拟和进化动力学量化差异模型
🍪语言内容分比
🍇C++和Python多语言汉明距离
在信息论中,两个等长字符串或向量之间的汉明距离是相应符号不同的位置数。换句话说,它衡量将一个字符串更改为另一个字符串所需的最少替换次数,或者说,将一个字符串转换为另一个字符串的最少错误数。在更一般的上下文中,汉明距离是用于测量两个序列之间编辑距离的几种字符串度量之一。它以美国数学家理查德·汉明的名字命名。主要应用是编码理论,更具体地说是块码,其中等长字符串是有限域上的向量。
应用示例
给定一个包含 N 个元素的数组,创建一个新数组,该数组是给定数组的旋转,并且两个数组之间的汉明距离最大。 任务是打印给定数组和新数组之间的最大汉明距离。
输入:N = 3,arr = {1,4,1}
输出:2
解释:给定数组的可能旋转 = 4 1 1 和 1 1 4。在每种情况下,汉明距离均为 2。因此最大汉明距离将为 2。
输入:N = 4,arr = {2,4,8,0}
输出:4
解释: 在给定数组的可能旋转中,旋转 8 0 2 4 和 0 2 4 8 的最大汉明距离为 4。
简单处理方法是创建另一个大小为原始数组两倍的数组,使得这个新数组(复制数组)的元素只是原始数组中按相同序列重复两次的元素。例如,如果原始数组是 1 4 1,则复制数组是 1 4 1 1 4 1。现在,遍历复制数组并在每次移位(或旋转)时找到汉明距离。因此,我们检查 4 1 1、1 1 4、1 4 1,并选择汉明距离最大的输出。
例如:
给定数组 arr[]={2, 4, 6, 8}。
新数组 brr[]={2, ,4, 6, 8, 2, 4, 6, 8} , count=0
- 在第一次迭代中: {2, 4, 6, 8} & {2 ,4, 6, 8, 2, 4, 6, 8} ,count=1
- 在第二次迭代中: {2, 4, 6, 8} & {2 ,4, 6, 8, 2, 4, 6, 8} ,count=2
- 在第三次迭代中: {2, 4, 6, 8} & {2 ,4, 6, 8, 2, 4, 6, 8} ,count=3
- 在第四次迭代中: {2, 4, 6, 8} & {2 ,4, 6, 8, 2, 4, 6, 8} ,count=4
- count = 原始数组的大小,因此输出为 4
我们将创建另一个大小为原始数组两倍的数组,并将元素逐个插入其中,两次。现在我们将对数组执行旋转,并且对于每次旋转,我们将检查原始数组的值是否与新创建的数组匹配。
- 如果它们不匹配,我们将增加我们的count值
- 值递增后,我们将执行一个条件来检查最大值,以检查可以获得的最大值。
- 否则,如果值不匹配,我们不必执行任何操作
- 在检查循环内,我们还必须检查计数器的值是否=原始数组的大小,因为它是我们可以获得的最大值。如果条件匹配,我们可以返回该值。这个条件优化了我们的代码。
C++ 查找另一个数组,使得汉明与原数组的距离最大
#include <bits/stdc++.h>
using namespace std;
int maxHamming(int arr[], int n)
{
int brr[2 * n + 1];
for (int i = 0; i < n; i++) {
brr[i] = arr[i];
brr[n + i] = arr[i];
}
int maxHam = 0;
for (int i = 1; i < n; i++) {
int currHam = 0;
for (int j = i, k = 0; j < (i + n); j++, k++)
if (brr[j] != arr[k])
currHam++;
if (currHam == n)
return n;
maxHam = max(maxHam, currHam);
}
return maxHam;
}
int main()
{
int arr[] = { 2, 4, 6, 8 };
int n = sizeof(arr) / sizeof(arr[0]);
cout << maxHamming(arr, n);
return 0;
}
Python 查找另一个数组,使得汉明与原数组的距离最大
def maxHamming( arr , n ):
brr = [0] * (2 * n + 1)
for i in range(n):
brr[i] = arr[i]
for i in range(n):
brr[n+i] = arr[i]
maxHam = 0
for i in range(1, n):
currHam = 0
k = 0
for j in range(i, i + n):
if brr[j] != arr[k]:
currHam += 1
k = k + 1
if currHam == n:
return n
maxHam = max(maxHam, currHam)
return maxHam
arr = [2, 4, 6, 8]
n = len(arr)
print(maxHamming(arr, n))
C 查找另一个数组,使得汉明与原数组的距离最大
#include <stdio.h>
int max(int num1, int num2)
{
return (num1 > num2) ? num1 : num2;
}
int maxHamming(int arr[], int n)
{
int brr[2 * n + 1];
for (int i = 0; i < n; i++) {
brr[i] = arr[i];
brr[n + i] = arr[i];
}
int maxHam = 0;
for (int i = 1; i < n; i++) {
int currHam = 0;
for (int j = i, k = 0; j < (i + n); j++, k++)
if (brr[j] != arr[k])
currHam++;
if (currHam == n)
return n;
maxHam = max(maxHam, currHam);
}
return maxHam;
}
int main()
{
int arr[] = { 2, 4, 6, 8 };
int n = sizeof(arr) / sizeof(arr[0]);
printf("%d\n", maxHamming(arr, n));
return 0;
}
Javascript 查找另一个数组,使得汉明与原数组的距离最大
<script>
function maxHamming(arr, n)
{
let brr = new Array(2 *n + 1);
for (let i = 0; i < n; i++){
brr[i] = arr[i];
brr[n+i] = arr[i];
}
let maxHam = 0;
for (let i = 1; i < n; i++)
{
let currHam = 0;
for (let j = i, k=0; j < (i + n); j++,k++)
if (brr[j] != arr[k])
currHam++;
if (currHam == n)
return n;
maxHam = max(maxHam, currHam);
}
return maxHam;
}
let arr = [2, 4, 6, 8];
let n = arr.length;
document.write(maxHamming(arr, n));
</script>