哪种算法适合用于接触亲密?

时间:2012-10-16 10:51:18

标签: java c++ algorithm

我需要实现一个人与人之间具有视觉亲密关系的项目,任何人都可以推荐一个人与人之间亲密接触的算法吗?

亲密度会随着时间的推移而减弱(如果您长时间点击/拨打它,亲密度会自动衰减)。

在我的地址簿中假设:

Person     Intimacy(0-100%)
   A         40%
   B         80%
   C         10%

在我打电话给A后,A的亲密度需要提高,就像这样

Person     Intimacy(0-100%)
   A         42%
   B         80%
   C         10%
在接下来的5天后没有任何反应,A,B,C的亲密度需要下降,就像这样

Person     Intimacy(0-100%)
   A         37%
   B         78%
   C         8%

感谢大家的回答

1 个答案:

答案 0 :(得分:1)

  

亲密度会随着时间的推移而减弱(如果您长时间点击/拨打它,亲密度会自动衰减)。

您可以使用exponential decaying表示为Half Life

的数字
double intimacy = Math.pow(0.5, time / halfLife);

如果您的问题有标准解决方案,我会感到惊讶。


典型的图形具有这样的形状。

enter image description here


  

您是否要求算法根据您拨打电话的频率来确定您对地址簿中某人的了解程度?

为此你可以使用Exponential Weighted Moving Average再次,我只是推测可能有用的东西。

  你可以表达更多细节吗?

根据您提供的数据,半衰期约为28天。您可以像这样每天使用EWMA

double alpha = 1.0/28;

score = (contacted ? 1 : 0) * alpha + score * (1 - alpha); 

e.g。

contacted, prev score, score
TRUE        40%     42%
FALSE       42%     41%
FALSE       41%     39%
FALSE       39%     38%
FALSE       38%     36%
FALSE       36%     35%

说衰败是28天,我打电话给同一个人200天。分数看起来像

double score = 0;
double alpha = 1.0 / 28;
boolean contacted = true;
for (int i = 0; i < 200; i++) {
    score = (contacted ? 1 : 0) * alpha + score * (1 - alpha);
    System.out.printf("%.3f%n", score);
}    

打印

0.036
0.070
0.103
... deleted ...
0.999
0.999
0.999

分数不可能大于最大值(在这种情况下,等式中的1)。