算法分析
文章平均质量分 85
yunsongice
这个作者很懒,什么都没留下…
展开
-
字节那些事儿
<br />1、前言<br />作为一名C/C++ 程序员,字节是我们天天都要与之打交道的一个东西。我们和它熟稔到几乎已经忘记了它的存在。可是,它自己是不甘寂寞的,或迟或早地,总会在某些时候探出头来张望,然后给你一个腿儿绊。其实,只要你真正了解了它的底细,你就会畅行无阻。在本文中,我们将首先简要了解一下字节的概念,然后着重了解一下字节序问题和字节对齐问题。<br />注:笔者已经尽最大努力保证本文信息的正确性,但确实无法提供百分之百的担保。<br />2、什么是字节<br />我们知道,二进制计算机(也就是转载 2010-09-15 10:29:00 · 1865 阅读 · 1 评论 -
树及树的算法(4) —— 红黑树
红黑树是在1972年由德国科学家鲁道夫·贝尔发明的,他称之为“对称二叉B树”,它现代的名字是在 Leo J. Guibas和 Robert Sedgewick 于1978年写的一篇论文中获得的。红黑树的实现是很复杂的,但它的操作有着良好的最坏情况运行时间,并且在实践中是高效的:它可以在O(log n)时间内做查找,插入和删除,这里的n是树中元素的数目。图:鲁道夫·贝尔 红黑树和原创 2012-05-31 23:17:41 · 6179 阅读 · 0 评论 -
树及树的算法(3) —— 平衡二叉树
在计算机科学中,平衡二叉树(AVL树)是最先发明的自平衡二叉查找树。在AVL树中任何节点的两个子树的高度最大差别为一,所以它也被称为高度平衡树。查找、插入和删除在平均和最坏情况下都是O(log n)。增加和删除可能需要通过一次或多次树旋转来重新平衡这个树。AVL树得名于它的发明者是前苏联数学家G.M. Adelson-Velsky和E.M. Landis,他们在1962年的论文《An al原创 2012-05-31 23:10:56 · 2852 阅读 · 0 评论 -
树及树的算法(2) —— 二叉查找树
二叉查找树(Binary Search Tree,简称BST),或者是一棵空树,或者是具有下列性质的二叉树:若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值;若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值; 它的左、右子树也分别为二叉排序树。二叉排序树的查找过程和次优二叉树类似,通常采取二叉链表作为二叉排序树的存储结构。中序遍历二叉排序树可得到一个关键字的原创 2012-05-31 23:06:27 · 2687 阅读 · 2 评论 -
树及树的算法(1) —— 二叉树
从现在开始,我们研究算法理论中最重要的树的实现问题,其中包括抽象树、N叉树及二叉树,这里重点研究二叉树。树状图是一种数据结构,它是由n(n>=1)个有限结点组成一个具有层次关系的集合。把它叫做“树”是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。它具有以下的特点:每个结点有零个或多个子结点;每一个子结点只有一个父结点;没有前驱的结点为根结点;除了根结点外,每个子结点可以分为m个不相交原创 2012-05-31 22:55:09 · 3049 阅读 · 0 评论 -
基本数据结构(5) —— 有序表
1 有序线性表有序线性表是最基本的可搜索容器,其提供除了可搜索容器的操作,还有自己的一些基本操作。那么什么是可搜索容器呢,可搜索容器定义如下:class SearchableContainer : public virtual Container{public: virtual bool IsMember (Object const&) const = 0; virtual原创 2012-04-29 23:27:50 · 3983 阅读 · 0 评论 -
基本数据结构(4) —— 队列
队列,又称为伫列(英文queue),与栈想反,是先进先出(FIFO, First-In-First-Out)的线性表。在具体应用中通常用链表或者数组来实现。队列只允许在后端(称为rear)进行插入操作,在前端(称为front)进行删除操作。 队列的操作方式和栈类似,唯一的区别在于队列只允许新数据在后端进行添加。 队列的架构设计如下:抽象队列的实现如下:class Que原创 2012-04-29 22:57:27 · 2736 阅读 · 0 评论 -
基本数据结构(2) —— 链表
链表开发于1955-56,由当时所属于兰德公司(英语:RAND Corporation)的艾伦纽维尔(Allen Newell),克里夫肖(Cliff Shaw)和赫伯特西蒙(Herbert Simon)在他们编写的信息处理语言(IPL)中做为原始数据类型所编写。IPL被作者们用来开发几种早期的人工智能程序,包括逻辑推理机,通用问题解算器和一个计算机象棋程序。 链表的形态主要有单链表、原创 2012-04-29 21:37:54 · 2733 阅读 · 0 评论 -
基本数据结构(3) —— 栈
1 栈栈(stack),在计算机科学中,是一种特殊的串行形式的数据结构,它的特殊之处在于只能允许在链结串行或阵列的一端(称为栈顶,top)进行加入(push)和输出(pop)的运算。栈可以用一维动态数组或链表的形式来完成。 由于堆栈数据结构只允许在一端进行操作,因而按照后进先出(LIFO, Last In First Out)的原理运作。堆栈数据结构使用两种基本操作:推入(push)和原创 2012-04-29 21:51:07 · 2738 阅读 · 0 评论 -
基本数据结构(1) —— 动态数组
我们设计动态数组的目的在于,利用C++模板技术,消除C++语言中对数组的种种限制,如数组无法成为函数的参数或返回值(除非是指针),数组无法直接赋值等等。1 一维动态数组 一维动态数组将一个普通数组封装成data: 来看具体实现: template class Array{protected: T* data; unsigned int base;原创 2012-04-29 21:32:11 · 3433 阅读 · 0 评论 -
算法的概念
问题 算法是什么?第一次接触到这个概念是10年前上大一的时候,《数据结构》这门课程首先遇到的。书上说,算法是一个用来解决一个良定义计算问题的工具。那么经历了这么多年程序员的生活,回头再想一想,算法到底是什么呢? 首先,算法是用来解决问题的,所以,我们要仔细思考一下什么是问题?个人的一点遇见认为,问题来自各个领域。农民有种地的问题,工人有领工资的问题,那么计算机算法研究的问题,主要是原创 2011-06-05 23:59:00 · 3379 阅读 · 0 评论 -
C语言中函数参数的入栈顺序
<br />对技术执着的人,比如说我,往往对一些问题,不仅想做到“知其然”,还想做到“知其所以然”。C语言可谓博大精深,即使我已经有多年的开发经验,可还是有许多问题不知其所以然。某天某地某人问我,C语言中函数参数的入栈顺序如何?从右至左,我随口回答。为什么是从右至左呢?我终究没有给出合理的解释。于是,只好做了个作业,于是有了这篇小博文。<br /><br />#include <stdio.h><br /><br />void foo(int x, int y, int z)<br />{<br />转载 2011-03-07 13:44:00 · 2598 阅读 · 3 评论 -
树及树的算法(5) —— B树(上)
1970年,鲁道夫·贝尔(R.Bayer)的先于红黑树提出了B树。这种适用于外查找的树,是一种平衡的多叉树,又称B-树。 B树与红黑树最大的不同在于,B树的结点可以有许多子女,从几个到几千个。那为什么又说B树与红黑树很相似呢?因为与红黑树一样,一棵含n个结点的B树的高度也为O(log2n),但可能比一棵红黑树的高度小许多,应为它的分支因子比较大。所以,B树可以在O(log2n)时间内,实现原创 2012-07-30 00:45:55 · 4771 阅读 · 0 评论