我有以下问题。我需要计算一个集合的排列;然而,该集合可能包含两个相同的元素,因此会导致重复排列。例如:
给定集合[ 0 0 1 2 ]
,排列包括以下可能性:
1 2 0 0
1 2 0 0
但是,我想避免类似的相同排列。在 MATLAB 中我可以简单地这样做:
unique(perms([ 0 0 1 2 ]), 'rows')
但这里的问题是效率 - 我在一个巨大的过程中重复这样做for
循环和所需的排序unique
太慢了。所以我的问题是:我可以计算这种性质的独特排列吗directly无需事后循环结果?我正在 MATLAB 中工作,但只是一个通用的解决方案可能会有帮助,尽管可以在 MATLAB 中进行矢量化的东西可能是理想的!
据我所知,现有的问题并没有完全涵盖这个问题,但如果之前已经回答过这个问题,我们深表歉意。
看来这是一个经常出现的问题。Here是 John d'Errico 的文件(uniqueperms
)这似乎可以非常有效地解决这个问题。作为替代方案,还有另一个 FEX 提交here盖德·里奇微;您必须进行一些分析才能看出哪个更快。
请注意,由于 Matlab JIT 的限制,如果循环调用非内置函数,则循环不会加速,因此将这些函数的内容(和/或对其进行专门化)复制粘贴到循环中可能会有所帮助。 )。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)