PHP算法帮助

时间:2011-06-03 19:17:05

标签: php algorithm

我正在开发一种PHP算法,以根据对表单中问题的响应来匹配兼容性。

在这种情况下,用户A和用户B会被问到完全相同的问题。让我们说这些是一些问题:

Cleanliness
    No preference
    Somewhat Clean
    Tidy but cluttered
    Strictly organized


Person B Cleanliness Preference
    Whatever
    Can't be too different
    Must Match

Room Temperature
    Cold
    Comfortable
    Hot

现在会有更多的问题,但它继续这种类似的趋势。有具体的问题,然后有关于人B的问题(以及你希望他们如何回应)

我希望算法根据人们对答案的相似性来匹配人,显然,B人的条件语句会增加他们对这些问题的答案的权重。

我想可能为每个答案分配一个分值,但我仍然不确定我是如何做到的。

有人有任何建议吗?

3 个答案:

答案 0 :(得分:1)

点值系统可以工作。这是我的想法:

对于他们回答问题的每个值,该答案在数据库中获取ID。当您尝试“匹配”或“比较”两个人时,您可以通过比较答案ID来计算他们共有多少个答案。然后由你决定他们是否有足够的共同点。例如,如果他们有共同的8/10答案,他们可能是一个匹配。

mysql> SELECT * FROM users LIMIT 1;
+----+---------------+
| id | name          |
+----+---------------+
|  1 | Dalton Conley |
+----+---------------+

mysql> SELECT * FROM questions;
+----+--------------------------+
| id | value                    |
+----+--------------------------+
|  1 | Do you like to program?  |
+----+--------------------------+

mysql> SELECT * FROM answers;
+----+-------------+-------+
| id | question_id | value |
+----+-------------+-------+
|  1 |           1 | yes   |
|  2 |           1 | no    |
+----+-------------+-------+

mysql> SELECT * FROM user_answers;
+---------+-------------+-----------+
| user_id | question_id | answer_id |
+---------+-------------+-----------+
|       1 |           1 |         2 |
+---------+-------------+-----------+

答案 1 :(得分:1)

答案 2 :(得分:1)

排列您在调查问卷中询问用户的所有“字段”。要么使你的范围非常有限(总是,有时,从不),并为它们分配常数值,如1,2,3。循环每个人以匹配响应。生成可能的兼容匹配列表 - 然后您可以根据应用程序的需要对其进行排序。

样品

define('FEMALE', 0);
define('MALE', 1);

$user1 = array(
 'name' => 'John Doe',
 'gender' => MALE,
 'interseted_in' => FEMALE,
 'cleanliness' => 3,
// etc
);

$potentials = array();
foreach($users as $u)
{
  if($user['gender'] != $user1['interested_in'])
  {
    continue;
  }

  // More checking
  // ...
  // At the end of checking, add to the potentials.
  $potentials[] = $u;
}