![](https://img-blog.csdnimg.cn/20201014180756738.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法总结
EncodedStar
爱分享,爱学习,爱助人为乐
点个关注再走吧,感谢!
展开
-
跳表SkipList
··转载 2017-07-19 09:27:21 · 258 阅读 · 0 评论 -
素数距离问题
算法思路:将输入的数字先找前面第 i 位,在对应找后面第 i 位,如果找到前面的返回,如果找到后面的返回。这样大大缩小了查找素数的个数引起的不必要循环。原创 2017-04-04 22:22:59 · 383 阅读 · 1 评论 -
C语言创建一个二叉树
如何创建一个二叉树,先序遍历,中序遍历。#include <stdio.h>#include <stdlib.h>#include<bits/stdc++.h>#define NULLKEY '?'typedef struct btnode{ char data; struct btnode *lchild,*rchild;}btnode,*bitree;//创建一个二叉树原创 2017-04-06 19:25:19 · 22023 阅读 · 13 评论 -
关于二叉树问题
算法思路:对于一个节点K的 左结点是2K 右结点是2K+1对于结点个数(1 << maxd) maxd为最大深度D原创 2017-04-06 18:59:43 · 684 阅读 · 0 评论 -
快速找出素数
根据一道求素数求和距离,引发出怎么快速求出素数,然后可以通过快速找到的素数来解决上一道题,应该会大大提高效率。原创 2017-04-05 22:45:38 · 845 阅读 · 0 评论 -
会场安排问题
算法思路:(贪心算法)首先将所有获取的时间段排序,排序方式:首先排序先结束的,然后排序先开始的,这样排序就可以尽可能找到最多内容。然后再排序后比较开始跟上一个的结束来找出最多能有几场。原创 2017-04-05 19:59:47 · 273 阅读 · 0 评论 -
五大常用算法
算法一:动态规划算法 算法二:贪心算法算法三:回溯法算法四:分治算法算法五:分支限界法转载 2017-04-05 19:28:10 · 641 阅读 · 1 评论 -
贪心算法(1)
一、基本概念: 所谓贪心算法是指,在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,他所做出的仅是在某种意义上的局部最优解。 贪心算法没有固定的算法框架,算法设计的关键是贪心策略的选择。必须注意的是,贪心算法不是对所有问题都能得到整体最优解,选择的贪心策略必须具备无后效性,即某个状态以后的过程不会影响以前的状态,只与当前状态有关。所以对所采用的贪心策略一定要仔细分转载 2017-04-05 19:17:36 · 245 阅读 · 0 评论 -
贪心算法(2)
本文在写作过程中参考了大量资料,不能一一列举,还请见谅。 贪心算法的定义: 贪心算法是指在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,只做出在某种意义上的局部最优解。贪心算法不是对所有问题都能得到整体最优解,关键是贪心策略的选择,选择的贪心策略必须具备无后效性,即某个状态以前的过程不会影响以后的状态,只与当前状态有关。 解题的一般步骤是: 1.建立数学模型转载 2017-04-05 19:16:57 · 564 阅读 · 0 评论 -
最小生成树
普利姆Prim算法就是层层遍历,一层一层的往下遍历找到最短的距离连接,标记组中巧妙的用 0 ,和 它的索引,高效的将所有值取到,将数组用到了极致。该算法一般常人想到的找最短距离一样,时间复杂度n^2 克鲁斯卡尔算法有所不一样,它设计了自己的结构体,在结构体数中有开始,结束,权。将线段所有的信息进行保留,然后按权排序,从最小的权开始往下选用点,建立一个数组用来查看是否有回路。时间复杂度eloge原创 2017-04-28 18:13:25 · 309 阅读 · 0 评论 -
The Triangle
算法思路: 如果把本题看成一个递归的题目其实可以解出答案来,但是解出答案时间太长,几乎说是不科学的,原因就是有大量的没必要计算。2^100是有多少次计算。 所以,我们将换一种思维:动态规划,来解决这个问题,把每次计算出来的结果进行记录下来,这样就解决了不用重复计算的时间,从而我们将我们的无效的计算全部省去。原创 2017-04-13 20:18:30 · 291 阅读 · 0 评论 -
归并排序是一种怎么样的体验
归排和快排的区别是什么,首先他们都用的分治的思想,把序列逐步分开然后拍序合并,用递归实现每一步的操作,速度极快,他们的出现让O(n^2)复杂的的极限被打破。值得注意的是,它是一种稳定的排序算法。时间复杂度:O(n*logn)与前快速排序算法不同的是,归并排序需要额外的数组开销。注:所谓排序的稳定性,是指在排序过程中,在对a关键字排序后会不会改变其他关键字的顺序。在比较有相同关键字序列的情况下,稳定的排序会将原创 2017-04-22 08:26:55 · 366 阅读 · 0 评论 -
快速排序是一种什么样的体验
最常用的排序算法,速度通常也是最快的。时间复杂度:O(n*logn)最坏:O(n^2)空间复杂度:O(n*lgn)不稳定(比如 5 3 3 4 3 8 9 10 11 这个序列,在中枢元素5和3交换就会把元素3的稳定性打乱)原创 2017-04-19 15:15:27 · 999 阅读 · 1 评论 -
一篇文章了解分治算法
一、基本概念在计算机科学中,分治法是一种很重要的算法。字面上的解释是“分而治之”,就是把一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问题……直到最后子问题可以简单的直接求解,原问题的解即子问题的解的合并。这个技巧是很多高效算法的基础, 如排序算法(快速排序,归并排序),傅立叶变换(快速傅立叶变换)……任何一个可以用计算机求解的问题所需的计算时间都与其规模有关。问题的规模原创 2017-05-25 13:25:31 · 1690 阅读 · 0 评论 -
一篇文章轻松实现RSA加密解密(C++版)
RSA算法的描述原创 2017-06-18 11:45:30 · 30036 阅读 · 19 评论 -
有向图-邻接表
有向图邻接表,自我感觉比邻接矩阵要理解复杂一点,但是节省的空间不是小数目,所以虽然复杂,但是我们还是要优先考虑邻接表吧。 下面代码简单的写了邻接表,但是基本核心的代码全部包括了,之后图中加权的我也在代码中有所涉及,我们只要更一些参数就可以。基本符合所有要求了吧。输入: 4 5 a b c d 0 3 1 0 1 2 2 0 2 1原创 2017-04-27 20:27:13 · 7870 阅读 · 2 评论 -
图的遍历--邻接矩阵
图的遍历–广度优先遍历和深度优先遍历是遍历中最经典的算法,下面代码是图的邻接矩阵,学会了这种方法,我们做迷宫的题就不是问题了。 图的第一步才刚刚开始,还有邻接表,稍后也会研究。#include <iostream>#define OK 1#define ERROR 0#define TRUE 1#define FALSE 0typedef int Status; /* Status是函数的类原创 2017-04-26 19:11:27 · 1145 阅读 · 0 评论 -
熟悉链表
(1)单个节点创建非常方便,普通的线性内存通常在创建的时候就需要设定数据的大小(2)节点的删除非常方便,不需要像线性结构那样移动剩下的数据(3)节点的访问方便,可以通过循环或者递归的方法访问到任意数据,但是平均的访问效率低于线性表原创 2017-04-25 17:22:08 · 264 阅读 · 0 评论 -
一篇文章了解,邻接矩阵--有向图
有了无向图邻接矩阵,有向图就比较容易些了原创 2017-04-25 16:57:02 · 3170 阅读 · 0 评论 -
邻接矩阵--无向图
图的邻接矩阵存储方式是用俩个数组来表示的图。一个一维数组储存图中顶点信息,一个二维数组(称为邻接矩阵)存储图中的边和弧的信息。 有了矩阵的好处: 1、我们要判定任意二个顶点是否有边就容易了; 2、我们知道某个顶点的度,其实就是知道顶点vi在邻接矩阵中第i行(i列)的元素之和。 3.求顶点vi的所有邻接点就是将矩阵中第i行元素扫描一遍,为1就是邻接点。原创 2017-04-24 18:05:54 · 2647 阅读 · 1 评论 -
堆排序是一种怎么样的体验
时间复杂度:O(n*logn) 特别适用于数据量很大的场合(百万级数据)。因为快排和归并排序都是基于递归的,数据量很大的 情况下容易发生堆栈溢出。 排序速度略低于快排。 也是一种不稳定的排序算法。比如 3 27 27 36,如果堆顶3先输出,则第三层(最后一个27)跑到堆顶, 然后堆稳定,继续输出堆顶,是刚才那个27, 这样说明后面的27先于第二个位置的27输出,不稳定。原创 2017-04-22 08:30:37 · 397 阅读 · 0 评论 -
最长公共子序列
算法思路:将俩个字符串放在数组中比较,一个一个字符比较,只看他前面的数以最大的为主,来判断哪个方向的子序列长。二维数组用的很巧妙。本题主要思想就是动态规划。原创 2017-04-22 14:58:28 · 367 阅读 · 0 评论 -
插入排序是一种怎么样的体验
在得到要排序的数组以后,讲数组分为两个部分,数组的第一个元素为一个部分,剩下的元素为一部分,然后从数组的第二个元素开始,和该元素以前的所有元素比较,如果之前的元素没有比该元素大的,那么该元素的位置不变,如果有元素的值比该元素大,那么记录相爱他所在的位置;例如,该元素的位置为 k,则将从 i 到 k 位置上的所有元素往后移动一位,然后将 k 位置上的值移动到 i 位置上。这样就找到了 K 所在的位置。每一个元素都这样原创 2017-04-22 08:37:28 · 356 阅读 · 0 评论 -
汉诺塔问题----递归
古代有一个梵塔,塔内有三个座A、 B、 C, A座上有64个盘子,盘子大小不等,大的在下,小的在上(如图)。有一个和尚想把这64个盘子从A座移到C座,但每次只能允许移动一个盘子,并且在移动过程中,3个座上的盘子始终保持大盘在下,小盘在上。 在移动过程中可以利用B座,要求输出移动的步骤。原创 2017-04-13 19:43:06 · 471 阅读 · 0 评论 -
用C++实现的完全二叉树,实现前序遍历,中序遍历,后序遍历。
用C++实现的完全二叉树,实现前序遍历,中序遍历,后序遍历。原创 2017-04-17 22:17:35 · 2013 阅读 · 0 评论 -
素数求和问题
算法思路:算素数的时候,想到用 sqrt(num) , 循环减少了很多。找素数时候用prime 做了标记位可以得到素数退出循环。原创 2017-04-03 11:50:39 · 662 阅读 · 0 评论 -
水仙花数
算法思路:跟前面有一点完美的数有点想,不过这个更加简单。原创 2017-04-08 18:49:40 · 330 阅读 · 0 评论 -
C++实现计算器
思路:符号和数字进行不同的栈处理,对于判断符号栈中的符号来处理数据,主函数中对于2判断符号使用调用2个函数,巧妙的实现了四则运算,()的运算。感觉此代码可以学习到很多。逻辑也是很强。希望对写计算器的同学们有帮助原创 2017-04-08 12:10:18 · 15618 阅读 · 6 评论 -
韩信点兵
算法思路:类似生理周期,让一个循环先找到第一个可以被3整除的,然后以3为周期找到下一个被5整除的,然后以15为周期找到下一个被7整除的。如果先找大的数如7这样我们周期更长省去没用的更多需要的时间更短。原创 2017-04-07 22:24:18 · 1027 阅读 · 1 评论 -
蛇形填数
算法思路:考虑数字放在数组中的位置,然后加一个边间限制条件就可以(! a [ x ] [ y ]);边间条件限制非常关键原创 2017-04-07 21:24:55 · 371 阅读 · 1 评论 -
C语言实现计算器
运算速度是线性级,而且只用一个数组占用空间也比较少,可能需要的逻辑比较复杂。但是能够解决问题。实现了不带括号的所有加减乘除运算。具体的思想:首先定义好3个存储数字变量,3个存储符号的变量,因为在四则运算中必须判断第2个有时候第三个符号后才能做出计算。然后判断完之后,将其计算出来。每次根据符号做出结果,最多判断3次符号。代码可能比较多,但是速度特别快原创 2017-03-29 15:40:10 · 6092 阅读 · 1 评论 -
一个简单的题让我了解算法并且喜欢上了她
暴力破解的方法优化到用数学计算的时候,才是算法题真正存在的意义原创 2017-03-27 21:36:50 · 362 阅读 · 0 评论 -
生理周期
算法思路:从d+1天开始,一直尝试到第21252天,对其中没个日期看是否满足,显然一个一个是最慢的方法,我们如何快的尝试出可能是正确的日期,只有不断的跳过一些确定不存在的可能。(k - p)%23 == 0 && (k - e) % 28 == 0 && (k - i)%33 == 0在找到第一个满足条件下以第一个为周期找到下一个满足条件的以前2个为周期找到第3个满足条件的既可。原创 2017-04-07 15:46:38 · 937 阅读 · 0 评论 -
完美立方
算法思路:4重循环枚举,a在最外层,d在最里层。每层都从小到大的枚举,a的枚举范围【2,N】b 的范围【2,a - 1】 c 的范围【b,a - 1】 d 的范围 【c,a - 1】原创 2017-04-07 15:31:04 · 964 阅读 · 1 评论 -
考试座位号问题
算法思路:由于收集的信息比较多,所以我用到了结构体(这里有些不规范我用的类一回事),然后我用到了C++自己带的链表和迭代器,链表插入的类型是定义的这个类,每次我将收集到的信息全部放到了链表里,最后通过迭代器处理收集好的数据原创 2017-03-21 16:01:32 · 940 阅读 · 0 评论 -
算法题:谁先倒
算法思路:首先我们可以按照题意写出一些变量 A B (甲乙) A_say,B_say,A_show,B_show(甲说,已说,甲做,乙做) Sum(记录俩个人说的和)然后我们可以按照输入的形式写出对应变量 N 这道题的复杂度为线性级,一次遍历;按照条件记录甲乙喝酒的次数如果有人醉了退出循环判断谁醉了就可以做出答案。原创 2017-03-21 15:51:08 · 440 阅读 · 0 评论 -
公约数和公倍数
如何算最大公约数与最小公倍数?只说短除法,就是短除符号倒过来,在除法中写除数的地方写2个数公有的质因数,然后写下2个数被公有质因数整除的商,之后再除,以此类推,直到结果互质为止。互质:如果2个数最大公约数为1,则称这2个数互质。比如(2,3)(4,5)(5,6)(6,7)最大公约数为左侧各位数字之积。最小公倍数为左侧各位数字与下边各位数字之积。原创 2017-04-08 19:57:40 · 356 阅读 · 0 评论 -
阶乘因式分解(一)
算法思路:由于m是一个素数,n 是一个较大的数所以我们用n来找m的时候,就找到m就好,第一个循环是找到一个可以整除m的数,跟之前的生理期很像,找到之后我们以他为开始,以一个m为周期开始找,然后累计结果显示。原创 2017-04-09 09:52:50 · 601 阅读 · 0 评论 -
括号配对问题
算法思路:将字符串放在栈中,遇到匹配的将其弹出去,遇到不匹配的就退出循环。将其匹配和不匹配的记录,然后将其打印。原创 2017-04-02 20:05:47 · 387 阅读 · 0 评论 -
Fibonacci数
算法思路:其实这道题很简单的就能想到,用3个变量分别记录第一个数,第二个数,第一个和第二个数的和。这样,我们这次做一个改变,就可以很容易的求出结果。但是用的时间偏高一点。代码改进一点,稍微用到了一些算法的东西就讲这样的函数问题转换位递归来做,代码稍微简单了点,也清楚了许多,时间也相对少了,但是空间却大了很多。稍后还会想更简答的方法。原创 2017-04-02 19:03:45 · 384 阅读 · 0 评论