算法
文章平均质量分 63
大大大罐头强
适应自己的平凡之路
展开
-
简洁明了的克鲁斯卡尔算法求解
小试牛刀–++克鲁斯卡尔算法++考研资料书本定义:克鲁斯卡尔算法思想:每次找出侯选边中权值最小的边,就将该边并入生成树中。重复此过程直到所有边都被检测完为止(瞎几把说,不准确,漏了对重复多余边的检测),下面我结合实例来说明。举例说明:如下图所示,一共有4个节点(1,2,3,4),相应的一共有C42/2=6条边(四个顶点两两对其有12组可能的向量,但由于两组向量本身就是一条边,因此12/...原创 2018-08-03 22:53:34 · 2472 阅读 · 12 评论 -
2015届华为校园招聘部分机试题
第一题按要求分解字符串,输入两个数M,N;M代表输入的M串字符串,N代表输出的每串字符串的位数,不够补0。例如:输入2,8, “abc” ,“123456789”,则输出为“abc00000”,“12345678“,”90000000”解题思路:先输入一串字符串,例如:asjfyberugbwegeac,接下来以8个字符作为分界点,变成了asjfyber ugbwegea c,然后将剩余的c补...原创 2019-02-27 10:59:05 · 170 阅读 · 0 评论 -
排序算法-二路归并排序
二路归并算法思想:将一个无序数组从中间分为两个子数组,子数组又从中间分为两个子数组,按此规则直到数组不可分,再依次对有序子数组进行排序。假如无序数组下面举一个实例:如下所示是一个无序的数组{13 7 9 3 14 29 16 1},接下来我们用二路归并法对其进行排序。首先:找到数组中间的数字3,接下来以{13 7 9 3}(数字3的左边)为一组进行排序,{14 29 16 ...原创 2018-08-28 12:19:20 · 2380 阅读 · 0 评论 -
快速排序之-堆排序
快速排序之-堆排序堆排序思想:对数组a[1]…a[n-1],进行一次排序使得得数组堆顶部a[1]关键字最大(或最小关键字),然后堆顶a[1]与数组末端关键字a[n-1]交换,对a[1]…a[n-2]进行相同的堆排序,排完序后啊a[1]最小,将a[1]与a[n-2]进行交换,对数组a[1]…a[n-3]按如上规则进行排序,交换,,,最后整个数组依次遍历完成后就得到一个由小到大的数组排序a[1...原创 2018-08-23 13:31:23 · 173 阅读 · 0 评论 -
常见排序算法--快速排序
常见排序算法–快速排序算法思想:以数组中第一个点为分界点,数组中比它小的所有结点就排在它的左边,比它大的所有结点排在它的右边;然后将左边数组,右边数组看成一个整体分别按照这种规则进行排序,直达所有结点排序完成。下面我结合实际例子进行解释假设初始数组为{5,2,7,9,1},第一步取数组第一个点5与数组最右边的数比较,如果最右边的数字比5大,就依次遍历这个最右边数字左边的数,直到找到...原创 2018-08-20 13:08:58 · 172 阅读 · 0 评论 -
常见排序算法-折半(二分)插入排序
其实是主要在二分查找算法的基础上执行插入操作接下来我结合算法的实际例子来解释初始数组 10 21 7 13 14 3 12 ,对其进行由小到大进行排序/先解释一下2分法,比如在一个有序数组{1,2,3,3,6,9,11}中,我要查找数字2在其中的位子,首先先比较2与数组中间数字3的大小,发现2小于3,则2肯定在数字3的左边数组{1.2.3},比较2与{1.2.3}的中间数2...原创 2018-08-17 18:35:53 · 493 阅读 · 0 评论 -
常见排序算法2–直接插入法vs希尔排序法
常见排序算法–直接插入法vs希尔排序法首先,我们通过一个例子来了解直接插入算法例如,对原始数组{15,24,3,49,10}进行直接插入排序(由小到大进行排序)第一个数15无法比较,第二个数24与15比较,不做改变,第三个数3先后与24,15进行比较移到24的前面,第四个数49先后与24,15,3进行比较49不做改变,10分别与49,24,15,3相比,10移到3的前面。...原创 2018-08-16 12:24:35 · 3715 阅读 · 0 评论 -
简洁明了的深度优先遍历算法
深度优先遍历思想:类似于二叉树的层次遍历,按优先级从高到低进行遍历下面举一个例子,如下所示刚开始的链式图从顶点0开始,然后0对应的3,2优先级最高,接下来是顶点3对应的(0,1),接下来是顶点2对应的(0,1,3),注意,已经遍历过的结点我们做好标志,接下来就不再遍历它,最后我们得到结点的排序(0,3,2,1) 相关代码//类似于层次遍历//将该个结点对...原创 2018-08-08 13:28:19 · 2771 阅读 · 0 评论 -
关键路径核心算法
关键路径核心算法:求一条不影响整体工程进度的最优路径方案,下面我将分为三个步骤详细讲解该算法。第一步:求各个事件(结点)的最早时间(在这里我们用一个数组va[]来存储各个事件的最早时间)和最晚时间(在这里我们用一个数组vb[]来存储各个事件的最迟时间),该工程图如下所示。首先进行拓扑排序(0,1,2,3)求最早时间,得到:va[0]=0;va[1]=3;va...原创 2018-08-12 12:53:34 · 5856 阅读 · 0 评论 -
简洁明了的广度优先遍历
广度优先遍历思想:下面我结合实际例子进行讲解。这是基本图表内容接下来我们通过上述图我们可以发现顶点0连通的是顶点2,3;与顶点1联通的是2,3;与顶点2连通的是0,1,3;与顶点3联通的是0,1;首先我们可以先输入基本点0;其对应的结点为(3,2),先遍历完3以及3对应的所有子节点,然后再遍历2以及2对应的所有子节点,(类似于二叉树的先序遍历),结点0其连通的第一个基本点是3,...原创 2018-08-07 13:33:35 · 165 阅读 · 0 评论 -
简洁明了的kmp算法
接下来我把经典的kmp算法分为两步来行动第一步,先将模式串做好相应的标志位核心思想:解释起来比较抽象,还不如不解释,下面我将直接结合例子来解释第一步,先将各字符以及各字符在字符串的位置表示出来,用一个int型数组存储各个字符的下标,首先int[0]=-1(表示这是第一个字符),int[1]=0(对应字符串中地址为0的字符),如下所示: 第二步,比较S1刚刚已经确立的地址为...原创 2018-08-06 20:59:08 · 226 阅读 · 1 评论 -
常见排序算法对比1--简单直接排序和冒泡排序
常见排序算法对比1——==(简单直接排序和冒泡排序)==直接选择排序算法思想:对一个存有n个无序数的一维数组a[i];按照有序进行排序(由小到大或者由大到小)对n个结点遍历n-1次,每次将剩下结点的最大数(最小数)放在结尾后面,过程为依次比对term(初始值为0或者+&)与a[i]的值,如果a[i]比较大(小),则term=a[i]。下面举个例子 步...原创 2018-08-14 13:05:32 · 381 阅读 · 0 评论 -
程序小白光头强之弗洛依曼思想
弗洛依曼思想:只讲概念会显得空洞,下面我将结合一个算法实例来进行讲解如下图,这是一个初始矩阵,矩阵的行表示左端结点,矩阵的列表示右端结点,矩阵的内容为相应的边的内容。 a[i][j] 0 1 2 0 0 3 +& 1 7 0 1 2 +& 6 0刚开始path数组全部初始化为-1...原创 2018-08-10 13:45:04 · 537 阅读 · 0 评论 -
简单明了的普利姆算法
普利姆思想:先选中一个结点为一个整体,在剩下所有结点与该整体的所有边中选一条最短的边,将这条新出现边的一个顶点归入这个整体中,然后在新合成的整体与剩下的所有结点的所有边中选一条最短的边,将这条新出现边的一个顶点归入这个整体中,以此类推,直到所有结点遍历完。举个实例,首先这是一个初始图表,如下所示: 第一步:我们先随机找一个基本点(例如1),然后分别列出该点到各边的距离,如下: ...原创 2018-08-05 21:19:41 · 3987 阅读 · 1 评论 -
简洁明了的迪杰斯特拉算法
作用,求图中某一顶点到其余各顶点的最短路径思想:过程类似于普利姆算法,但不同的是一直更新这个固定结点与新结点的总路径距离,而普利姆算法是新的结点与剩余的结点间的两点距离,下面我结合算法实例进行解释如下图所示:解释:以端点1作为一个基本点(以其他的作为基本点都可以),接下来用一个数组存储各个端点到端点1的距离,(注意,只有这一个距离,也可以叫存储的距离为最短距离),把端点0到...原创 2018-08-09 13:12:55 · 251 阅读 · 1 评论 -
由浅及深了解区块链之:(5)RSA算法数学原理的一种简单找寻素数的方法
在RSA算法之中,要想得到的公钥私钥足够安全(不能够被暴力破解),就需要RSA算法中的质数足够大,且不易于找到。笔者今天用codeblocks软件测试了一下我的这个找素数的代码,感觉时间复杂度还不错,现在就将这个找素数的算法思想记录下来,仅供参考。代码思想 我直接以一个例子的形式进行说明:如下图所示:寻找1~10之间的素数个数。123456789104681069810寻找过程:首先对数字...原创 2019-09-29 17:05:03 · 345 阅读 · 1 评论