Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.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_Sorting_Language Agnostic_Ranking - Fatal编程技术网

Algorithm 如何以这种方式对布尔向量进行排序?(';排名分析';)

Algorithm 如何以这种方式对布尔向量进行排序?(';排名分析';),algorithm,sorting,language-agnostic,ranking,Algorithm,Sorting,Language Agnostic,Ranking,我们需要对大量只包含true和false(1和0)且大小相同的向量(数组数组数组)进行排序。 我们有1+1=1(真+真=真)和1+0=1以及0+0=0的规则 第一个向量是具有最多1的向量 第二个向量是在第一个向量中已经存在的向量的基础上增加了更多的1 第三个向量是在前两个向量的基础上增加了更多的1 等等 例如,假设我们有以下3个向量: a. (0, 1, 0, 0, 1, 1, 0) b. (1, 0, 1, 1, 0, 1, 1) c. (0, 1, 1, 1, 0, 1, 0) 在我们

我们需要对大量只包含true和false(1和0)且大小相同的向量(数组数组数组)进行排序。 我们有1+1=1(真+真=真)和1+0=1以及0+0=0的规则

  • 第一个向量是具有最多1的向量
  • 第二个向量是在第一个向量中已经存在的向量的基础上增加了更多的1
  • 第三个向量是在前两个向量的基础上增加了更多的1
  • 等等
例如,假设我们有以下3个向量:

a. (0, 1, 0, 0, 1, 1, 0)
b. (1, 0, 1, 1, 0, 1, 1)
c. (0, 1, 1, 1, 0, 1, 0)
在我们的分类中,第一个是b,因为它有最多的1。 下一个是a。尽管c比a有更多的1,但a除了b中的1之外还有更多的1。 现在,a+b的和是(1,1,1,1,1,1,1),所以最后一个是c,因为它没有给排序带来任何新的东西

如果两个向量带来相同数量的额外1,那么它们的顺序实际上并不重要。我相信这种排序有多种可能的结果,它们都一样好

我们在这里称之为“排名分析”,但我们对这种分类没有明确的定义,谷歌也没有提供非常有用的信息

最简单的方法是用O(n^2)逐个取下它们。然而,我们正在处理大数据,我们已经有了一个用于此的软件,它太慢了,所以我们需要一些真正优化的东西

我们如何才能做到这一点?编程语言不重要,我们可以使用任何东西。这可以并行化吗(在多个CPU上运行它以加快进程)?欢迎任何来源或想法


编辑:我选中了;显然,我们有一个例子,这些向量的长度是103,因此它们可以超过64个插槽。

这种O(n^2)方法可以进行相当多的优化,因此这可能是一条值得探索的途径。我现在还不清楚您是否能做得更好,因为排序取决于您已经设置的排序,所以像快速排序这样的事情是不可能的。也就是说,您不满足大多数快速排序算法所依赖的一个非常基本的属性。我们将进一步探讨这个想法。目前,我们非常感谢您的帮助。谢谢这些向量有多长?根据类别,它们的范围从10到50不等。(但它们在各自的类别中长度相同)。向量的数量是数百万。那么这些操作本身就可以很容易地被选择,即使你必须使用2个64位整数来存储一个,正如你的编辑所提到的。然而,对于任何O(n^2)方法来说,向量的大量可能是一个问题。考虑到向量的数量,如果找不到更好的方法,那么在算法的每一步并行搜索实际上可能是有益的。不过,这种O(n^2)方法可以得到相当多的优化,因此这也许是一条值得探索的途径。我现在还不清楚您是否能做得更好,因为排序取决于您已经设置的排序,所以像快速排序这样的事情是不可能的。也就是说,您不满足大多数快速排序算法所依赖的一个非常基本的属性。我们将进一步探讨这个想法。目前,我们非常感谢您的帮助。谢谢这些向量有多长?根据类别,它们的范围从10到50不等。(但它们在各自的类别中长度相同)。向量的数量是数百万。那么这些操作本身就可以很容易地被选择,即使你必须使用2个64位整数来存储一个,正如你的编辑所提到的。然而,对于任何O(n^2)方法来说,向量的大量可能是一个问题。给定向量的数量,如果找不到更好的方法,在算法的每一步并行搜索实际上可能是有益的。