自学数据结构已经很久了,使用的教材是《数据结构与算法分析——C语言描述》。现在回过头来再看一遍此书,重新梳理一下数据结构的相关知识。
以下是摘自维基百科的一些树的基本分类:
无序树:树中任意节点的子节点之间没有顺序关系,这种树称为无序树,也称为自由树;有序树:树中任意节点的子节点之间有顺序关系,这种树称为有序树;
二叉树:每个节点最多含有两个子树的树称为二叉树;
完全二...
分类:
其他好文 时间:
2015-03-30 09:34:06
阅读次数:
317
MIT的算法导论公开课,很多年前就看到了,一直没有坚持去看,最近找暑假实习,面试基本都是算法,只好抽时间去狂刷leetcode,也借着这个机会希望把这个视频看完,把算法的基本功打扎实,这个公开课讲得还是挺不错的。之前学习其他东西的时候,记了很多笔记,最后都丢了,想再翻看的时候已经找不到,于是想到把学...
分类:
编程语言 时间:
2015-03-30 06:45:02
阅读次数:
189
一:插入排序
/*
* 插入排序
*/
/*
* 原序列 [12] 15 9 20 6 31 24
* 第0趟 [12 15] 9 20 6 31 24
* 第1趟 [9 12 15] 20 6 31 24
* 第2趟 [9 12 15 20] 6 31 24
* 第3趟 [6 9 12 15 20] 31 24
* n个数,一共需要多少趟?n个数,n-1趟
* 第...
分类:
编程语言 时间:
2015-03-22 09:18:50
阅读次数:
161
用递归遍历的优点是算法简单明了,缺点也十分明显:对于栈的消耗比较大。尤其是在嵌入式应用中,嵌入式处理器资源往往有限。每次递归调用,都会涉及到通用寄存器、SP指针、PC指针等的压栈。当树的深度比较大时,对于栈的消耗会变得非常严重,很有可能造成栈的溢出。
因此,二叉树的非递归遍历方法就显得非常有实际应用价值。下面是非递归遍历的算法,这里使用了数据结构栈,利用其先进后出的特点,用结点入栈出栈过程手工模拟递归调用过程中的栈操作。...
分类:
编程语言 时间:
2015-03-21 09:53:45
阅读次数:
264
算法的两个评测指标:运行时间和内存消耗
要么用时间换空间,要么用空间换时间
寻找数组相同元素测试一:
0~99共100个元素各不相同,新加入一个0~99的元素不明确位置
从101个元素数组中找出与0~99元素中重复的一个
/* 找相同元素
* 0~99共100个元素各不相同
* 从101个元素数组中找出与0~99元素中重复的一个
*/
public class Dome01 ...
分类:
编程语言 时间:
2015-03-19 16:27:47
阅读次数:
230
看代码时遇到一个求32bit二进制数中1的个数的问题,感觉算法很奇妙,特记录学习心得于此,备忘。计算一个64bit二进制数中1的个数。解决这个问题的算法不难,很自然就可以想到,但是要给出问题的最优解,却很有难度。通常,最容易想到的算法是除余法,继而考虑到除法的代价较高,而且除数是2,会想到使用向右移...
分类:
编程语言 时间:
2015-03-18 20:11:04
阅读次数:
204
登录与注册的加密算法分析算法目的
提供固定的 秘钥 和 明文 能够产生不同的密文摘要
hamc 算法 大概流程是 使用一个秘钥 对明文进行两次散列操作得到密文摘要
哈希(散列)函数
MD5
SHA1
SHA256
注册
向服务器请求一个随机的秘钥
把注册的密码进行 md5.hmac(hamc使用md5的散列函数来操作字符)加密 : md5.hmac(key,message) ==> 密文摘要(k...
分类:
编程语言 时间:
2015-03-17 22:01:53
阅读次数:
192
冒泡排序
算法分析
时间复杂度
若文件的初始状态是正序的,一趟扫描即可完成排序。所需的关键字比较次数
和记录移动次数
均达到最小值:
,
。
所以,冒泡排序最好的时间复杂度为
。
若初始文件是反序的,需要进行
趟排序。每趟排序要进行
次关键字的比较(1≤i≤n-1),且每次比较都必...
分类:
编程语言 时间:
2015-03-15 16:51:20
阅读次数:
156
转自:http://blog.csdn.net/chhuach2005/article/details/211681791.题目 编写两个任意位数的大数相乘的程序,给出计算结果。2.题目分析 该题相继被ACM、华为、腾讯等选作笔试、面试题,若无准备要写出这种程序,还是要花一定的时间的。故,觉...
分类:
编程语言 时间:
2015-03-14 23:12:28
阅读次数:
364
看代码时遇到一个求32bit二进制数中1的个数的问题,感觉算法很奇妙,特记录学习心得于此,备忘。计算一个64bit二进制数中1的个数。解决这个问题的算法不难,很自然就可以想到,但是要给出问题的最优解,却很有难度。通常,最容易想到的算法是除余法,继而考虑到除法的代价较高,而且除数是2,会想到使用向右移...
分类:
编程语言 时间:
2015-03-14 22:56:43
阅读次数:
369