【发布时间】:2014-12-24 00:04:56
【问题描述】:
我想到了一个编码系统。 arr[(encoded code)]=(decoded code) 关注:
arr是一个二进制非负整数数组,小于 2^16 (pow(2, 16))。arr[0]=0- 每个
arr[1...16]都有一个 1。(1、10、100、1000...) - 每个
arr[17...136]有两个1。 (11、101、110、1001...) 每个
arr[137...696]都有三个1。 (111、1011、1101、1110……)...
arr[(sum of 16C(n-1))...(sum of (16Cn))-1]中的每个二进制文件都有n1s。- 每个
arr[65519...65534]都有十五个 1。 -
arr[65535]是 2^16-1 (1111 1111 1111 1111)。
我没有决定如何在每个部分中排序,这没关系。 (但是,节应按 1 的数量排序。)合适的编码-解码算法将决定如何排序。 (例如,如果算法没问题,它可以是arr[1]=4、arr[2]=2 和arr[3]=8。)
我想制作一个编码函数和解码函数而不在这个表中搜索。有什么好的解决方法和排序方法吗?
【问题讨论】:
-
将其转换为二叉树算不算“在表中搜索”?
-
@Jongware 是的,但如果你的想法实际上比制作这张桌子要小,那也没关系。