如何将多个数字转换为一个?算法问题

时间:2014-11-28 23:38:44

标签: algorithm encoding graph bit-manipulation transformation

我希望有一个将输入(n-size向量)转换为一个int的函数。

形式上:

F:(x1,x2,...,xn) - > ÿ

这可能是这样的: http://en.wikipedia.org/wiki/G%C3%B6del_numbering 但应该是: -unambiguous -big大小的输入不能产生巨大的输出数量。

我的情况是编码图邻居。我只想保留有关特定顶点边缘的信息。

第一个想法是假设一些顶点已赋值41.在二进制表示中它是101001.这意味着这个顶点连接顶点数字:1,4和6.然后获取有关邻居的信息只是tab [i]& ; (1< j),其中tab是1-d顶点数组,对于顶点i,它存储例如41.j是检查顶点的数量。但是这个解决方案存在问题:我只能编码有关32个邻居的信息(int的最大大小 - 2 ^ 32)或者我错了吗?

因此,我想简单地将图邻居表示为一个数字,使用快速方法获取有关两个顶点邻域的信息。这样的解决方案是否存在,或者您可能有一些想法如何处理它?<​​/ p>

感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

我认为不可能。

如果您有k个潜在的邻居,那么您的表示需要2^k个可能的值,以便将值映射到某个邻居组合。因此,您至少需要k位来表示k个邻居。

此外,您提出的使用32位int表示邻居的解决方案与邻接矩阵没有太大区别。实际上它是完全相同的东西,除了你使用位而不是使用布尔。您可以使用位向量数组,而不是使用2-D布尔数组。