如何快速将o(logn)放入PPT内

您所在位置: &
&nbsp&&nbsp&nbsp&&nbsp
数据结构作业8.ppt 14页
本文档一共被下载:
次 ,您可全文免费在线阅读后下载本文档。
下载提示
1.本站不保证该用户上传的文档完整性,不预览、不比对内容而直接下载产生的反悔问题本站不予受理。
2.该文档所得收入(下载+内容+预览三)归上传者、原创者。
3.登录后可充值,立即自动返金币,充值渠道很便利
你可能关注的文档:
··········
··········
数据结构第八次作业 * 选择题 1.在下述排序算法中,所需辅助存储量最多的是( D  )。 A)快速排序 B)归并排序 C)堆排序 D)链式基数排序 快速排序:O(logn)
归并排序:O(n)
堆排序:O(1)
链式基数排序:O(n+r)[r是基数]
2.在文件“局部有序”或文件长度较小的情况下,最佳内部排序的方法是( A )。 A)直接插入排序
B)起泡排序
C)简单选择排序
D)基数排序 起泡排序效率低,比较次数多; 简单选择排序对文件有序无序没有要求; 基数排序对文件数据有要求,适用于位数小的数列;
* 1.用一张表概括各种排序算法的时间代价、空间代价,特点。并总结各种情况下应选择的排序算法、并说明理由。 排序算法 平均时间代价 辅助空间 特点 直接插入排序 O(n2) O(1) 稳定,数据基本有序时或者n较小时 冒泡排序 O(n2) O(1) 稳定,效率较低 简单选择排序 O(n2) O(1) 不稳定,数据较少,有序无序效率一样 快速排序 O(nlogn) O(logn) 不稳定,数据乱序时 归并排序 O(nlogn) O(n) 稳定,空间足够且原始数据有序 堆排序 O(nlogn) O(l) 不稳定,只取前几个数据时 Shell排序 增量序列决定 O(1) 不稳定 * 7.5 图7.5中给出了选择排序的最少交换次数为θ(n),因为算法并不检查第i个元素是否已经在第i个位置,这就是说,那可能带来不必要的交换。 (1)改进算法使之不存在不必要的交换 (2)你认为这种改进能加快速度吗? (3)编写两个程序验证一下原始插入排序算法和改进算法的运行时间。哪个算法实际上更快? 答案: (1)改进算法使之不存在不必要的交换
void SimpleSeclectionSortAfter(int A[],int n)//修改后 {
  for(int i=0;i<n;i++)
int lowindex=i;    for(int j=i+1;j<n;j++)
{if(A[j]<A[lowindex]) lowindex=j;}
if(i!=lowindex)swap(A[i],A[lowindex]);
}//for i }//function * (2)是不可能有很大作用,更可能的算法的速度带慢。因为每次交换之前需要额外花费检查的时间。
(3)验证得之,在交换之前判断交换位置不一定会给程序带来效率上的改进,反而有时会拖慢程序的运行时间。因此7.5书中的算法更快。
当N=10000时,对一个随机数组进行测试得出一下结果: * 7.10 某个待排序的序列是一个可变长度的字符串序列,这些字符串一个接一个地存储于唯一的字符数组中,另一个数组存储指向这个大字符串数组的索引(索引指向特定字符串的指针),请改写快速排序算法,对这个字符串序列进行排序。函数要修改索引数组,使得第一个指针指向最小字符串的起始位置。
答案:在此题中,考虑到待排序的元素为字符串,并且另有一个数组index存储指向每一个字符串的指针。 #define NUM 10 char *test[NUM]={"back","alert","cat","door","effective","grant","father","ideal","hand","zero"};//存放所有字符的数据 char **index[NUM];//假定只有NUM个待排字符串 此处存放的为指针 for(i=0;i<NUM;i++)
index[i]=&test[i];//初始化 index数组内的元素为指针 指向每一个字符串
在这个快速排序算法中,主要修改的地方有两个: 一:每次比较的元素是两个字符串,因此应该用strcmp()比较函数; 二:对于元素的交换,应该直接交换index指针即可,不需要交换test元素; * void swap(char *a,char *b)//交换指针 {
temp=a;a=b;b= }; int Partition(int low ,int high) {
char *//定义一个指针
int pivotindex=
pivotkey=test[low];
while(low<high)
while(low=0)high--;
swap(index[low],index[high]);
while(low<high&&strcmp(test[low],pivotkey)<=0)low++;
swap(index[l
正在加载中,请稍后...【图文】O(logN)Sub-linear_百度文库
您的浏览器Javascript被禁用,需开启后体验完整功能,
享专业文档下载特权
&赠共享文档下载特权
&10W篇文档免费专享
&每天抽奖多种福利
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
O(logN)Sub-linear
&&O(logN)Sub-linear
阅读已结束,下载本文到电脑
想免费下载本文?
登录百度文库,专享文档复制特权,积分每天免费拿!
你可能喜欢您所在位置: &
&nbsp&&nbsp&nbsp&&nbsp
信息学奥赛必读--二叉树及其应用.ppt 76页
本文档一共被下载:
次 ,您可全文免费在线阅读后下载本文档。
&#xe600;下载提示
1.本站不保证该用户上传的文档完整性,不预览、不比对内容而直接下载产生的反悔问题本站不予受理。
2.该文档所得收入(下载+内容+预览三)归上传者、原创者。
3.登录后可充值,立即自动返金币,充值渠道很便利
信息学奥赛必读--二叉树及其应用,信息学奥赛,信息学奥赛初赛试题,小学信息学奥赛,信息学奥赛一本通,小学信息学奥赛试题,信息学奥赛培训,信息学奥赛基础知识,第32届全国信息学奥赛,初中信息学奥赛
你可能关注的文档:
··········
··········
二叉树及其应用 雅礼
朱全民 二叉树 二叉树是一种特殊的树型结构,它的特点是每个节点至多只有两个子节点。 二叉树每个节点的子树有左右之分,其次序不能任意颠倒。 二叉树也有特殊形式,例如满二叉树、完全二叉树等。 例如右图就是一棵二叉树,并且是一棵完全二叉树。
二叉树的存储结构 常用的存储结构
bitree=^node
node=record
lchild,rchild:
二叉树的遍历 遍历( 先序遍历, 中序遍历, 后序遍历) Proc preorder(bt:bitree);
if btNil then
[ visit(bt^)
preorder(bt^.lchild);
preorder(bt^.rchild);
二叉树的性质 在二叉树的第i层上最多有2i-1个结点 深度为K的二叉树最多有2k-1个结点 在二叉树中,叶子结点的总数总比为度数为2的结点多1 有n个结点的完全二叉树的结点按层序编号,则对任意一结点i,有 (1)如果i=1,则结点i是二查树的根,无双亲;如果i>1,则双亲是[i/2] (2)如果2i>n,则结点i无左孩子,否则左孩子为2i (3)如果2i+1>n,则结点i无右孩子,否则右孩子为2i+1
树、森林转化为二叉树 用“孩子兄弟表示法”可以将任意一棵树转化为二叉树的形式
森林转化为二叉树
如果F={T1, T2, …,Tm}是森林,则可按如下规则转化为一棵二叉树。
1)若F为空,即m=0,则B为空树
2)若F非空,即m0,则B的根root即为森林中第一棵树的根root(T1),B的左子树为从T1中子树森林F1={T11, T12, …,T1i}转换而成的二叉树;其右子树Rb 是从森林F={T2, …,Tm}中转换出来的二叉树
树的儿子兄弟表示法 在一棵树中,拥有同一个父结点的结点互称为兄弟。我们不妨假设树中每个结点的子结点是有序的(就像二叉树一样),则我们可以将一棵树这样转化成二叉树: 二叉树中每个结点对应原树的每个结点 对于二叉树中的某个结点 它的左子结点对应原树中该结点的第一个子结点; 它的右子结点对应原树中该结点的下一个兄弟。 树的儿子兄弟表示法 这样我们可以类似于二叉树的链式结构写出树的儿子兄弟表示法的存储结构:
node = record
parent, child, brother
// 分别记录父亲、第一个儿子、下一个兄弟 最优二叉树(哈夫曼树) 给定m个实数w1, w2,…, wm,(m>=2) ,要求一个具有m个外部节点的扩充二叉树,每个外部ki节点有一个wi与之对应,作为它的权,使得带权外部路径长度
最小,其中li是从根到外部节点的路径长度。 算法 1.构造m个只有1个节点的树 2.找两个最小的权 3.以这两个节点为左右儿子构造一个二叉树,并将该数的根节点权之为左右儿子权值之和 4.继续第二步,直到剩下一棵树为止 讨论 最优k叉树就是指在一个节点最多可以有k个叶子节点的时候,假设有n(n>=k)个权值{w1,w2,….wn},试构造出一棵有n个叶子节点的k叉树。每个叶子节点有一个不同的权值wi。其中树的带权路径长度最小的那棵树叫做最优k叉树。 怎么构造?? 分析 最优k叉树必须具备的性质: 每个节点如果不是叶子节点,那么一定有k个儿子节点。 权值大的节点不能在比权值小的节点下方。就是权值大的节点到树根的长度要小于等于权值小的节点到树根的长度。 算法 根据给定的n个权值wl,w2,…,wn构成n棵k叉树的森林F={T1,T2,…,Tn},其中每棵k叉树Ti中都只有一个权值为wi的根结点,其左右子树均空。 在森林F中选出k棵根结点权值最小的树(当这样的树不止k棵树时,可以从中任选k棵),将这k棵树合并成一棵新树,为了保证新树仍是k叉树,需要增加一个新结点作为新树的根,并将所选的k棵树的根分别作为新根的左右孩子,将这k个孩子的权值之和作为新树根的权值。 对新的森林F重复(2),直到森林F中只剩下一棵树为止。这棵树便是最优k叉树。 反例 假设k=3,当n=5时,这样做是对的。但是当n=4时,用刚才的方法得到的“最优3叉树”,但是,明显右
正在加载中,请稍后...您所在位置: &
&nbsp&&nbsp&nbsp&&nbsp
专题3-P2P网络体系结构(2013简)摘要.ppt 87页
本文档一共被下载:
次 ,您可全文免费在线阅读后下载本文档。
&#xe600;下载提示
1.本站不保证该用户上传的文档完整性,不预览、不比对内容而直接下载产生的反悔问题本站不予受理。
2.该文档所得收入(下载+内容+预览三)归上传者、原创者。
3.登录后可充值,立即自动返金币,充值渠道很便利
专题3-P2P网络体系结构(2013简)摘要
你可能关注的文档:
·····
··········
Chord的技术特点 基于安全的一致性散列函数来分配结点ID和对象ID 在一个有N个结点的网络中,每个Chord结点保存O(logN)个其他结点的信息 查询数据对象需要的覆盖网路由跳数也为O(logN) 当结点加入或者离开网络时,为了维持网络结构、保持自适应性所需要的消息数在O(log2N) Chord基础工作原理 Chord使用安全散列函数(如SHA-1)为每个网络结点和数据对象分配唯一的ID nodeID=H(node属性),属性可以是结点IP、port、公钥、随机数或它们的组合 objectID=H(object属性),属性可以是数据对象的名称、内容、大小、发布者或者它们的组合 H是散列函数,SHA系列散列函数的Hash值长度≥160,保证ID的唯一性 Chord按照如下方法将数据对象(只是其索引)分配到网络结点中 所有的结点按照nodeID从小到大顺时针排列在一个环上 数据对象k(ObjectID)被分配到环上顺时针方向紧随k(包括与k相等)的第一个结点,该结点称为对象k的后继,记做successor(k) Chord结点n的后继是环上紧随n(不等于n)的第一个结点,记做n.successor 一个简单的Chord环(m=3) 当Chord中有新结点n加入时,为保持正确、一致的对象放置,原本由n的后继结点负责的对象,其中一部分必须分配给n 当Chord中有旧结点n离开时,原本由n负责的所有对象,必须分配给n的后继。除此以外,对象不需要再做移动,这正是一致性散列函数所追求的性质 例:图中新加入结点7 单纯的环可以工作,但效率太低 为此,结点维护一个有m(ID位数)项的路由表,也称“指向表”(finger table),其中第i项指向结点s,s=successor(n+2i-1),1≤i≤m,即s是在顺时针方向到n的距离至少为2i-1的第一个结点,记做n.finger[i].node Chord路由表的特点: 每个结点只保存很少的其它结点信息,并且对离它越远的结点所知越少 Chord结点不能从自己的路由表中看出对象k的后继 为确定对象k的后继(k所在的结点),结点n在自己的路由表中查找在k之前且离k最近的结点j,让j去找离k最近的结点,递归查找,最终可以找到对象k的前驱(在k之前离k最近的结点,记做predecessor(k),类似,结点n的前驱记做n.predecessor) 前驱中必然有后继的路由表项,定位成功 Chord结点n的路由表各项属性及其定义 属性 定义 finger[k].start (n+2k-1)mod2m, 1≤k≤m .interval [finger[k].start, finger[k+1].start) .node ≥n.finger[k].start的第一个结点 successor 后继结点,即finger[1].node predecessor 前驱结点 Chord路由表的简单示例 假设结点3要找到对象1的后继 在结点3的路由表中,1属于3.finger[3].interval即[7,3) 结点3让3.finger[3].node即结点0去找1 结点0在路由表中发现自己的后继1恰好是对象1的后继,因此将1返回给结点3 结点3由此知道对象1放在结点1中 Chord结点加入算法 Chord的自适应需要保持两个不变的属性 每个结点的后继始终正确 对每个对象k,结点successor(k)始终负责k的索引 为此,新结点n的加入需要完成三个任务 初始化n的前驱和路由表项 更新网络其他结点的前驱和路由表项 告诉其后继将应该由n负责的数据对象索引传递给n Chord容错性和复制、缓存 Chord中正确的后继关系是一切工作的基础 无论机制如何完善,网络的动态性和不确定性都可以导致单后继失效 因此,实际的Chord给每个结点维护一个后继列表,其中保存了该结点在Chord环上的r个后继,典型地取r=O(logN),即使结点失效概率为1/2,仍能正确定位 将结点保存的数据对象复制到所有后继中,可提高数据的可用性、持久性 在Chord定位过程中,如每个中间结点缓存数据对象,可以提高获取数据的速度 Chord实验分析 负载均衡 负载均衡是使用一致性散列函数的结构化P2P网络的共同属性 对于Chord而言,由于数据对象被分配到其后继中,而数据对象、结点的ID都是随机、均匀产生的,因此每个结点所负担的数据对象也应该大致均衡 此外,Chord还采用了“虚拟服务器”的方法,在一台计算机上运行多个Chord结点,可以使得结点各尽所能 定位路径长度 理论量级为O(logN)跳 实验中网络结点数取N=2k,数据对象数取100×2k,k从3取到14 测量结果:路径长度平均约logN/2,是logN的一半,原因是Chord路由表的指
正在加载中,请稍后...&#xe621; 上传我的文档
&#xe621; 上传文档
&#xe602; 下载
&#xe60c; 收藏
粉丝量:132
该文档贡献者很忙,什么也没留下。
&#xe602; 下载此文档
.快速分类(PPT)
下载积分:1500
内容提示:.快速分类(PPT)
文档格式:PPT|
浏览次数:1|
上传日期: 13:08:52|
文档星级:&#xe60b;&#xe60b;&#xe60b;&#xe60b;&#xe60b;
全文阅读已结束,如果下载本文需要使用
&#xe71b; 1500 积分
&#xe602;下载此文档
该用户还上传了这些文档
.快速分类(PPT)
关注微信公众号

我要回帖

更多关于 如何把PPT放入word 的文章

 

随机推荐