介紹
有一個序列 abcdefgh
, 假如想要讓 abc
和 defgh
互換位置, 可以如何做呢?
這裏介紹一種比較腦洞的解法.
-
先翻轉子序列
abc
->cba
;
defgh
->hgfed
;
現在, 整個序列看起來就是這樣cbahgfed
. -
再翻轉整個序列;
cbahgfed
->defghabc
;
這樣就,完成了 abc
和 defgh
的位置互換.
具有實用價值嗎?
通常來說,翻轉代碼在時間和空間上都很高效(具體還是要看所使用的開發語言的特性),而且邏輯清晰,代碼非常簡短, 很難出錯.
《編程珠璣》第二章的一段話很好的介紹了翻轉代碼的使用價值.
Brian Kernighan 和 P.J.Plauger 在其1981年出版的Software Tools in Pascal 一書中,就使用該代碼在文本編輯器中實現了行的移動. Kernighan 報告稱在第一次執行的時候程序就正確運行了, 而他們先前基於鏈表的處理相似任務的代碼則包含幾個錯誤. KenThompson 在 1971 年編寫了編輯器和這種求逆代碼, 甚至在那時就主張把該代碼當作一種常識.