栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

生成所有唯一的对置换

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

生成所有唯一的对置换

我想分享一种循环调度的不同实现,该实现利用

deque
了标准库中的-data结构:

from collections import dequedef round_robin_even(d, n):    for i in range(n - 1):        yield [[d[j], d[-j-1]] for j in range(n/2)]        d[0], d[-1] = d[-1], d[0]        d.rotate()def round_robin_odd(d, n):    for i in range(n):        yield [[d[j], d[-j-1]] for j in range(n/2)]        d.rotate()def round_robin(n):    d = deque(range(n))    if n % 2 == 0:        return list(round_robin_even(d, n))    else:        return list(round_robin_odd(d, n))print round_robin(5)  [[[0, 4], [1, 3]],   [[4, 3], [0, 2]],   [[3, 2], [4, 1]],   [[2, 1], [3, 0]],   [[1, 0], [2, 4]]]print round_robin(2)   [[[0, 1]]]

它将对象(此处为int)放入双端队列。然后旋转并构建从两端到中间的连续对。可以想象这是将中间的双端队列折叠回去。明确说明:

大小写不均元素

 round 1     round 2       # pairs are those numbers that sit----------  ---------      # on top of each other0 1 2 3 4   8 0 1 2 38 7 6 5     7 6 5 4

在偶数元素的情况下,需要额外的步骤。
(我错过了第一次,因为我只检查了不均匀的情况。这产生了一个非常错误的算法……这向我展示了在实现算法时检查边缘情况的重要性……)
这一特殊步骤是我交换了每次旋转之前,两个最左边的元素(即双端队列的第一个和最后一个元素)-这表示

0
一直保持在左上方。

大小写甚至元素:

 round 1     round 2       # pairs are those numbers that sit----------  ---------      # on top of each other0 1 2 3     0 7 1 27 6 5 4     6 5 4 3

关于此版本,困扰我的是代码重复的数量,但是在保持可读性的同时,我找不到改善的方法。这是我的第一个实现,IMO的可读性较差:

def round_robin(n):    is_even = (n % 2 == 0)    schedule = []    d = deque(range(n))    for i in range(2 * ((n - 1) / 2) + 1):        schedule.append(  [[d[j], d[-j-1]] for j in range(n/2)])        if is_even: d[0], d[-1] = d[-1], d[0]        d.rotate()    return schedule

更新以说明更新的问题:

为了在不平衡的情况下允许三人一组,您只需要更改

round_robin_odd(d, n)

def round_robin_odd(d, n):    for i in range(n):        h = [[d[j], d[-j-1]] for j in range(n/2)]        h[-1].append(d[n/2])        yield h        d.rotate()

这给出:

print round_robin(5)[[[0, 4], [1, 3, 2]], [[4, 3], [0, 2, 1]], [[3, 2], [4, 1, 0]], [[2, 1], [3, 0, 4]], [[1, 0], [2, 4, 3]]]


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/624997.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号