Re: [問題] 排序演算法 可逆式

作者: EdisonX (卡卡獸)   2014-10-22 01:16:31
看來還是回文比較清楚,拋磚引玉。
※ 引述《angelina877 (牛牛)》之銘言:
: 問題(Question):
: 我們都學過很多排序演算法,
: 如Bubble Sort,Merge Sort,Insert Sort
: 今天,小妹有一個問題
: 就是如何在已經排好的數列中,去回復原始資料,
: 請問有這種演算法嗎? 我找了一段時間 沒找到
: EX
: 原始資料
: [1,1,0,1,1,0,0]
: 1.使用演算法 得到排序資料
: [0,0,0,1,1,1,1]
: 2.再從排序資料中回復成原始資料
: [1,1,0,1,1,0,0]
: 補充說明(Supplement):
: 我找了好多天了,實在是挫折連連
: 逼不得已才上來問QAQ
: 希望高手相救XDD
我重提一下最原始的前提,
(1) 資料只有 0/1
(2) 一開始是知道未排序的陣列(A) , 經過一連列動作(S) 後得到 (B) ,
現在要再由 B 回到 A
: 有人說 直接把原圖記起來 是個好方法 但是紀錄大小就是 n(更正)
↑ 這句話我認為不需要知道排序過程,所以下面這方向應該是可參考的。
前提只有上述,但在空間分析上沒定義清楚,
陣列裡的元素是用 sizeof(int)==4 , sizeof(char)==1 , 還是 1 bits 計算
我以 1 bit 方式做計算。
另外要講,這前提其實有很多方法可以達到
[Method 1]
其實只要多一個陣列,紀錄原本 1 的位置就行了,
以 int ary[] = {1,1,0,1,1,0,0 };
vector<int> pos{0,1,3,4};
到時候還原沒紀錄到的就是 0 ,
而 size 我們可以從排序的陣列 {0,0,0,1,1,1,1} 知道陣列大小是 7 。
所需空間大很多,其它不多說。
[Method 2]
資料量不大的話其實很好做,拿原始舉例說的
1101100
作者: BombCat (炸彈貓)   2014-10-22 01:34:00
有創意,想不到還有Method 2可以這樣作
作者: angelina877 (牛牛)   2014-10-22 02:14:00
med xor所需記錄空間 跟直接記原始序列好像一樣耶
作者: EdisonX (卡卡獸)   2014-10-22 02:16:00
@angelina877 是啊 所以到後來才發現白搭了 Orz

Links booklink

Contact Us: admin [ a t ] ucptt.com