![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
重新学算法
文章平均质量分 56
云水飘1993
这个作者很懒,什么都没留下…
展开
-
重新教自己学算法之开篇(一)
目前在读大三,面临找工作。经同学面试笔试经验得知,多以算法为主。而自我感觉算法仍然欠缺,打算重新学一遍经常用的算法。因此根据csdn博主feixiaoxing的文章一步一步学习,并坚持每天至少一篇文章,在文章中尽量加入自己的代码和注解,希望能尽快完成算法的回顾。今天是有关一个数组的查找,比较简单。代码和注解如下:#include <iostream>#include <cassert>using原创 2015-05-18 20:03:44 · 351 阅读 · 0 评论 -
重新教自己学算法之单向链表(九)
#include <iostream>#include <cstdlib>#include <cassert>#include <cstring>using namespace std;#define STATUS int#define TRUE 1#define FALSE 0typedef struct _LINK_NODE{ int data; struct _L原创 2015-05-24 22:21:32 · 355 阅读 · 0 评论 -
重新教自己学算法之单词统计(状态机)(十)
如何统计一段由字符和空格组成的字符串中有多少个单词? 由这个问题可以简单了解一下 状态机 题目分析: 对一个字符串处理,有下面几种情形:初始状态,字符状态,空格状态,结束状态。这几种状态应该如下所示迁移: 初始状态: 如果输入符号是空格,那么进入空格状态;如果是字符,那么就进入字符状态,同时单词个数+1;如果是结束状态,那么直接返回; 空格状态:如果输入符号转载 2015-05-24 22:28:37 · 359 阅读 · 0 评论 -
重新教自己学算法之线性堆栈(八)
#include <iostream>#include <cstdlib>#include <cassert>#include <cstring>using namespace std;#define STATUS int#define TRUE 1#define FALSE 0typedef struct _STACK_NODE{ int* pData; int le原创 2015-05-24 22:19:21 · 337 阅读 · 0 评论 -
重新教自己学算法之图的遍历(十一)—深度(DFS)和广度(BFS)
好几天没有补算法了。以前对于图的各种算法没有学好,特此机会重新复习一下图的基本算法。图的定义: 图是一种数据结构,和树一样可以用二元组表示。它可定义为Graph=(V,R)其中,V={x|x∈datatype},R={VR},VR={(x,y)|P(x,y)∧(x,y∈V)}, V是顶点的非空有穷集合,R是边的有穷集合。 也就是说说,图就是记录一些点和点之间的关系的数据结构。图的存储: 1:转载 2015-06-07 20:35:23 · 533 阅读 · 0 评论 -
重新教自己学算法之图的最短路(十二)
最短路在实际中有很多应用。最短路的路劲一般不再是路径上的数目,而是路径边上的权值之和。所以最短路径都是用在带权有向图上面的。在最短路径方面,有两个著名的算法:Dijkstra算法和Floyd算法。1:1.Dijkstra算法-从某个点到其余各点的最短路径(贪心算法) 下面根据例子实际说明一下: 一开始我们初始化已选择点集S,我们假设源点为v0,所以先把v0加入S,此时S = {v0}。 我们首先转载 2015-06-07 20:49:27 · 411 阅读 · 0 评论 -
重新教自己学算法之线性队列(七)
线性结构实际上指的就是连续内存的意思。 队列的性质很简单: (1)队列有头部和尾部 (2)队列从尾部压入数据 (3)队列从头部弹出数据 那么连续内存下的队列是怎么实现的呢?#include <iostream>#include <cstdlib>#include <cassert>#include <cstring>using namespace s原创 2015-05-23 21:12:18 · 345 阅读 · 0 评论 -
重新教自己学算法之递归排序——堆排序(六)
堆排序,快速排序,归并排序都是递归排序,且时间都为O(Nlog(n)). 先讲解一下什么是数据结构中的二叉堆。 定义: 二叉堆是完全二叉树或者近似完全二叉树,满足两个特性: 1:父节点的键值总是大于或等于(小于或等于)任何一个子节点的键值。 2:每个节点的左子树和右子树都是一个二叉堆。 当父节点的键值总是大于等于任何一个子节点的键值时为最大堆。下面给出堆排序的代码:void _merge原创 2015-05-23 11:16:34 · 507 阅读 · 0 评论 -
重新教自己学算法之循环-递归(二)
今天主要回顾了循环与递归的基本知识,代码如下:#include <iostream>using namespace std;// normally calcluate like thisint calcluate(int m){ int count = 0; // remember keep the legal parameter if(m < 0)原创 2015-05-19 20:11:29 · 436 阅读 · 0 评论 -
重新教自己学算法之递归排序——合并排序(五)
前一篇中的快速排序和这次的合并排序都是经典的算法之一,区别在于: 快速排序:先分类在迭代 合并排序:先迭代在合并void _merge_array(int array[], int first, int middle,int last, int temp[]){ int i = first, j = middle + 1; //将数组a分成两部分 int m = middl原创 2015-05-22 19:45:26 · 1038 阅读 · 0 评论 -
重新教自己学算法之非递归排序——冒泡-插入-排序(三)
今天主要回顾了循环与递归的基本知识,代码如下:#include <iostream>using namespace std;// normally calcluate like thisint calcluate(int m){ int count = 0; // remember keep the legal parameter if(m < 0)原创 2015-05-22 17:20:46 · 480 阅读 · 0 评论 -
重新教自己学算法之递归排序——快速排序(四)
快速排序作为最常用和最有效的排序算法之一,其递归和分治的思想也是值得好好借鉴的。 下面进行详细说明: 代码如下:int _quick_sort(int array[], int start, int end){ //进行排序后获得中间值 int i = start, j = end; int temp_value = array[start]; while(i原创 2015-05-22 18:49:17 · 5056 阅读 · 0 评论 -
算法与数据结构先导章
一. 程序,算法需要度量,不然毫无意义。 二. 计算模型: 1. 正确性 2. 成本:运行时间+所需存储空间 A 无法正确计算每个程序运行的时间。一般用过规模来衡量程序所花时间。(T(n)) B 最坏情况:最先考虑程序执行的最坏情况。 C 理想模型:不依赖程序员,机器,体系结构,从而直接准确的描述,测量并评价算法。 D 图灵机模型:按照一个节拍来运转;用5个状态原创 2015-07-02 09:04:11 · 830 阅读 · 0 评论