gpt4 book ai didi

algorithm - 枚举所有组合(笛卡尔积、算盘、里程表)

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:02:26 27 4
gpt4 key购买 nike

如何在 Delphi (Object Pascal) 中以如下方式实现以下算法:

  • 每个字母数字项都是一个对象(在我的例子中是对文件字符串的引用)。
  • 可以枚举(输出)每个选择状态/组合。
  • 想象一下算盘的列;都具有相同的大小(根据其基础)。我需要不同尺寸的列。 (在我的例子中,不同大小的文件字符串集)

上次编辑:请参阅 Python intertools implementation .

其他语言的类似算法:c# , ruby , java , php

算法

考虑以下集合及其成员:

S1 = {a1, a2, a3, a4, a5}

S2 = {b1, b2, b3, b4}

S3 = {c1, c2, c3, c4, c5}

选择每个集合的第一个成员(P = Pick States):

P1 = {a1, b1, c1}

然后,增加第一个直到它的限制:

P2 = {a2, b1, c1} P3 = {a3, b1, c1} P4 = {a4, b1, c1} P5 = {a5, b1, c1}

然后,重置第一个集合,并在第二个集合中递增“一个”;

P6 = {a1, b2, c1}

再次增加第一组……依此类推……为第三组的每个“加一”重置第一组和第二组。

P7 = {a2, b2, c1}

根据计数的基本原理或乘法原理,该算法将产生100个选择状态/组合。

P100 = {a5, b4, c5}

最佳答案

你在数数。

每个珠子都是一个数字,在您的示例中,您以 5 为基数,因为每个珠子可以有 5 个位置之一。

要确定珠子的哪个位置对应于给定的整数,只需在相关的基数中写入该整数即可。对于 17,这是在 ruby​​ 中的做法:

>> 17.to_s(5).rjust(3, '0')
=> "032"

在这里我向左填充了 3 个珠子以清楚每个珠子的位置,并且我使用的约定是珠子从位置 0 开始,而不是从位置 1 开始。

关于algorithm - 枚举所有组合(笛卡尔积、算盘、里程表),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15917198/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com