时间:2014年3月30日13:12:54java
1.写算法前必定要定义好他的结构,毕竟,算法脱离不告终构的限制(即使是面向对象也只能缓解这种依赖,能摆脱结构的只有接口了)
2.当咱们有了一个结构至少要提供基本操做增删改查
以上2点的共同认识,结构决定算法,不一样的结构有不一样的优点算法
我我的认为,已知的东西都是基础的,在基础的(已知的)结构上扩充,确定要比本身想一个非主流的要好的多,不过再怎么想有1个结构永远摆脱不了--数组
这个弱到暴的东西,咱们将咱们的数据放在内存中,因而就有了编程
这个结构就是顺序存储,实现上他是最简单的,有告终构就要看操做,嗯,由于大小是固定的,能够说这家伙根本就不能直接实现删除和添加数组
java实现:ArrayList安全
为了解决这个小问题链表结构出来了函数
java实现:LinkedListspa
世界太平了,链表拯救了世界,比起数据的增多硬件根本跟不上,链表查询的问题愈来愈明显,因而...设计
基于基础结构,经过考虑问题的不一样方式,能的到不一样的答案对象
1.我发现数据其实都是数字,我有不少不一样的数据,我能够将他们转换为数字,而后用数组的方式纯起来,好比排序
这是一个超赞的解决方式(记得第一次笔试的时候,别人要求排序,我就这么先存进去,在读出来,被打击了),就是所须要的空间可能有点大,只要解决的空间的问题,那他就无敌了
解决问题前线观察问题,咱们能够看到
嗯,若是有这么一个映射关系在里面的话,或许还有救,你能够猜到的,这个函数就是hash();
以前的索引其实就是地址,那么这里的hash值固然也能够找到地址了,因此我数组的个数与须要存的个数一直,完美的解决方式
可是这个万恶的世界让你没法找到这么一种神奇的hash函数,咱们能够经过取余的方式来定位索引,却不能保证他们的值不重复,离成功不远了,解决了这个你就无敌了
1.1渣渣,咱们可使用链,hash(索引)同样的放在一个链中,而后再一个个与真值判断就像
1.2其实hash以后还能够再次hash
1.3.....
你会发现方法老是多种多样的,这就是hash算法
2.假设一个节点Node,他又一个属性next,他就是单链表,再加一个属性,previous,就是双链表,就不能是三个乃至更多的吗?
固然能够了,你发现结构的真谛了,只要你能保证他的正确性,保证可以维护他,你甚至能够在里面加上任何你想要的东西,他至关的自由,此时你心中的结构能够爆发式增加了,那评判结构的标准也该介绍一下了
在正确性,可维护性,安全性等众多的官话面前,我只告诉你一点,肯定你不会被本身设计的逻辑弄混就好了
2.1在你心中潜伏的一个结构可能就是这样的,他(Node)有一个small指向比他小的数,big指向比他大的数此时
插入:按规则对比插入,newNode总在最下方
删除:
查找:
总的来讲无论样,他最差不过是链表,平均下来就是比链表好
又一个超赞的想法,这个想法的学名就是Tree,他有不少子类用来不让Tree编程链表的形式
RB