我有一些复杂的计算算法,基本上可以测试一些较小的矩阵是否适合另一个较大的矩阵。
是否所有矩阵都适合大矩阵,取决于小矩阵的顺序。如果小矩阵不合适,则应重新排列ArrayList并重试,直到测试了所有可能的顺序/序列为止。
如果我有5个小矩阵,则总共有 5个! (= 120)数组可以有的订单。
我的问题是我不知道如何重新排列这些对象(矩阵),因此我可以测试所有可能的顺序。我希望有人可以帮助我吗?
对于n
对象,存在n!
排列。考虑一组:
S = {a1, a2, a3 ..., an};
查找以上集合的置换的算法可以是:
foreach(item i : S) {
/* all other item except i1 and i */
foreach(item i1 : S - {i}) {
foreach(item i2 : S - {i, i1}) {
.
.
.
foreach(item in : S - {i, i2, .... in-1}) {
/* permutation list */
P = { i1, i2, ...., in-1, in };
}
}
}
}
显然,我们没有n
for
循环,但是可以递归构造此算法,直到获得n
list中的html" target="_blank">元素P
。以下是使用上述算法进行置换的实际Java代码:
public static void
permutations(Set<Integer> items, Stack<Integer> permutation, int size) {
/* permutation stack has become equal to size that we require */
if(permutation.size() == size) {
/* print the permutation */
System.out.println(Arrays.toString(permutation.toArray(new Integer[0])));
}
/* items available for permutation */
Integer[] availableItems = items.toArray(new Integer[0]);
for(Integer i : availableItems) {
/* add current item */
permutation.push(i);
/* remove item from available item set */
items.remove(i);
/* pass it on for next permutation */
permutations(items, permutation, size);
/* pop and put the removed item back */
items.add(permutation.pop());
}
}
这是主要方法:
public static void main(String[] args) {
// TODO Auto-generated method stub
Set<Integer> s = new HashSet<Integer>();
s.add(1);
s.add(2);
s.add(3);
permutations(s, new Stack<Integer>(), s.size());
}
它打印了结果:
[1, 2, 3]
[1, 3, 2]
[2, 1, 3]
[2, 3, 1]
[3, 1, 2]
[3, 2, 1]
问题内容: 我有从0到8的数字。我想结果是这些数字的所有可能集合,每个集合都应使用所有数字,每个数字在集合中只能出现一次。 我希望看到用PHP制作的解决方案可以打印出结果。或者,至少,我希望在组合理论上有所收获,因为我早已忘记了它。计算多少排列的公式是什么? 示例集: 0-1-2-3-4-5-6-7-8 0-1-2-3-4-5-6-8-7 0-1-2-3-4-5-8-6-7 0-1-2-3-4-8
问题内容: 在Python中,我有一个n个列表的列表,每个列表具有可变数量的元素。如何创建包含所有可能排列的单个列表: 例如 我想要 注意,我事先不知道n。我以为itertools.product是正确的方法,但它需要我提前知道参数的数量 问题答案: 您不需要事先知道使用
我试图找到Python中提供的一个数的所有可能的因式分解。 例如:1)给定n=12,输出为,f(n)=[[2,2,3],[4,3],[6,2],[12]] 2)给定n=24,输出为,f(n)=[2,2,2,3],[2,2,6],[2,12],[4,6],[8,3],[24]] 2)1)对于n=24,输出为, 我可以做什么来获得相关的结果?
我试图得到与输入arrayList相同长度的ArrayList的所有可能的排列。也就是说,1,2,3的ArrayList将导致123, 132, 213, 231, 321, 312,不包括1, 2, 12, 13等较短的排列。 坐标是一个类,它只有x、y和y,用于保存项目的二维点。 目前,我正在使用这段代码将其打印到控制台,但如果有人能告诉我如何将其存储到ArrayList中,我也将不胜感激
问题内容: 我正在尝试获取与输入arrayList相同长度的ArrayList的所有可能排列。即1,2,3的ArrayList将导致123、132、213、231、321、312,不包括较短的排列(例如1,2,12、13等)。这是我到目前为止的代码: 坐标是一个只有x,y且访问了该项目以容纳项目的2D点的类。 当前,我正在使用此代码将其打印到控制台,但是如果有人可以阐明将其存储到ArrayList
我需要实现一个递归方法printDigits,它将一个整数num作为参数,并以相反的顺序打印它的数字,每行一个数字。 这是我到目前为止所拥有的: 我觉得我只缺少一行代码,但不确定我需要做什么来修复它。