Algorithm 将n个元素的排序列为k个类别
我有n个事件{v1,…,vn},它们将在某些特定时间{t1,…,tk}发生,其中k这里有一种方法(代码如下): 使用任何标准算法生成Algorithm 将n个元素的排序列为k个类别,algorithm,matlab,Algorithm,Matlab,我有n个事件{v1,…,vn},它们将在某些特定时间{t1,…,tk}发生,其中k这里有一种方法(代码如下): 使用任何标准算法生成v1…vn的置换(显然有n个置换)。对于每个排列vp1…vpn列举所有可能的公式: vp1 R1 vp2 R2 vp3…Rn-1 vpn 其中,Ri始终可以是,如果您希望只生成它们,请尝试为固定的k生成。那么你就知道有多少个必须相等,所以试试所有这些相等的排列。接下来,您可以对订单进行相应的排列。这是独立于语言的,但MATLAB并不是最好的语言谢谢,是的,这是我正在
v1…vn
的置换(显然有n个置换)。对于每个排列vp1…vpn
列举所有可能的公式:
vp1 R1 vp2 R2 vp3…Rn-1 vpn
其中,
Ri
始终可以是,如果您希望只生成它们,请尝试为固定的k生成。那么你就知道有多少个必须相等,所以试试所有这些相等的排列。接下来,您可以对订单进行相应的排列。这是独立于语言的,但MATLAB并不是最好的语言谢谢,是的,这是我正在研究的一个数学问题的一部分,因此是MATLAB,但我可以用任何东西生成它,然后将它导入那里作为数学的素材。为此编写一个Java类可能是最方便的,这样你就可以将它导入MATLAB并调用/使用该类,比编译后的可执行文件简单得多。如果我修复了k,我只知道我有k个类别,可以是任意大小(最大n-k)和任意顺序。所以你建议我用每种可能的方式来确定类别,并在每个类别中生成所有不同的组合?或者不。。。我想,我应该生成组合,然后排列类别?省略v1
之类的内容是偶然的还是故意的?谢谢,我遇到过类似的情况,但我不确定你是如何避免重复的?什么是递归地进行的?(换句话说,如果我明白了,我可以找出一个代码。)没有重复,因为等价类是按规范顺序生成的(通过增加事件索引)。应该很清楚,@mach:好了。一个完整的运行程序,带有示例输出。
v1 v2 v3: v1 < v2 < v3; v1 < v2 = v3; v1 = v2 < v3; v1 = v2 = v3
v1 v3 v2: v1 < v3 < v2; v1 = v3 < v2
v2 v1 v3: v2 < v1 < v3; v2 < v1 = v3
v2 v3 v1: v2 < v3 < v1; v2 = v3 < v1
v3 v1 v2: v3 < v1 < v2; v3 < v1 = v2
v3 v2 v1: v3 < v2 < v1
def rels(perm):
if len(perm) == 1:
yield perm
else:
for p in rels(perm[1:]):
yield (perm[0], '<') + p
if perm[0] < perm[1]:
yield (perm[0], '=') + p
def orders(n):
return reduce(lambda a,b:a+b,
[[i for i in rels(p)] for p in itertools.permutations(range(n))])
>>> print '\n'.join(map(repr,[o for o in orders(4)]))
(0, '<', 1, '<', 2, '<', 3)
(0, '=', 1, '<', 2, '<', 3)
(0, '<', 1, '=', 2, '<', 3)
(0, '=', 1, '=', 2, '<', 3)
(0, '<', 1, '<', 2, '=', 3)
(0, '=', 1, '<', 2, '=', 3)
(0, '<', 1, '=', 2, '=', 3)
(0, '=', 1, '=', 2, '=', 3)
(0, '<', 1, '<', 3, '<', 2)
(0, '=', 1, '<', 3, '<', 2)
(0, '<', 1, '=', 3, '<', 2)
(0, '=', 1, '=', 3, '<', 2)
(0, '<', 2, '<', 1, '<', 3)
(0, '=', 2, '<', 1, '<', 3)
(0, '<', 2, '<', 1, '=', 3)
(0, '=', 2, '<', 1, '=', 3)
(0, '<', 2, '<', 3, '<', 1)
(0, '=', 2, '<', 3, '<', 1)
(0, '<', 2, '=', 3, '<', 1)
(0, '=', 2, '=', 3, '<', 1)
(0, '<', 3, '<', 1, '<', 2)
(0, '=', 3, '<', 1, '<', 2)
(0, '<', 3, '<', 1, '=', 2)
(0, '=', 3, '<', 1, '=', 2)
(0, '<', 3, '<', 2, '<', 1)
(0, '=', 3, '<', 2, '<', 1)
(1, '<', 0, '<', 2, '<', 3)
(1, '<', 0, '=', 2, '<', 3)
(1, '<', 0, '<', 2, '=', 3)
(1, '<', 0, '=', 2, '=', 3)
(1, '<', 0, '<', 3, '<', 2)
(1, '<', 0, '=', 3, '<', 2)
(1, '<', 2, '<', 0, '<', 3)
(1, '=', 2, '<', 0, '<', 3)
(1, '<', 2, '<', 0, '=', 3)
(1, '=', 2, '<', 0, '=', 3)
(1, '<', 2, '<', 3, '<', 0)
(1, '=', 2, '<', 3, '<', 0)
(1, '<', 2, '=', 3, '<', 0)
(1, '=', 2, '=', 3, '<', 0)
(1, '<', 3, '<', 0, '<', 2)
(1, '=', 3, '<', 0, '<', 2)
(1, '<', 3, '<', 0, '=', 2)
(1, '=', 3, '<', 0, '=', 2)
(1, '<', 3, '<', 2, '<', 0)
(1, '=', 3, '<', 2, '<', 0)
(2, '<', 0, '<', 1, '<', 3)
(2, '<', 0, '=', 1, '<', 3)
(2, '<', 0, '<', 1, '=', 3)
(2, '<', 0, '=', 1, '=', 3)
(2, '<', 0, '<', 3, '<', 1)
(2, '<', 0, '=', 3, '<', 1)
(2, '<', 1, '<', 0, '<', 3)
(2, '<', 1, '<', 0, '=', 3)
(2, '<', 1, '<', 3, '<', 0)
(2, '<', 1, '=', 3, '<', 0)
(2, '<', 3, '<', 0, '<', 1)
(2, '=', 3, '<', 0, '<', 1)
(2, '<', 3, '<', 0, '=', 1)
(2, '=', 3, '<', 0, '=', 1)
(2, '<', 3, '<', 1, '<', 0)
(2, '=', 3, '<', 1, '<', 0)
(3, '<', 0, '<', 1, '<', 2)
(3, '<', 0, '=', 1, '<', 2)
(3, '<', 0, '<', 1, '=', 2)
(3, '<', 0, '=', 1, '=', 2)
(3, '<', 0, '<', 2, '<', 1)
(3, '<', 0, '=', 2, '<', 1)
(3, '<', 1, '<', 0, '<', 2)
(3, '<', 1, '<', 0, '=', 2)
(3, '<', 1, '<', 2, '<', 0)
(3, '<', 1, '=', 2, '<', 0)
(3, '<', 2, '<', 0, '<', 1)
(3, '<', 2, '<', 0, '=', 1)
(3, '<', 2, '<', 1, '<', 0)