【问题标题】:Sort Tuples Row-Wise and Column-Wise对元组按行和按列排序
【发布时间】:2015-07-22 13:45:16
【问题描述】:

我有一堆元组,我想根据以下规则插入二维矩阵:

  1. 如果元组的第一个元素大于或等于前一个元组中的第一个元素,则一个元组可以位于另一个元组的右侧(在同一行中)。
  2. 如果元组中的第二个元素大于或等于前一个元组中的第二个元素,则元组可以位于元组之下(在同一列中)。

这是一个可接受的解决方案示例:

(1,2) (2,1) (4,5)  
(8,6) (9,2) (9,8)

换句话说,元组按列按元组中的第二个元素排序,按第一个元素按行排序。我意识到这些规则不可能总是 100% 得到满足,但我需要想出一种算法来最大限度地减少违反规则的次数。

提前致谢。

【问题讨论】:

  • 对行数和列数有要求吗?否则你可以把它们放在一排
  • 不,肯定不止 1 行/列。每个维度至少有 5 个。

标签: arrays algorithm sorting tuples


【解决方案1】:

我们绝对可以完全避免行列违规,但同时避免两者取决于数据而不是算法

这是我想出的。

让我们假设一个维度为 nX2n 的二维数组。

第 1 步:根据第一个元素对所有元组进行排序,我们称之为 TUP_1。

第 2 步:根据第二个元素对所有元组进行排序,我们称之为 TUP_2。

第 3 步

i=0
while(i<n)
{
 Pick first n tuples(unmarked) from TUP_2 which are at Positions a,b,c......
 in TUP_1 such that a < b < c and so on.

 Mark the picked tuples.     

 fill the ith row with:
 first element from tuples in even positions.
 second element from tuples in odd positions.
 increment i.
}

注意:以上算法因条件而异

 a < b < c would always avoid any violation in row.

但是,如果

 the elements from TUP_2 are always picked in order without any skipping.

如果不是,则可能会发生列违规。

示例:让我们假设 3X4 矩阵

让输入包含以下元组。

(12,6) (12,1) (2,1) (11,1) (8,6) and (4,5).

排序,基于第一个元素的元组将给出 TUP_1

(2,1) (4,5) (8,6) (11,1) (12,1) and (12,6).

根据第二个元素对元组进行排序将得到 TUP_2

(2,1) (11,1) (12,1) (4,5) (8,6) (12,6).

现在执行第 3 步

(2,1) and (11,1) get picked up from TUP_2 because the tuples are at position
1 and 4 in TUP_1 and 1 < 4 and first row is filled as.

(2,1),(11,1)

(12,1) and (12,6) get picked up from TUP_2 because the tuples are at position
5 and 6 in TUP_1 and 5 < 6 and second row is filled as.

(12,1),(12,6)

(4,5) and (8,6) get picked up from TUP_2 because the tuples are at position
2 and 3 in TUP_1 and 2 < 3 and third row is filled as.

(4,5),(8,6)

因此,3X4 矩阵为:

(2,1),(11,1)
(12,1),(12,6)
(4,5),(8,6)

【讨论】:

  • 对不起,应该澄清一下-元组在排序前后必须保持不变,即元素不能混用。
  • @user3396592 当我说基于第一个元素对元组进行排序时,这意味着任何两个元组的第二个元素之间没有比较。
  • @user3396592 当我说根据第二个元素对元组进行排序时,这意味着任何两个元组的第一个元素之间都没有比较。
  • @user3396592 我从来没有想过混合这些元素。请建议我在哪里混合元素。
  • @user3396592 元组的第一个和第二个元素保持不变。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-24
  • 2017-05-04
  • 2020-01-10
  • 1970-01-01
相关资源
最近更新 更多