php - 最小匹配逻辑

标签 php logic

我有一个非常大的数据集,我正在尝试找到满足所有数据集的最小数据集。最终一组数据中必须包含一个在所有数据集中都存在的值

一小部分数据样本如下所示

[0] => Array
    (
        [0] => 21
        [1] => 21
        [2] => 21
    )

[1] => Array
    (
        [0] => 29
    )

[2] => Array
    (
        [0] => 27
    )

[3] => Array
    (
        [0] => 21
        [1] => 21
        [2] => 21
        [3] => 39
        [4] => 39
        [5] => 43
    )

[4] => Array
    (
        [0] => 29
        [1] => 33
        [2] => 33
        [3] => 43
    )

在这种情况下,我需要返回 21、27 和 29 的逻辑 返回的值必须是与所有数组匹配的值的最小数量。由于我是一名 PHP 程序员,所以我用 PHP 编写这个函数。

最佳答案

你可以遵循这个算法:

测试后更新

$data=array(
            array(21,29,27,57,22),
            array(22,21,23,24,25,26),
            array(31)
            );

$map = array(); // keep a map of values and how many times they occur in other sets
foreach ($data as $setid => $set) {
    foreach (array_unique($set) as $v) {
        $map[$v][$setid] = true;
    }
}

function reverseCount(array $a, array $b)
{
    return count($b) - count($a);
}

// sort reversed on intersection count
uasort($map, 'reverseCount');

// after sorting the first number will be the one that occurs the most
// keep track of which sets have been hit
$setmap = array(); $n = count($data);
foreach ($map as $v => $sets) {
    $hits = 0;
    foreach ($sets as $setid => $dummy) {
        if (!isset($setmap[$setid])) {
            --$n;
            ++$hits;
            $setmap[$setid] = true;
        } else {
            continue;
        }
    }
    if ($hits) {
        echo "value $v\n";
        if (!$n) {
            // all sets are hit
            break;
        }
    }
}

这次测试了。尚未证明它总是能得到正确的结果,因为这被认为是一种贪婪的近似算法。

但我希望它能让您了解可以做什么。如果有任何事情让您感到困惑或者我完全错了,请告诉我:)

关于php - 最小匹配逻辑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10665714/

相关文章:

php - 正则表达式是测试 url 的好方法吗

python-3.x - 无法理解此递归函数的分配和环境用法

algorithm - 如何从邻接矩阵matlab中获取距离矩阵

c - 如何在 8-10 字节数据中填充 n 个 16 位值的任意数量的值?

prolog - gprolog - 确定一个列表是否是另一个列表的排列的简单方法

php - 为动态复选框添加鼠标悬停效果

php - CSS 菜单选项

php - Multi-Tenancy 数据库和一个模型 - MVC 和 Joomla

php - 限制 woocommerce 购物篮大小

c# - 为什么在这个例子中 "x ^= true"会产生 false?