A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

今天在一个博客里看到一个关于新手学java的通病的帖子。发现上面的问题我都没办法解答。
我的专业不是计算机,编程一类的,所以在数据结构和算法上可以说是一窍不通,希望有科班出身的大牛来解答一下下面的问题,如果有好的关于这方面的电子书也分享分享啊。
★什么时候该用数组型容器、什么时候该用链表型容器?
★什么是散列函数?HashMap的实现原理是什么?
★什么是算法复杂度?
★如何否理解空间换时间的思想?

评分

参与人数 1技术分 +1 黑马币 +15 收起 理由
黄玉昆 + 1 + 15 问得好

查看全部评分

4 个回复

倒序浏览
这些都是数据结构的知识点,如果没基础的话还是先熟悉常识,不会都可以问谷歌,百度
回复 使用道具 举报
如果你的数据要频繁的查找,那么你就用数组容器,它有角标好查找。
如果你的数据要频繁的增加或删除,那你就要链表,它的增删快。
HashMap的实现原理是什么?这个毕老师的视频里写的很具体了,你自己去看。
什么是算法复杂度? 就是做一件事情的计算次数。次数越少越好。
如何理解空间换时间的思想?打个比方,比如选择排序,你可以一次一次的交换,但是如何你把角标记下来了,一下子换这就快了
用记录角标的变量换取时间

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1 赞一个!

查看全部评分

回复 使用道具 举报
本帖最后由 赵海洋 于 2013-3-2 16:43 编辑

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

评分

参与人数 1技术分 +1 黑马币 +6 收起 理由
黄玉昆 + 1 + 6 很给力!

查看全部评分

回复 使用道具 举报
赵海洋 发表于 2013-3-2 12:32
咦,这个问题记得在哪回答过,在这再说一遍吧。
首先说下数据结构,它里面的算法,我个人学习的时候感觉格 ...

第一个问题平均移动元素个数为n/2
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马