日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

一摞烙饼的排序问题--读书笔记(2)

發布時間:2023/12/8 编程问答 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 一摞烙饼的排序问题--读书笔记(2) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

問題描述:一摞大小不一的餅,由于一只手托著盤子,只好用另一只手,一次抓住最上面的幾塊餅,把它們上下顛倒個,反復幾次使烙餅安裝由小到大排好序。假設有n塊大小不一的餅,最少需要翻幾次使烙餅排好序。


分析與解法:

首先,經過兩次翻轉可以把最大的烙餅翻轉到最下面,因此,最多需要把上面的n-1個烙餅依次翻轉兩次。那么至多需2(n-1)次翻轉就可以把所有烙餅排好序。當然還有更高效的方法,考慮每次翻轉的時候,把兩個本來應該相鄰的烙餅盡可能的換到一起,當所有的烙餅都換到一起時,實際上已經完成了排序。因此,可以通過遞歸來進行求解。

遞歸的第一個退出條件是已經排好序,還有就是翻轉次數多于2(n-1)就退出。在翻轉的過程中,可以看看當前的烙餅數組的排序情況如何,然后利用這些信息幫助減少翻轉次數。

每個狀態還應該有翻轉的最小次數,這個下限值可以這樣確定:從最后一個位置開始,往前找到第一個與最終結果位置不同的烙餅編號(也就是說排除最后幾個已經就位的烙餅),從該位置到第一個位置,計算相鄰的烙餅的編號不連續的次數,再加上1


代碼如下:


#include<stdio.h> #include<assert.h>class CPrefixSorting { public:CPrefixSorting(){m_nCakeCnt = 0;m_nMaxSwap = 0;}//計算烙餅翻轉信息//@param//pCakeArray 存儲烙餅索引數組//nCakeCnt 烙餅個數void Run(int* pCakeArray,int nCakeCnt){Init(pCakeArray,nCakeCnt);m_nSearch = 0;Search(0);}//輸出烙餅具體翻轉次數void Output(){for(int i = 0; i < m_nMaxSwap; i++){printf("%d", m_SwapArray[i]);}printf("\n |Search Times| : %d\n", m_nSearch);printf("Total Swap times = %d\n", m_nMaxSwap);}private:////初始化數組信息//@param//pCakeArray 存儲烙餅索引數組//nCakeCnt 烙餅個數//void Init(int* pCakeArray,int nCakeCnt){assert(pCakeArray != NULL);assert(nCakeCnt > 0);m_nCakeCnt = nCakeCnt;//初始化烙餅數組m_CakeArray = new int[m_nCakeCnt];assert(m_CakeArray != NULL);for(int i = 0; i < m_nCakeCnt; i++){m_CakeArray[i] = pCakeArray[i];}//設置最多交換次數信息m_nMaxSwap = UpBound(m_nCakeCnt);//初始化交換結果數組m_SwapArray = new int[m_nMaxSwap];assert(m_SwapArray != NULL);//初始化中間交換結果信息m_ReverseCakeArray = new int[m_nCakeCnt];for(int i = 0; i < m_nCakeCnt; i++){m_ReverseCakeArray[i] = m_CakeArray[i];}m_ReverseCakeArraySwap = new int[m_nMaxSwap];}////尋找當前翻轉的上界////int UpBound(int nCakeCnt){return (nCakeCnt) * 2;}////尋找當前翻轉的下界////int Lower_Bound(int* pCakeArray,int nCakeCnt){int t, ret = 0;//根據當前數組的排序信息情況來判斷最少需要交換多少次for(int i = 1; i < nCakeCnt; i++){//判斷位置相鄰的兩個烙餅,是否為尺寸排序上相鄰的t = pCakeArray[i] - pCakeArray[i-1];if((t == 1) || (t == -1)){}else{ret++;}}return ret;}// 排序的主函數void Search(int step){int i, nEstimate;m_nSearch++;//估算這次搜索所需要的最小交換次數nEstimate = Lower_Bound(m_ReverseCakeArray,m_nCakeCnt);if(step + nEstimate >= m_nMaxSwap)return;//如果已經排好序,即翻轉完成,輸出結果if(IsSorted(m_ReverseCakeArray,m_nCakeCnt)){if(step < m_nMaxSwap){m_nMaxSwap = step;for(i = 0; i < m_nMaxSwap; i++)m_SwapArray[i] = m_ReverseCakeArraySwap[i];}return;}//遞歸進行翻轉for(int i = 1; i < m_nCakeCnt; i++){Revert(0, i);m_ReverseCakeArraySwap[step] = i;Search(step + 1);Revert(0, i);}}////true: 已經排好序//false: 未排序//bool IsSorted(int* pCakeArray,int nCakeCnt){for(int i = 1; i < nCakeCnt; i++){if(pCakeArray[i-1] > pCakeArray[i]){return false;}}return true;}////翻轉烙餅信息//void Revert(int nBegin,int nEnd){assert(nEnd > nBegin);int i, j, t;//翻轉烙餅信息for(i = nBegin, j = nEnd; i < j; i++, j--){t = m_ReverseCakeArray[i];m_ReverseCakeArray[i] = m_ReverseCakeArray[j];m_ReverseCakeArray[j] = t;}} private:int* m_CakeArray; //烙餅信息數組int m_nCakeCnt; //烙餅個數int m_nMaxSwap; //最多交換次數,根據前面的推斷,這里最多為m_nCakeCnt*2int* m_SwapArray; //交換結果數組int* m_ReverseCakeArray; //當前翻轉烙餅信息數組int* m_ReverseCakeArraySwap; //當前翻轉烙餅交換結果數組int m_nSearch; //當前搜索次數信息 };int main() {CPrefixSorting cpfs;int cakeArray[] = {3,2,1,6,5,4};cpfs.Run(cakeArray,6);cpfs.Output(); }

總結

以上是生活随笔為你收集整理的一摞烙饼的排序问题--读书笔记(2)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 亚洲精品乱码久久久久久 | 色婷婷av一区二区三区大白胸 | 亚洲国产精品久久 | 亚洲一区二区图片 | 久久免费看少妇 | 葵司av电影 | 精品一区二区电影 | 91狠狠爱| 美女被到爽高潮视频 | 日韩一区二区中文字幕 | 黄色网址www| 极品三级| 日韩在线中文字幕 | 超碰人人人 | 欧美精品色婷婷五月综合 | 国产黄a三级三级看三级 | 都市激情第一页 | 欧美成人午夜 | jizz黑人 | 欧美一区二区在线播放 | 婷婷狠狠干| 午夜私人福利 | 97人妻精品一区二区三区免 | 风韵多水的老熟妇 | 蜜乳av一区二区 | 国产做爰全免费的视频软件 | a级片视频网站 | 天天摸天天舔 | 欧美日韩黄| 久久久久久www | 国产精品久久久久一区二区 | 91精品91| 国产精品视频一区二区三区, | 瑟瑟网站在线观看 | aaa日韩| 国产国语亲子伦亲子 | 精产国品一二三产区m553麻豆 | 中文字幕在线播出 | 欧美剧场| 色男人av| 午夜精品久久久内射近拍高清 | 中文精品久久 | 久久久青 | 国产freexxxx性播放麻豆 | 国产日韩欧美中文字幕 | 蜜桃传媒一区二区亚洲av | 日操夜操天天操 | 在线电影一区 | 亚洲天堂网络 | 国产精品一二三 | 不卡视频免费在线观看 | 激情久久免费视频 | 国产欧美一区二区三区免费看 | 成人免费网址 | 激情久久av一区av二区av三区 | 国产毛片毛片毛片毛片 | 在线播放黄色网址 | 成人av高清在线观看 | 国产中文字幕免费 | av在线短片| 成人日韩 | 在线免费观看小视频 | 欧美狠狠操| 男人吃奶视频 | 精品人妻久久久久久888不卡 | 高清在线一区二区 | 成人一区二区三区四区 | 精品在线观看免费 | 国产黄色片免费 | 欧洲色区 | 国产一区伦理 | 国产sm主人调教女m视频 | 在线观看亚洲大片短视频 | 不卡黄色| 久久爱影视| 欧美激情视频一区二区三区 | 亚洲精品中文字幕乱码三区 | 在线免费看91 | 暴力调教一区二区三区 | 国产激情毛片 | 丝袜在线视频 | 日韩成人一区二区视频 | 中日黄色片 | 女人十八毛片嫩草av | 久久免费看少妇高潮 | 国产偷亚洲偷欧美偷精品 | 欧美成人综合在线 | 国产视频手机在线观看 | 黄网站免费入口 | 成人福利在线免费观看 | 国产成人资源 | 视频在线免费观看 | 国产区视频在线 | 日日夜夜综合 | 神马久久春色 | 国产精品久草 | 999精品视频在线观看 | 狠狠人妻久久久久久综合麻豆 | 日韩综合中文字幕 |