gpt4 book ai didi

c - 欧氏距离和迭代的 pagerank 代码错误

转载 作者:行者123 更新时间:2023-11-30 20:23:43 24 4
gpt4 key购买 nike

我目前正在研究以下 pagerank 算法:

其中 mxm 包含以下内容:

0 50 30 10
0 0 0 0
10 0 0 20
0 20 10 30

这是代码:

#define n 4

int mxm[n][n];
int Oj[n];

for(i=0; i<n; i++)
{
Oj[i]=0;

for(j=0; j<n; j++)
{
Oj[i]+=mxm[i][j];
}
}

int Iij[n][n+1];
int k;

for(i=0; i<n; i++)
{
Iij[i][0]=0;
k=1;

for(j=0; j<n; j++)
{
if(mxm[j][i]!=0)
{
Iij[i][0]++;
Iij[i][k]=j;
k++;
}
}
}

double host_rank[n];

for(i=0; i<n; i++)
{
host_rank[i]=1;
}

double eucl;
double p,q,lol;

for(i=0; i<n; i++)
{
int t=1;
int sumhost=Iij[i][0];
double sumPR=0;
int iteration=0;

while(t<=sumhost)
{
j=Iij[i][t];
printf("%d \n",t);
t++;
sumPR+=(host_rank[j]*mxm[i][j])/Oj[i];
lol=0;
eucl=0;

do
{
for(k=0; k<n; k++)
{
p=host_rank[k];
host_rank[i]=((1-d)/n) + (d*sumPR);
q=host_rank[k];
lol+=(p-q)*(p-q);
}
eucl = (double)sqrt(lol);
}
while(eucl<0.01);
}
}

它应该执行以下迭代:

迭代 0:

h0 1.000
h1 1.000
h2 1.000
h3 1.000

迭代 1:

h0 0.321
h1 0.793
h2 0.463
h3 1.124

迭代 2:

h0 0.169
h1 0.507
h2 0.288
h3 0.807

迭代 3:

h0 0.119
h1 0.346
h2 0.200
h3 0.560

.
.
.

迭代 9:

h0 0.062
h1 0.119
h2 0.081
h3 0.170

但是,它不起作用。 (以上是完整代码的一部分。)

有人可以解决这个问题吗?

基于this功能。

最佳答案

查看这部分代码

lol=0;
eucl=0;
do{
for(k=0; k<n; k++){
p=host_rank[k];
host_rank[i]=((1-d)/n) + (d*sumPR);
q=host_rank[k];
lol+=(p-q)*(p-q);
}
eucl = (double)sqrt(lol);
}while(eucl<0.01);

变量pq设置为相同的值host_rank[k]。因此,除非 i == k (从而更改正在读取的 pq 之间的数组元素),lol 将会不会从 0 开始移动,因此 eucl 将是 0,并且循环将是无限的。

我还怀疑 lol = 0 应该位于 do-while 循环内。除非变量 i、d、n 和 sumPR 被另一个进程共享和更改,否则循环,如果重复,就永远重复。

关于c - 欧氏距离和迭代的 pagerank 代码错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35585860/

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