
狂奔の数据结构与算法
文章平均质量分 76
大道至简
All in 0&1.
展开
-
算法分析入门详解之动态规划(一)
动态规划算法与分治法类似,其基本思想也是将待求解问题分成若干个小问题,但与分治法的不同之处在于经过分解后得到的问题不是互相独立的。也正是由于这个原因,大量子问题被重复计算,从而浪费了计算时间。我们知道,分治法的计算时间为指数级,而动态规划法的计算时间为多项式级(因为子问题的数量通常为多项式级的)。因此,动态规划法适用于解决最优化问题。通常有以下几个步骤:(1)分析最优结构;(2)递归定义;(3)计原创 2013-11-24 13:46:13 · 1100 阅读 · 0 评论 -
实现BFS之“营救”
广度优先遍历(Breadth First Search,BFS)是一个分层的搜索过程,没有回退过程,是非递归的。DFS与BFS的小秘密:1、深度优先搜索算法的思路很简单,比较好理解,但得到的解不是最优的;而广度优先搜索则恰恰相反;2、如果节点有无穷多个,深度优先搜索算法在某处分支可以无限搜索下去却找不到解,这时我们可以采用有界深度优先搜索~原创 2014-04-03 15:38:33 · 2261 阅读 · 1 评论 -
AOV网络与拓扑(一)
一、活动网络之AOV:1、活动网络可以用来描述生产计划、施工过程、生产流程、程序流程等工程中各子工程的安排问题。活动网络可分为两种:AOV网络和AOE网络;2、实际上,可以用有向图来表示一个工程,在这种有向图中,用顶点表示活动,用有向边来表示活动u必须先于活动v进行。这种有向图叫做顶点表示活动的网络(Activity On Vertices),记作AOV网络;3、在AOV网络中,由于具原创 2014-04-05 15:44:06 · 4052 阅读 · 0 评论 -
C/C++每日小练(五)——突击战
突击战你有n个部下,每个部下需要完成一项任务。第i个部下需要你花Bi分钟交代任务,然后他会独立地、无间断地执行Ji分钟后完成任务。你需要选择交代任务的顺序,使得所有任务尽早执行完毕(即最后一个执行完的任务应尽早结束)。注意,不能同时给两个部下交代任务,但部下们可以同时执行他们各自的任务。输入格式:输入包含多组数据,每组数据的第一行为部下的个数N(1输出格式:对于每组数据原创 2014-04-20 11:25:36 · 2046 阅读 · 0 评论 -
AOV网络与拓扑(二)——实现
例:对于输入的有向图进行拓扑排序,并输出一个拓扑有序序列;如果存在有向环,则给出提示信息。首先输入顶点个数n和边数m;然后输入每条边,输入0 0结束;顶点序号从1开始记起。样例输入:6 81 21 42 63 23 65 15 25 66 81 31 22 53 44 24 65 45 60 0样例输出:5原创 2014-04-05 17:04:30 · 2229 阅读 · 1 评论 -
教你如何迅速秒杀掉:99%的海量数据处理面试题
转自:http://blog.youkuaiyun.com/v_july_v/article/details/7382693 教你如何迅速秒杀掉:99%的海量数据处理面试题作者:July出处:结构之法算法之道blog前言 一般而言,标题含有“秒杀”,“99%”,“史上最全/最强”等词汇的往往都脱不了哗转载 2014-04-06 21:08:37 · 965 阅读 · 0 评论 -
AOE网络与关键路径(一)
1、与AOV网络密切相关的是AOE网络。如果在DAG中用有向边表示一个工程的各项活动,用有向边上的权值表示活动的持续时间,用顶点表示事件,则这种有向图叫做用边表示活动的网络(Activity On Edge),简称AOE网络;2、由于整个工程只有一个开始点和一个完成点,所以称开始点(入度为0)的点为源点,称结束点(出度为0)为汇点;3、AOE网络在某些方面(如工程估算)非常有用,例如,原创 2014-04-07 00:24:12 · 11611 阅读 · 0 评论 -
AOE网络与关键路径(二)——实现
这一篇来实现下AOE网络和关键路径~原创 2014-04-07 11:43:50 · 4851 阅读 · 2 评论 -
C语言每日小练(三)——abc排列问题
例:用户输入:a,b,c输出: a,b,c,ab,ac,bc,abc解:此程序应不仅适用于3个字符的情况~运用递归即可解决:法1:#include#include#define MAX 100int top = 0; //缓冲区指针。int count = 1; //统计组合数。void search(char *a, char *b, int start)原创 2014-04-10 22:04:24 · 4109 阅读 · 0 评论 -
实现DFS之“农田灌溉”
这也是一道利用了DFS的题目,先说下我的思路:用一个二维数组记录每个字母所代表的含义(管道方向),用另一个二维数组记录4个方向的变换坐标;随后利用经典的DFS递归遍历即可~(还要注意在方向的处理上......原创 2014-04-02 19:38:29 · 2092 阅读 · 0 评论 -
实现DFS之“骨头的诱惑”
深度优先搜索(DFS)是一个递归过程,有回退过程。下面是一道OJ上的题目,借此来实现下DFS~题目来源:Zhejiang Provincial Programming Contest 2004,ZOJ2110题目描述:一只小狗在一个古老的迷宫里找到一根骨头,当它叼起骨头时,迷宫开始颤抖,它感觉到地面开始下沉。它才明白骨头是一个陷阱,它拼命地试着逃出迷宫。迷宫是一原创 2014-04-01 20:42:07 · 2756 阅读 · 1 评论 -
实现DFS之“油田”
“油田”问题是一个比较经典的体现DFS思想的题目,经过学习,对DFS也有了一点理解,下面介绍下这个题目~题目来源:Mid-Central USA 1997,ZOJ1709,POJ1562题目描述:GeoSurvComp地质探测公司负责探测地下油田。每次GeoSurvComp公司都是在一块长方形的土地上来探测油田。在探测时,他们把这块土地用网格分成若干个小块,然后逐个分析每块原创 2014-04-01 22:57:59 · 4024 阅读 · 2 评论 -
排序初解(一)——各种排序的性能分析表
在待排序的文件中,若存在多个关键字相同的记录,经过排序后这些具有相同关键字的记录之间的相对次序保持不变,该排序方法是稳定的;反之,若发生变化,则是不稳定的。如下表:原创 2014-03-29 11:56:53 · 1326 阅读 · 0 评论 -
Kruskal算法介绍与实现
最小生成树(MinimumSpanning Tree,MST)或者称为最小代价生成树:对无向连通图的生成树,各边的全值总和称为生成树的权,权最小的生成树称为最小生成树。构造最小生成树的准则有三条:(1)必须只使用该网络中的边来构造最小生成树;(2)必须使用且仅使用n-1条边来连接网络中的n个顶点;(3)不能使用产生回路的边。构造最小生成树的算法主要有:克鲁斯卡尔(Krusk原创 2014-04-12 20:21:59 · 9084 阅读 · 2 评论 -
Prim算法介绍与实现
普里姆(Prim)算法原创 2014-04-15 11:58:56 · 6268 阅读 · 1 评论 -
链表初解(二)——双链表的创建、删除、插入
下面是基本的双链表操作,由于双链表有两个方向,所以在删除和插入节点时,可以节省一个指针,只用一个链表上的指针和一个待操作的指针即可完成插入和删除;同时也要注意在编写双链表时对情况的判断要仔细,否则很容易出错~#includeusing namespace std;typedef struct student{ int data; struct student *next;原创 2014-03-28 23:49:20 · 1756 阅读 · 0 评论 -
链表初解(三)——约瑟夫环之循环链表实现
约瑟夫环是一个数学的应用问题:已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围。从编号为k的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;依此规律重复下去,直到圆桌周围的人全部出列。现编写循环链表程序来实现约瑟夫环问题并输出每次出列的结果~用循环链表模拟此过程即可:1、建表;2、模拟出列规则。下面还是老套路,直接贴上源码+注释~原创 2014-03-29 01:54:23 · 3596 阅读 · 0 评论 -
链表初解(一)——单链表的创建、删除、插入、测长、排序、逆置
由于考试需要,复习一下单链表的各种常见操作,直接上代码+注释,需要的可以参考下哈~Code:#includeusing namespace std;typedef struct student{ int data; struct student *next;}node;//创建单链表node *create(){ node *head, *p, *s; int x原创 2014-03-28 21:59:15 · 1987 阅读 · 3 评论 -
链表初解(四)——队列的入队和出队
自己复习了一下简单队列的基本操作,其中要注意的是队头和队尾要始终保持位置正确~还是老习惯,上代码+注释啦~Code:#includeusing namespace std;typedef struct node{ int data; struct node *next;}node;//定义指针结构typedef struct queue{ node *first, *原创 2014-03-29 10:47:30 · 4952 阅读 · 0 评论 -
Kruskal实例练习(二)
网络Andrew是某个公司的系统管理员,他计划为他的公司搭建一个新的网络。在新的网络中,有N个集线器,在集线器之间可以通过网线连接。由于公司职员需要通过集线器访问整个网络,因此每个集线器必须能通过网线连接其它集线器(可以有中转集线器)。由于有不同的长度可选,且网线越短越便宜,因此Andrew设计的方案必须确保最长的单根网线的长度在所有方案中最小。试帮助Andrew设计一个网原创 2014-04-17 20:24:40 · 1431 阅读 · 0 评论 -
Kruskal算法实例练习(一)
Kruskal算法练习例:剑鱼行动题目来源:ZhejiangUniversity Local Contest 2002,Preliminary,ZOJ1203题目描述:——给定平面上N个城市的位置,计算连接这N个城市所需线路长度总和的最小值。输入描述:——输入文件中包含多个测试数据。每个测试数据的第1行为一个正整数N,0≤N≤100,代表需要连接的城市数目;接下来有N行,每原创 2014-04-13 11:11:27 · 4522 阅读 · 0 评论