所以我正在寻找一种方法来获得数组中两个整数的组合,比如说我有
v = [0, 1, 2, 0, 4]
我想在最后,概念上这样的矩阵,C = v ^ T v其中v ^ T是向量的转置,所以你得到一个带有一些非零的矩阵,条目将是两个整数的组合。例如,对于第1行,
(0,0) (1,1) (1,2) (0,0) (0,4)
但我只需要(1,1)(1,2)类似的推理也适用于我的概念矩阵可视化中的其他行。我可以通过两个嵌套循环检查它们是否包含0来完成此操作。问题是:这些组合任务是否有一些比嵌套循环更好的算法?
答案 0 :(得分:1)
没有2D嵌套循环(或直接等效的东西),无法生成此输出“矩阵”。因此,无论如何你都会有循环,添加条件检查是微不足道的。
我想你可以对数组进行预排序,然后在第一个非零值处启动你的循环计数器......
答案 1 :(得分:0)
根据您拥有的零数量,您可以使用sparse matrix data structure,这可以将问题从O(n ^ 2)减少到稍微小一些(取决于您有多少个零)。
如果忽略一秒的零,则N选择2个组合等于n ^ 2/2-n / 2个组合。类似地,存在n的n *(n-1)2 - 排列。因此,无论您是在进行组合还是排列,您仍然需要一种最差情况为O(n ^ 2)的算法。注意你的矩阵可能是对称的,具体取决于某些假设,但这不足以从O(n ^ 2)改变它,因为它基本上是O((n / 2)^ 2),它仍然是O(n ^ 2)。