对数器

概述

对数器是通过用大量测试数据来验证算法是否正确的一种方式。在算法笔试的时候,我们经常只能确定我们写出的算法在逻辑上是大致正确的,但是谁也不能一次性保证绝对的正确。特别是对于一些复杂的题目.
那么我们提供多个算法, 生成随机样本, 比较多个算法的结果是否一样, 假如结果不一样, 判断哪个算法是否有误

例子

你要测试插入排序是否正确:

from typing import List
from random import randint


# 手写的插入排序算法
def insert_sort(lst: List[int]):
    lst_len = len(lst)
    if lst_len <= 1:
        return

    for i in range(1, lst_len):
        for j in range(i):
            if lst[j] > lst[i]:
                lst[j], lst[i] = lst[i], lst[j]


def gen_lst(max_val: int, max_len: int) -> List[int]:
    """
    生成随机列表
    :param max_val: 最大值
    :param max_len: 最大长度
    """
    res = []
    lst_len = randint(0, max_len)
    for i in range(lst_len):
        res.append(randint(0, max_val))
    return res


def verify(max_val: int, max_len: int, max_time: int):
    """
    检验算法是否正确
    :param max_val: 最大值
    :param max_len: 最大长度
    :param max_time: 生成(比较)多少个数据
    :return:
    """
    for _ in range(max_time):
        lst = gen_lst(max_val, max_len)
        lst2 = lst.copy()

        # 1. 调用自己的算法
        insert_sort(lst)
        # 2. 调用其他算法, 如语言提供的
        lst2.sort()
        # 3. 比较, 不相等则报错
        if lst != lst2:
            print(lst)
            print(lst2)
            raise Exception("lst != lst2")


verify(20, 30, 10000)
posted @ 2022-01-14 15:42  403·Forbidden  阅读(32)  评论(0编辑  收藏  举报