对数器

  1. 概述
  2. 例子

概述

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

例子

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

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)

作者: 忞翛

出处: https://www.lczmx.top/数据结构与算法/39d1d53472f9/

版权: 本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。

转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。

在线工具