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

作者: kevingwn (如雲如風的人生)   2014-10-22 09:50:47
你需要的是
可以將排序序列展開所有可能的演算法
然後紀錄下原始序列是第x種展開就好
因為排序序列展開一定少於原始序列(2^n-1)
所以這個x值一定可以用少於n bits紀錄
這樣就達成你的需求了
至於從排序序列展開的演算法就自己想吧
作者: cutekid (可愛小孩子)   2014-10-22 10:36:00
推唷(Y),以 n = 8 來講,只須用 4 ~ 7 bits 即可
作者: wowslr (平凡姜太公)   2014-10-22 11:10:00
推此篇 XD
作者: DJWS (...)   2014-10-22 15:24:00
n個數字重新排列有n!種可能 01序列重新排列有C(n,n/2)種可能應該不是 2^n-1 吧
作者: cutekid (可愛小孩子)   2014-10-22 16:12:00
因為原提問者的數據只會有 0 or 1 兩種數字所以「原始序列」會有 2^n - 1 種可能
作者: angelina877 (牛牛)   2014-10-22 21:31:00
其實看懂一半 我用的理解說說看假設有[0 0..n個..0 1 1...m個 1]總共會有(n+m)!/n!m!個bit<n+mbit這樣嗎但是有一個疑惑 如果n跟m很大(ex:2000) 那階層不就非常大嗎
作者: LPH66 (-6.2598534e+18f)   2014-10-22 21:53:00
不是 C(n,m) bits 而是 log_2 C(n,m) bits而 C(n,m)≦C(n,n/2)≒O(2^n/√n) (Catalan number appox.)[啊, 寫到這裡才發現我的 n 是總長度...]取 log_2 確實是比 n 稍小一些些
作者: kevingwn (如雲如風的人生)   2014-10-23 02:09:00
不然最簡單的作法就是只紀錄原始序列的n-1 bits剩下那個bit用排序序列去推是0或1,這樣也能達成你的需求再看了一下果然寫錯了,原始序列是2^n種可能啦
作者: DJWS (...)   2014-10-23 07:49:00
我 typo 了 應該是 angelina877 說的 (n+m)!/n!m! 才對然後其實我想的也是錯的 應該是樓上說的 2^n 才對

Links booklink

Contact Us: admin [ a t ] ucptt.com