gpt4 book ai didi

php - 创建固定长度的可索引非重复组合

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

基于这个问题

Ordered Fixed Length Combination of a String

我创建了一个 PHP 算法来创建固定长度的字符组合(基本上是对 Java 答案的重写)

private function getCombination($length, $input) {
$result = array();

if ($length == 0) {
return $result;
}

$first = substr($input, 0, $length);
$result[] = $first;

if (strlen($input) == $length) {
return $result;
}

$tails = $this->getCombination($length - 1, substr($input, 1));

foreach ($tails as $tail) {
$tmp = substr($input, 0, 1) . $tail;

if (!in_array($tmp, $result)) {
$result[] = $tmp;
}
}

return array_merge($result, $this->getCombination($length, substr($input, 1)));
}

另一个问题,Create fixed length non-repeating permutation of larger set , 我得到了一个(出色的)算法,可以使排列可索引,通过提供一个“键”有效地使它们可寻址,当给定相同的字符集和相同的长度时,该“键”总是产生完全相同的排列。

好吧,现在我基本上需要相同的但组合,与我的其他问题中的排列形成对比。

上面的算法可以用同样的方式修改吗?意思是创建一个类似的函数

public function getCombinationByIndex($length, $index);

这将返回 一个 组合,该组合是用算法创建的一千个可能组合而无需事先创建

最佳答案

我用 C# 编写了一个类来处理处理二项式系数的常用函数,这是您的问题似乎属于的问题类型 - 假设您使用组合而不是排列。它执行以下任务:

  1. 以良好的格式输出所有 K 索引,对于任何 N 选择 K 到一个文件。 K 指数可以用更具描述性的字符串或字母代替。

  2. 将 K 索引转换为已排序的二项式系数表中条目的正确索引。该技术比依赖迭代的旧已发布技术快得多。它通过使用帕斯卡三角形中固有的数学属性来实现这一点。

  3. 将已排序的二项式系数表中的索引转换为相应的 K 索引。我相信它也比旧的迭代解决方案更快。

  4. 使用 Mark Dominus计算二项式系数的方法,它不太可能溢出并且适用于更大的数字。

  5. 该类是用 .NET C# 编写的,提供了一种使用通用列表管理与问题相关的对象(如果有)的方法。此类的构造函数采用名为 InitTable 的 bool 值,当该值为 true 时,将创建一个通用列表来保存要管理的对象。如果此值为 false,则不会创建表。无需创建表即可使用上述 4 种方法。提供访问器方法来访问表。

  6. 有一个关联的测试类,它展示了如何使用该类及其方法。它已经过 2 个案例的广泛测试,没有已知错误。

要了解此类并下载代码,请参阅 Tablizing The Binomial Coeffieicent .

将此类移植到 php 应该非常简单。您可能不必移植类的通用部分来实现您的目标。根据您正在使用的组合数量,您可能需要使用比 4 字节整数更大的字长。

关于php - 创建固定长度的可索引非重复组合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13272723/

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