例析位运算在算法优化中的应用

例析位运算在算法优化中的应用

ID:24647197

大小:77.50 KB

页数:4页

时间:2018-11-15

例析位运算在算法优化中的应用_第1页
例析位运算在算法优化中的应用_第2页
例析位运算在算法优化中的应用_第3页
例析位运算在算法优化中的应用_第4页
资源描述:

《例析位运算在算法优化中的应用》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、例析位运算在算法优化中的应用钟川麟福建省龙岩市武平一中364300在冯诺依曼计算机中,所有的数据和指令都是以二进制的形式存储、运算的。直接对内存中的二进制位进行操作,就称为“位运算”,位运算直接对内存数据进行操作,不需要转成十进制,所以处理速度非常快。下面通过一道例题,分析位运算的应用。常见的逻辑运算有与、或、非、异或等等,pascal语言位运算符号有and、or、not、xor,相应的c语言位运算符号是&、卜~、A等等,实际编程中还常常关注shl和shr运算。这里需要先明确一下编译器对这些运算符号的处理原则,如果运

2、算符两端是逻辑型变量,执行的是逻辑运算,如果运算符两端是整型变量,执行的就是位运算。例题:平板涂色paintCE数码公司幵发了一种名为自动涂色机(APM)的产品。它能用预定的颜色给一块由不同尺寸且互不覆盖的矩形构成的平板涂色。为了涂色,APM需要使用一组刷子,每个刷子涂一种不同的颜色。为了避免颜料渗漏使颜色混合,一个矩形只能在所有紧靠它上方的矩形涂色后,才能涂色。例如图中矩形F必须在C和D涂色后才能涂色。注意,每一个矩形必须立刻涂满,不能只涂一部分。写一个程序求一个使APM拿起刷子次数最少的涂色方案。注意,如果一把刷子被拿起

3、超过一次,则每一次都必须记入总数中。【输入文件】第一行为矩形的个数N。下面有N行描述了N个矩形。每个矩形有5个整数描述,左上角的y坐标和x坐标,右下角的y坐标和x坐标,以及预定颜色。颜色号为1到20的整数。平板的左上角坐标总是(0,0)。坐标的范围是0.99。N小于16。【输出文件】只有一个数,即拿起刷子的最少次数。【输入输出样例】paint.in700221021622042112442143614064134662paint.out3解题思路:平板划分成n个区域,请用最少的换刷子次数把平板涂成预定的颜色。涂色吋要注意:当

4、某一个区域“正上方”的所有区域都涂完之后才可以涂色。问题的实质,就是确定n个区域的先后涂色顺序。因为不同的顺序需要换刷子的次数是不同的,所以如何选择涂色顺序就是解决问题的关键了。我们不妨按下面方法来涂色:1.平板第一行的区域是可以直接涂色的,枚举从第一行的某个区域i出发;2.接着寻找一个没冇涂色(且可以涂色)的区域k继续,如果k区域的颜色要求与i相冋则不换刷子,反之如果k区域的颜色要求与i不相同则计算换刷子次数+1;3.递归执行第②步,直到所有区域都涂完色之后得到一种可行解;4.冋溯,重复②、③步得到另一种可行解;5.对比所

5、冇可行解,得出问题的最优解。因此,采用浓度优先搜索,或冋溯算法都能实现。实现算法的瓶颈:在搜索过程中,需要反复地判断某一个区域奋没奋涂色?或者可不可以涂色?这两个问题是冋溯算法执行过程额外开销的,我们要尽量减少这些开销,克服实现算法的瓶颈。为了方便状态的表示和扩展,我们需要先对平板进行“数字化”处理,对于n个区域的平板不妨采用n位的二进制数表示:没冇涂色的区域用数字为0表示,涂色之后就修改为1。那么平板的初始状态就是n个0,最终状态就是n个1。而iL平板的任何一种状态都对应着0〜2n-l之间的一个整数。平板经过“数字化”之后

6、,位运算就派上用场了,比如当前状态为state,判断该状态下第i个区域是否涂色只需要判断stateand(lshl是否等于0,而在此状态下将某区域i涂色也只需执行stateor(1shl(i-l))。利用这两条简单而快捷的位运算语句去实现上面分析的搜索算法,效率是非常明显的,是一种事半功倍的举措。【数据结构】map:array[0..16,1..4]ofinteger;{各区域的坐标}col:array[0..16]ofinteger;{平板的涂色要求}basd:array[0..16]ofinteger;{存储2的n次方}

7、g:array[0..16,0..16]ofboolean;{g[i,j]=true表示区域i必须在区域j之前涂色}f:array[0..16z0..65555]ofinteger;{f[i,j]:平板状态为j,涂完第i个区域需要的最少换刷子次数}参考算法:proceduresearch(k,state:longint);{当平板状态为state时,搜索第k个区域涂什么颜色}vari,newstate,temp:longint;beginiff[k,state]>Othenexit;{iM归出口}fori:=0ton-

8、1doif(i<>k)and(g[i,k])and(stateandbasd[i]=0)then{位运算,检査k区域能不能涂色}beginf[k,state]:=99;exit;end;newstate:=stateorbasd[k];H:、Y运算,将区域k涂色}ifnewst

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。