gpt4 book ai didi

php - 您如何使用 MySQL 和 PHP 比较一组数字并获得最相关的结果?

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

考虑一下:

set A: 1 2 3 4set B:     3 4 5 6set C:       4 5 6 7set D: 1

我想将 D 与其他数字进行比较,然后得到一组最相关的数字。结果应按以下顺序排列:4(因为 D 与 A 有一个公共(public)编号,并且 4 在 A 中,也在 B 和 C 中),3(因为 D 与 A 有一个公共(public)编号,并且 3 在 A 和 B 中), 2(因为 D 和 A 有共同的数字,2 也在 A 中),然后是 5、6、7。

在 PHP/MySQL 中是否有一些算法可以高效地执行此操作?我不想重新发明轮子,而且数据库最终会有大量的集合..

最佳答案

一个例子并不能构成一个完整的规范。例如,如果集合的集合也包括在内,您的答案会有何不同

set E: 1 2 3
set F: 1 3

哪个会使 3 成为与 D 有非空交集的集合中最常出现的值?所以这是我的假设:

给定一个目标集(原始示例中的D):

  1. “重叠集”(与目标集有非空交集的集合)中的值比不在那些重叠集中的值更相关。
  2. 在陈述 1 的约束下,相关性由出现频率决定。

在您的原始示例中,AD 重叠,因此宇宙 {1, 2, 3, 4, 5, 6, 7} 被划分为重叠的 { 1, 2, 3, 4} 和不重叠的 {5, 6, 7}。值频率为 {1:2, 2:1, 3:2, 4:3, 5:2, 6:2, 7:1}。结合这些事实给出重叠频率 {1:2, 2:1, 3:2, 4:3} 和非重叠频率 {5:2, 6:2, 7:1},产生顺序 4, 3, 1、2,然后是 5、6、7。(我注意到您没有为 1 分配相关性。如果有意的话,这可能是从最终排序中删除目标集值的最后一步。)

在我调整后的示例中,频率变为 {1:4、2:3、3:4、4:3、5:2、6:2、7:1}。这给出了重叠频率 {1:4, 2:3, 3:4, 4:3} 和非重叠频率 {5:2, 6:2, 7:1},产生顺序 1, 3, 2, 4 之后是 5、6、7。

这个算法的伪代码是:

  1. overlappinguniverse 初始化为空集,将 frequency 初始化为空哈希。

  2. 对于集合集合中的每个集合s(目标集合t除外):

    2.1。将 universe 设置为 suniverse

    的并集

    2.2。如果 st 相交至少有一个元素:

    2.2.1. Set `overlapping` to the union of `overlapping` and `s`

    2.3。对于 s 中的每个元素 e:

    2.3.1. If 'e' is a key in `frequency`

    2.3.1.1. Then increase the value (count) for `e` in `frequency` by 1
    2.3.1.2. Else initialize the value (count) for `e` in `frequency` to 1
  3. 设置nonOverlappinguniverseoverlapping

    的差值
  4. universe 的元素按其在 frequency 中的值排序,作为结果的第一部分。

  5. nonOverlapping 的元素附加到结果中,也按它们在 frequency 中的值排序。

(如果您确实打算删除 t 的元素,我会将其作为第 4 步中的后处理步骤执行。)

关于php - 您如何使用 MySQL 和 PHP 比较一组数字并获得最相关的结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1873246/

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