有人可以帮助我理解鸽孔分选的概念吗?

时间:2019-05-13 04:51:12

标签: sorting

我试图理解鸽孔分类的概念,但我不明白。 如果有人可以轻松地向我解释它,对我会非常有帮助!

1 个答案:

答案 0 :(得分:0)

Pigeonhole algorithm是一种排序算法,用于输入数据的元素数量和可能的键值数量(即,为它们自由选择的标记)大致相同,这基本上意味着每个元素都是唯一的,或者在给定列表中重复次数相对较少。

实际执行鸽洞算法的步骤如下:

  1. 在列表中查找最小和最大元素/值。
  2. 使用 max-min + 1 表达式查找列表的范围/大小
  3. 设置另一个空的“鸽子洞”的辅助列表,其大小由步骤 2 给出的范围。
  4. 访问输入列表的每个元素,并将其放在第二个列表的鸽子洞中。输入列表 arr [i] 的元素放在索引 a [i]-min 的二级列表的信鸽孔中。
  5. 按顺序遍历次要/鸽子洞列表(从第一个元素到最后一个元素),然后将非空鸽子洞中的元素放回输入列表中。

有关上述步骤的图形说明,请观看this video


Python实现:

def pigeonhole_sort(a):
    mi = min(a)
    size = max(a) - mi + 1
    holes = [0] * size
    for x in a:
        holes[x - mi] += 1
    i = 0
    for count in xrange(size):
        while holes[count] > 0:
            holes[count] -= 1
            a[i] = count + mi
            i += 1