1.
这个问题不好回答,我只能给你说一说两者的优缺点。
数组的优点是占用内存较少,可以快速定位,缺点是,比如说,我们要向数组的某位置插入一个数,那么,数组后面的数都要移动吧,而链表可以快速完成该操作,缺点是其占用内存较多,操作也较复杂。
2.
关于散列函数,它的核心用途就是合理利用资源。比如你要对一堆数排序,数的数量比较少,但最大的数可能是10^9,那么用数组既没办法存储,就算能存储也会浪费空间,散列技术可以同时解决以上两个问题。
3.
关于算法复杂度,这涉及两个概念,即时间复杂度与空间复杂度。
时间复杂度用来衡量算法解决某数据量时效率,空间复杂度衡量算法解决该问题是所用的空间。
4.
既有时间换空间,也有空间换时间,这些技巧多出现在某些ICPC题目中,比较无聊。
书籍的话,如果楼主不说明自己的“水平”(数学,计算机等等),是没办法推荐的。 |