• 对数器


    概述

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

    例子

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

    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)
    
  • 相关阅读:
    oracle的网络服务名和监听程序
    ArcGIS 产品许可模型
    老鸟对菜鸟的一些建议(转)
    ajax简介(转载)
    dim redim
    投影选择的一般原则
    *.prj文件
    cup性能对比感受
    treeview 数据库 递归
    简论两句话
  • 原文地址:https://www.cnblogs.com/lczmx/p/15802156.html
Copyright © 2020-2023  润新知