LV10算法实现与分析

LV10算法实现与分析

      Las Vegas算法

         Las Vegas(拉斯维加斯)算法是一个能够保证输出结果为正确的随机化算法,因为它的正确性,使它成为适用情况下的首选算法。Las Vegas算法模型不允许错误的输出,但是它可以允许程序输出“?”结果,即“不知道结果正不正确”。

       Las Vegas算法有两种情况:不允许“?”输出与允许“?”输出。

       其中定义为:

A(x):程序输出结果,F(x):理论输出结果,x:输入值

(1)   不允许:

理论结果与程序结果一致的概率为1,即:

Prob(A(x)= F(x)) = 1.

(2)   允许:

出现“?”的概率不得超过总数的一半:

1              Prob(A(x) = F(x)) ≥ 1/2, and

2       Prob(A(x)= “?”) = 1 − Prob(A(x)= F(x)) ≤ 1/2.

       LV10算法

         算法思想

       初始化:定义两个数组RI,RII;每个数组里面有10个长度为n的01串,RI:x1, x2, ...,x10;RII:y1, y2, ...,y10,

       第一步:从n*n中随机选出10个素数存到p数组中,p1, p2, . . .,p10,

       第二步:将RI中的01字符串转换为数字,然后对素数p取模,将其余数存到s数组中:

si= Number(xi) mod pi

       第三步:RII一样计算取模:

qi= Number(yi) mod pi

       第四步:如果对于所有的i∈ {1, 2, . . ., 10}, si !=qi,则对于所有的 i ∈ {1, 2, . . ., 10}  xi != yi,输出结果为“0”;

       若si = qi,则对RI与RII中的xi与yi进行逐比特比较,如果xi=yi,则输出“1”,否则,输出“?”。

       Las Vegas* 算法

         Las Vegas* 算法是将Las Vegas的第二种带有“?”结果输出的算法改为第一种不带“?”输出的完全正确的结果输出。

       理论分析

       定义:

       A为允许“?”输出的Las Vegas算法,A′为不允许“?”输出的Las Vegas算法。我们将A变为A′,转变过程为当遇见要“?”输出的结果时,即遇见了坏素数,则重新生成素数,对原01序列进行重新求模计算。循环该次过程,直到结果没有“?”输出为止。

    那么这个计算过程的计算次数即坏素数个数,循环的深度是多少呢?

    我们先用理论进行证明:

         令 TimeA(w)为A最坏的一次计算的复杂度,当运行次数至少TimeA(w) 时,A′得到正确结果的概率为1/2,当运行次数至少2TimeA(w) 时,A′得到正确结果的概率为3/4,则当运行次数达到kTimeA(w)时,则A′得到正确结果的概率为:

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值