区组大小为3的最优循环填充的任务书_第1页
区组大小为3的最优循环填充的任务书_第2页
区组大小为3的最优循环填充的任务书_第3页
区组大小为3的最优循环填充的任务书_第4页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

区组大小为3的最优循环填充的任务书任务书:项目:区组大小为3的最优循环填充目标:设计一个算法,将给定的序列分割成大小为3的子序列,并使得在填充时,所有子序列都被循环遍历,并使得填充所需要的空位最少。输入:一个长度为N(N为3的倍数)的整数序列,其中元素均为非负整数。输出:一个长度为N的整数序列,其中空位被用0填充,使得所有子序列均被循环遍历,并使得所有的填充数最小。步骤:1.将输入序列分割成大小为3的子序列。2.对于每个子序列,计算它在循环填充时需要填充的空位数。3.找到填充数最小的子序列,将其作为起始点。4.从起始点开始,按顺序遍历所有子序列,并使用已填充的值填充空位。5.如果遇到了填充数相等的子序列,优先选择距离当前位置最短的子序列作为下一个填充点。6.循环填充直到所有子序列均被填充完毕。7.返回最终的填充序列。实现:1.对于每个子序列,可以计算其需要填充的空位数,例如:-对于子序列[1,2,3],需要填充0个空位。-对于子序列[1,0,3],需要填充1个空位。-对于子序列[4,0,0],需要填充2个空位。2.可以使用一个数组store来记录每个子序列的位置和需要填充的空位数。例如:store=[[0,0],[1,1],[2,2],[3,0],[4,1],[5,2],...]其中store[i][0]表示第i个子序列的起始位置,store[i][1]表示该子序列需要填充的空位数。3.找出需要填充最少的子序列作为起始点,可以对store数组进行排序,按照store[i][1]从小到大排序。然后从第一个可行的子序列开始填充。4.从起始点开始,使用已填充的值填充空位,例如填充子序列[1,0,3]中的空位,可以从子序列[4,5,6]中取出两个非零的数字填充。5.如果遇到了多个需要填充的子序列,可以计算它们到当前位置的距离,优先选择距离最短的子序列。6.在循环填充过程中,可以使用一个数组result来记录每个位置的填充值,最后将其返回。7.最终输出result序列作为循环填充的结果。代码示例:```defcyclic_fill(seq):#将序列分割成大小为3的子序列subseqs=[seq[i:i+3]foriinrange(0,len(seq),3)]#计算每个子序列需要填充的空位数store=[[i,subseq.count(0)]fori,subseqinenumerate(subseqs)]#按照需要填充的空位数从小到大排序store.sort(key=lambdax:x[1])#从第一个可行的子序列开始填充start=next((ifori,sinstoreifs==0),0)#初始化结果序列result=[0]*len(seq)#从起始点开始填充i=startwhileTrue:subseq=subseqs[i]#找到该子序列需要填充的位置empty_indices=[jforj,xinenumerate(subseq)ifx==0]#找到可以填充该子序列的其他子序列feasible_subs=[jforj,sinstoreifs<=len(empty_indices)]feasible_subs.remove(i)#排除自身ifnotfeasible_subs:break#所有子序列均已填充完毕#计算可以填充该子序列的其他子序列到当前位置的距离distances=[(j,len(subseqs)-i+j)ifj>ielse(j,i-j)forjinfeasible_subs]#选择距离最短的子序列作为下一个填充点next_sub=min(distances,key=lambdax:x[1])[0]#从该子序列中取出数字填充空位values=[xforxinsubseqs[next_sub]ifx!=0]values=values[:len(empty_indices)]#取够数量#填充空位forj,xinzip(empty_indices,values):result[i*3+j]=xsubseq[j]=x#更新需要填充的空位数store[i][1]=subseq.count(0)#更新当前位置i=next_sub#填充最后一个子序列subseq=subseqs[start]empty_indices=[jforj,xinenumerate(subseq)ifx==0]values=[xforxinsubseqs[start]ifx!=0]values=values[:len(empty

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论