提问人:David Irimia 提问时间:9/30/2019 最后编辑:David Irimia 更新时间:10/1/2019 访问量:92
如何以这种方式对布尔向量的向量进行排序?(“排名分析”)
How can I sort a vector of boolean vectors in this way? ('ranking analysis')
问:
我们需要对大量仅包含真和假(1 和 0)的向量(数组的数组)进行排序,所有向量的大小都相同。 我们有 1 + 1 = 1(真 + 真 = 真)和 1 + 0 = 1 和 0 + 0 = 0 的规则。
- 第一个向量是具有最多 1 的向量。
- 第二个向量是除了我们在第一个向量中已有的向量之外带来更多 1 的向量。
- 第三个向量是除了我们在前 2 个向量中已有的向量之外带来更多 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 最多。 下一个是。尽管 c 的 1 比 a 多,但 a 除了 b 中的 1 之外,还有更多的 1。 到现在为止,a + b 的总和是 (1, 1, 1, 1, 1, 1, 1),所以最后一个是 c,因为它不会给排序带来任何新内容。
如果两个向量带来相同数量的额外 1,则它们的顺序并不重要。我相信这种排序有多种可能的结果,而且它们都一样好。
我们在这里称之为“排名分析”,但我们对这种分类没有明确的术语,谷歌也没有提供非常有用的信息。
最简单的方法是用 O(n^2) 将它们一一取出。然而,我们正在处理大数据,我们已经有一个软件,它太慢了,所以我们需要一些真正优化的东西。
我们怎样才能做到这一点?编程语言无关紧要,我们可以使用任何东西。这可以并行化吗(在多个 CPU 上运行它以加快进程)?欢迎任何来源或想法。
编辑:我检查了;显然,我们有一个情况,这些向量的长度是 103,因此它们可以超过 64 个插槽。
答: 暂无答案
评论