一、树的遍历操作      树的遍历:从根节点出发,按照某种次序访问树中所有结点,使得每个结点被访问一次且仅被访问一次。      遍历的实质为将树结构(非线性结构)转换为线性结构。      树通常有前序(根)遍历、后序(根)遍历和层序(次)遍历三种方式。     前序遍历:     树的前序遍历
[Uva10294]Arif in Dhaka 标签: 置换 Burnside引理 题目链接 题意 有很多个珠子穿成环形首饰,手镯可以翻转和旋转,项链只能旋转。(翻转过的手镯相同,而项链不同) 有n个珠子,k种颜色,输出不同的项链和手镯的个数。 题解 先考虑旋转的置换: 假如旋转i颗珠子,那么显然产
[Poj3128]Leonardo's Notebook 标签: 置换 题目链接 题意 给你一个置换(B),让你判断是否有一个置换(A)使得(B=A^2)。 题解 置换可以写成循环的形式,所以我们不妨来研究循环平方的特性。 对于一个奇数长度的循环[(a_1 a_2 a_3 a_4 ...... a_
选择排序:顾名思义选择,选择排序属于O(N^2)的排序算法,意思就是选择数组中的最小的拿出来放在第一位,然后再剩下的数里面,选择最小的,排在第二位,以此类推。 例如:8  3  4  5  6  2  1  7 第一次:寻找数组中最小的数1,然后和8替换,得到 1 3 4 5 6 2 8 7 第二次
半年之前,第一次接触到这种将函数作为参数传递的做法,当时实在觉得难以理解。 PHP 的变量真的是啥都能装,不管函数还是类,这个真的是灵活到飘逸
Luogu 1514 引水入城 (搜索,动态规划) Description 在一个遥远的国度,一侧是风景秀美的湖泊,另一侧则是漫无边际的沙漠。该国的行政区划十分特殊,刚好构成一个N行M列的矩形,如上图所示,其中每个格子都代表一座城市,每座城市都有一个海拔高度。 为了使居民们都尽可能饮用到清澈的湖水,
一,算法介绍 在CS124课程的第一周提到 求解两个字符串相似度的算法---Minimum Edit Distance(最短编辑距离)算法。该算法在NLP(自然语言处理)中也会用到。 如何定义相似度呢?任给两个字符串X 和Y,使用以下三种操作将 字符串X 变到 字符串Y  :①插入(Insert)操
[Uva10601]Cubes 标签: 置换 burnside引理 题意 给你12跟长度相同的小木棍,每个小木棍有一个颜色。统计他们能拼成多少种不同的立方体。旋转后相同的立方体认为是相同的。 题解 这道题难就难在他不告诉你正方体是怎么旋转的,所以只要把这个想清楚了这道题就不是很难。 有三种旋转方式:
这道题首先设定一个二维数组,第一层是字符串,第二层则用于表示对应字符。如果是字母,则为0,如果是数字,则会根据数字出现的次数,依次加一。 之后根据这个二位数组就可以很容易的计算出所要的结果。 示例代码如下: 1 #include<stdio.h> 2 #include<str
题目就不再描述了。 最大连续子序列和问题是个很老的面试题了,最佳的解法是O(N)复杂度。最近再次遇到的时候却不能很清楚地写出来,所以在此记录一下。 def FindGreatestSumOfSubArray(self, array): res = max(array) curren
数据结构与算法--最短路径之Floyd算法 我们知道Dijkstra算法只能解决单源最短路径问题,且要求边上的权重都是非负的。有没有办法解决任意起点到任意顶点的最短路径问题呢?如果用Dijkstra算法,可以这样做: Dijkstra[] all = new Dijkstra[graph.verte
二分查找法又叫折半查找法,通过给定一个数,然后把这个数和数组中的中间值进行比较。   重要理解mid,min,max索引的变化就ok了!   原理:当要查找的数(key)比中间值(arr[mid])要小的时候,max就要=mid-1,当要查找的数(key)比中间值          (arr[mid

推荐文章