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

生成固定长度整数分区的所有唯一置换的算法?

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

生成固定长度整数分区的所有唯一置换的算法?

好的。首先,忽略排列,仅生成长度为L的分区(如@Svein
Bringsli所建议)。请注意,对于每个分区,可以对元素强加一个顺序,例如>。现在只需“计数”即可保持您的订购。对于n = 4,k = 3:

(4, 0, 0)(3, 1, 0)(2, 2, 0)(2, 1, 1)

那么,如何实现呢?它看起来像:在从位置i减去1并将其添加到下一个位置的同时保持我们的顺序,从位置i减去1,在位置i +
1处加1并移动到下一个位置。如果我们处于最后位置,请退后一步。

这是一个小蟒蛇,它就是这样做的:

def partition_helper(l, i, result):    if i == len(l) - 1:        return     while l[i] - 1 >= l[i + 1] + 1:        l[i]        -= 1        l[i + 1]    += 1        result.append(list(l))        partition_helper(l, i + 1, result)def partition(n, k):    l = [n] + [0] * (k - 1)    result = [list(l)]    partition_helper(l, 0, result)    return result

现在,您有了一个列表列表(实际上是一个多集列表),并且生成列表中每个多集的所有排列都会为您提供解决方案。我将不去赘述,这里有一个递归算法,该算法基本上说,对于每个位置,选择多重集中的每个唯一元素,并追加从多重集中删除该元素所产生的多重集合的置换。



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

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

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