Datastructure
时间复杂度的计算
- 计算最坏情况下执行语句的次数(含有n)
- 去掉常数项, 只保留最高项, 去掉系数
- 最后的结果一般是1, logn, n, nlogn, n^2, 2^n, n!, n^n
- 时间复杂度所消耗的时间的顺序是: O(1) < O(logn) < O(n) < O(nlogn) < O(n^2) < O(n^3) <O(2^n) < O(n!) <O(n^n)
使用线性表实现多项式加法
- 使用顺序表, 下标表示幂数, 对应下标中内容为系数
- 使用链表, 在每一个节点中存放系数和幂数
Josephus游戏解法
- 问题描述:
- 设有n个人围坐在一个圆桌周围,现从第s个人开始报数,数到第m的人出列,然后从出列
- 的下一个人重新开始报数,数到第m的人又出列...如此反复直到所有的人全部出列为止。
问题:对于任意给定的n,s和m,求出按出列次序得到的n个人员的序列。
- 思路
- 使用while(size > 0)
- 使用循环链表实现
- 使用队列实现
表达式求解
- 一个运算数栈A
- 一个运算符栈B
- 每次将运算符压栈时, 判断栈顶的运算符的优先级, 如果比当前的高, 则A弹出两个数, B弹出栈顶元素, 将计算的结果压入到A中
循环队列的实现
使用两个指针, 头指针head, 尾指针tail, head指针指向队首, tail指向可以插入元素的位置, 当出队列几个元素之后, 剩下的部分有满了, 则再次入队元素时就会将从队首开始数, 直到找到一个空闲的位置
字符串的匹配
- 朴素匹配: 俗称暴力匹配
- KMP匹配: 首先根据需要去匹配的字符串构建一个next表, 对其每一个字串计算出他对象的最长的前缀和后缀(要求前缀和后缀一致), 没有为0, 长度为1记为1, 在匹配的过程中, 遇到了不匹配的字符, 字符串移动的步数是不匹配的字符之前的长度减去当前不必配字符在next数组中对应的值, 就这样知道匹配
- 还是看不懂 ----> next的由来
如何根据next中的值进行排序
树的表示(如果不是二叉树, 则在每一个节点记录其子节点的个数, 为0表示叶子节点)
- 双亲表示法: DataType data; int parent; // 保存parent的位置, 该结构体也是存储在一个顺序表中的
- 孩子表示法: 将所有的节点存放在一个线性表中, 在每一个线性表中有一个指针指向一个链表, 链表中存放的是该节点的所有的孩子在顺序表中的位置
- 孩子兄弟表示法: DataType data; TreeNode firstChild; TreeNode sibiling; // 类似于二叉树中的left与right的表示
二叉树的存储结构
- 顺序表存储, 不要第一个小标, 从1下标开始, index / 2得到的就是双亲的位置
- 链式结构: left, right, data
二叉树的相关概念
- 一个节点的度为由该节点向下引出的树枝
哈夫曼树
- 每一个结点都有权值, W1, W2, W3..., WPL值是每一个叶子节结点的路径长度与该叶子结点权重乘积之和
- 在构建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相关推荐
- 0x00007FFC8C5325E7 (ucrtbased.dll)处(位于 DataStructure.exe 中)引发的异常: 0xC0000005: 读取位置 0xFFFFFFFFFFFFFFF
0x00007FFC8C5325E7 (ucrtbased.dll)处(位于 DataStructure.exe 中)引发的异常: 0xC0000005: 读取位置 0xFFFFFFFFFFFFFFF ...
- Python4:DataStructure
1.Introduction 数据结构基本上就是可以处理一些数据的结构.或者说,它们是用来存储一组相关数据的.在Python中有三种内建的数据结构--列表.元组和字典. 2.列表 list是处理一组有 ...
- Game - datastructure
在游戏的编写中,不可避免的出现很多应用数据结构的地方,有些简单的游戏,只是由几个数据结构的组合,所以说,数据结构在游戏编程中扮演着很重要的角色. 本文主要讲述数据结构在游戏中的应用,其中包括对链表.顺 ...
- Java网页数据采集器[下篇-数据查询]【转载】
本期概述 上一期我们学习了如何将html采集到的数据存储到MySql数据库中,这期我们来学习下如何在存储的数据中查询我们实际想看到的数据. 数据采集页面 2011-2012赛季英超球队战绩 如果是初学 ...
- clojurescript_为什么ClojureScript在NPM上如此出色
clojurescript by Jacek Schae 由Jacek Schae 为什么ClojureScript在NPM上如此出色 (Why ClojureScript works so well ...
- JavaScript对象,方括号和算法
by Dmitri Grabov 德米特里·格拉波夫(Dmitri Grabov) JavaScript对象,方括号和算法 (JavaScript Objects, Square Brackets a ...
- 《翻译》Intel 64 与 IA-32 架构软件开发者手册卷1翻译
<前言> 翻译自官方的PDF版手册,可以从下述站点下载英文原版: http://www.intel.com/content/www/us/en/processors/architectur ...
- Redis亿级数据过滤和布隆过滤器
来自:我没有三颗心脏 一.布隆过滤器简介 上一次 我们学会了使用 HyperLogLog 来对大数据进行一个估算,它非常有价值,可以解决很多精确度不高的统计需求.但是如果我们想知道某一个值是不是已经在 ...
- 用大顶堆实现最大优先队列
目录 最大优先队列的实现 测试类及结果 最大优先队列的实现 package DataStructure.priority; //最大优先队列 //用大顶堆去实现 public class MaxPri ...
最新文章
- Docker环境配置指南!
- MySQL 中 6 个常见的日志问题
- 关于Jsoup解析https网页的问题
- DevC++连接MySQL,使用mysql.h可用详细教程
- 邵阳学院计算机科学与技术专业分最低,邵阳学院在湖南各专业录取最低分/最低位次...
- sql update 多个字段_SQL学习之路-20190707
- 在Azure Cosmos DB里设置filter搜索记录
- 求100以内质数或者更多
- 简单高效地控制高亮度LED
- Python 协程gevent
- mysql导出表部分数据
- DCP(Deep Closest Point)论文阅读笔记以及详析
- python遗传算法
- Android篮球计分器论文,基于单片机的篮球计时计分器设计_毕业设计论文
- 联想电脑自动锁屏解决方法
- 非常不错的停用词词表
- play框架用起来(1)
- MacBook怎样装Win10 双系统玩转Win10
- linux下安装php并配置运行环境
- 如何写作品的介绍文档