2014-02-06 190 views
0

如果你有一种矩阵(或不同大小的行的列表),每行有随机数的随机元素,你会如何重新排列矩阵,使相同的元素出现在同一列中?“矩阵”与随机元素,如何在同一列对齐相同的元素?

每行至少有一个元素/列,但不同的行可以有不同数量的元素/列。每个元素每行最多显示一次。

例如:

a|c 
a|b|c 
c|e 
a|d|e 
b|d 

之后应该是这样的:

a| |c| | 
a|b|c| | 
| |c| |e 
a| | |d|e 
|b| |d| 

什么会是一个有效的算法?

编辑:这只是一个简单的例子,任何正数列和每列元素的正数应该被覆盖。

元素不必保留其原始列,但应该以最小距离出现在生成矩阵的原始列中。输入中元素y之前出现的每个元素x也必须出现在输出中的y之前。对不起,这是我最初没有添加的一个重要约束,这通常不由user1734710提供的其他好解决方案所涵盖。

+0

你能否提供一个更复杂的角落案例?还是这真的很简单?五个不同的字母,五列。故事结尾 –

+0

做元素必须保留其原始列吗? – UmNyobe

回答

1
  1. 所有元素复制在一个长向量v
  2. 排序v并删除重复
  3. 分配大小n_rows X v.size()
  4. 的矩阵m对于每一行r中的每个元素e,查找该iev和店铺em[r, i]
+0

你为什么要删除重复? – UmNyobe

+0

如果它不等于前一个元素,或者使用更高级的数据结构(例如C++中的std :: set),则可以分配第二个向量'w'并复制每个元素'v',甚至让你插入相同的元素两次。 – gTcV

+0

不,我只是想知道删除重复的目的,但我现在看到你为什么这样做。 – UmNyobe