数据结构与算法
//数据结构与算法
West Money
这个作者很懒,什么都没留下…
展开
-
RSA加解密及加密数据长度处理
一、关于RSA RSA是非对称加密,由一个公钥和私玥组成。公钥加密-私玥解密或私钥加密-公玥解密。其安全性生成的位数有关,位数越大越安全,目前最大支持2048。RSA加密的原理是通过算法实现的,主要用到的是欧拉定理。生成后的是base64 编码过的。 缺点,效率底,小量数据加密可以使用RSA...原创 2020-11-26 09:44:04 · 4449 阅读 · 0 评论 -
RSA中的数学概念
一、质数与互质 质数(Prime number,又称素数),指在大于1的自然数中,除了1和该数自身外,无法被其他自然数整除的数(也可定义为只有1与该数本身两个正因数的数)。互质:公约数只有1的两个整数,叫做互质整数。公约数只有1的两个自然数,叫做互质自然数,后者是前者的特殊情形。二、费马小定理 描述: 证明: 1、构建集合X:X = { 1、2、......、p-1 }。显然,集合X中的每个元素都与p互质(互素),所以可得:1*2*...*(p-1) = ...原创 2020-11-21 21:14:05 · 437 阅读 · 0 评论 -
Comparison Sort:Selection Sort
一、算法描述:简单选择排序,在待排序列中选出一个最小值,在剩余元素中进行相同操作。二、代码实现:package algorithmInit;public class SelectionSort { public static void main(String[] args) { int[] arr={1, 4, 2, 0, 8, 6, 7, 5, 3, 9}; selectionSort(arr); } public static void selectionSort(in原创 2020-09-18 13:48:49 · 142 阅读 · 0 评论 -
Comparison Sort:Merge Sort
一、算法描述归并排序是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用,归并排序将两个已排序的表合并成一个表。分治法: 分--将问题分解为规模更小的子问题; 治--将这些规模更小的子问题逐个击破; 合--将已解决的子问题合并,最终得出“母”问题的解二、代码实现package algorithmInit;public class MergeSort { //将有二个有序数列a[...原创 2020-09-17 10:04:44 · 158 阅读 · 0 评论 -
Comparison Sort:Bubble Sort
一、冒泡排序描述冒泡排序(Bubble Sort)是一种典型的交换排序算法,通过交换数据元素的位置进行排序。从无序序列头部开始,进行两两比较,根据大小交换位置,直到最后将最大(小)的数据元素交换到了无序队列的队尾,从而成为有序序列的一部分;下一次继续这个过程,直到所有数据元素都排好序。算法的核心在于每次通过两两比较交换位置,选出剩余无序序列里最大(小)的数据元素放到队尾。二、Java代码实现package algorithmInit;//冒泡排序public class BubbleSor原创 2020-09-15 15:51:08 · 164 阅读 · 0 评论 -
Comparison Sort:Quick Sort
一、快速排序描述快排基于分治思想,通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。二、Java代码实现:package algorithmInit;//快速排序public class QuickSort { public static void main(String[] args) { //测试 int[] a = {47,原创 2020-09-15 15:08:11 · 219 阅读 · 0 评论 -
【图】Dijstra算法
Dijkstra算法是典型最短路算法,用于计算一个节点到其他所有节点的最短路径。主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止。代码实现://Dijkstrabool S[maxsize];//顶点集int D[maxsize];//到各个顶点的最短路径 int P[maxsize];//记录前驱 void Dijkstra(Graph G,int v){ //初...原创 2019-12-13 21:24:41 · 95 阅读 · 0 评论 -
【图】Floyd算法简述
Floyd算法有于求一个带权有向图(Wighted Directed Graph)的任意两点的最短距离的算法,运用了动态规划的思想。核心思想:在两个顶点之间插入一个或一个以上的中转点,比较经过与不经过中转点的距离哪个更短。同时,我们需要引入2个矩阵,一个邻接矩阵A,用来计算每个相邻点的距离,也就是我们的已知条件,第二个矩阵Path,则用来表示中间点k的代数。代码实现://Floyd...原创 2019-12-13 20:59:19 · 305 阅读 · 0 评论 -
【图】Kruskal算法简述
本文将给出Kruskal算法思想简要概述及核心代码。Kruskal算法思想简要概述假设 WN=(V,{E}) 是一个含有 n 个顶点的连通网,则按照克鲁斯卡尔算法构造最小生成树的过程为:先构造一个只含 n 个顶点,而边集为空的子图,若将该子图中各个顶点看成是各棵树上的根节点,则它是一个含有 n 棵树的一个森林。之后,从网的边集 E 中选取一条权值最小的边,若该条边的两个顶点分属不同的树,则将...原创 2019-12-13 20:41:46 · 711 阅读 · 0 评论 -
【图】Prim算法简述
本文给出Prim算法描述及核心代码。Prim算法思想简述:Prim算法通过一系列不断扩张的子树来构造一颗最小生成树。我们从图的顶点集合V中任意选择一个单顶点,作为序列中的初始子树。每一次迭代时,以一种贪婪的方式来苦熬张当前树,即简单的把不在树中的最近顶点添加到树中。当图中所有顶点都包含在所构造的树中以后,该算法就停止了。因为在每次迭代时,该算法只对树扩展一个顶点,这种迭代的总次数为n-1,其...原创 2019-12-13 20:17:40 · 1351 阅读 · 0 评论 -
【递归】中序-后序构造二叉树
中南大学在2019年算法题部分考察了由先序与中序构造二叉树算法,本文出于备考角度,将给出依靠递归算法由中序与后序序列构造二叉树过程,本算法只涉及核心代码(C++),其余考完补充。struct node{ int data; //数据域 node *left; //左孩子 node *right; ...原创 2019-12-08 12:01:54 · 539 阅读 · 0 评论