时间复杂度的计算

  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. Docker 三架马车

    1. Docker Compose 我们前面的课程讲到过两个容器之间通过名字进行互联互通的话可以通过link参数来关联,这种做法比较麻烦,更好的方式是使用Docker Compose来定义一个 YAM ...

  2. Go:创建新进程(os.StartProcess源码解读)

    关于如何使用go语言实现新进程的创建和进程间通信,我在网上找了不少的资料,但是始终未能发现让自己满意的答案,因此我打算自己来分析这部分源代码,然后善加利用,并且分享给大家,期望大家能从中获得启发. 首 ...

  3. BS总结篇­

    学习Web开发差不多三个月了,这个阶段的学习给自己带来的更多的是视觉的盛宴.从CS的世界一下子来到了BS的地盘,心中除了惊喜还是惊喜.在这里还是希望自己对这三月所学的东西做一个阶段性的总结. 话不多说 ...

  4. 使用pycharm创建自己的第一个django项目

    PyCharm是一种Python IDE,带有一整套可以帮助用户在使用Python语言开发时提高其效率的工具,比如调试.语法高亮.Project管理.代码跳转.智能提示.自动完成.单元测试.版本控制. ...

  5. rest framework认证组件和django自带csrf组件区别详解

    使用 Django 中的 csrf 处理 Django中有一个django.middleware.csrf.CsrfViewMiddleware中间件提供了全局的csrf检查.它的原理是在<fo ...

  6. Python翻译器

    import urllib.request import urllib.parse import json content='有了我,翻译再也不是问题啦' print(content) while c ...

  7. 树链剖分【洛谷P1505】 [国家集训队]旅游

    P1505 [国家集训队]旅游 题目描述 Ray 乐忠于旅游,这次他来到了T 城.T 城是一个水上城市,一共有 N 个景点,有些景点之间会用一座桥连接.为了方便游客到达每个景点但又为了节约成本,T 城 ...

  8. 最短路【洛谷P1606】 [USACO07FEB]荷叶塘Lilypad Pond

    P1606 [USACO07FEB]荷叶塘Lilypad Pond 为了让奶牛们娱乐和锻炼,农夫约翰建造了一个美丽的池塘.这个长方形的池子被分成了M行N列个方格(1≤M,N≤30).一些格子是坚固得令 ...

  9. php 读取excel文件

    首先下载插件PHPExcel (PHPExcel-1.8),以tp5框架为例,将该文件放在verdor文件夹下.然后引入IOFactory文件. 1.读取文件的部分内容(用于固定格式) public ...

  10. ArrayList深度分析:ArrayList和数组间的相互转换

    一.ArrayList转换为数组ArrayList提供public <T> T[] toArray(T[] a)方法返回一个按照正确的顺序包含此列表中所有元素的数组,返回数组的运行时类型就 ...