【问题标题】:Difficulty in association in an algorithm logic implementation算法逻辑实现中的关联困难
【发布时间】:2012-06-10 21:12:04
【问题描述】:

任务是:

  • 有2个数组A(数值浮点型),B是一个字符数组。 A 填充了随机数。
  • A[i] 表示与B 数组中的第i 个字符相关联的第i 个值。也就是说,每个唯一的Ai 都映射/关联到一个唯一的Bi。因此,如果有相似的 Ai,那么它们中的每一个都将依次与 B 中的相同字符相关联。
  • 现在,有一个新数组New_A 由随机数填充,这些随机数可能与A 略有不同,或者少数数字可能完全相同。任务是根据以下假设创建一个字符数组 New_B:
  • 我们找到最小的欧几里得距离或New_A[j]A[i] 之间的任何度量,这样给定New_A[j],来自B 的字符被分配到A[i] >=New_A[j] (New_A[i] >= A[j]) 的位置。令small_A 表示条件成立的最小A[j] 的索引j。
  • 例如,假设与 A[2] 关联的字符是 'd',A[2]=12.1 的值和 New_A[7]=11.9 的值。因为, A[2]> New_A[7],New_A[7] 被映射/关联到最初与 A[2] 关联的字符,即字符 'd' ;该条件不成立的其余部分保持不变。因此,整体效果/目标是根据New_A和A,将字符数组B的变体创建成新的字符数组New_B。

现在,这就是我卡住的地方。如何找到最小的欧几里得值,然后如何根据条件分配 B 的字符。此外,数组的数据类型不同,如何进行关联。二维数组的使用纯属猜测,不能保证我是正确的。

float A[10];
char B[10] = {'c','d','e','f','g','h','i','j','k','l'} ; 

for (i = 1; i <= 10; i++) {
  Val_A[i] = rand(); 
  Val_New[i] = rand();
  A[i] = Val_A[i]; 
  New_A[i][j] = Val_New[i]; 
}

max1 = New_A[0];
index1 = 0; 
for (i = 1; i < 10; i++) {
  if (A[i] > max1)
    extract_char = B[i];  
  New_A[i][j] = extract_char;  
  //assigning corresponding character to New_A, which was assigned earlier to A   
  index1 = i;
}

【问题讨论】:

  • 我已经编辑了这个问题并放了一个小例子。欧几里得距离和多维数组的使用纯属猜测。这个解释比遵循我的程序 sn-p 更好。感谢您的支持。

标签: c algorithm multidimensional-array implementation


【解决方案1】:

首先,标量的欧几里得距离只是说“差的绝对值”的一种奇特方式,例如晶圆厂(a-b)

对于 New_A 中的每个元素“i”:

  1. 在 A 中以最小欧几里德距离找到索引为“minA”的元素
  2. 将 New_B[i] 设置为 B[minA]

第一步:

int findminA(float A[], int sizeA, float compare)
{
  int i;
  int minA=0;
  float best=abs(a[0]-compare);
  for(i=1;i<sizeA;++i) {
    if(fabs(A[i]-compare)<best) {
       best=fabs(A[i]-compare)
       minA=i;
  }
  return i;
}

这将为您提供具有最小欧几里德距离的索引(用于 A 和 B)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-11-25
    • 2012-08-14
    • 2014-12-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多