算法整理
本栏目内放置了计算机编程的算法,有初级有高级,大家可以参考一下,本人只是抛砖引玉
王乐平
这个作者很懒,什么都没留下…
展开
-
小谈深度优先搜索
最近读了一本算法书,书中提到了深度优先算法,于是我就整理了一下。引入小题:解决方案:这里先使用最简单最常用的穷举法时行求解。(此代码中的book数组起到了标记的作用,可以参考桶装法排序了解标记的好处和作用)#include int main(){ //因为要填写9个数字,所以这里用数组a存放9次数字的变量,方便在book标记数组内操作 int a[10], b原创 2015-12-13 21:53:28 · 1400 阅读 · 0 评论 -
高级堆排序
今天在一个OJ上做了一个叫“Advanced Heap Sort”的题,题的解决算法没什么难的,但是对时间复杂度有要求,用正常的算法实现,都会超时,所以我就把这个题拿过来分享一下。问题:题目内容:有兩個序列S1和S2,各有N個元素。當我們在S1,S2各取一個數字時,總共會有N*N這麼多可能的”和”(sum)。請找出這N*N這麼多和裡最小的N個值,並將它們加總後輸出。原创 2016-02-24 18:39:56 · 4162 阅读 · 0 评论 -
Joseph Problem(解约瑟夫问题)
今天在一个OJ上做了一个Joseph Problem(解约瑟夫问题)的题,题目不难,直接用循环链表模拟实际操作即可完成,但是用此种方法的时间太长,超时,所以我就用了一个大家对这类问题比较常用的解法——数学方法。问题再现:题目内容:實作Joseph problem.假設一開始有N個人,編號1~N,按照順序以順時針圍成一個圓圈。遊戲開始時,編號1的人拿刀。之後每一輪刀原创 2016-02-26 20:15:14 · 4940 阅读 · 0 评论 -
Find the Kth number(找第K大数)
题目再现题目内容:给定N个排序好的序列,每个序列内有M个数字。因此我们总共有N*M个数字,编号为1~N*M。将N*M个数字排序后输出第K个数字是多少。Hint : 直接将N*M个数字做排序会超过时间限制。Hint : 每次花O(N)的时间找一个数字,一直找到第K个数字也会超过时间限制。Hint : 使用一个大小为N的heap,记录每个序列目前最小的数字是多少,以及这是该序列的第几个原创 2016-03-03 23:02:10 · 5304 阅读 · 0 评论 -
Species Tree(HashTable实现)
题目再现题目内容:给定一个物种演化图,关系的表示方式如下:x y : 表示x为y的先祖。一个物种只会有一个先祖,一个先祖可以有很多个演化出来的物种,请你找出每个问题询问物种的祖父物种(先祖的先祖),每个物种会使用一个不重复的编号来表示,如果该物种没有祖父物种的话或是不存在,那么请将他的祖父物种当是0。(凭空而生)保证所有物种间一定有所关连,且不会有重复演化的现象发生,即原创 2016-03-07 11:51:46 · 2537 阅读 · 0 评论 -
Adjacent Node Sum(邻接表处理)
题目再现题目内容:给定一个节点有权重的图,请你计算与一个节点相邻的所有节点的权重和。节点编号为1~N。每个节点的编号即为他的权重。输入格式:只有一组测资。第一行有三个数字,N、M、Q。N表示这张图有多少节点,M表示这张图有多少边,Q表示会有多少个询问。之后M行,每行有两个数字a、b,代表a与b是相邻的。之后Q行,每行有一个数字x,代表询问的点编号。给定的编不会重复,而且原创 2016-03-07 17:14:07 · 2719 阅读 · 0 评论 -
Maze(BFS处理)
题目再现题目内容:给你一个迷宫,S为起点,E为终点。请你找出走出迷宫所需要花费的最短步数。你只能往上下左右四个方向移动。输入格式:第一行有一个数字T,代表有T组测资。每组测资的第一行有两个数字R、C,代表迷宫的大小(R x C)。接下来R行,每行有C个字元来描述迷宫,'.'代表可以行走的路,'X'代表不可行走的墙壁,'S'代表起点,'E'代表终点。测资范围:T < 100原创 2016-03-08 20:42:08 · 2956 阅读 · 2 评论 -
Lotto(DFS处理)
题目再现题目内容:给定N个数字,再从中选定M个数字出来。将每一种组合内的数字由小到大排列之后,将所有组合按照字典序排列,请你找出第X组的第Y个数字。给定的数字为1~N。范例1 (N,M,X,Y) = (5,2,8,2)所有组合按顺序排列为: (1 2), (1 3), (1 4), (1 5), (2 3), (2 4), (2 5), (3 4), (3 5), (4原创 2016-03-08 20:46:55 · 3132 阅读 · 0 评论