哪种算法适合用于接触亲密? [关闭]

Posted

技术标签:

【中文标题】哪种算法适合用于接触亲密? [关闭]【英文标题】:which algorithm will be appropriately used for contact intimacy? [closed] 【发布时间】:2012-10-16 10:51:18 【问题描述】:

我需要实现一个人与人之间视觉亲密的项目,有人可以推荐一种算法来计算人与人之间的亲密感吗?

亲密度会随着时间而衰减(如果长时间不点击/拨号,亲密度会自动衰减)。

假设在我的通讯录中:

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

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

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

following 5天后什么都没有发生,A,B,C的亲密度需要下降,像这样

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

谢谢大家的回答

【问题讨论】:

你能用数学术语来定义“接触亲密”和“视觉亲密”吗? 您是否要求一种算法来根据您打电话的频率来确定您对通讯录中某人的了解程度? 【参考方案1】:

亲密度会随着时间而衰减(如果长时间不点击/拨号,亲密度会自动衰减)。

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

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

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


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


您是否要求一种算法来根据您打电话的频率来确定您对通讯录中某人的了解程度?

为此,您可以使用Exponential Weighted Moving Average 再说一次,我只是推测什么可能有用。

你能说得更详细些吗?

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

double alpha = 1.0/28;

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

例如

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)。

【讨论】:

彼得,你如何定义halfLife120/2 = 60? @AlexR 半衰期,例如就像辐射一样,是你期望的时间有一半。加倍后将是 1/4,三倍 => 1/8 等等。 @AlexR OP 必须从他的问题域中知道,在没有联系的情况下,“亲密”需要多长时间才能下降到一半。 彼得和马尔科,感谢您的澄清。很有趣。 @bigjava 见上面的例子

以上是关于哪种算法适合用于接触亲密? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

Scrum与看板的亲密接触原来是KISS

第一次亲密接触Kotlin

初始linux之亲密接触

亲密接触Redis-第三天(Redis的Load Balance)

与JDReact的第一次亲密接触 ——加油卡项目总结

001 我和Python的第一次亲密接触