程序化查询权重

时间:2018-08-02 02:44:59

标签: algorithm filtering probability

这是我要解决的应用程序难题,我正打算开发该应用程序。想象一下一个约会应用程序,人们可以在其中按国籍搜索个人。

Person An在应用程序上,有10%的兴趣与俄罗斯人见面,而90%的兴趣与墨西哥人见面。 人物B在该应用上进行搜索,其中90%的兴趣是与俄罗斯人会面,10%的兴趣是与墨西哥人会面。

让每个人的OWN搜索结果匹配他们的偏好是非常简单的。例如,对于人员B,如果要为其搜索总共100个结果,请运行2个查询,然后加入结果集。第一个查询生成90位俄罗斯人,第二个查询生成10位墨西哥人,总计100个结果,准确地反映了乙方对90%俄罗斯人和10%墨西哥人的偏好。

在该示例中,由于A人有兴趣结识俄罗斯人,因此A人可能总是会出现在B人的结果集中(假设所有其他条件都匹配)。但是理想情况下,人A实际上应该只出现在人B的结果集中的概率大约为10%,因为这更能反映他们对OWN的偏好。换句话说,如果应用程序上有1,000个人都希望与俄罗斯人见面,那么您真的不希望A人被很多有兴趣与俄罗斯人见面的人的数百个请求淹没,而B人实际上只有10个人。与俄罗斯人会面的百分比。

是否存在一种逻辑上的程序化方式来正确解决这一问题?感觉应该是某种加权或概率解决方案,但我似乎无法绕开它。请注意,如果您要共享代码示例,则我并不真正在意技术(例如SQL)。我对如何思考解决方案更感兴趣,以便可以将其合并到任何类型的代码中。我目前能想到的唯一解决方案是维护某种临时的“使用”表,但这绝对是笨拙和繁琐的。

2 个答案:

答案 0 :(得分:1)

我相信您希望按照两者相互适合的概率进行排序。就像这样:

order by p(a|b))*p(b|a) desc

p(a | b)是给定b特性的概率。因此,对于俄罗斯人来说,这是90%。 p(b | a)相反,因此最终为(0.1)*(0.9)= 0.09。如果他们两个都同意100%,则为1.0。如果任一值为0%,则结果为0%。

这是我对适当措施的第一个猜测,但这似乎是合理的。

答案 1 :(得分:0)

@Gordon Linoff

好的,我正在遵循您所说的逻辑,但是对于应用于代码的外观,我还是有点模糊(概率对我来说是一个相当模糊的领域)。能给我一个简短的例子说明你的意思吗?这是一个简单的设置:

给出具有以下结构的示例数据库表:

表“首选项”

  • pPersonLetter varchar(25)
  • pRussianPreference数字
  • pMexicanPreference数字

运行查询:

SELECT pPersonLetter, pRussianPreference, pMexicanPreference
FROM Preferences

会产生类似以下内容:

pPersonLetter, pRussianPreference, pMexicanPreference
Person A, .1, .9
Person B, .9, .1
Person C, .5, .5
Person D, 1, 0
.
.
.

使用原始帖子中设置的示例:

  

人员A在应用程序上,并且有10%的兴趣与俄罗斯人和   90%的人有兴趣见墨西哥人。人物B在该应用上进行搜索   并且有90%的兴趣与俄罗斯人见面,还有10%的兴趣与俄罗斯人见面   与墨西哥人见面。

结合您的答案,SQL查询将如何生成人员B的列表?尽管我知道它写得不正确,但我想根据您的帖子说应该是这样的:

SELECT pPersonLetter, pRussianPreference, pMexicanPreference
FROM Preferences
ORDER BY p(a|b))*p(b|a) DESC

但是我知道,从语法和逻辑的角度来看,这都是行不通的(即,我不认为我是通过加入两个查询(例如在我的原始示例中)或通过包含一个查询来反映任何人的偏好。适当的“ WHERE”子句)---但希望这对于我的学习目的是一个足够简单的示例。...我认为让我失望的是我不太确定“ p”是指什么(即是否它不是某种SQL函数,或者是像pPersonLetter这样的列名),我通常不熟悉“ |”运算符(我想也许是按位运算符?)。

鉴于上面的示例表和数据,是否有一个简单的SQL查询可以工作并合并您的答案?那可以帮助我更好地解决这个问题。...