自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(20)
  • 资源 (1)
  • 收藏
  • 关注

原创 C++进阶——STL源码之红黑树(_Rb_tree)

STL源码之红黑树STL中Red-black tree(红黑树)class,用来当做STL关系式容器(如set,multiset,map, multimap).里面所用的insertion和deletion方法以 《Introduction to Algorithms》一书为基础,但是有以下两点不同:header不仅指向root,也指向红黑树的最左节点,以便用常数时间实现begin(),并且也指向红黑树的最右边节点,以便 set相关泛型算法(如set_union等等)可以有线性时间表现. 当要删除

2020-08-30 20:56:32 3678 3

原创 数据结构与算法——红黑树(Red Black Tree)

数据结构与算法——红黑树(Red Black Tree)红黑树(Red Black Tree) 是一种自平衡二叉查找树,是在计算机科学中用到的一种数据结构,典型的用途是实现关联数组;红黑树是在1972年由Rudolf Bayer发明的,当时被称为平衡二叉B树(symmetric binary B-trees)。后来,在1978年被 Leo J. Guibas 和 Robert Sedgewick 修改为如今的“红黑树”。红黑树是一种特化的AVL树(平衡二叉树),都是在进行插入和删除操作时通过特定操作

2020-08-30 16:46:46 332

原创 数据结构与算法——平衡二叉树(AVL Tree)

数据结构与算法——平衡二叉树(AVL Tree)构建一个二叉排序树时,如果构建序列是完全有序的,则会出现这样的情况:显然这种情况会使得二叉搜索树退化成链表。当出现这样的情况,二叉排序树的查找也就退化成了线性查找,所以我们需要合理调整二叉排序树的形态,使得树上的每个结点都尽量有两个子结点,这样整个二叉树的高度就会大约在log(n)log(n)左右,其中nn为结点个数。基本性质​AVL树也称为平衡二叉树,是一种自平衡的二叉排序树,本质上仍然是一颗二叉排序树,只是增加了“平衡”的...

2020-08-20 23:47:52 281

原创 数据结构与算法——二叉排序树(二叉查找树)

二叉排序树二叉排序树(Binary Sort Tree),又称为二叉查找树;它是一棵空树或着是具有下列性质的二叉树:若左子树不空,则左子树上所有结点的值均小于它的根结点的值; 若右子树不空,则右子树上所有结点的值均大于它的根结点的值; 左、右子树也分别为二叉排序树。 不允许有键值相同结点当我们对上图的二叉排序树进行中序遍历时,便可以得到有序的序列;但构造一个排序二叉树的目的,其实并不是为了排序,而是为了提高查找和插入删除关键字的速度。二叉排序树的操作首先提供下二叉树的结构:

2020-08-20 00:02:11 634

原创 数据结构与算法——二分查找和插值查找的算法

二分查找算法描述:如果待查序列不为空,则将它的中间元素与要查找的目标元素进行匹配,看它们是否相等; 如果相等,则返回该中间元素的索引,并退出算法;此时就查找成功了;如果不相等,就比较这两个元素的大小; a. 如果该中间元素大于目标元素,那么就将当前序列的前半部分作为新的待查序列;这是因为后半部分的所有元素都大于目标元素,它们全都被排除了。 b.如果该中间元素小于目标元素,那么就将当前序列的后半部分作为新的待查序列;这是因为前半部分的所有元素都小于目标元素,它们全都被排除了。 在新的待查序列.

2020-08-19 22:24:11 192

原创 数据结构与算法——AOE网的关键路径

数据结构与算法——AOE网的关键路径AOE是带权值的有向图,以顶点表示事件,以边表示活动,边上的权值表示活动的开销(如项目工期)。AOE 是建立在子过程之间的制约关系没有矛盾的基础之上,再来分析整个过程需要的开销。所以如果给定AOV网中各顶点活动所需要的时间,则可以转换为AOE网,较为简单的方法就是把每个顶点都拆分成两个顶点,分别表示活动的起点和终点事件和活动  把上图转换成一般的AOE图如下实现源码:#include <iostream>using nam.

2020-08-17 23:32:58 1751

原创 数据结构与算法——有向图的拓扑排序

数据结构与算法——拓扑排序在有向图中,用顶点表示活动,用有向边<Vi,Vj>表示活动i是活动j的必须条件,这种有向图为顶点表示活动的网简称为AOV网络。在AOV网络中,如果活动Vi 必须在Vj 之前进行,则存在有向边<Vi,Vj>,并称Vi是Vj的直接前驱,Vj是Vi的直接后继;这种前驱与后继的关系具有传递性和反自反性,这要求AOV网络中不能出现回路,即有向环;因此,对于给定的AOV网络,必须判断它是否存在有向环。拓扑排序描述  检测有向环可以通过对AOV网络进行拓扑

2020-08-17 19:27:38 4764

原创 数据结构与算法——图的最小路径之弗洛伊德算法

图的最小路径之弗洛伊德算法实现源码:typedef int Pathmatirx[MAXVER][MAXVER];typedef int ShortPathTable[MAXVER][MAXVER];void ShortestPath_Floyd(MGraph G, Pathmatirx *P, ShortPathTable *D){ int v, w, k; for (v = 0; v < G.numVertexes; v++) { fo...

2020-08-16 19:27:13 173

原创 数据结构与算法——图的最短路径之迪杰斯特拉(Dijkstra)算法

图的最短路径之迪杰斯特拉(Dijkstra)算法看图分析:1. 迪杰斯特拉算法的思想:是从起点开始,根据边的权值信息逐步推出到各个顶点的最小值,然后利用推导出来的最小权值顶点不断迭代更新到顶点的最小路径;2. 结合上图来看下推导过程: a. 默认v0到v1、v2...v8各个顶点的最小路径为不可能的最大值记缓存信息为buffer[numVertex](即未知) b. 从v0开始,遍历v0的所有边权值,取最小权值为1,为此时的最小路径; ...

2020-08-16 15:16:02 390

原创 数据结构与算法——图的最小生成树之克鲁斯卡尔算法

图的最小生成树之克鲁斯卡尔算法克鲁斯卡尔算法是以某个顶点为起点,逐步找各顶点上最小权值的边来构建最小生成树。克鲁斯卡尔算法需要将边集数组按照权值从小到大排序,如下所示:看图分析:1.克鲁斯卡尔算法它的基本思想有别于普利姆算法,它是按顺序利用具有最优权值边去构建最小生成树,这个过程的关键是在逐一利用最优边时,保证生成的是一个树,而不是闭环的图,如果要使生成树的过程中不会闭环,我们要保证,从已选择边的任何一个点起,都不会形成一个闭环;2. 结合图来看:选择前6个边之后的图示如下,从任何一.

2020-08-16 00:15:12 323

原创 数据结构与算法——图的最小生成树之普里姆算法

图的最小生成树之普里姆算法看图分析(我们将图中的权当作距离来看待):1. 从任一点出发(这里从0出发),0到下个最近顶点2的距离最小为1,这一步简单直接;2. 对于从顶点2出发,去寻找最小距离的下一个顶点,我们需要考虑下面的情况:经过第一步,现在我们拥有了两个顶点(即 顶点0 和 顶点2)可以出发,去往相同的地方(这里的 顶点1 和 顶点3);来分析顶点2选择最优距离的过程: a. 顶点2——> 顶点1 的距离为 5;(这个时候要考虑顶点0——&gt...

2020-08-15 22:32:57 317

原创 数据结构与算法——图的基本概念

图的基本概念图(graph)是由顶点的有穷非空集合和顶点之间边的集合组成,通常表示为:G(V,E),其中,G表示一个图,V是图G中顶点的集合,E是图G中边的集合。图中的数据称为顶点,有别于线性表的元素,树中的结点; 在图结构中,不允许没有顶点,v为有穷非空; 在图中任意两个顶点之间都可能有关系,顶点之间的逻辑关系用 边 来表示;边集可以是空集。图的相关定义无向边:若顶点v1和v2之间的边没有方向,则称这条边为无向边(Edge),用无序偶对(v0,v1)来表示。无向图:图中任意两个顶点之

2020-08-13 23:51:44 775

原创 数据结构与算法——线索二叉树

线索二叉树二叉树常用二叉链表的形式存储,链表中的每个结点形式如下:二叉链表存储的示意图如下,可以发现在二叉链表中如果一个结点没有左或右孩子结点,就会出现空指针域(^)的问题,如下:当我们中序遍历二叉树时,得到的结果为:H D I B J E A F C G (粗体是包含空指针域的结点)通过中序遍历的结果,可以发现每个同时有左右孩子的结点的边上都有一个存在空指针域的结点,通过利用这个空指针域来指向中序遍历的前驱后续来实现“双向”访问,这就是线索二叉树。基本实现思想通过上述的..

2020-08-13 00:44:14 568

原创 Android开发——关于32位与64位so的加载问题

有时候会为了减少apk的大小,只设置支持“armeabi-v7a”SO库架构apk在安装的过程中,系统就会对apk进行解析根据里面so文件类型,确定这个apk安装是在32 还是 64位的虚拟机上,如果是32位虚拟机那么就不能使用64位so,如果是64位虚拟机也不能使用32位so。而64位设备可以提供32和64位两种虚拟机,根据apk选择开启哪一种,因此说64位设备兼容32的so库。具体机制,分下面四种情况:1.假设apk的lib目录放置了32和64位两种so,那么安装时根据当前设备的cp

2020-08-12 00:06:38 6570

原创 数据结构与算法——树和二叉树简介

树和二叉树基本术语结点:树的数据元素;结点的度:结点上分支出的子树个数;一个树中最大的结点的度称为树的度。叶子:度为0的结点,又称为终端结点孩子:结点的子树的根,称为该结点的孩子双亲:对应于孩子结点的上层结点称为这个结点的双亲兄弟:同一双亲的孩子之间互称为兄弟结点的层次:从根结点算起,根为第一层,其他结点的层次等于它的双亲的层次加1深度:或称为高度,是树中结点的最大层次,森林:是n(大于等于0)棵互不相交的树的集合。树树(Tree)是一种由多个节点组成的有限集

2020-08-07 00:01:46 304

原创 C++进阶——STL源码之顺序容器适配器

顺序容器适配器容器适配器是一种利用存在的容器类型采用另一种不同的抽象类型的工作方式实现。stackstack是一种先进后出的数据结构,它只有一个出口;stack允许新增元素、移除元素、取得最顶端的元素;但是除了顶端外不可以存取其他元素;stack没有迭代器。stack在缺省的情况下是以deque作为底部容器来完成所有的工作,元素的操作只有push 和 pop 两个接口。stack也可以使用vector 、 list 、deque 作为底部容器。template<typen

2020-08-04 23:27:19 304

原创 C++进阶——STL源码之顺序容器deque

顺序容器dequedeque 是一种双向开口的连续线性空间,所谓双向开口,就是可以在头尾两端分别做元素的插入和删除;与vector 相比,vector可以在头尾两端进行操作,但是其头部的操作效率奇差,无法接受。deque是分段连续线性空间,随时可以增加一段新的空间;与vector相比,vector当内存不够时,需重新分配、复制数据、释放原始空间。deque的迭代器需要处理段之间的过渡,相比于vector的普通指针迭代器要复杂的多。deque的类结构图deque的中控器..

2020-08-04 00:15:47 431

原创 C++进阶——STL源码之顺序容器vector

顺序容器vectorvector的数据安排以及操作和array相似,二者的唯一的差别在于空间的运用灵活性:array 是静态空间,一旦配置之后就不能改变;vector是动态空间,随着元素的加入,它的内部机制会自行的扩充空间以容纳新的元素。vector的实现技术,关键在于对其大小的控制以及重新配置时的数据移动效率,一旦vector旧空间满载,vector将会以一种空间配置策略来扩充空间,从而降低配置新空间、数据移动、释放旧空间带来的性能消耗。vector类的结构图通过上面的类结构图,可以知

2020-08-02 20:53:44 1150

原创 C++进阶——STL源码之顺序容器array

顺序容器arrayC++ TR1 是ISO/IEC TR 19768 C++ Library Extensions(函式库扩充)的一般名称。TR1 是一份文件,内容提出了对C++标准函式库的追加项目。这些追加项目包括了正则表达式、智能指针、哈希表、随机数生成器等。TR1自己并非标准,他是一份草稿文件;由于tr1中的array实现比较简单,我们先看下tr1::array的实现,然后再看gcc 4.9 std中array的实现。array是一个静态空间,一旦配置了就不能改变。tr1::array

2020-08-02 15:33:03 381

原创 C++进阶——STL源码之迭代器(iterators)

STL迭代器在 STL 编程中,容器和算法是独立设计的,即数据结构和算法是独立设计的,连接容器和算法的桥梁就是迭代器了:迭代器是一种行为类似指针的对象,而指针的各种行为中最常见也最重要的使用是:内容提领 和成员访问,所以迭代器会对operator* 和 operator-> 进行重载工作,首先来看下list容器的迭代器实现: template<typename _Tp> struct _List_iterator { typedef _List

2020-08-01 21:11:39 1537

3D数学基础 图形与游戏开发

3D数学基础 图形与游戏开发,3D数学基础 图形与游戏开发,3D数学基础 图形与游戏开发

2016-02-22

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除