" name="sm-site-verification"/>
侧边栏壁纸
博主头像
PySuper 博主等级

千里之行,始于足下

  • 累计撰写 206 篇文章
  • 累计创建 14 个标签
  • 累计收到 2 条评论

目 录CONTENT

文章目录

Python 对数器实现与使用

PySuper
2021-02-10 / 0 评论 / 0 点赞 / 18 阅读 / 0 字
温馨提示:
本文最后更新于2024-05-28,若内容或图片失效,请留言反馈。 所有牛逼的人都有一段苦逼的岁月。 但是你只要像SB一样去坚持,终将牛逼!!! ✊✊✊

对数器

  • 通过大量的测试数据来验证算法是否正确的方式
  • 核心组件:
    • 绝对正确的方法
    • 能产生大量随机样例的随机发生器

用处

  • 验证算法是否正确
  • 使用小样本校验
  • 证明贪心策略

实现步骤

  • 有一个你想要测的方法a
  • 实现一个绝对正确,但是复杂度不好的方法b
  • 实现一个随机样本产生器
  • 实现对比的方法
  • 把方法a和方法b对比很多次,来验证方法a是否正确
  • 如果有一个样本,使得比对出错,打印样本分析是哪个方法出错
  • 当样本数量很多时,比对测试依然正确,可以确定方法a已经正确

代码实现

import random


class Logarithm():
    """对数器的实现与使用"""

    def random_(self, size, number):
        """
        生成随机样本, 不同的操作对象, 使用不同样本发生器
        生成长度随机的数组: 数组的长度, 每个值都是随机的
        """
        value = random.randint(0, size)
        # 使用随机数-随机数, 生成 可能为正 可能为负 的数
        return [random.randint(0, number) - random.randint(0, number) for num in range(value)]

    def func_(self, arr):
        """
        写一个 一定正确的方法 , 不考虑时间复杂度
        如果这个方法,还是不能确定是否正确, 也可以:
        测试的时候, 总会有两个结果不一样的时候, 这时候, 在math里面打印错误的数列, 然后校验 func_
        """
        return sorted(arr)

    def math_(self, arr):
        """这里是我们自己写的算法"""
        for i in range(len(arr) - 1):
            for j in range(len(arr) - 1 - i):
                if arr[j] > arr[j + 1]:
                    arr[j], arr[j + 1] = arr[j + 1], arr[j]
        return arr

    def run(self, size, value):
        """
        拿两个一样的数组, 放到绝对正确的方法 和 我们写的算法, 比较两者的输出结果
        如果结果一样, 则说明算法是正确的的, 返回对数器的结果
        """
        succeed = "True"
        for times in range(500000):
            random_list = self.random_(size, value)
            func_arr = self.func_(random_list)
            math_arr = self.math_(random_list)
            if func_arr != math_arr:
                succeed = f"False\r\nfunc_arr:{func_arr}\r\nmath_arr:{math_arr}"
                break
        print(succeed)


Logarithm().run(4, 31)

问题

如果没法写出一个绝对正确的方法,怎么办?

  • 就算我们写不出绝对正确的方法,只要我们在这个方法中,能实现一部分,对于返回False的数据,我们直接打印出来,然后在修改,调整就好了。
0
  1. 支付宝打赏

    qrcode alipay
  2. 微信打赏

    qrcode weixin

评论区