时间复杂度的计算

  1. 计算最坏情况下执行语句的次数(含有n)
  2. 去掉常数项, 只保留最高项, 去掉系数
  3. 最后的结果一般是1, logn, n, nlogn, n^2, 2^n, n!, n^n
  4. 时间复杂度所消耗的时间的顺序是: O(1) < O(logn) < O(n) < O(nlogn) < O(n^2) < O(n^3) <O(2^n) < O(n!) <O(n^n)

使用线性表实现多项式加法

  1. 使用顺序表, 下标表示幂数, 对应下标中内容为系数
  2. 使用链表, 在每一个节点中存放系数和幂数

Josephus游戏解法

  • 问题描述:
  • 设有n个人围坐在一个圆桌周围,现从第s个人开始报数,数到第m的人出列,然后从出列
  • 的下一个人重新开始报数,数到第m的人又出列...如此反复直到所有的人全部出列为止。
  • 问题:对于任意给定的n,s和m,求出按出列次序得到的n个人员的序列。

  • 思路
    • 使用while(size > 0)
  1. 使用循环链表实现
  2. 使用队列实现

表达式求解

  1. 一个运算数栈A
  2. 一个运算符栈B
  3. 每次将运算符压栈时, 判断栈顶的运算符的优先级, 如果比当前的高, 则A弹出两个数, B弹出栈顶元素, 将计算的结果压入到A中

循环队列的实现

使用两个指针, 头指针head, 尾指针tail, head指针指向队首, tail指向可以插入元素的位置, 当出队列几个元素之后, 剩下的部分有满了, 则再次入队元素时就会将从队首开始数, 直到找到一个空闲的位置

字符串的匹配

  • 朴素匹配: 俗称暴力匹配
  • KMP匹配: 首先根据需要去匹配的字符串构建一个next表, 对其每一个字串计算出他对象的最长的前缀和后缀(要求前缀和后缀一致), 没有为0, 长度为1记为1, 在匹配的过程中, 遇到了不匹配的字符, 字符串移动的步数是不匹配的字符之前的长度减去当前不必配字符在next数组中对应的值, 就这样知道匹配
  • 还是看不懂 ----> next的由来
    如何根据next中的值进行排序

树的表示(如果不是二叉树, 则在每一个节点记录其子节点的个数, 为0表示叶子节点)

  1. 双亲表示法: DataType data; int parent; // 保存parent的位置, 该结构体也是存储在一个顺序表中的
  2. 孩子表示法: 将所有的节点存放在一个线性表中, 在每一个线性表中有一个指针指向一个链表, 链表中存放的是该节点的所有的孩子在顺序表中的位置
  3. 孩子兄弟表示法: DataType data; TreeNode firstChild; TreeNode sibiling; // 类似于二叉树中的left与right的表示

二叉树的存储结构

  1. 顺序表存储, 不要第一个小标, 从1下标开始, index / 2得到的就是双亲的位置
  2. 链式结构: left, right, data

二叉树的相关概念

  1. 一个节点的度为由该节点向下引出的树枝

哈夫曼树

  1. 每一个结点都有权值, W1, W2, W3..., WPL值是每一个叶子节结点的路径长度与该叶子结点权重乘积之和
  2. 在构建Huffman树时, 要保证构建的树的WPL值最小
  • 常称WPL最小的二叉树为最优二叉树

哈夫曼树在编码中的应用

  • 每一个叶子结点的值为对应的ACSII字符在文章中出现的次数
  • 对于路径, 左分支为0, 右分支为1
  • 每一个字符对应的编码由一个int类型的数组组成. 在一个类似字典的数据结构中映射字符与HuffmanCode

图的存储结构

  • 邻接矩阵: 缺点是存储不了权重, 时间复杂度为O(n^2)
  • 邻接表: 存储的方式类似于树的孩子表示法, 时间复杂度为O(n + e)

图的遍历

  • DFS: 递归实现, 虽然书上在进行DFS时, 节点的选择是随机的, 但是在实现的时候可以按照0, 1, 2...递增来选择路径, 同时还要标记已经遍历过的结点
  • BFS: 队列实现, 广度优先遍历就是一层一层的遍历

补充

  • 如果需要遍历的图不是连通图, 那个在进行了一个连通分量的遍历之后, 需要从没有访问过的一个结点开始再一次进行DFS或者BFS

最小生成树算法

  • DFS生成
  • BFS生成
  • Kruskal: 一开始时没有一条边的图, 接着往图里面添加边(对边进行升序排序, 找最小的边)
  • Prime: 根据已经的结点和还没有添加到图中的结点添加边

最小生成树的应用

  • 城市之间的造价总体最小, 使用最小生成树

Datastructure的更多相关文章

  1. 【DataStructure In Python】Python实现各种排序算法

    使用Python实现直接插入排序.希尔排序.简单选择排序.冒泡排序.快速排序.归并排序.基数排序. #! /usr/bin/env python # DataStructure Sort # Inse ...

  2. 【DataStructure In Python】Python模拟栈和队列

    用Python模拟栈和队列主要是利用List,当然也可以使用collection的deque.以下内容为栈: #! /usr/bin/env python # DataStructure Stack ...

  3. 【DataStructure In Python】Python模拟链表

    最近一直在学习Python和Perl这两门语言,两者共同点很多,也有不多.希望通过这样的模拟练习可以让自己更熟悉语言,虽然很多时候觉得这样用Python或者Perl并没有体现这两者的真正价值. #! ...

  4. PAT Mooc datastructure 6-1

    Saving James Bond - Hard Version This time let us consider the situation in the movie "Live and ...

  5. PAT mooc DataStructure 4-2 SetCollection

    数据结构习题集-4-2 集合的运用 1.题目: We have a network of computers and a list of bi-directional connections. Eac ...

  6. PAT MOOC dataStructure 4-1

    数据结构练习 4-1 AVL 树 1. 题目: Input Specification: Each input file contains one test case. For each case, ...

  7. DataStructure 排序 源码实现

    本篇博客实现了 1.冒泡排序 2.冒泡排序的一种优化(当某次冒泡没有进行交换时,退出循环) 3.选择排序 4.归并排序 5.快速排序. 主要是源码的实现,并将自己在敲的过程中所遇到的一些问题记录下来. ...

  8. DataStructure——红黑树学习笔记

    1.前言 本文伪码和解释参考: http://blog.csdn.net/v_JULY_v/article/details/6105630 C实现的源码本文未贴出,请见: http://blog.cs ...

  9. 数据结构(DataStructure)与算法(Algorithm)、STL应用

    catalogue . 引论 . 数据结构的概念 . 逻辑结构实例 2.1 堆栈 2.2 队列 2.3 树形结构 二叉树 . 物理结构实例 3.1 链表 单向线性链表 单向循环链表 双向线性链表 双向 ...

  10. Fundamental Datastructure

    11988 - Broken Keyboard (a.k.a. Beiju Text) 可以用deque来模拟. #include <iostream> #include <stri ...

随机推荐

  1. Vue属性绑定

    v-bind:属性动态绑定数据,简写: v-html:绑定html代码 {{}}:绑定数据,另一种v-text v-bind:class="{‘red’:isActive}"  : ...

  2. Java编程思想读书笔记之一切皆对象

    一切皆对象 Java程序运行时,数据保存到哪里 寄存器 这是最快的保存区域,因为它位于和其他所有保存方式不同的地方:处理器内部.然而,寄存器的数量十分有限,所以寄存器是根据需要由编译器分配.我们对此没 ...

  3. ubuntu - 如何搜索文件?

    1.whereis 文件名 特点:快速,但是是模糊查找,例如 找 #whereis mysql 它会把mysql,mysql.ini,mysql.*所在的目录都找出来.我一般的查找都用这条命令. 2. ...

  4. CentOS下安装配置SVN服务器并自动同步到web目录

    一.安装 yum install subversion测试是否安装成功 /usr/bin/svnserve --version如提示以下内容,说明已安装成功 svnserve,版本 1.6.11 (r ...

  5. Jmeter-逻辑控制器之Switch控制器(Switch Controller)

    Switch控制器(Switch Controller): 作用:Switch控制器通过给该控制器中的Value赋值,来指定运行哪个采样器.有两种赋值方式: 第一种是数值,Switch控制器下的子节点 ...

  6. Build SSH for Development on Windows Subsystem for Linux

    It seems that Windows Subsystem for Linux (WSL) is getting much more mature than the time when it fi ...

  7. jvm与tomcat启动优化配置

    JVM 优化 Java 的内存模型分为: Young,年轻代(易被 GC).Young 区被划分为三部分,Eden 区和两个大小严格相同的 Survivor 区,其中 Survivor 区间中,某一时 ...

  8. js判断字符串是否有下划线

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  9. 新建maven 父子模块项目

    第一步: 第二步: 先创建个简单的空架结构作为父项目 第三步: 创建子项目 第四步: 切换显示不同的maven子项目显示方式 关于maven中的parent聚合一直都有没好好总结,固有这篇. ---- ...

  10. Mybatis学习笔记(一) —— mybatis介绍

    一.Mybatis介绍 MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名 ...