当前位置: 首页 > news >正文

AI编程方法案例:PageRank算法实现

一、算法简单说明

PageRank算法是一种常见的网络权值迭代算法,主要用于诸如互联网网页的质量测度。基本计算原理是根据网页自身的链出将原始权值进行扩散,并通过多轮迭代获得稳定的收敛值来表征网页自身的最终权值。基本计算公式为:

其中R(u)'和R(u)分别表示网页u的新权值和上次计算的旧权值,Bu表示网页u的链入网页集合,Nv表示网页u的一个链入网页v全部的链出数量。

下面通过一个例子说明基本计算方法。假设有5个网页,链接关系如:


初始设置每个网页的权值都为0.2,即网页总数分之一。
第一轮计算为:

再加上每个网页各自的原始权值,可以得到第一轮计算后每个网页的新权值,即:

利用权值总和(为2)去除每个权值得到规范化后的权值为:

以此类推,再次使用该权值迭代进行相同的计算,反复计算后即可得到最终每个网页的权值。

二、自己实现:

将上述过程反复迭代运行,既可以选择运行100、1000等固定次数,也可以运行到前后两次权值差值小于一定阈值即可结束(本处以第二种为例):

r1, r2, r3, r4, r5 = 0.2, 0.2, 0.2, 0.2, 0.2
_r1 = 0
while abs(_r1 - r1) > 0.000001:
    _r1, _r2, _r3, _r4, _r5 = r1, r2, r3, r4, r5
    r1 = _r1 + _r2 / 2 + _r3 / 2 + _r5 / 2
    r2 = _r2 + _r1 / 1
    r3 = _r3 + _r2 / 2
    r4 = _r4 + _r3 / 2 + _r5 / 2
    r5 = _r5 + _r4 / 1
    total = r1 + r2 + r3 + r4 + r5
    r1, r2, r3, r4, r5 = r1 / total, r2 / total, r3 / total, r4 / total, r5 / total
print(r1, r2, r3, r4, r5)

三、AI实现:

有效的提示词:

我是一名计算机学生,正在学习网络计算中的PageRank算法。已知有5个网页,其链接关系如:
网页1有1个链接指向网页2,
网页2有2个链接指向网页1和网页3,
网页3有2个链接指向网页1和网页4,
网页4有1个链接指向网页5,
网页5有2个链接指向网页1和网页4
请根据标准的PageRank算法思路,无需考虑阻尼系数,具体方法是对于每个网页权值初始设为0.2,在第一轮迭代中,如果有其他网页指向,就将其权值累加过来,但是该累加值会被其他链入网页的出度均分,最后每个网页再将自身的权值和其他链入网页传入的权值累加,并最终以全部网页权值总和做分母规范化所有权值,完成第一轮迭代,再进行第二轮迭代,方法同前,反复进行,直到先后两次迭代同一网页的权值差值小于0.00001即可停止迭代,最后输出最终全部网页的权值。请写出Python代码,不要使用自定义函数、列表、字典、任何第三方模块等复杂内容,只需使用简单的逻辑控制语句即可,控制代码在20行以内。

该提示词使用了角色扮演、图例文本描述、算法要求的详细说明、强调不出现的内容(不要使用自定义函数、列表、字典、任何第三方模块)、强调要求出现的内容(只需使用简单的逻辑控制语句、代码行数)

生成的代码为:

# 初始化权值
p1, p2, p3, p4, p5 = 0.2, 0.2, 0.2, 0.2, 0.2

# 迭代直到收敛
while True:
    # 计算新的权值
    new_p1 = (p2 / 2) + (p3 / 2) + (p5 / 2)
    new_p2 = p1 / 1
    new_p3 = p2 / 2
    new_p4 = (p3 / 2) + (p5 / 2)
    new_p5 = p4 / 1

    # 规范化权值
    total = new_p1 + new_p2 + new_p3 + new_p4 + new_p5
    new_p1, new_p2, new_p3, new_p4, new_p5 = new_p1/total, new_p2/total, new_p3/total, new_p4/total, new_p5/total

    # 检查是否收敛
    if abs(new_p1 - p1) < 0.00001 and abs(new_p2 - p2) < 0.00001 and abs(new_p3 - p3) < 0.00001 and abs(new_p4 - p4) < 0.00001 and abs(new_p5 - p5) < 0.00001:
        break

    # 更新权值
    p1, p2, p3, p4, p5 = new_p1, new_p2, new_p3, new_p4, new_p5

# 输出最终权值
print(p1, p2, p3, p4, p5)

相关文章:

  • 大数据(1.1)纽约出租车大数据分析实战:从Hadoop到Azkaban的全链路解析与优化
  • 【经验】重装OpenCV踩雷
  • Unity 获取Game窗口分辨率
  • 深度革命:ResNet 如何用 “残差连接“ 颠覆深度学习
  • 将 YOLO 格式的标注文件(.txt)转换为 VOC 格式的 XML 标注文件
  • 使用 Promise 和 .then() 解决同异步问题
  • IT工具 | node.js 进程管理工具 PM2 大升级!支持 Bun.js
  • 3D标定中的平面约束-平面方程的几何意义
  • Django CSRF验证失败请求为什么会中断?
  • 51单片机的寻址方式(完整)
  • CherryStudio + 火山引擎DeepSeek R1 告别服务器繁忙
  • R语言使用dietaryindex包计算nhanes饮食炎症指数
  • 【路由系列】BGP
  • 使用 CryptoJS 实现 AES 解密:动态数据解密示例
  • 数据结构——最短路(BFS,Dijkstra,Floyd)
  • 【蓝桥杯每日一题】3.17
  • HTML5 Video标签详细教程
  • Edge/Chrome浏览器插件设计、开发、发布完整流程
  • 兆芯大道云行 | 破解高性能云计算数据存储瓶颈
  • 《当Keras遇上复杂模型:探寻其潜藏的局限》
  • 中国科协发声:屡禁不止的奇葩论文再次敲响学风建设警钟
  • 体坛联播|郑钦文收获红土赛季首胜,国际乒联公布财报
  • 巴基斯坦首都及邻近城市听到巨大爆炸声
  • 甘肃省政府原副省长赵金云被决定逮捕
  • 从上海首个到成片复制,闵行零工市场如何优化劳动就业服务?
  • 奥园集团将召开债券持有人会议,拟调整“H20奥园2”本息兑付方案