算法与结构

时间:2014年3月30日13:12:54

  1.写算法前一定要定义好他的结构,毕竟,算法脱离不了结构的限制(即便是面向对象也只能缓解这种依赖,能摆脱结构的只有接口了)
  2.当我们有了一个结构至少要提供基本操作增删改查
  以上2点的共同认识,结构决定算法,不同的结构有不同的优势

基础结构

  我个人认为,已知的东西都是基础的,在基础的(已知的)结构上扩充,肯定要比自己想一个非主流的要好的多,不过再怎么想有1个结构永远摆脱不了--数组
  这个弱到暴的东西,我们将我们的数据放在内存中,于是就有了

   这个结构就是顺序存储,实现上他是最简单的,有了结构就要看操作,嗯,因为大小是固定的,可以说这家伙根本就不能直接实现删除和添加

   java实现:ArrayList

   为了解决这个小问题链表结构出来了

 

  java实现:LinkedList

  世界太平了,链表拯救了世界,比起数据的增多硬件根本跟不上,链表查询的问题越来越明显,于是...

复合结构

  基于基础结构,通过考虑问题的不同方式,能的到不同的答案

  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

转载于:https://www.cnblogs.com/liuCy/p/3633850.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值