迴圈移動問題思考!

2021-05-23 07:21:19 字數 614 閱讀 9706

考慮乙個問題:將乙個具有n個元素的陣列向左迴圈移動i個位置。有許多應用程式會呼叫這個問題的演算法, 例如在文字編輯器中移動行的操作,磁碟整理時交換兩個不同大小的相鄰記憶體塊等。所以,這個問題的演算法要求有較高的時間和空間效能。

可以通過下面的方法解決這個問題:先將陣列中的前i個元素存放在乙個臨時陣列中,再將餘下的n-i個元素左移i個位置, 最後將前i個元素從臨時陣列複製回原陣列中後面的位置。但是這個演算法使用了i個額外的儲存單元,使得空間效能降低。

還有乙個方法可以解決這個問題:先設計乙個函式將陣列向左迴圈移動乙個位置,然後再呼叫該演算法i次, 顯然,這個演算法的時間效能不好。

要在有限的資源中解決這個問題,似乎很困難。現在我們換乙個角度看這個問題: 將這個問題看作是把陣列ab轉換成陣列ba(a代表陣列的前i個元素,b代表陣列中餘下的n-i個元素), 先將a逆置得到arb,再將b逆置得到arbr,最後將整個arbr逆置得到(arbr)r=ba。設reverse函式執行將陣列元素逆置的操作, 對abcdefgh向左迴圈移動3個位置的過程如下:

reverse(0, i-1); //得到cbadefgh

reverse(i, n-1); //得到cbahgfed

reverse(0, n-1); //得到defghabc

陣列移動問題

includevoid shiftleft int pinout,int n pinout tmp void shiftright int pinout,int n pinout tmp void shiftn int pinout,int n,int shiftn else int main in...

控制項移動問題

控制項移動問題 vcl元件開發及應用 我想將文字逐漸顯示,所以在文字上加蓋了乙個shape,然後用timer使得shape.top shape.top 1 但是結果是可以使文字逐漸顯示,但是閃屏嚴重,請高手幫解決一下,謝謝 直接在canvas裡畫 要麼就用雙緩衝 也可以通過定時器來觸發作個例子給你!...

字元移動問題

比如 我們要把字母a,按照字母表向後移動3位 include intmain void 執行結果 常見的習題 簡單的密碼問題 對於明文中的每個字元,將它用它字母表中後 5 位對應的字元來代替,這樣就得到了密文。比如字元 a 用 f 來代替。這種問題其實就是字母向後 或向前 移動的問題。這裡的偏移量是...