首页 线性表应用2014

线性表应用2014

举报
开通vip

线性表应用2014线性表?本期要点线性表的设计技巧用数组模拟动态链表哈希一、最佳游览路线某游览区街道成网络状,东西向的街道是旅游街,只能由西向东走,并有一定的分值,南北向的街道是林荫道,既可从南向北走,也可从北向南走,没有分值,要求从某一路口开始游览,并在另一路口结束游览,使所走过的街道分值总和最大。其中1≤旅游街道数目≤100,1≤林荫道数目≤20001,-100≤分值≤100。不记录无用信息规模:100*20001=2000100?只能由西向东走,每一纵行至多只能通过一次,同一纵行可以通过林荫道自由到达,只需走分值最大的街道,所...

线性表应用2014
线性表?本期要点线性表的设计技巧用数组模拟动态链表哈希一、最佳游览路线某游览区街道成网络状,东西向的街道是旅游街,只能由西向东走,并有一定的分值,南北向的街道是林荫道,既可从南向北走,也可从北向南走,没有分值,要求从某一路口开始游览,并在另一路口结束游览,使所走过的街道分值总和最大。其中1≤旅游街道数目≤100,1≤林荫道数目≤20001,-100≤分值≤100。不记录无用信息规模:100*20001=2000100?只能由西向东走,每一纵行至多只能通过一次,同一纵行可以通过林荫道自由到达,只需走分值最大的街道,所用空间为20001个shortint。定义Pi为以i结尾的最优路径分值的总和,Ai表示第I纵行的最大分值p0=0求max(pi)二、圆桌问题圆桌上围坐着2n个人,其中n个是好人,n个是坏人。如果从第一个人开始数数,数到第m人,则立即处死该人。然后从被处死的人后重新数数,数到第m人处死……如何预先安排2n人位置,使得在处死n人之后,剩下的都是好人。静态数组fori:=1to2*ndob[i]:=0;fori:=1to2*ndoa[i]:=i;k:=1;fori:=1tondobegink:=(k+m-1)mod(2*n-i+1);ifk=0thenk:=2*n-i+1;b[a[k]]:=1;forj:=kto2*n-idoa[j]:=a[j+1];end;查找:直接计算删除:移动O(n2)用数组模拟链表……fori:=1to2*ndobegina[i].info:=i;a[i].next:=imod(2*n)+1;end;k:=1;fori:=1tondobeginforj:=1tom-2dok:=a[k].next;p:=a[k].next;b[a[p].info]:=1;a[k].next:=a[p].next;k:=a[k].next;end;typenode=recordinfo,next:integer;end;vara:array[1..maxn]ofnode;……查找:顺序删除:不产生移动O(nm)改进——直接定位法动态数组顺序Amount:表示此段中现有元素的个数Group=4将原来的数据分为4段存储解释Group表示将原来的数据分为几段存储每一段的开头记下amount值表示此段中现有元素的个数随程序运行,amount不断减小充分利用“可直接使用”的信息充分利用“可直接使用”的信息group:=2*ndivm;fori:=1togroupdoamount[i]:=m;if2*nmodm>0thenbegininc(group);amount[group]:=2*nmodm;end;k:=0;j:=1;fori:=1tondobeginp:=m;whilek+p>amount[j]dobeginp:=p+k-amount[j];j:=jmodgroup+1;k:=0;end;b[a[(j-1)*m+p+k]]:=1;forl:=(j-1)*m+p+kto(j-1)*m+amount[j]-1doa[l]:=a[l]+1;amount[j]:=amount[j]-1;k:=k+p-1;end;查找:快速删除:段内移动<0thenq[team[r1]].next:=relsef:=r;r1:=belong[x];enelsebegink:=team[belong[x]];q[r].next:=q[k].next;q[k].next:=r;team[belong[x]]:=r;end;出队writeln(q[f].num);if(q[f].next=0)or(belong[q[f].num]<>belong[q[q[f].next].num])thenteam[belong[q[f].num]]:=0;f:=q[f].next;五、10-20-3052张不分花色。J、Q、K为10,A为1,其余为点数。从左到右7组。按序发牌(组别、牌堆上下)每组10-20-30:前两张和最后一张第一张和最后二张最后三张抽出并放入牌堆底部全部抽走即“消失”7组均消失,获胜无牌发,失败平局输入/出样例265101041010104510451097617695310104109211011010103109810871286733824321081068958105354699176351010810910107261010410131011102210410771010543571082391084517672691023103449101110510101810781061010109621010Win:66Loss:82Draw:73状态查找及判重先考虑能定胜负的情况模拟链表?字符串typenode=recordinfo:longint;next:longint;front:longint;end;Varq:array[0..53]ofnode;team:array[1..8,1..3]oflongint;count,total:longint;fori:=1to52dobeginread(q[i].info);q[i].next:=i+1;q[i].front:=i-1;end;q[7].next:=1;q[1].front:=7;fori:=1to7dobeginteam[i,1]:=1;team[i,2]:=i;team[i,3]:=iend;team[8,3]:=52;team[8,2]:=8;team[8,1]:=52-7;发牌total:=total+1;p1:=team[count+1,2];p2:=team[i,3];p3:=q[p2].next;Team[i]Team[i+1]Team[count+1]nextfrontteam[count+1,2]:=q[p1].next;[p1].front:=p2;q[p1].next:=p3;q[p3].front:=p1;q[p2].next:=p1;team[i,3]:=p1;inc(team[i,1]);dec(team[count+1,1]);输抽牌p1:=q[p].front;p2:=q[p].next;p3:=team[count+1,3];120Team[i]Team[i+1]Team[count+1]Team[i-1]q[p1].next:=p2;q[p2].front:=p1;q[p3].next:=p;q[p].front:=p3;inc(team[count+1,1]);team[count+1,3]:=p;dec(team[i,1]);ifk=1thenteam[i,2]:=p2elseifk=0thenteam[i,3]:=p1;判重决策对于频繁使用的查找,我们希望平均查找长度接近于0预先知道所查关键字在表中的位置记录在表中位置和其关键字之间存在一种确定的关系哈希(hash)哈希表:应用哈希函数,由记录的关键字确定记录在表中的地址,并将记录放入此地址,这样构成的表叫哈希表。哈希查找:又叫散列查找,利用哈希函数进行查找。哈希表的数组是定长的,如果太大,则浪费,如果太小,体现不出效率。合适的数组大小是哈希表的性能的关键。哈希表的尺寸最好是一个质数。构造哈希函数的几种方法对数字的关键字可有下列构造方法若是非数字关键字,则需先对其进行数字化处理1.直接定址法3.平方取中法5.除留余数法4.折叠法6.随机数法2.数字分析法1.直接定址法构造:取关键字或关键字的某个线性函数作哈希函数    H(key)=key或者  H(key)=a.key+b特点直接定址法所得地址集合与关键字集合大小相等,不会发生冲突2.除留余数法构造:关键字被某个不大于hash表长(m)的数p求余做哈希地址,即H(key)=key%pp通常取小于hash表长的最大素数特点简单、常用p的选取很重要:p选的不好,容易产生同义词对P要加一定的限制3.随机数法构造:取关键字的随机函数值作哈希地址   H(key)=random(key)适于关键字长度不等的情况构造哈希函数的方法取决于关键字集合(关键字的范围、形态),总的原则是使产生冲突的可能性降到尽可能地小。hash1,hash2,……回到10-20-307组状态合一谋取高效率(其实可看成8组)状态?通过’ABCDEFGH‘分割26510104101010451045109761769531010410921101101010310981087128673382A210B610C54D105E1010F44G105H109761769531010410921101101010310981087128673382哈希函数解决冲突——开放地址法为产生冲突的关键字寻找一个新的地址Hi(key),求得一个地址序列H0,H1,H2,…,Hs1≤s≤m-1其中:H0=H(key)H1=(H(key)+d1)%mH2=(H(key)+d2)%m……Hi=(H(key)+di)%mi=1,2,…,s增量di线性探测:di=1,2,3,……m-1二次探测:di=1²,-1²,2²,-2²,3²,…,±k²Noip初赛题广度优先搜索时,需要用到的数据结构是()A.链表          B.队列             C.栈      D.散列表 散列表的地址区间为0-10,散列函数为H(K)=Kmod11。采用开地址法的线性探查法处理冲突,并将关键字序列26,25,72,38,8,18,59存储到散列表中,这些元素存入散列表的顺序并不确定。假定之前散列表为空,则元素59存放在散列表中的可能地址有:A)5B)7C)9D)10Noip初赛题设有一组关键字{19,1,23,14,55,20,84,27,68,11,10,77},采用哈希函数 h(key)=key%13,并采用开放地址的二次再散列方法解决冲突,在 0-18的散列地空间中对该关键字序列构造哈希表,则27的地址为(    )。A. 0   B. 1  C. 2   D. 3 已知一个线性表(38,25,74,63,52,48),采用的散列函数为H(Key)=Key mod 7,将元素散列到表长为7的哈希表中存储,若利用拉链法解决冲突,则在该散列表上进行等概率成功查找的平均查找长度为(    )。 A. 1.0        B. 7/6         C. 4/3         D. 3/2         E. 5/4讨论:百度面 试题 中考模拟试题doc幼小衔接 数学试题 下载云南高中历年会考数学试题下载N4真题下载党史题库下载 搜索引擎会通过日志文件把用户每次检索使用的所有检索串都记录下来,每个查询串的长度为1-255字节。假设目前有一千万个记录(这些查询串的重复度比较高,虽然总数是1千万,但如果除去重复后,不超过3百万个。一个查询串的重复度越高,说明查询它的用户越多,也就是越热门。)请你统计最热门的10个查询串,要求使用的内存不能超过1G。
本文档为【线性表应用2014】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
个人认证用户
旋律
几年的财务工作经验,现认财务主管一职!精通各种财务管理软件
格式:ppt
大小:786KB
软件:PowerPoint
页数:0
分类:
上传时间:2018-06-20
浏览量:3