
算法
南隅笙箫
双非毕业蹲哥,https://jimmyhjh.吸欧诶姆
展开
-
C++实现后缀表达式求值
算法代码C++程序不使用头文件使用头文件运行结果原创 2022-06-07 11:23:46 · 1722 阅读 · 0 评论 -
C++实现中缀表达式转后缀表达式
算法代码C++程序不使用头文件使用头文件运行结果原创 2022-06-07 11:21:18 · 1186 阅读 · 0 评论 -
二叉树的先序、中序、后序、层序遍历的递归与非递归实现 C++
二叉树的先序、中序、后序、层序遍历的递归与非递归实现算法 C++原创 2022-06-07 10:10:04 · 200 阅读 · 0 评论 -
字符串中的模式匹配(Pattern Matching) 以及KMP详解
一、模式匹配(Pattern Matching)简介模式匹配是数据结构中字符串的一种基本操作,它用于在一条字符串中寻找与另一条子串相同的所有子串。例如在"hjh123abc"中寻找"hjh"二、简单模式匹配暴力匹配int Index(String S,String T){ int i=1,j=1; while(i<=S.length && j<=T.length){ if(S.ch[i] == T.ch[j]){原创 2020-08-21 19:38:02 · 3022 阅读 · 0 评论 -
Elgamal加密方案基本原理与加密协议
一、Elgamal加密方案概述Elgamal 加密方案最早由 Taher Elgamal 于 1985 年提出,它通常称为 Elgamal 加密 Elgamal 加密方案可以视为 DHKE 协议的扩展。二、Elgamal加密的基本原理三、Elgamal加密协议四、例子参考资料:《深入浅出密码学》–Christof Paar,Jan Pelzl...原创 2020-04-09 11:07:00 · 2660 阅读 · 1 评论 -
DES算法详细图解
一、简介DES 算法为密码体制中的对称密码体制,又被称为美国数据加密标准,是 1972 年美国 IBM 公司研制的对称密码体制加密算法。DES 是一种对称密码,即其加密过程和解密过程使用相同的密钥,与几乎所有现代分组加密一样,DES 也是一种迭代算法。DES 对明文中每个分组对加密过程都包含 16 轮,且每轮都操作完全相同二、资料来源《深入浅出密码学》–Christof Paar,Jan P...原创 2020-04-08 12:31:24 · 15784 阅读 · 2 评论 -
Diffie-Hellman算法解析
一、Diffie-Hellman算法简介Diffie-Hellman算法是第一个公开密钥算法,早在 1976 年就发现了。其安全性源于在有限域上计算离散对数,比计算指数更为困难。该算法可以使两个用户之间安全地交换一个密钥,但不能用于加密或解密信息。二、Diffie-Hellman密钥交换Diffie-Hellman密钥交换方案(DHKE)提供了实际中密钥分配问题的解决方案,即它允许双方通过不...原创 2020-04-08 12:16:39 · 7164 阅读 · 0 评论 -
公钥算法的基本数论知识——欧几里得算法、扩展的欧几里得算法、 欧拉函数、费马小定理、欧拉定理
公钥算法的基本数论知识包含内容欧几里得算法、扩展的欧几里得算法、欧拉函数、费马小定理、欧拉定理http://www.huangjihao.com/index.php/archives/625一、欧几里得算法(Euclidean Algorithm)1、简介欧几里德算法又称辗转相除法,是指用于计算两个正整数 a,b 的最大公约数。应用领域有数学和计算机两个方面。计算公式 ????????????(????...原创 2020-04-03 17:09:09 · 537 阅读 · 0 评论 -
RSA加密算法详解及Python实现
RSA 加密算法一、前言RSA 加密算法是一种非对称加密算法。在公开密钥加密和电子商业中 RSA 被广泛使用。RSA 是 1977 年由罗纳德·李维斯特(Ron Rivest)、阿迪·萨莫尔(Adi Shamir)和伦纳德·阿德曼(Leonard Adleman)一起提出的。当时他们三人都在麻省理工学院工作。RSA 就是他们三人姓氏开头字母拼在一起组成的。二、准备工作1、找出两个质数 ????...原创 2020-04-03 16:53:45 · 7872 阅读 · 3 评论 -
希尔排序解析实例实现
一、什么是希尔排序希尔排序(Shell’s Sort)是插入排序的一种又称“缩小增量排序”(Diminishing Increment Sort),是直接插入排序算法的一种更高效的改进版本。希尔排序是非稳定排序算法。该方法因D.L.Shell于1959年提出而得名。希尔排序是把记录按下标的一定增量分组,对每组使用直接插入排序算法排序;随着增量逐渐减少,每组包含的关键词越来越多,当增量减至1时...原创 2020-04-03 13:10:50 · 790 阅读 · 0 评论 -
堆排序详解及实例实现——《算法笔记》实现方式
一、什么是堆排序堆排序是利用堆这种数据结构而设计堆一种排序算法,堆排序是一种选择排序。堆积是一个近似完全二叉树的结构,并同时满足堆积的性质。二、先修知识1、什么是二叉树2、什么是完全二叉树设一个高度为 h、有 n 个结点的二叉树,当且仅当其每个结点都与高度为 h 的满二又树中编号 1~n 的结点对应时,称为完全二叉树。3、什么是堆堆是具有以下性质的完全二叉树:每个结点的值都大于...原创 2020-04-02 21:48:29 · 299 阅读 · 0 评论 -
基数排序详解及实例实现
什么是基数排序基数排序(也叫桶排序)是一种很特别的排序方法,它不是基于比较进行排序的,而是采用多关键字排序思想(即基于关键字各位的大小进行排序的),借助“分配”和“收集”两种操作对单逻辑关键字进行排序。基数排序又分为最高位优先(MSD)排序和最低位优先(LSD)排序最低位用的比较多是根据键值的每位数字来分配桶的中r为所采取的基数,而n为堆数,在某些时候,基数排序法的效率高于其它的稳定性...原创 2020-03-25 16:32:39 · 1182 阅读 · 3 评论 -
分桶排序详解及实例实现/简单分桶
一、什么是桶排序桶排序(Bucket sort)或所谓的箱排序,是一个排序算法,工作的原理是将数组分到有限数量的桶里。每个桶再个别排序(有可能再使用别的排序算法或是以递归方式继续使用桶排序进行排序)。对于桶中元素的排序,选择何种比较排序算法对于性能的影响至关重要二、实现方式设置一个定量的数组当作空桶子。寻访序列,并且把项目一个一个放到对应的桶子去。对每个不是空的桶子进行排序。从不...原创 2020-03-18 17:02:57 · 2424 阅读 · 0 评论 -
快速排序详解——算法笔记实现方式
一、什么是快速排序快速排序是对冒泡排序对一种改进*动图来自菜鸟教程二、实现方式先从数列中取出一个数作为基准数。分区过程,将比这个数大的数全放到它的右边,小于或等于它的数全放到它的左边。再对左右区间重复第二步,直到各区间只有一个数。三、关于快速排序的性能参数1、时间复杂度最好(待排序列接近无序):O(nlog2n)O(n \log_2 n)O(nlog2n)最坏(待排序...原创 2020-03-16 15:29:22 · 228 阅读 · 0 评论 -
计数排序实现详解
什么是计数排序计数排序是一个非基于比较的排序算法。它的优势在于在对一定范围内的整数排序时,它的复杂度为Ο(n+k)(其中k是整数的范围),快于任何比较排序算法。当然这是一种牺牲空间换取时间的做法。动图演示*动图来自菜鸟教程实现方式例如,已知要排序的数组里的数的取值范围,要用最快的速度将其排序。假如范围是1-9,如上面动图所示一、找到数组中最大值和最小值二、建立一个max-min...原创 2020-03-12 16:33:26 · 416 阅读 · 0 评论 -
冒泡排序从前向后/从后向前实现
一、什么是冒泡排序冒泡排序(Bubble Sort)也是一种简单直观的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢"浮"到数列的顶端。二、动图演示*动图来自菜鸟教程三、实现方式比较相邻的元素。如果第一个比第二个大,就...原创 2020-03-09 16:41:15 · 5459 阅读 · 0 评论 -
归并排序详解
什么是归并排序归并排序(MERGE-SORT)是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。归并排序是一种稳定的排序方法。归并排序的实现由两种方法:自上而下的递归(所有递归的方法都可以用...原创 2020-03-07 13:37:04 · 1414 阅读 · 0 评论 -
直接插入排序以及折半插入排序详解
一、直接插入排序每次将一个待排序的序列插入到一个前面已排好序的子序列当中使用到了顺序查找图片演示前面是有序的,逐步逐步将后面的插入到前面去实现步骤初始L[1]L[1]L[1] 是一个已经排好序的子序列对于元素L(i) (L(2)∼L(n)L(i)\;\;(L(2) \sim L(n)L(i)(L(2)∼L(n)插入到前面已经排好序的子序列当中查找出 L(i)L(i...原创 2020-03-05 17:54:09 · 3755 阅读 · 0 评论 -
选择排序详解
什么是选择排序对一个序列AAA中的元素A[1]∼A[n]A[1] \sim A[n]A[1]∼A[n],令iii从1到n进行枚举,进行nnn躺操作,每躺从待排序部分[i,n][i,n][i,n]中选择最小到元素,令其与待排序部分待第一个元素A[i]A[i]A[i]进行交换,这样A[i]A[i]A[i]就会与当前有序区间[1,i−1][1,i-1][1,i−1]形成新的有序区间[1,i][1,i...原创 2020-03-03 23:33:03 · 207 阅读 · 0 评论