Skip to content

Latest commit

 

History

History
46 lines (41 loc) · 1.71 KB

1139.md

File metadata and controls

46 lines (41 loc) · 1.71 KB

题目:随机匹配。编写一个使用 BinarySearch 的程序,它从命令行接受一个整形参数 T,并会分别针对 N=10的三次方、10的四次方、10的五次方和10的六次方,将以下实验运行 T 遍:生成两个大小为 N 的随机6位正整数数组并找出同时存在于两个数组中的整数的数量。打印一个表格,对于每个 N,给出 T 次实验中该数量的平均值。

解答:题目也不难,输入 T 次,在 N 的不同情况下分别重复 T 次查找,计算查找的次数和平均值。

def test1139(self, t):
    def binarySearch(k, a):
        lo = 0
        hi = max([len(a)-1, 0])
        while lo <= hi:
            mid = lo + (hi-lo)//2
            if a[mid] < k:
                lo = mid+1
            elif a[mid] > k:
                hi = mid-1
            else:
                return mid
        return -1
    
    def proArr(n):
        res = []
        for i in range(0, n):
            res.append(random.randint(100000, 1000000))
        return res

    time = [1000, 10000, 100000, 1000000]
    for n in range(0, len(time)):
        cnt = 0
        for ti in range(0, t):
            a1 = proArr(time[n])
            a2 = proArr(time[n])
            for i in range(0, time[n]):
                idx = binarySearch(a1[i], a2)
                if idx >= 0:
                    cnt += 1
        avg = cnt / t
        print(f'N:{time[n]}, total time:{t}, count:{cnt}, avg:{avg}')

电脑运行的比较慢,只尝试了T=12的情况:

N:1000, total time:12, count:0, avg:0.0
N:10000, total time:12, count:2, avg:0.16666666666666666
N:100000, total time:12, count:23, avg:1.9166666666666667
N:1000000, total time:12, count:297, avg:24.75