蒙特卡罗模拟网站访问——PageRank算法

假设一种简单的情况,互联网上有5个网站可供访问,分别是网站A~D,他们之间互相链接,如下图所示,例如“网站A”下面只有一个超链接“网站D”,“网站B”和“网站C”下面分别都只有超链接“网站A”,那么这些网站在搜索引擎上应该怎么进行排序呢?当然可以按照所访问的网站停留时间进行排序。这个被称作PageRank的算法是由谷歌创始人布林和佩奇提出的。

我们可以算算任意一个网站的访问可能性,例如算算小王从网站A跳到其他网站的可能性。我们假设小王在浏览网站A时有0.85的可能会点击下面的超链接,由于网站A下面只有一个超链接网站D,就是说从网站A通过超链接访问网站D的可能性是0.85乘以1,剩下0.15乘以1/5他可以直接访问网站D,所以从网站A跳到网站D的可能性为0.85*1+0.15*1/5=0.88;而0.15*1/5的机会他会浏览网站A、B、C、E。因此我们可以按这种方法算出小王从甲网站跳到乙网站的概率。


可以用矩阵来表示上图中各网站通过超链接访问的逻辑关系。n表示链接的先后次序。


下面在matlab中用蒙特卡罗方法来计算网站访问的可能性(时间比例)

numsim = 5000; % 模拟5000次

g = [0 0 0 1 0; 1 0 0 0 0; 1 0 0 0 0; 0 1 1 0 1; 0 0 1 0 0]%链接矩阵
n = length(g); %网站个数

state = 1; %系统初始状态

p = 0.85 %访问超链接的可能性
m = zeros(n,n)  %生成一个nxn阶零方阵,或者说初始化可能性矩阵
for i = 1:n
    for j = 1:n
        m(i,j) = p*g(i,j)/sum(g(i,:)) + (1-p)/n;
    end
end

pages = zeros(1,n); %网站访问次数统计

fprintf('\n\n');
fprintf('========================================\n');
fprintf('computed probabilities from %d simulations\n\n', numsim);
fprintf('simulations  pageA  pageB  pageC  pageD  pageE\n');
fprintf('========================================\n');

%
for i=1:numsim
    prob = rand;
    if prob < m(state,1)
        state = 1;
    elseif prob < m(state,1) + m(state,2)
        state = 2;
    elseif prob < m(state,1) + m(state,2) + m(state,3)
        state = 3;
    elseif prob < m(state,1) + m(state,2) + m(state,3) + m(state, 4)
        state = 4;
    else state = 5;
    end
    
    pages(state) = pages(state) + 1;
    if ~mod(i,numsim/5)
        fprintf('%11d %6.3f %6.3f %6.3f %6.3f %6.3f\n', i, pages/sum(pages));
    end
end
运行结果

==================================================
computed probabilities from 5000 simulations

simulations  pageA  pageB  pageC  pageD  pageE
==================================================
       1000  0.291  0.096  0.206  0.279  0.128
       2000  0.294  0.108  0.198  0.281  0.118
       3000  0.294  0.110  0.200  0.282  0.113
       4000  0.294  0.110  0.201  0.284  0.112
       5000  0.294  0.109  0.204  0.283  0.111







  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值