楼主:
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:00n个数字重新排列有n!种可能 01序列重新排列有C(n,n/2)种可能应该不是 2^n-1 吧
作者:
cutekid (可爱小孩子)
2014-10-22 16:12:00因为原提问者的数据只会有 0 or 1 两种数字所以“原始序列”会有 2^n - 1 种可能
其实看懂一半 我用的理解说说看假设有[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 才对