阅读以下说明和流程图,填补流程图中的空缺(1)~(5)。 【说明】 某单位动态收集的数据中常包含重复的数据,所以需要进行处理,使得重复的数据仅出现一次。下面流程图的功能是:在n(n≥1)个数据D1、D2、…、Dn中,选出其中所有不重复的k个数

admin2009-01-20  39

问题 阅读以下说明和流程图,填补流程图中的空缺(1)~(5)。
    【说明】
   某单位动态收集的数据中常包含重复的数据,所以需要进行处理,使得重复的数据仅出现一次。下面流程图的功能是:在n(n≥1)个数据D1、D2、…、Dn中,选出其中所有不重复的k个数据,置于原来前k个数据的位置上。
   该流程图的算法如下:第1个数据必然被选出,然后从第2个数据开始,逐个考查其余的数据。假设D1、D2、…、Dm(m≥1)是已经选出的、不重复的数据,则对于数据Di(m<i≤n),将其依次与Dm\Dm-1、…、D1进行比较,若没有发现与之相同者,则Di被选出并置于Dm+1的位置上;否则对Di不做处理。
   例如,如下10个数据:
   5,2,2,7,4,4,7,  1,9,  1    (n=10)
   经过上述算法处理后的结果为:
   5,2,7,4,  1,9    (k=m=6)
   【流程图】
   
    注:循环开始的说明按照“循环变量名:循环初值,循环终值,增量”格式描述。

选项

答案(1)1(2)2(3)m(4)D[m+1](5)m←m+1,或其等价表示

解析 本题涉及信息处理工作中常用的算法。动态收集得到的一批记录中,常包含有某些重复的记录。在做进一步处理前,应当删除这些重复记录。所谓重复记录,通常是指那些具有相同关键词的记录。注意,从经验上看,重复记录往往出现在比较临近的记录中。为了删除重复记录,可以采用本题中的算法思想。
   对于题中给出的例子,该算法执行的动态情况如下表:
   
  具体做法如下:
  逐个考查D1,D2,…,D10的内容。
  首先,保留D1中的内容5,将其作为已经选出的不重复数据,此时m应是1。
  考查D2时,将其与D1进行比较,发现不同,所以保留,形成不重复数据D1、D2,此时m=2。
  考查D3时,分别将其与D2、D1进行比较,发现有重复,不做处理。
  考查D4时,分别将其与D2、D1进行比较,发现不同,将D4的内容放到D3中,形成不重复数据D1、D2、D3,此时m=3。
  考查D5时,分别将其与D3~D1进行比较,发现不同,将D5的内容放到D4中,形成不重复数据D1~D4,此时m=4。
  考查D6时,分别将其与D4~D1进行比较,发现有重复,不做处理。
  考查D7时,分别将其与D4~D1进行比较,发现有重复,不做处理:
  考查D8时,分别将其与D4~D1进行比较,发现不同,将D8的内容放到D5中,形成不重复数据D1~D5,此时m=5。
  考查D9时,分别将其与D5~D1进行比较,发现不同,将D9的内容放到D6中,形成不重复数据D1~D6,此时m=6。
  考查D10时,分别将其与D6~D1进行比较,发现有重复,不做处理。
  考查结束,形成不重复数据D1~D6,此时m=6。
  对于一般的情况,就要逐个考查D1,D2,…,Dn的内容。
  首先保留D1中的内容,作为已选出的不重复数据,此时设置m=1。
  对于已经选出的不重复数据D1,D2,…,Dm,考查Di(m<i≤n),将其与Dm,Dm-1,…, D1逐一比较。若发现有重复,则不做处理;发现完全不同时,应将Di的内容放入Dm+1,然后,将m增加1。
  注意,在考查Di时,由于重复数据离它更近些,将其与Dm,Dm-1,…,D1逐一比较可以节省时间;若与D1,D2,…,Dm逐个比较,发现重复的时间会比较长一些。对于程序员来说,能在细节处适当考虑程序的效率也是好的。
  因此,在本题的流程图中,(1)处应填1,表示初始时设置m=1。
  对于/2个数据(n>1)而言,接着应逐个考查D[2],…,D[n]的内容,因此循环应对i=2,n,1进行,所以(2)处应填2。
  考查D时,需要将其分别与D[m],D[m-1],…,D[1]逐一比较,所以循环应对,j=m, 1,-1进行,从而(3)处应填m。
  若在比较过程中发现重复,则直接返回主程序(不做处理);若始终没有发现重复数据,则应将D存入D[m+1],所以(4)处应填D[m+1]。然后,应将重复数据数目加 1,所以(5)处应填m←m+1(或m+1→m)。
转载请注明原文地址:https://jikaoti.com/ti/CZW7FFFM
0

最新回复(0)