随笔分类 - 数据结构
摘要:离线等价类的概念见 "离线等价类" 最近在清洗数据的时候涉及到要将相似度比较高的文件夹合并,特征比对得到是1:1的对,比如: (a,b),(c,d),(a,c)...,那么合并的时候就涉及到将这些等价的对合并成一个大类,直观上这就是一个离线等价类的问题。
阅读全文
摘要:先把代码贴了,有时间再写思路。。二叉树定义:binaryTree.h 1 #ifndef BINARYTREE_H 2 #define BINARYTREE_H 3 #include 4 #include "LinkedQueue.h" 5 6 template 7 class B...
阅读全文
摘要:1、理想情况在一个使用有序链表描述的具有n个元素的字典中进行搜索,至多需要n次比较。如果在链中部节点加一个指针,则比较次数可以减少到n/2+1。搜索时,首先将要搜索的元素与中间节点进行比较,如果该元素较小,则仅需搜索链表的左半部分。否则,只需搜索又半部分。以上图为例,如果要搜索的数为26,则将26先...
阅读全文
摘要:1、定义:字典(dictionary)是一些元素的结合。每个元素有一个称作key的域,不同元素的key各不相同。其抽象数据类型描述为:抽象数据类型Dictionary{实例: 具有不同关键字的元素组合操作: Create():创建一个空字典 Search(k,x):搜索关键字为k的元素 In...
阅读全文
摘要:问题描述:考察一个机械厂,其中有 m 台一模一样的机器。现有 n 个作业需要处理,设作业 i 的处理时间为ti,这个时间为从将作业放入机器直到从机器上取下作业的时间。所谓调度(s c h e d u l e)是指按作业在机器上的运行时间对作业进行分配,使得:• 一台机器在同一时间内只能处理一个作业。...
阅读全文
摘要:堆是一种优先队列的实现。堆是一颗完全二叉树,所谓完全二叉树就是除了最后一层以外,其他层都是满的,而且最后一层所缺的叶结点都在右边。在完全二叉树中,节点的序列号有如下关系:特性4:设完全二叉树中一元素的序号为i,11,则该元素父节点为i/2(向下取整)当2*i>n时,该元素无左孩子。否则,其左孩子为2...
阅读全文
摘要:队列是先进先出的线性表,顾名思义,优先队列则是元素有优先级的队列,出列的顺序由元素的优先级决定。从优先队列中删除元素是根据优先权的高低次序,而不是元素进入队列的次序。优先队列的典型应用是机器调度等。假设我们对机器服务进行收费。每个用户每次使用机器所付费用都是相同的,但每个用户所需要服务时间都不同。为...
阅读全文
摘要:转自:二叉树的非递归遍历http://www.cnblogs.com/dolphin0520/archive/2011/08/25/2153720.html二叉树的非递归遍历 二叉树是一种非常重要的数据结构,很多其它数据结构都是基于二叉树的基础演变而来的。对于二叉树,有前序、中序以及后序三种遍历方法...
阅读全文
摘要:二叉树的定义见:二叉树实现:公式化描述二叉树最常用的描述方法是用链表或指针。每个元素都用一个有两个指针域的节点表示,这两个域为 L e f t C h i l d和R i g h t C h i d。除此两个指针域外,每个节点还有一个 d a t a域。二叉树的边可用一个从父节点到子节点的指针来描述...
阅读全文
摘要:在基数排序( radix sort)中,把数按照某种基数分解为数字,然后对数字进行排序。例3-1 假定对范围在 0 ~ 9 9 9之间的 1 0个整数进行排序。如果使用 r a n g e = 1 0 0 0来调用 B i n S o r t,那么箱子的初始化将需要 1 0 0 0个执行步,节点分配...
阅读全文
摘要:1、问题描述假定一个链表中包含了一个班级内所有学生的信息,每个节点中含有这样的域:学生姓名、社会保险号码、每次作业和考试的分数以及所有作业和考试的加权总分。假定所有的分数均为0 ~ 1 0 0范围内的整数。 如果采用第 2章中所给出的任一种排序算法对表中的学生按分数进行排序,所需要花费的时间均为 O...
阅读全文
摘要:数据可以用不同的形式进行描述或存储在计算机存储器中。最常见的数据描述方法有:公式化描述、链接描述、间接寻址和模拟指针。 公式化描述借助数学公式来确定元素表中的每个元素分别存储在何处(如存储器地址) 。最简单的情形就是把所有元素依次连续存储在一片连续的存储空间中,这就是通常所说的连续线性表。 ...
阅读全文
摘要:1、问题描述迷宫( m a z e)是一个矩形区域,它有一个入口和一个出口。在迷宫的内部包含不能穿越的墙或障碍。在图 5 - 8所示的迷宫中,障碍物沿着行和列放置,它们与迷宫的矩形边界平行。迷宫的入口在左上角,出口在右下角。图5-8 迷宫假定用n×m的矩阵来描述迷宫,位置 ( 1 , 1 )表示入口...
阅读全文
摘要:数组实现方式: 1 #ifndef LINEARLIST_H 2 #define LINEARLIST_H 3 #include 4 #include 5 #include 6 using std::cout; 7 using std::endl; 8 template 9 cla...
阅读全文
摘要:1、问题描述例子:假定 n= 1 4, R= { ( 1 , 11 ), ( 7 , 11 ), ( 2 , 1 2 ), ( 1 2 , 8 ), ( 11 , 1 2 ), ( 3 , 1 3 ), ( 4 , 1 3 ), ( 1 3 , 1 4 ),( 1 4 , 9 ), ( 5 , 1 ...
阅读全文
摘要:1、问题描述开关盒布线问题是这样的:给定一个矩形布线区域,其外围有若干针脚。两个针脚之间通过布设一条金属线路而实现互连。这条线路被称为电线,被限制在矩形区域内。如果两条电线发生交叉,则会发生电流短路。所以,不允许电线间的交叉。每对互连的针脚被称为网组。我们的目标是要确定对于给定的网组,能否合理地布设...
阅读全文
摘要:1、问题描述 一列货运列车共有 n节车厢,每节车厢将停放在不同的车站。假定 n个车站的编号分别为1 ~n,货运列车按照第n站至第 1 站的次序经过这些车站。车厢的编号与它们的目的地相同。为了便于从列车上卸掉相应的车厢,必须重新排列车厢,使各车厢从前至后按编号 1 到n的次序排列。当所有的车厢都按照...
阅读全文
摘要:1、问题描述 汉诺塔( Towers of Hanoi)问题来自一个古老的传说:在世界刚被创建的时候有一座钻石宝塔(塔1 ),其上有6 4个金碟(如图 5 - 4所示)。所有碟子按从大到小的次序从塔底堆放至塔顶。紧挨着这座塔有另外两个钻石宝塔(塔 2和塔3)。从世界创始之日起,婆罗门的牧师们就一直...
阅读全文
摘要:1、问题描述: 在这个问题中将要匹配一个字符串中的左、右括号。例如,字符串 ( a * ( b + c ) + d )在位置1 和4有左括号,在位置 8和 11 有右括号。位置 1 的左括号匹配位置 11 的右括号,位置 4的左括号匹配位置8的右括号。对于字符串 ( a + b ) ) (,位置 ...
阅读全文
摘要:除了公式化即数组的实现方式,堆栈还可以用链表的方式实现,这种方式对空间利用率更高。在使用链表来表示堆栈时,必须确定链表的哪一端对应于栈顶。如果把链表的右端作为栈顶,那么可以利用链表操作 I n s e r t ( n , x )和D e l e t e ( n , x )来实现堆栈的插入和删除操作,...
阅读全文