时间复杂度的计算

  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. Service Fabric 注意事项

    1. ActorTimer和ActorReminder会阻塞一个Actor的其他外部方法调用,即ActorTimer和ActorReminder内部就去未执行完毕之前,该Actor其他方法只能等待. ...

  2. Join方法把阵列转为字符串

    string有一个方法,就是Join,可以把阵列转换为字符串: 下面是Join方法重载,可以指定那个元素开始,连续取几个元素: 可以传入一个IEnumerable<T>参数:

  3. 关于CRTP(Curiously Recurring Template Prattern)的使用

    在阅读frameworks/rs/cpp/util/RefBase.h之LightRefBase时,我记得<C++设计新思维>里对这种用法是有过介绍的,可是今天翻箱倒柜,怎么都找不到那本奇 ...

  4. Installing the .NET Framework 3.5 on Windows 8, Windows 8.1 and Windows 10

    Installing the .NET Framework 3.5 on Windows 8, Windows 8.1 and Windows 10 .NET Framework (current v ...

  5. redis-淘汰策略

    将redis用作缓存时,如果内存空间用满,就会自动驱逐老的数据.默认情况下,memcached就是这种方式. LRU是Redis唯一支持的回收算法. maxmemory配置指令 maxmemory用于 ...

  6. 拓扑排序/DP【洛谷P2883】 [USACO07MAR]牛交通Cow Traffic

    P2883 [USACO07MAR]牛交通Cow Traffic 随着牛的数量增加,农场的道路的拥挤现象十分严重,特别是在每天晚上的挤奶时间.为了解决这个问题,FJ决定研究这个问题,以能找到导致拥堵现 ...

  7. opencv-图片合成视频

    无论视频的合成还是分解我们都需要进行解码器或者是编码器(因为视频不是一帧一帧进行存储的,而是进行过压缩编码.) import cv2 img = cv2.imread('image1.jpg') im ...

  8. Linode安装环境

    Ubuntu 18 密码:Fenghaiyan35 netstat -plnt                           //查看所有文件 sudo apt-get install apac ...

  9. centos6.4安装过程中无法出现图形化界面

    今天在VMware9.0安装centos6.4的时候,前面的步骤都没问题,到跳过媒体检查这一步后,就发现和之前的不一样了,这次安装不是图形界面,导致后面的安装不方便 一开始以为是centos的版本不一 ...

  10. CSS基础(续)

      老男孩第39天 老男孩 CSS  CSS的常用属性 4 文本属性 font-size: 10px; text-align: center; 横向排列 line-height: 200px; 文本行 ...