【发布时间】:2012-10-28 14:34:25
【问题描述】:
我有以下问题。我需要计算一个集合的排列;但是,该集合可能包含两个相同的元素,因此会导致重复排列。例如:
给定集合[ 0 0 1 2 ],排列包括以下可能性:
1 2 0 0
1 2 0 0
但是,我想避免这样的相同排列。在 MATLAB 中,我可以简单地这样做:
unique(perms([ 0 0 1 2 ]), 'rows')
但这里的问题是效率——我在一个巨大的for 循环中反复执行此操作,unique 所需的排序太慢了。所以我的问题是:我可以直接计算这种性质的独特排列,而不必在之后循环遍历结果吗?我在 MATLAB 中工作,但只是一个通用的解决方案可能会有所帮助,尽管可以在 MATLAB 中矢量化的东西可能是理想的!
据我所知,现有问题并没有完全涵盖这个问题,但如果之前已经回答过这个问题,我们深表歉意。
【问题讨论】:
-
您真正想解决什么问题?为什么会有一个循环,需要在其中高速查找不同数组的排列?
-
好点,也许我应该更具体一些,虽然它有点乱。我正在寻找图像之间相应对象集的方法,尽管这些对象有一个与之关联的类。我一次从集合 A 中取出 5 个对象,并找到将它们与集合 B 中的对象对应的所有方法。我通过在每个类中查找排列来解决类限制。这就是为什么会有零:它们表示一个对象没有与另一个对象配对,这就是我不想重复这种排列的原因。
标签: matlab math permutation combinatorics