厦门理工递归与分治_算法设计与分析(第二章).ppt

厦门理工递归与分治_算法设计与分析(第二章).ppt

厦门理工递归与分治_算法设计与分析(第二章)

* 计算机算法设计与分析 * Coverjoin的实现 ⑴计算结合部方格位置: 0 3 1 2 tr tc s s jr[0]=tr+s–1; jc[0]=tc+s–1; jr[1]= tr+s–1; jc[1]=tc+s; jr[2]=tr+s; jc[2]=tc+s; jr[3] =tr+s; jc[3]=tc+s–1; jr[0]=tr+s–1; jc[0]=tc+s–1 jr[1]= tr+s–1; jc[1]=tc+s jr[2]=tr+s; jc[2]=tc+s jr[3] =tr+s; jc[3]=tc+s–1 * 计算机算法设计与分析 * Coverjoin的实现 ⑴计算结合部方格位置: ⑵判断特殊方格(dr, dc)落在那个子棋盘: 我们可以依据结合部方格的行号和列号来判断特殊方格落在哪个子棋盘中。 0 1 3 2 tr tc s s jr[0]=tr+s–1; jc[0]=tc+s–1; jr[1]= tr+s; jc[1]=tc+s–1; jr[2]=tr+s; jc[2]=tc+s; jr[3] =tr+s–1; jc[3]=tc+s; * 计算机算法设计与分析 * Coverjoin的实现 ⑴计算结合部方格位置: ⑵判断特殊方格(dr, dc)落在那个子棋盘: ⑶覆盖结合部并确定各子棋盘特殊方格位置。 if (dr=jr[0] dc=jc[0]) r=0 else if (dr =jr[1] dc=jc[1]) r=1 else if (dr =jr[2] dc=jc[2]) r=2 else if (dr =jr[3] dc=jc[3]) r=3; jr[0]=tr+s–1; jc[0]=tc+s–1; jr[1]= tr+s; jc[1]=tc+s–1; jr[2]=tr+s; jc[2]=tc+s; jr[3] =tr+s–1; jc[3]=tc+s; 若特殊方格的行标dr=jr[0]且列标dc=jc[0],则特殊方格位于在0号子棋盘中。其余类似。r指明了这点。 * 计算机算法设计与分析 * Coverjoin的实现 ⑶覆盖结合部并确定各子棋盘特殊方格位置: if (r=0) {sr[0]=dr; sc[0]=dc; Board[jr[k]][jc[k]]=tile; sr[k]=jr[k]; sc[k]= jc[k]]; k=1, 2, 3} else if (r=1) {sr[1]=dr; sc[1]=dc; Board[jr[k]][jc[k]]=tile; sr[k]=jr[k]; sc[k]= jc[k]]; k=0, 2, 3} else if (r=2) {sr[2]=dr; sc[2]=dc; Board[jr[k]][jc[k]]=tile; sr[k]=jr[k]; sc[k]= jc[k]]; k=0, 1, 3} else if (r=3) {sr[1]=dr; sc[1]=dc; Board[jr[k]][jc[k]]=tile; sr[k]=jr[k]; sc[k]= jc[k]]; k=0, 1, 2}; 注意:此处由于幻灯片篇幅的原因,简写成这样,实际表示对于k = 1, 2, 3,执行{Board[jr[k]][jc[k]] = tile; sr[k] = jr[k]; sc[k] = jc[k]];}, 即覆盖相应格子,并将其作为对应子棋盘的特殊方格。下面亦如此。 * 计算机算法设计与分析 * Coverjoin的实现 ⑶覆盖结合部并确定各子棋盘特殊方格位置也可以用如下的语句来实现: sr[r]=dr; sc[r]=dc; for (k = 0, k 4, i++) if (kr){Board[jr[k]][jc[k]]=tile; sr[k]=jr[k]; sc[k]= jc[k]]}; 特殊子棋盘的特殊方格还是原来的。 对每个非特殊子棋盘,则覆盖其结合部的方格并将其作为该子棋盘的特殊方格。 由于这个操作可以用此简单表示,所以才在上一张幻灯片上采用了简记的方式。 * 计算机算法设计与分析 * 棋盘覆盖算法的主程序 main(int n, int dr, int dc) { int s = 2n int Board[s][s] = 0; int tile = 0; CoverBoard(n, 0, 0, dr, dc); } 请同学们自己编程来具体实现这个程序。 * 计算机算法设计与分析 * 棋盘覆盖算法的正确性 要证明一个算法的正确性,需要证明两点: (1)算法的部分正确性; (2)算法的终止性。 下面我们用归纳法证明棋盘覆盖算法的部分正确性: * 计算机算法设计与分析 * 棋盘覆盖算法的部分正确性 归纳基础:k = 0时

您可能关注的文档

文档评论(0)

1亿VIP精品文档

相关文档