Algorithm & Data Structure
文章平均质量分 70
yui
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
求二叉树中节点的最大距离
求一个二叉树中任意两个节点间的最大距离,两个节点的距离的定义是这两个节点间边的个数,比如某个孩子节点和父节点间的距离是1,和相邻兄弟节点间的距离是2,优化时间空间复杂度这是论坛上的一道算法题,我目前想到的解法是:二叉树中任意两个节点间的最大距离,那么其中一个节点必定是层次最深的一个节点,记该节点为A。该二叉树中层次最深的节点可能有多个,但只需要选择其中一个记为A。找出了A,那么遍历二叉树中其它非A的节点,访问各节点的时候求出该节点到A的距离,从而记录下求到的最大距离。因此题目可以转化为:求一个二原创 2010-10-04 00:38:00 · 2946 阅读 · 0 评论 -
java写的随机迷宫算法2D & 3D
<br />很久以前,同事问我要一个随机迷宫的算法,我参考下列链接的启发,也是按照图的深度优先遍历算法,用java写了一个。后来增强为3D版。在这里标记一下,有时间就改为C语言版。<br /> <br />http://hi.baidu.com/%B4%F4%BA%CD%B9%D4%B5%C4%D0%A1%CC%EC%B5%D8/blog/item/98af8518e37c05b04aedbca6.html<br /> <br />2D版的效果图:<br /><br /> <br />3D版在平面显示不出来原创 2010-09-30 16:05:00 · 4610 阅读 · 0 评论 -
求二叉树中节点的最大距离(递归算法)
<br />上一篇的《求二叉树中节点的最大距离》显得有点走火入魔了,参考过别人的算法解释,事实上不需要考虑得那么复杂。使用以下C代码就可以解决了。<br /><br />/* * return the depth of the tree */int get_depth(Tree *tree) { int depth = 0; if ( tree ) { int a = get_depth(tree->left); int b = get_depth原创 2010-10-06 17:42:00 · 3398 阅读 · 5 评论 -
八皇后问题、N皇后问题回溯法详解
<br />/* * 回溯法解N皇后问题 * 使用一个一维数组表示皇后的位置 * 其中数组的下标表示皇后所在的行 * 数组元素的值表示皇后所在的列 * 这样设计的棋盘,所有皇后必定不在同一行 * * 假设前n-1行的皇后已经按照规则排列好 * 那么可以使用回溯法逐个试出第n行皇后的合法位置 * 所有皇后的初始位置都是第0列 * 那么逐个尝试就是从0试到N-1 * 如果达到N,仍未找到合法位置 * 那么就置当前行的皇后的位置为初始位置0 * 然后回退一行,且原创 2010-10-17 16:39:00 · 12801 阅读 · 9 评论 -
Comb Sort(梳排序,梳子排序)
<br />首先说明该排序算法是抄维基百科的<br />http://zh.wikipedia.org/zh-cn/%E6%A2%B3%E6%8E%92%E5%BA%8F<br /> <br />梳排序(Comb sort)是一种由Wlodzimierz Dobosiewicz于1980年所发明的不稳定排序算法,并由Stephen Lacey和Richard Box于1991年四月号的Byte杂志中推广。梳排序是改良自泡沫排序和快速排序,其要旨在于消除乌龟,亦即在阵列尾部的小数值,这些数值是造成泡沫排序缓慢原创 2010-10-21 18:45:00 · 5456 阅读 · 7 评论 -
Gnome Sort
<br />首先说明该算法也是来自于维基百科<br /> <br />http://en.wikipedia.org/wiki/Gnome_sort<br /> <br />Gnome Sort,这是该算法的作者命名的,O(n*n)时间复杂度,O(1)空间复杂度,属于稳定的排序算法。算法的思想是每趟循环找到第一个逆序的元素,把它和在它前面的已排序的元素逐个进行比较、交换,有点像插入排序。<br /> <br />代码也很简单,所以只加上少量的注释:<br /> <br />#include <stdio.h原创 2010-10-22 13:23:00 · 1245 阅读 · 0 评论 -
计数排序(Counting Sort)与比特计数排序(Bit Counting Sort)
<br />前两篇介绍的梳排序和gnome排序,都是属于比较排序算法里面的交换排序方法。而计数排序是一种非比较排序算法,其C代码如下:<br />void countingsort(int *a, int n) { int i, min, max; min = max = a[0]; for( i = 1; i < n; i++ ) { min = (a[i] < min) ? a[i] : min; max = (a[i] > max) ?原创 2010-11-01 18:07:00 · 2619 阅读 · 2 评论
分享