Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/54.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 如何将多个数字转换为一个?算法问题_Algorithm_Encoding_Graph_Bit Manipulation_Transformation - Fatal编程技术网

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

Algorithm 如何将多个数字转换为一个?算法问题,algorithm,encoding,graph,bit-manipulation,transformation,Algorithm,Encoding,Graph,Bit Manipulation,Transformation,我想有一个函数,可以将输入(n-size向量)转换成一个int 正式: F:(x1,x2,…,xn)->y 这可能类似于: 但应该是: -明确的 -输入量大,输出量大 我的案例是对图形邻居进行编码。我只想保留关于特定顶点的边的信息 第一个想法是假设某个顶点具有赋值41。在二进制表示中,它是101001。这意味着该顶点与顶点编号1、4和6相连。然后获取关于邻居的信息只是tab[i]&(1我认为这是不可能的 如果您有k个潜在邻居,那么您的表示需要2^k可能的值,以便将值映射到邻居的特定组合。因此您至

我想有一个函数,可以将输入(n-size向量)转换成一个int

正式:

F:(x1,x2,…,xn)->y

这可能类似于: 但应该是: -明确的 -输入量大,输出量大

我的案例是对图形邻居进行编码。我只想保留关于特定顶点的边的信息


第一个想法是假设某个顶点具有赋值41。在二进制表示中,它是101001。这意味着该顶点与顶点编号1、4和6相连。然后获取关于邻居的信息只是tab[i]&(1我认为这是不可能的

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


此外,您提出的使用32位int表示邻居的解决方案与邻接矩阵没有太大区别。事实上,这完全是一样的,只是您使用位而不是布尔值。您可以使用位向量数组而不是二维布尔值数组。

您描述的方案中的限制不是32个邻居,但总共32个顶点。有什么原因不想使用邻接矩阵,其中adj[i][j]=1如果顶点i是顶点j的邻居?是的,它是。我的目的是在GPU上编写高效的图形计算算法,其中输入问题可能非常大。因此,矩阵nxn无法拟合到有限的GPU内存中。是的,我知道我的方案将我限制为仅32个顶点:)这就是为什么我在这里解决我的问题:)假设我们有
k
位可用于存储关于顶点邻域的信息。当然,您最多可以存储2^k个相邻集合的组合。然后可以将其存储在数组或任何其他关联容器中。但我不明白为什么不能使用ajacency列表或ajacency矩阵?使用的内存最小,计算的时间成本最小——这是我想要实现的。GPU做第二个,但第一个仍然是一个悬而未决的问题。我很好奇你想在GPU上做什么图形算法并行。总的来说,他们很难进行比较。我不同意你的看法。因为我认为这不是不可能的,它还没有发明:)我的解决方案实际上没有太大的不同,但位运算比其他任何方法都快。无论如何,谢谢大家的回答。如果你曾经发明过“图形编码”(比如哥德尔编号),请告诉我:)