Collections

2017-01-06  22:50:43

数据结构和算法

《如何学习数据结构?》:https://www.zhihu.com/question/21318658

How do I start learning or strengthen my knowledge of data structures and algorithms?》:https://www.quora.com/How-do-I-start-learning-or-strengthen-my-knowledge-of-data-structures-and-algorithms

所以,不要试图记住所有的东西.而是从基础开始,做两件事:
  • 第一件事. 把数据结构图形化,视觉化.(突然想起来我高中竞赛老师说的一句话:数形结合千般好,一旦不做万事休啊! 就是要画图! )在直觉上感受一个数据结构是什么样子的.使用它是什么感觉,抽象上和具体实现上是什么样子的.这就是最重要的事情.并且无论是对于简单的队列,栈还是天杀的平衡树都很重要而且有效.把数据结构画出来,在你的脑袋瓜里面就能想象出来,总之,你需要做的就是,直观的去了解这些数据结构.
  • 第二件事.学习什么时候用什么样的数据结构和算法.对于学生来说这很难,而且你要做作业的时候老师也没告诉你们这该怎么办.╮( ̄▽ ̄")╭ 不过没关系. 你要认识到当你真正处理到现实问题的时候或许你才能掌握某些数据结构,比如哈希表.但是即使是个学生,你也应该知道数据结构的实用性:什么时候你需要个哈希表,什么时候你需要个树,什么时候你需要个堆? 而不是一开始就陷入到追求细节中去.
作者:小鱼二
链接:https://www.zhihu.com/question/21318658/answer/26295370
来源:知乎
著作权归作者所有,转载请联系作者获得授权。
《数据结构和算法动态可视化》:http://zh.visualgo.net/

《Solutions for some common algorithm problems written in Java》:https://github.com/pedrovgs/Algorithms

Algorithms》:http://algs4.cs.princeton.edu/home/ ,http://pan.baidu.com/s/1boRXCQjhttps://github.com/kevin-wayne/algs4

    本书(《算法》)为计算机科学专业进阶的教材,涵盖了这门学科的核心内容,并能让学生充分锻炼编程、
定量推理和解决问题等方面的能力。

    这本书(《算法》)意在接续我们的一本基础教材《Java程序设计:一种跨学科的方法》,那本书对计算机
领域做了概括性介绍。这两本书合起来可用做两到三个学期的计算机科学入门课程教材,为所有学
生在自然科学、工程学和社会科学中解决计算问题提供必备的基础知识。

    Sedgewick的《C算法(第3版)》、《C++算法(第3版)》、《Java算法(第3版)》更适合用做参考书或是高级课程的教材。

《Introduction to Programming in Java》:http://introcs.cs.princeton.edu/java/homehttp://pan.baidu.com/s/1cgmMMq

Algorithms IN JAVA》:https://pan.baidu.com/s/1gePgMxd

Robert Sedgewick:http://www.cs.princeton.edu/~rs/

 

2017-03-06  22:05:06

我应该使用哪种排序算法?

排序算法的好坏很大程度上取决于它的应用场景和具体实现。

快速排序时最快的通用排序算法。因此,在大多数实际情况中,快速排序是最佳选择。

如果稳定性很重要而空间又不是问题,归并排序可能是最好的。

一些性能优先的应用的重点可能是将数字排序,因此更合理的做法是跳过引用直接将原始数据类型的数据排序。如果我们只是在将一大组数排序的话,跳过引用可以为我们节省存储所有引用所需的空间和通过引用来访问数字的成本。

Java系统库的排序算法:java.util.Arrays.sort()

根据不同的参数类型,它实际上代表了一系列排序方法:

1、每种原始数据类型都有一个不同的排序方法;

2、一个适用于所有实现了Comparable接口的数据类型的排序方法;

3、一个适用于实现了比较器Comparator的数据类型的排序方法。

Java的系统程序员选择对原始数据类型使用(三向切分的)快速排序,对引用类型使用归并排序。这些选择实际上也暗示着用速度和空间(对于原始数据类型)来换取稳定性(对于引用类型)。

我们讨论过的这些算法和思想是包括Java的许多现代系统的核心组成部分。当为实际应用开发Java程序时,你会发现Java的Arrays.sort()实现(可能再加上你自己实现的compareTo()或者compare())已经基本够用了,因为它使用的三向快速排序和归并排序都是经典。

 

2017-04-18  18:27:52

Java系统库的查找算法

java.util.TreeMap和java.util.HashMap分别是基于红黑树和拉链法的散列表的符号表实现。

 

2017-02-24  09:10:03

TreeSet使用Comparator时是如何比较的?

posted @ 2017-01-05 21:28  beidoufeng  阅读(213)  评论(0编辑  收藏  举报