在 PHP 中生成独特的组合

2024-04-17

我需要从给定的数据集(n 个数字)生成唯一的组合,每个组合都包含 r 值。

基本上希望实施C(n,r)=n!(r!(n−r)!)PHP 中的公式。

输入数据集 {A,B,C,D} 并需要 3 个值的唯一组合,如下所示:

C(n,r)=C(4,3) = 4!/(3!(4−3)!)
= 4

ABC ACD BCD 商业发展局

(CDA、CAB、BCA 等是重复的,应从输出中截断)。

但我的代码如下

<?php
function sampling($chars, $size, $combinations = array()) {

    # if it's the first iteration, the first set 
    # of combinations is the same as the set of characters
    if (empty($combinations)) {
        $combinations = $chars;
    }

    # we're done if we're at size 1
    if ($size == 1) {
        return $combinations;
    }

    # initialise array to put new values in
    $new_combinations = array();

    # loop through existing combinations and character set to create strings
    foreach ($combinations as $combination) {
        foreach ($chars as $char) {
            if($combination != $char)
            $new_combinations[] = $combination . $char;
        }
    }

    # call same function again for the next iteration
    return sampling($chars, $size - 1, $new_combinations);

}
?>

返回低于 64 个具有重复项的数组

{ [0]=> 字符串(3) “aaa” [1]=> 字符串(3) “aab” [2]=> 字符串(3) “aac” [3]=> 字符串(3)“aad” [4]=> 字符串(3)“aba” [5]=> 字符串(3)“abb” [6]=> 字符串(3)“abc” [7]=> 字符串(3)“abd”[8]=> 字符串(3)“aca” [9]=> 字符串(3)“acb” [10]=> 字符串(3)“acc” [11]=> 字符串(3)“acd” [12]=> 字符串(3)“ada” [13]=> 字符串(3)“adb” [14]=> 字符串(3)“adc” [15]=> 字符串(3)“添加” [16]=> 字符串(3)“咩” [17]=> 字符串(3)“bab” [18]=> 字符串(3)“bac” [19]=> 字符串(3)“坏”[20]=> 字符串(3)“bba” [21]=> 字符串(3)“bbb” [22]=> 字符串(3)“bbc” [23]=> 字符串(3)“bbd” [24]=> 字符串(3) “bca” [25]=> 字符串(3) “bcb” [26]=> 字符串(3) “密件抄送” [27]=> 字符串(3) “bcd” [28]=> 字符串(3) “bda” [29]=> 字符串(3) “bdb” [30]=> 字符串(3)“bdc” [31]=> 字符串(3)“bdd”[32]=> 字符串(3)“caa” [33]=> 字符串(3)“cab” [34]=> 字符串(3)“cac”[35]=> 字符串(3)“cad” [36]=> 字符串(3)“cba” [37]=> 字符串(3)“cbb”[38]=> 字符串(3)“cbc” [39]=> 字符串(3)“cbd” [40]=> 字符串(3)“cca” [41]=> 字符串(3)“ccb” [42]=> 字符串(3)“ccc” [43]=> 字符串(3)“ccd”[44]=> 字符串(3)“cda” [45]=> 字符串(3)“cdb” [46]=> 字符串(3)“cdc”[47]=> 字符串(3)“cdd” [48]=> 字符串(3)“daa” [49]=> 字符串(3)“dab”[50]=> 字符串(3)“dac” [51]=> 字符串(3) “爸爸” [52]=> 字符串(3) “dba” [53]=> 字符串(3) “dbb” [54]=> 字符串(3)“dbc” [55]=> 字符串(3)“dbd”[56]=> 字符串(3)“dca” [57]=> 字符串(3)“dcb” [58]=> 字符串(3)“dcc” [59]=> 字符串(3)“dcd” [60]=> 字符串(3)“dda” [61]=> 字符串(3)“ddb”[62]=> 字符串(3)“ddc” [63]=> 字符串(3) "ddd" }

提前致谢 !!!


假设您有一组 4 个项目,并且您想要其中 3 个项目的随机子集。您可以执行以下操作:

$myset = [ "A","B","C", "D" ];    

function randomSubset($set, $size) {
    $array = array_pad(array_pad([],$size,1),count($set),0); //Get an array like [ 1,1,1,0 ];
    shuffle($array);
    return array_intersect_key($set, array_filter($array));
 }

 print_r(randomSubset($myset,3));

在沙箱中查看它:http://sandbox.onlinephpfunctions.com/code/a68f3b2f1abc285424ccadbaab8a12fc4928bb8d http://sandbox.onlinephpfunctions.com/code/a68f3b2f1abc285424ccadbaab8a12fc4928bb8d

现在如果你需要all对于大小为 N 的子集,您可以执行一些递归魔术:

function allSubsets($set, $size) {     
    $subsets = [];
    if ($size == 1) {
        return array_map(function ($v) { return [$v]; },$set);
    }
    foreach (allSubsets($set,$size-1) as $subset) {
        foreach ($set as $element) {
            if (!in_array($element,$subset)) {
                $newSet = array_merge($subset,[$element]);
                sort($newSet);
                if (!in_array($newSet,$subsets)) {
                    $subsets[] = array_merge($subset,[$element]);
                }
            }
        }
    }
    return $subsets;

}

 $myset = [ "A","B","C", "D", "E" ];   
 print_r(allSubsets($myset,3));

沙盒化:http://sandbox.onlinephpfunctions.com/code/01b55f0c1eb55ee82a67175d2551c164ffb2bf87 http://sandbox.onlinephpfunctions.com/code/01b55f0c1eb55ee82a67175d2551c164ffb2bf87

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 PHP 中生成独特的组合 的相关文章

  • 如果产品重量超过1000克,如何以公斤为单位显示

    在 Storefront 主题中 我使用下面的代码将格式化重量从 1000g 更改为 1kg add action woocommerce after shop loop item title show weight 10 function
  • Codeigniter:Base_url 似乎不起作用

    我开发了一个简单的网站 可以从 Twitter 公共时间线获取推文 将其缓存 60 秒等等 我最近将主机从 Hostgator 移至 Mediatemple 我的网站之前在 Hostgator 上运行良好 我的应用程序不使用数据库连接 也不
  • PHP 换行符 (\n) 不起作用

    由于某种原因我无法使用 n使用 PHP 输出到文件时创建换行符 上面只写着 n 到文件 我尝试使用 n 同样 它只写 n 如预期 但我一生都无法弄清楚为什么在字符串中添加 n 不会创建新行 我也尝试过 r n但它只是附加 r n 到文件中的
  • 在Windows上安装php Composer时出现错误

    在安装 Composer 以使用 Laravel 框架时 我遇到了一些错误 Download failed file get contents SSL operation failed with code 1 OpenSSL Error m
  • 在 Drupal 中选择性地删除页面的样式表

    我正在尝试为首页制作不同的布局 在此过程中 我声明了名为 front page css 和 page front tpl php 的新样式表 我正在使用加载responsive sidebar css 的 Zen 子主题 我想删除 resp
  • 如何在 PHP 中将默认日期设置为波斯日期?

    如何在 PHP 中将默认日期设置为波斯日期 说吧 如果我echo这个功能date Y m d 然后它会显示2018 03 05但我想要1396 12 14波斯日期 请检查 http php net manual en intldatefor
  • 从目录中读取所有文件内容 - php

    这实际上是一个简单的任务 我想显示指定文件夹中所有文件的内容 我正在传递目录名称 echo a href row qname a 在第二页上 我正在迭代目录内容 while entryname readdir myDirectory if
  • 为什么 SORT_REGULAR 在 PHP 中产生不一致的结果?

    我正在开发一个类 它使 PHP 中的数组排序变得更容易 并且我一直在使用 SORT 常量 但是行为或SORT REGULAR 默认排序类型 似乎有所不同 具体取决于您在数组中添加项目的顺序 此外 我找不到任何模式来解释为什么会出现这种情况
  • 在 php 和 mysql 中使用 utf8mb4

    我读过 mysql gt 5 5 3 完全支持每个可能的字符 如果您使用编码utf8mb4对于某个表 列http mathiasbynens be notes mysql utf8mb4 http mathiasbynens be note
  • PHP 从日志事件中获取行号

    好的 我还有一个问题HERE https stackoverflow com questions 3213423 php how could i make this class better suggestions feedback wel
  • 限制分页页数

    objConnect mysql connect localhost root or die mysql error objDB mysql select db Test strSQL SELECT FROM UserAddedRecord
  • 同一路由组的多个前缀

    我正在为一所学校编写一个相当简单的网站 该网站有新闻 文章 视频剪辑 等 它的工作方式是在主页中我们向访问者展示一些课程 例如 gt math gt geography gt chemistry 用户在其中选择 1 网站内容会根据用户的选择
  • 如何使用php在mysql数据库中添加照片? [关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions 我对 PH
  • PHP 负面因素不断增加

    我这里有这个代码 remaining 0 foreach clientArrayInvoice as key gt row remaining remaining row total 它的作用是 它获取总计值并将它们相加 但是当我有负值时
  • MySQL 中布尔值的 TINYINT 与 ENUM(0, 1)

    MyISAM 表和 MySQL 5 1 中具有 0 和 1 值的 Tinyint 或 ENUM 0 1 哪个更好 您可以使用BIT 1 如中提到的MySQL 5 1 参考 http dev mysql com doc refman 5 1
  • PHP:展平数组-最快的方法? [复制]

    这个问题在这里已经有答案了 是否有任何快速方法可以在不运行 foreach 循环的情况下展平数组并选择子键 在本例中为 键 和 值 或者 foreach 始终是最快的方法 Array 0 gt Array key gt string val
  • phpstorm xdebug 与 symfony2 项目

    我正在尝试使用 xdebug 和 phpstorm 调试 symfony2 应用程序 我的本地开发环境是Ubuntu 14 04 with apache2 Xdebug版本是2 2 7 我在另一个 php 不是 symfony2 项目上使用
  • 连接 3 三张表

    我有这个图表应该可以解释我的情况 我需要一些关于连接 3 个表的帮助 我不知道如何做这种事情 因此 我可以通过执行以下操作来经历一段检索记录的 while 循环 img src alt Album AlbumID 使用内部联接 http w
  • 您可以使用 MySQL 查询来完整创建数据库的副本吗

    我有一个包含 5 个表的 MySQL 数据库的实时版本和一个测试版本 我不断使用 phpMyAdmin 将实时版本中的每个表复制到测试版本 有谁有mysql查询语句来制作数据库的完整副本吗 查询字符串需要考虑结构 数据 自动增量值以及与需要
  • PHP 中的简单 JSON 请求

    我有以下 json country code latitude 45 9390 longitude 24 9811 zoom 6 address city country Romania country code RO region 我只想

随机推荐