Php 创建具有固定长度的可转位非重复组合

Php 创建具有固定长度的可转位非重复组合,php,algorithm,combinations,Php,Algorithm,Combinations,基于这个问题, 我创建了一个PHP算法,可以创建固定长度的字符组合(基本上是对Java答案的重写) 对于另一个问题,我得到了一个(出色的)算法,该算法可以使排列可索引,通过提供一个“密钥”,在给定相同的字符集和相同的长度时,始终会产生完全相同的排列,从而有效地使排列可寻址 好的,现在我基本上需要相同的,但是对于组合,与我的另一个问题中的排列相反 上面的算法可以用同样的方法修改吗?意思是创建一个函数,比如 public function getCombinationByIndex($length

基于这个问题,

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

对于另一个问题,我得到了一个(出色的)算法,该算法可以使排列可索引,通过提供一个“密钥”,在给定相同的字符集和相同的长度时,始终会产生完全相同的排列,从而有效地使排列可寻址

好的,现在我基本上需要相同的,但是对于组合,与我的另一个问题中的排列相反

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

public function getCombinationByIndex($length, $index);

这将返回使用算法创建的一千个可能组合中的一个组合,而无需事先创建它们。

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

  • 将任意N选择K的所有K索引以良好格式输出到文件。可以用更具描述性的字符串或字母替换K索引

  • 将K索引转换为已排序二项系数表中某个条目的正确索引。这种技术比以前发布的依赖于迭代的技术要快得多。它通过使用帕斯卡三角形固有的数学特性来实现这一点

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

  • 使用此方法计算二项式系数,它不太可能溢出,并且适用于较大的数字

  • 该类是用.NETC#编写的,它提供了一种通过使用泛型列表来管理与问题相关的对象(如果有)的方法。这个类的构造函数接受一个名为InitTable的bool值,如果为true,它将创建一个通用列表来保存要管理的对象。如果此值为false,则不会创建表。使用上述4种方法不需要创建表。提供了访问器方法来访问表

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

  • 要阅读有关此类的信息并下载代码,请参阅

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

    public function getCombinationByIndex($length, $index);