zoukankan      html  css  js  c++  java
  • 《数据结构与算法分析》浅读1

    大学时学数据结构与算法,很难懂得到底有什么用处。从业五年后,愈发知道做任何基础的事情须有把握全局、深入细节的能力。

    于是重读数据结构与算法,鉴于该书的难度,所以读一部分就先作笔记。以下为粗浅的笔记:

    一、数据结构

    1、线性结构

    A、 栈:先进后出

    B、 队列:先进先出

    C、 线性表:

    D、 链表:单向链表、双向链表、环形链表。例如:LinedList

    E、  静态链表:ArrayList是动态扩容的静态链表,每次扩容复制一份,这也决定了它是线程不安全的,因为它是有状态的——即其成员变量size为静态链表长度。

    F、  串

    2、集合

    3、树形结构:二叉树、平衡树(B树、红黑树)、堆

    4、图

    二、时间复杂度:

    二分查找法的时间复杂度为O(LogN),计算原理很简单,每次除以2查找,M次之后得到一个数,所以2的M次方为N,那么M= LogN。

    三、树:

    B树和B+树:是AVL树的一个变种种,为文件存储系统而服务,因为磁块的读取比CPU的计算更慢,所以以更多计算来减少读取磁块的次数。数据都存在叶子节点上,节点上存储L条数据。节点下子节点数量为M。通过数据量、单条字节数和数据量大致可以计算出树的高度H。查找数据的时间复杂度为O(H),不大于O(logm n)。

    B+树在B树的基础上增加了叶子节点的链表指针,所以可以更快的支持区间查询。【这是大于小于查询可以命中索引的原理】

    红黑树:是AVL树的一个变种。牺牲了完全平衡来增加插入效率(减少旋转)。

    【遗留课题:完全把红黑树读懂,并以java代码的方式实现】

  • 相关阅读:
    第三周作业
    面向过程(或者叫结构化)分析方法与面向对象分析方法到底区别在哪里?请根据自己的理解简明扼要的回答。
    移动APP开发使用什么样的原型设计工具比较合适?
    java 从上至下打印二叉树
    Qt applendPlainText()/append() 多添加一个换行解决方法
    tolua 转换 std::shared_ptr
    cmake add_custom_command 使用
    Boost使用笔记(Smart_ptr)
    webpack4 安装
    git安装管理
  • 原文地址:https://www.cnblogs.com/baimingqian/p/10810141.html
Copyright © 2011-2022 走看看