假设我们有一个整数bitsize n=4;
我正在描述的问题是如何根据汉明权重及其知道的值来将数字索引到数组位置bitsize.例如,具有16个用于bitsize 4的元素的数组将/可能如下所示:
|0|1|2|4|8|3|5|6|9|10|12|7|11|13|14|15|
Run Code Online (Sandbox Code Playgroud)
元素按其汉明重量(必要)分组,并根据大小排序(不必要).只要您可以采取例如3(0011)进行一些操作并返回索引5,5(0101) - > 6等,则不需要排序.
n将存在所有位组合,并且不会重复.例如bitsize 3将有数组:
|0|1|2|4|3|5|6|7|
Run Code Online (Sandbox Code Playgroud)
我最好有一个没有循环的解决方案.或任何讨论simillar解决方案的论文.或者最后只是抛出任何关于如何做到这一点的想法.
关于您知道哪些可能相关的数值方法的任何方法,请在此处发布!
我有一个values每个集合的数组,每个值的索引对应于值绑定的集合,因此我将集合表示为一个整数,其中元素表示位位置,例如,其中包含元素1的集合是表示为...001其中1是LSB.
所以集合只是一个索引并且从不存储,它是动态生成的,它是导致数组中代表集合值的索引的关键.
我所做的是给定一个集合,是任何成对不相交子集的总和值大于该集合的值.例如,如果set 0111的值为3,其中两个子集的值为0100 = 2和0011 = 2,那么这种拆分更有利.我为集合的所有子集执行此操作.
给定三个代理并且排序是集合数字表示.
val[8] = {0,1,2,4,3,2,4,2} the values is not important, only how they are ordered
0 0 0 0 1 1 1 1 MSB bit representation of the index
0 0 1 1 0 0 1 1
0 1 0 1 0 1 0 1 LSB
Run Code Online (Sandbox Code Playgroud)
111的最佳分裂是011和100,总和为7.因此,为了得到仅包含第一个元素ergo 001的集合的值,你将val [1]设置为与元素1和3(101)的集合,你把val [5].
按基数分组时如何排序val数组
val[8] = {0,1,2,3,4,2,4,2}
0 0 0 1 …Run Code Online (Sandbox Code Playgroud) 假设我们有lexicographicaly整数3,5,6,9,10,12 or 0011,0101,0110,1001,1010,1100每个都有两个位设置.
我想要的是在说3和5尽可能少的操作之间找到距离(它们之间有多少字典排列,而不进行实际排列).
距离表如下
3->5 = 1 or 0011->0101 = 0001
3->6 = 2 or 0011->0110 = 0010
3->9 = 3 or 0011->1001 = 0011
3->10 = 4 or 0011->1010 = 0100
3->12 = 5 or 0011->1100 = 0101
Run Code Online (Sandbox Code Playgroud)
因此函数f(3,5)将返回1;
该函数将始终采用相同汉明权重(相同的设定位数)的参数.
不应该使用任何数组.
任何想法都会很棒.
编辑
忘记提及,对于任何设定的比特大小(汉明重量),我将始终使用第一个词典排列(base)作为第一个参数.
例如
hamming weight 1 base = 1
hamming weight 2 base = 3
hamming weight 3 base = 7
...
Run Code Online (Sandbox Code Playgroud)
编辑2
解决方案适用于任何汉明重量,抱歉我不够具体.