随机算法求pi、线性同余法求random、拉斯维加斯算法python

一、随机算法求pi

在这里插入图片描述

# 计算圆周率
import pdb
import random
def CalcPai(n):
    # 计算π值
    k = 0
    for i in range(0,n):
        x = random.random()
        y = random.random()
        if x**2 + y**2 <= 1:
            k = k +1
    print(format(4 * k / n, '.2f'))
if __name__ == '__main__':
    print('请输入n:')
    n = input()
    n = int(n)
    CalcPai(n)

二、线性同余法求random

在这里插入图片描述

# 计算圆周率
import pdb

def RandomCalc(x0 , a , m , b):
    return (a * x0 + b) % m
def CalcPai(n):
    # 计算π值
    k = 0
    x = 0
    y = 0
    m = 99999999999
    a = 999
    b = 5
    for i in range(0, n):
        x = RandomCalc(y , a , m , b)
        y = RandomCalc(x , a , m , b)
        if x ** 2 + y ** 2 <= m**2:
            k = k + 1
    print(format(4 * k / n, '.2f'))
if __name__ == '__main__':
    print('请输入n:')
    n = input()
    n = int(n)
    CalcPai(n)

三、拉斯维加斯算法求解n后问题

拉斯维加斯算法 :能够显著地改进算法的有效性,甚至对于没有有效确定性算法的问题,也可以得到满意的结果。
典型调用形式: bool success = LV(x,&y); 其中x是输入参数,当success的值为true时,返回问题的解y 当success的值为false时,算法未能找到问题的一个解。此时可对同一实例重新调用相同的算法来求解。

import pdb
import random

def Place(k):
    # 注意:k从索引0开始
    for j in range(k):
        if abs(k - j) == abs(rect[k] - rect[j]) or rect[k] == rect[j]:
            return False
    return True

def QueensLV(n):  # 返回一个bool值,得到解返回True,否则False
    # 完善你的代码
    k = 0  # 第一个 索引为0
    rect[k] = random.randint(0, n)
    while(Place(k)):
        if k == n-1:
            print(rect)
            return True
        k = k + 1
        rect[k] = random.randint(0, n)
    return False

if __name__ == '__main__':
    n = input()
    n = int(n)
    rect = [0 for i in range(n)]
    print('输入:', str(rect))
    errorcount = 0  # 失败次数
    while (not QueensLV(n)):
        # print('false')
        errorcount = errorcount + 1
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章