2013-05-31 29 views
0

我认为它可以是数学正态分布问题,但我想在php中编码。 这是问题所在。基于年龄匹配算法的正态分布在php

在我的交友网站,我想介绍两个女人为每个人。 存在年龄问题。 男人就像-8〜+4岁的女人一样。 (当然,每个国家都可以不同,但​​在中国大多数夫妇都在这个范围内。) 所以男人比女人两岁(-2)的匹配得分是最高的值,而-8〜+4年龄女性,匹配覆盖率必须达到98%。

$min = -8; 
$max = 4; 
$coverage_percent = 0.98f; 

function matching_score($man_age, $woman_age) 
{ 
    $score = <- some normal distribution function ->; 
    return $score; 
} 

我会为每个男人挑两个最高分女人。

这种方法对所有夫妇的概率为98%。

在php中是否有任何快速正态分布概率函数?

+1

问题并不清楚,虽然看它使用的查询存储的所有计算数据库,当你需要的只是获取 –

+0

'我要挑两个女人为每man'男孩Ø男孩如果可以那是一个成就,甚至管理一个!两个将是一个灾难 –

+0

对不起我可怜的英语,我改变了选择介绍。 :) –

回答

1

的编程语言,我知道没有一个内置的正态分布函数,所以人们必须要么得到一个库或实现自己。它是像Excel和Matlab这样的更高级别的环境提供的。我不知道PHP,但下面是我在C#中使用的正常分发实现,所以推测可以转换为PHP。它具有CDF(累积分布函数)和PDF(概率分布函数)。

public class Normal { 
    public const double INVRTP = .398942280401433; // INVerse of Root Two Pi !! 
    private const double y0 = 0.2316419, 
          a0 = 0.31938153, 
          a1 = -0.356563782, 
          a2 = 1.781477937, 
          a3 = -1.821255978, 
          a4 = 1.330274429; 
    public static double NormalCDF(double x) { 
     double y = 1.0/(1 + y0 * System.Math.Abs(x)); 
     y = 1.0 - NormalPDF(x) * (y * (a0 + y * (a1 + y * (a2 + y * (a3 + y * a4))))); 
     return (x <= 0.0) ? 1.0 - y : y; 
    } 
    public static double NormalPDF(double x) { 
     return INVRTP * System.Math.Exp(-x * x/2.0); 
    } 
}