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