Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 将n个元素的排序列为k个类别_Algorithm_Matlab - Fatal编程技术网

Algorithm 将n个元素的排序列为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并不是最好的语言谢谢,是的,这是我正在

我有n个事件{v1,…,vn},它们将在某些特定时间{t1,…,tk}发生,其中k这里有一种方法(代码如下):

使用任何标准算法生成
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)