
算法专栏
用c实现《算法导论》中基础算法
低调小一
Ubuntu重度患者,曾经的服务器开发工程师,如今正在深入学习到Android Framework
展开
-
最优二叉树&&哈夫曼编码
树的路径长度 树的路径长度是从树根到树中每一结点的路径长度之和。在结点数目相同的二叉树中,完全二叉树的路径长度最短。 树的带权路径长度(weighted path length of tree,wpl) 结点的权值:在一些应用中,赋予树中结点的一个有某种意义的实数、 结点的带权路径长度:结点到树根之间的路径长度与该结点上权的乘积 树的带权路径长度(wpl):定义为树中所有结点的带原创 2013-01-04 11:15:54 · 5787 阅读 · 2 评论 -
并查集——用于不相交集合的数据结构
并查集 并查集保持一组不相交的动态集合S={S1, S2, ..., SK}.每个集合通过一个代表来表示,代表即集合中的某个成员。 并查集的精髓(即它的三种操作): 集合中的每一个元素是由一个对象表示的,设x表示一个对象 MAKE-SET(x) 建立一个新的集合,其唯一成员(因而其代表)就是x。因为各个集合是不相交的,故要求x没有在其他集合中出现过。 初始化后每一个元素的父亲节原创 2013-04-08 15:06:01 · 3446 阅读 · 2 评论 -
图的单源最短路径算法
概述 假如你有一张地图,地图上给出了每一对相邻城市的距离,从一个地点到另一个地点,如何找到一条最短的路?最短路算法要解决的就是这类问题。定义:给定一个有(无)向图,每一条边有一个权值w,给定一个起始点S和终止点T,求从S出发走到T的权值最小路径,即为最短路径。最短路径算法依赖一种性质:一条两顶点间的最短路径包含路径上其他最短路径。最简单的说就是:最短路径的子路径是最短路径。 松原创 2013-04-23 23:56:05 · 3961 阅读 · 0 评论 -
队列的学习
定义 队列(queue)是只允许在一端进行插入,在另一端进行删除的运算受限的线性表。 允许插入的一端叫做队尾(rear)允许删除的一端叫做队头(front)当队列中没有元素时叫做空队列队列是一种先进先出的线性表,也称为FIFO表 顺序队列 顺序队列 队列的顺序存储结构称为顺序队列,顺序队列实际上是运算受限的顺序表 顺序队列的表示 顺序队列用一个向量原创 2012-10-28 16:45:27 · 2524 阅读 · 2 评论 -
树的学习——(递归构建二叉树、递归非递归前序中序后序遍历二叉树、根据前序序列、中序序列构建二叉树)
前言 最近两个星期一直都在断断续续的学习二叉树的数据结构,昨晚突然有点融汇贯通的感觉,这里记录一下吧 题目要求 给定前序序列,abc##de#g##f###,构建二叉树,并且用递归和非递归两种方法去做前序,中序和后序遍历 二叉树的数据结构 /** * 定义二叉树的数据结构 */ struct btree { char item; struct btree *lch原创 2012-12-29 10:46:55 · 10424 阅读 · 8 评论 -
栈的学习
1.栈的定义 栈(stack)是限制仅在表一端进行插入或删除操作的线性表。 (1)通常称插入或删除的一端为栈顶(Top),另一端为栈底(Bottom) (2)当表中没有元素时称为空栈 (3)栈为后进先出(last in first out)线性表,也称为LIFO表 2.顺序栈 顺序栈的类型定义 #define stacksize 1000; //预分配的栈的空间最多为1000原创 2012-10-16 18:18:37 · 2305 阅读 · 4 评论 -
堆排序
堆排序概述 堆排序定义 n个关键字序列k(1), k(2), ..., k(n)称为堆,当且仅当该序列满足如下性质(简称为堆性质) k(i) k(i) >= k(2i) && k(i) >= k(2i+1) 若将此序列所存储的向量R[1..n]看做是一颗完全二叉树的存储结构,则堆实质上是满足如下性质的完全二叉树:树中任一非叶结点的关键字均不大于(或不小于)其左右孩子(若存在原创 2013-02-25 23:28:41 · 2301 阅读 · 0 评论