gpt4 book ai didi

计算 C 中的色散

转载 作者:太空宇宙 更新时间:2023-11-04 04:37:13 25 4
gpt4 key购买 nike

我正在尝试计算两个值之间的离差,一个是我从中获得的,另一个是从结构数组的每个条目中获得的特定参数(“年龄”)。

我有一个辅助的 .txt 文件,整个过程的重点是单独检查 .txt 文件的每一行(每一行都是一个字符串)。我最好举个例子,所以,我们开始吧:

matrix[n][n]:
1 2 3 4
1 2 3
1 2

所以,结构看起来有点像这样:

struct person {
int id; //where im comparing between the matrix and the structure;
int age; //what I need to calculate the dispersion
}

我必须比较 .txt 每一行的每个值,如果它与结构上的任何 id 相匹配,我必须得到它的年龄。现在是棘手的部分。

要计算色散,我需要为我解决以下问题:

让我们以 .txt 文件的第一行为例:离散度为:

假设 'age' = id 的年龄 (n);

//in this case nGroups = 6 (number of age(n)-age(m) operations)
dispersion(first_row)= [ [|age(1)-age(2)|] + [|age(1)-age(3)|] + [|age(1)-age(4)|] + [|age(2)-age(3)|] + [|age(2)-age(4)|] + [|age(3)-age(4)|] ]/nGroups

所以我必须对矩阵的每一行都这样做。我试过并管理了以下代码,但在“数学”部分我的大脑有点卡住。

// going through each line of the matrix
for(i=0; i<nconjuntos; i++) {
// going through each column of the matrix
for(j=0; j<strlen(aux[i]); j++) {
// going through all the structures in the structure array
for(k=0; k<TOTAL; k++) {
// comparing each number with it's id equivalent in
// each structure.id parameter in the array
if(aux[i][j] - 48 == pessoas[k].id) {

}
}
}
}

如果能帮助我改进我的代码,我将不胜感激!

最佳答案

这里有两个问题需要解决:

  • 将矩阵中的 id 与结构中的 id 进行匹配,并获得给定行的年龄列表
  • 计算离差

如果您将这两个任务分开而不是在同一个嵌套 for 循环中执行它们,这可能是最简单的。您可以编写一个函数来根据您给出的公式计算色散:

double calculateDispersion(double* values, int count)
{
if(count < 2)
return 0.0; // need at least 2 values
double total = 0.0;
// iterate through each combination of values and sum the absolute
// differences of each combination:
int i, j;
for(i = 0; i < (count - 1); i++)
{
for(j = i + 1; j < count; j++)
{
double difference = values[i] - values[j];
if(difference < 0.0) // find absolute value
difference = 0.0 - difference;
total += difference; // add to the total
}
}
int groups = (count * (count - 1)) / 2;
return total / (double)groups;
}

在主循环中创建一个 double 组,其大小等于矩阵中最大的行,以存储当前行的年龄(或 float ,但使用整数会产生舍入误差)。通过交叉引用包含 id 和 age 的结构来填充它。然后调用 calculateDispersion() 来计算该行的离散度。

大概是这样的:

double rowArray[MAX_SIZE]; // or initialize to maximum matrix row length dynamically

// going through each line of the matrix
for(i=0; i<nconjuntos; i++) {
int count = 0;
// going through each column of the matrix
for(j=0; j<strlen(aux[i]); j++) {
// going through all the structures in the structure array
for(k=0; k<TOTAL; k++) {
// comparing each number with it's id equivalent in
// each structure.id parameter in the array
if(aux[i][j] - 48 == pessoas[k].id) {
// set array value:
rowArray[count++] = (double)pessoas[k].age;
break; // break out of the loop
}
}
}
// compute the dispersion for the row:
doubleDispersion = calculateDispersion(rowArray, count);
}

关于计算 C 中的色散,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29758630/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com