【问题标题】:Permutation generator with filter带滤波器的置换生成器
【发布时间】:2012-08-18 18:43:47
【问题描述】:

我正在寻找可以生成这个的 PHP 想法/代码/算法:

我有 5 个字符字符串 [a-zA-Z0-9]

我想使用可变过滤器生成排列

过滤器:

  1. 字符串是“W”
  2. 字符串是数字
  3. 字符串是“T”
  4. 字符串是大写的
  5. 字符串为“3”

编辑:

<?php

$reset = fopen('list.txt', 'w');
fclose($reset);

$chars = str_split("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789");

$file = fopen('list.txt', 'a+');

foreach ($chars as $c0) {
    foreach ($chars as $c1) {
        foreach ($chars as $c2) {
            foreach ($chars as $c3) {
                foreach ($chars as $c4) {

                    $filter = "/[a-z][a-z][a-z][a-z][A-Z]/";
                    $list = $c0 . $c1 . $c2 . $c3 . $c4;

                    if (preg_match($filter, $list)) {
                        $data = $list . "\n";
                        file_put_contents('list.txt', $data, FILE_APPEND);
                    } 
                }
            }
        }
    }
}
fclose($file);
?>

【问题讨论】:

    标签: php filter generator permutation combinations


    【解决方案1】:

    对于php你可以下载这个包:http://pear.php.net/package/Math_Combinatorics

    【讨论】:

      【解决方案2】:

      不是生成所有可能的排列然后对其进行过滤,而是创建返回字符串中每个字符的可能值的生成器。这会更有效(仅静态 W 将允许您将输入大小缩小一个非常大的因子)。

      您可以通过将函数包装在一个简单的类中来创建生成器(以允许您保持内部状态),并为每次迭代返回每个可能的标记。然后通过组合对每个生成器的调用并创建可能的返回值来创建排列。

      我还强烈建议您不要将 file_get_contents 和 file_put_contents 用于此类事情。使用fopen 打开文件,然后在每次有新排列时执行fwrite()。生成所有排列后调用fclose

      【讨论】:

      • 不,是一样的。不是遍历所有可能的值,而是遍历每个位置的有效值。
      猜你喜欢
      • 2012-05-15
      • 2010-10-23
      • 1970-01-01
      • 2013-03-15
      • 2023-04-10
      • 2015-03-05
      • 2019-04-09
      • 2017-01-05
      • 1970-01-01
      相关资源
      最近更新 更多