《算法与数据结构 精要笔记》 (一)基础概念

题记:题主工作三年,前段时间面试bat被面试官算法“血虐”,差点心灰意冷,怀疑人生,但是幸好意志坚强,遂,决定发愤图强,学好算法。每天坚持学一些,每周坚持有深度学习四小时。先慢慢来,学好基本的概念,常用的数据结构和算法,但是图的话,就不涉猎了,因为真的比较难,学习成本太高,讲究性价比嘛。

之后主要是记录学习常用数据结构和算法。像栈,队列,树精要记。内容也不会过于基础,特别基础的会一带而过,主要是记录的是常用,重点。

Go...

  一.算法

    衡量算法的优劣

          I.时间复杂度

            O(1),O(n),O(n*LOG(n),n*n)

          II.空间复杂度

            常量空间O(1),线性空间O(n),二维空间O(n*n),递归空间(与递归深度成正比)。

    一般情况下,时间复杂度重要一些,宁愿少分配一些内存空间,也要程序执行速度。         

  二.数据结构

    数据结构是算法的基石。如果把算法比喻成美丽的跳舞者,那么数据结构就是舞台。

        I.线性结构 (一对一)

          数组

          链表

          栈

            先进后出,插入删除的操作时间复杂度都是O(1)

          队列

            先进先出,插入删除的操作时间复杂度都是O(1)

        II.非线性结构(一对多)

           二叉树,二叉堆等

        III.非线性结构(多对多,图太复杂,忽略,之后也不会讲任何图的知识)

          图

  三.逻辑结构和物理结构

    逻辑结构是抽象的概念,依赖于物理结构,所有的逻辑结构都是由物理结构扩展衍变而来。

    物理结构

      I.数组(顺序存储)

      II.链表(链式存储)

      

《算法与数据结构 精要笔记》 (一)基础概念

      由上图看时间复杂度,可得出,数组适用于读取(查)较多的需求,链表适用于修改(增,删)较多的需求。

    逻辑结构

      栈,队列,树等。所有的逻辑结构都是由两种基本的物理结构构成。比如,树,可以由链表表示,也可以由数组表示。

  四.哈希表

      哈希表也叫“散列表”。这种数据机构提供了健值得映射关系。只要给出一个key,就能高效的查找出它所匹配的value,时间复杂度接近于O(1)。对于时间复杂度转为空间复杂度的时候起到很重要的作用。因此用途非常广泛。物理结构--数组是下标int和值,通过此概念,将key转为下标,称之为哈希函数。而数组是有限的,因此,哈希表的长度也是有限的,哈希表的key转为下标也是有限的。因为多个key可能转为同一个下标,则造成冲突,称为“哈希冲突”。

      常用解决哈希冲突方案:

          I.开放寻址法

            当一个key通过哈希函数找到对应的数组下标已经被占用时,我们用下一个没有被占用的坑位。

          II.链表法

            哈希数组中存储的对象是链表的形式,这样每一个对象可以存储多个值,当多个key转为同一个下标时,都存储在该链表节点中。    

      哈希表的读取操作:

          I.通过哈希函数,将key转为对应的int下标。

          II.找到数组下标对应的元素,如果这个元素的key不是我们想要找的“key”,则根据哈希冲突的方案,顺着找下一个。(链表法则在该链表结点找下一个对应的值)

      哈希表的扩容:

          I.扩容,首先创建一个新的空数组,是原来的两倍。

          II.重新Hash,因为长度扩大后,hash的规则改变。

   五.总结

      

《算法与数据结构 精要笔记》 (一)基础概念

      以上,数据结构的基本概念全部讲完,自我感觉数据结构最基本的本质是数组和链表,而算法就是将这基本的数组和链表如何拓展衍变为栈,队列,树等复杂的数据机构,衍变过程中的时间复杂度和空间复杂度就代表了该算法的好坏。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wssgpf.html