本帖最后由 赵海洋 于 2013-3-2 16:43 编辑
咦,这个问题记得在哪回答过,在这再说一遍吧。
首先说下数据结构,它里面的算法,我个人学习的时候感觉格式不是很严格,因为当时学的时候是用c学的,然后有很多时候写的是伪代码,所以楼主想学的话,个人认为,基础学完你如果肯用心数据结构应该能学懂。至于书籍,由于笔者学的c版的数据结构,就没办法推荐了,我打算学完java基础后学一下java的数据结构,有什么好书告诉我一下,嘿嘿。你说的这些问题应该能回答一点,如果不对请各位指证。
第一个问题:
至于这个数组型和链表型,说说各自优缺点吧,数组型,随机查找,你想把数据插入到哪里,直接插入即可。因为它的下脚标就可以定位,但是数组内插入一个数那就麻烦了,需要移动这个数以后的所有元素,代码是个for循环类型,平均移动元素个数是n/2(我记得是这个)。
链表,顺序查找,各个节点之间是用指针连接,不能想把数据插到哪就插到哪。但是不需要移动很多其他元素,只需要改变指针的指向,所以移动元素基本没有。
第二个问题:
散列函数又叫做hash(哈希)函数,hash就是找到一种数据内容和数据存放地址之间的映射关系。同样的,也有哈希文件这种文件类型。哈希函数,额,我想想咋说啊。。。就是你任意输入一段数据(也可能是其他),然后输出的是固定长度的。由此可见,这东东要是用到加密解密上不就爽了,事实上也是如此,例如MD5就是用到了散列函数,还有数字签名等。
第三个问题:
算法复杂度,算法复杂度分为时间复杂度和空间复杂度,通常一个算法的效率使用平均时间复杂度的形式给出,而我们分析时间复杂度是根据代码在最坏情况下的执行时间来分析,求平均时我感觉你只要把代码执行顺序和是否递归循环等弄懂,你应该能求出平均时间复杂度。
至于空间复杂度,是你这个算法运行所占用的内存,我喜欢称它为执行的代价,我接触的大多数排序算法的空间复杂度都是O(1),当然有例外,例如基数排序就不是。
第四个问题:
时间换空间,空间换时间。这应该是运用到局限性原理,应用到缓冲技术,虚拟技术等,就是一组数据被调用,那么他有可能被重复调用,这是时间局限性,而有一组数据被调用,其附近数据也可能被调用,这是空间局限性,由此引发出时间换空间,空间换时间思想。不知道这段关于操作系统书上的内容是不是回答了你的第四个问题。
|