首页 > 编程语言 >3. 算法笔记-对数器

3. 算法笔记-对数器

时间:2024-09-30 16:49:22浏览次数:10  
标签:std index return int 笔记 算法 vec 对数 size

对数器是一个非常重要的自我验证技巧,其实现步骤如下:

(1) 方法 A

(2) 方法 B

(3) 随机样本产生器

(4) 用相同的样本验证方法 A 和方法 B,比对结果是否一致。

(5) 若出现样本,使得结果不一致,查找原因,进行改进。

(6) 否则,方法验证成功。

#include <vector>
#include <cstdio>
#include <ctime>
#include <cstdlib>                                                                                                             

class Sort{
private: 
    void swap(std::vector<int> &vec, int index_1, int index_2){
        int tmp = vec[index_1];
        vec[index_1] = vec[index_2];
        vec[index_2] = tmp;
        return;
    }

public:
    void select_sort(std::vector<int> &vec){
        int vec_size = vec.size();
        if(vec_size < 2)
            return; 
        for(int i = 0; i < vec_size - 1; ++i){
            int min_index = i; 
            for(int j = i + 1; j < vec_size; ++j){
                if(vec[j] < vec[min_index])
                    min_index = j;
            }
            this->swap(vec, i, min_index);
        }
        return;
    }

    void bubble_sort(std::vector<int> &vec){
        int vec_size = vec.size();
        if(vec_size < 2)
            return; 
        for(int i = vec_size - 1; i > 0; --i){
            for(int j = 0; j < i; ++j){
                if(vec[j] > vec[j+1])
                    this->swap(vec, j, j+1);
            }
        }
        return;
    }
    
    void insert_sort(std::vector<int> &vec){
        int vec_size = vec.size();
        if(vec_size < 2)
            return; 
        for(int i = 1; i < vec_size; ++i){
            for(int j = i - 1; j >= 0 && vec[j] > vec[j+1]; --j){
                this->swap(vec, j, j+1);
            }
        }
        return;
    }

    void check(int min, int max, int vec_size = 7, int time = 1000){                                                           
        std::srand((unsigned)std::time(NULL));
        for(int i  = 0; i < time; ++i){
            std::vector<int> vec;
            for(int i = 0; i < vec_size; ++i){
                int random_number = (rand() % (max - min + 1)) + min;
                vec.push_back(random_number);
            }
            std::vector<int> vec_1 = vec;
            std::vector<int> vec_2 = vec;
            std::vector<int> vec_3 = vec;
            
            this->select_sort(vec_1);
            this->bubble_sort(vec_2);
            this->insert_sort(vec_3);
            if(vec_1 != vec_2 || vec_1 != vec_3){
                printf("error ! sample vector is ");
                printf("{");
                for (auto value : vec){
                    printf(" %d ", value);
                }
                printf("}\n");
                return;
            }
        }
        printf("Successful.\n");
        return;
    }
};

int main(void){
    Sort sort;
    sort.check(-7, 7);
    return 0;
}   

标签:std,index,return,int,笔记,算法,vec,对数,size
From: https://blog.csdn.net/weixin_47777621/article/details/142644181

相关文章

  • 全同态加密算法概览
    我们前面有谈到《Paillier半同态加密算法》,半同态加密算法除了支持密文加法运算的Paillier算法,还有支持密文乘法计算的RSA算法,早期的PSI(隐私求交)和PIR(匿踪查询)都有使用基于RSA盲签名技术来实现。今天我们来谈谈能够有效支持任意函数密文计算的全同态加密算法(fully......
  • 苹果笔记本安装双系统,如何开启虚拟化
    1开启以下Windows功能并重启Hyper-v虚拟机监控程序,如果不能开,也可以不开。2下载rEFInd-bin软件并解压https://sourceforge.net/projects/refind/ 我的下载目录是:D:\refind-bin-0.14.23编辑文件将refind目录下的refind.conf-sample的文件名改为refind.conf,notepad++打开......
  • 谨防火灾!电瓶车检测AI算法助力城市/小区/园区多场景安全管理精细化、智能化
    随着人工智能技术的快速发展,AI智能分析网关V4在电瓶车检测领域的应用日益广泛。这一技术通过深度学习、计算机视觉等先进算法,实现了对电瓶车及其相关行为的智能识别和分析,为电瓶车的管理和应用提供了强大的技术支持。一、电瓶车检测算法的工作原理电瓶车检测AI算法主要基于计算......
  • Drain算法-笔记
    简介论文链接:https://jiemingzhu.github.io/pub/pjhe_icws2017.pdf算法原理图:有几点注意:根节点和叶节点实际是一套规则,并不包含日志数据真正的日志数据在叶节点之下的LogGroup第一层节点,基于假设:具有相同日志事件的日志消息可能具有相同的日志消息长度第二层节点,基于......
  • 最小生成树学习笔记
    最小生成树证明最小生成树构成的过程实际上是做\(n-1\)次操作,每一次合并一个点集,直到图中只剩下一个集合为止。要达到的就是让每一次合并的代价之和最小。那么我们实际上可以贪心地选择边权最小的并且能够合并集合的边(Kruskal算法),这个算法的正确性简单来说可以用反证法来证......
  • prometheus学习笔记之Grafana 常用操作
    一、Panel设置1.单位设置2.Panel名称修改3.曲线别名修改前修改后 4.曲线排序 5.曲线复制6.曲线静默 7.Panel复制当前dashboard中复制跨dashboard或folder在其他dashboard中操作8.设置告警线设置告警条件其他按提示填写如果触发告警规则则......
  • 卓越网络安全教程笔记-四-
    卓越网络安全教程笔记(四)P64:11.4-【Metasploit渗透】Metasploit基本使用方法-2-一个小小小白帽-BV1Sy4y1D7qv好接下来我们来看另外一个比较重要的命令,也是我们会经常会用到的一个命令啊,模块相关的命令,柚子的使用方法啊,柚子那么英文翻译过来呢是使用的意思哎,主要通过这个命令......
  • 排序算法之——归并排序,计数排序
    文章目录前言一、归并排序1.归并排序的思想2.归并排序时间复杂度及空间复杂度3.归并排序代码实现1)递归版本2)非递归版本二、计数排序1.计数排序的思想2.计数排序的时间复杂度及空间复杂度3.计数排序代码实现总结(排序算法稳定性)前言今天我们一起来了解归并排......
  • 代码随想录算法训练营第六天|理解hash表
    WhatisHashTable?引用自文章链接:https://programmercarl.com/哈希表理论基础.html#哈希表哈希表是根据关键码的值而直接进行访问的数据结构。直白来讲其实数组就是一张哈希表,哈希表中关键码就是数组的索引下标,然后通过下标直接访问数组中的元素。哈希函数通过hashCode把......
  • 计算机视觉算法
    计算机视觉算法详解及代码实现1.引言计算机视觉(ComputerVision,CV)是人工智能的重要分支,旨在让计算机具备从图像或视频中理解和提取有用信息的能力。随着深度学习技术的兴起,计算机视觉已经在诸多领域取得了突破性进展,如自动驾驶、医疗影像分析、安防监控等。本文将介绍计......