数据结构和算法
文章平均质量分 94
Master.TJ
https://github.com/fengruotj
展开
-
数据结构和算法解析:排序问题简易总结
直接插入排序直接插入排序(Straight Insertion Sorting)的基本思想:在要排序的一组数中,假设前面(n-1) [n>=2] 个数已经是排好顺序的,现在要把第n个数插到前面的有序数中,使得这n个数也是排好顺序的。如此反复循环,直到全部排好顺序。直接插入排序是一种稳定的排序方法,最好的时间复杂是O(n)也就是已经排好的序列,最差的时间复杂度是O(n^2)逆序 /...原创 2018-10-20 14:20:57 · 815 阅读 · 0 评论 -
数据结构和算法分析:第二章 算法分析
算法是为求解一个问题所要遵循的,被清楚指定的简单指令的集合。#2.1 数学基础相对增长率大O标记法2.2 模型为了正式的架构中分析算法,我们需要一个计算模型。我们的模型基本上是一台标准的计算机,在机器中指令被顺序的执行。2.3 要分析的问题通常,要分析的最重要的资源就是运行时间。有几个因数影响着程序的运行时间。因此只要有可能,使得算法足够有效而不成为问题的瓶颈是十分重要的。2....原创 2019-02-28 15:09:10 · 556 阅读 · 0 评论 -
数据结构和算法解:第九章 算法设计技巧
9.1 贪婪算法算法思想:贪婪算法分阶段的工作。在一个阶段,可以认为是所做的决定中最好好的,而不考虑将来的后果。通常,这意味着选择的是某个局部最优。这种“眼下就能拿到的就拿”的侧脸是这类算法的来源。在算法终止的时候,我们希望局部最优等于全局最优。9.2 分治算法分治算法由两部分组成:分(divide):递归解决较小的问题。治(conquer):然后从子问题的解构建原问题的解。传统上...原创 2018-11-04 18:36:42 · 817 阅读 · 0 评论 -
数据结构和算法:第八章 图论算法
9.1 若干定义图的定义:一个图(Graph) G=(V,E)是由顶点的集合V和边Edge的集合E组成的。每一条边就是一个顶点对(v,w),其中(v,w) ∈E。有时候也把边叫做弧。如果顶点对是有序的,那么图就是有向的。有的图也叫做有向图。顶点w和顶点v邻接当且仅当(v,w)∈E。在一个具有边(v,w)从而具有边(w,v)的无向图中,w和v邻接且v和w邻接。有时候边还有第三种成分,成为权值。...原创 2018-11-04 16:56:38 · 1266 阅读 · 0 评论 -
数据结构和算法分析: 红黑树
1. 前言红黑树是二叉搜索树的一种, 为什么要设计红黑树呢?主要原因是二叉搜索树上面的操作,比如search、insert、delete的一些操作的,其时间复杂度为O(h)。主要和树的深度有关。因此搜索树的深度较低时,这些集合操作执行地比较快。然而,如果树的高度较高的时候,这些集合操作可能比不上链表的执行得快。那么为了设计一种高效地二叉搜索树,主要的做法就是降低树的深度。红黑树就是为了降低二叉搜...原创 2018-10-30 15:30:02 · 782 阅读 · 0 评论 -
数据结构和算法分析:第六章 优先队列(堆)
一般来说,短的作业要尽可能地快速结束,这很重要,因此在已经运行的作业当中这些短作业应该拥有优先权。此外,有些作业虽然不短小但很重要,也应该有优先权。6.1 模型优先队列是允许至少以下两种操作的数据结构:insert(插入),它的作用是插入一个元素;以及deleteMin(删除最小者元素),它的工作是找出、返回并删除优先队列中最小的元素。insert操作等价于enqueue(入队),而delet...原创 2018-10-30 09:51:02 · 685 阅读 · 0 评论 -
数据结构和算法:第七章 排序
7.1 预备知识我们描述的算法都将是可以互换的。每个算法都将接收包含一些元素的数组;假设所有的数组位置都包含要排序的数据。我们还假设N是传递到排序程序的元素个数。除(引用)赋值运算外,这是仅有允许对输入数据进行的操作。在这些条件下的排序叫做基于比较的排序7.2 插入排序插入排序由N-1趟组成。对于p=1到N-1趟,插入排序保证从位置0到位置p上的元素为已排序状态。插入排序利用了这样的事实:...原创 2018-10-31 17:45:05 · 728 阅读 · 0 评论 -
数据结构和算法分析: 第五章 散列
散列表的实现常常叫做散列。散列是一种用于以常数平均时间执行插入、删除和查找的技术。5.1 一般想法散列表的数据结构是一个包括一些项(item)的具有固定大小的数组。通常查找是对于项的某个部分(即数据域)来进行的。这部分就叫做关键字。每个关键字被映射到0到TableSize-1这个范围的某个数字中,并且被放到适当的单元中。这个映射函数就叫做散列函数(hash function)。5.2 散列...原创 2018-10-29 12:05:20 · 756 阅读 · 0 评论 -
数据结构和算法分析:B树 B+树 和B*树的总结
1. 前言动态查找树主要有:二叉查找树(Binary Search Tree),平衡二叉查找树(Balanced Binary Search Tree),红黑树(Red-Black Tree ),B-tree/B±tree/ B*-tree (B~Tree)。前三者是典型的二叉查找树结构,其查找的时间复杂度O(log2N)与树的深度相关,那么降低树的深度自然会提高查找效率。但是咱们有面对这样一...原创 2018-10-29 09:50:07 · 1882 阅读 · 0 评论 -
数据结构和算法分析:第四章 树
4.1预备知识树(tree)可以用几种方式定义。定义树的一种自然的方式使递归的方式。一棵树使一些节点的集合。这个集合可以是空集;若不是空集,则树由称做为根(root)的节点r以及0个或多个非空的树集合T1、T2、T3组成,这些子树的每一课根都被来自根r的一条又向边(edge)所连接。树的基本概念树叶:没有儿子的节点兄弟:具有相同父亲的节点祖父:从根到该节点所经分支上的所有节点;孙子...原创 2018-10-29 08:50:49 · 815 阅读 · 0 评论 -
数据结构和算法分析:第一章 引论
1.2 数学知识和复习1.2.1 指数1.2.2 对数1.2.3 级数1.2.4 模运算1.2.5 证明的方法归纳法证明:用归纳法进行的证明有两个标准的部分。第一步是证明基准情形,就是确定定理对于某个(某些)小的值得正确性。接着就是归纳假设。一般来说,它指的就是假设定理对直到某个有限数k得所有得情况都是成立的。反证法证明:反证法证明就是通过假设定理不成立,然后证明该假设...原创 2018-10-21 20:39:20 · 566 阅读 · 0 评论 -
数据结构和算法分析:第三章 表、队列和栈
3.1 抽象数据类型抽象数据类型 是带有一组操作的一些对象的集合。对于集合ADT可以有像添加add、删除remove、包含contain这样的一些操作3.2 表ADT3.2.1 表简单的数组实现只发生对数组的访问(即只有findKth操作)。在这种情况下数组是表的一种切当的的实现。然而,如果发生插入和删除操作,特别是对表的前端进行,那么数组就不是一个好的选择。3.2.2 简单链表为了避...原创 2018-10-23 08:54:44 · 550 阅读 · 0 评论