基于历史

时间:2016-03-11 10:39:39

标签: algorithm

我一直在尝试解决我曾经工作的应用程序的调度问题。这个问题如下......

示例场景:

ContactA 正在后台运行我们的应用。他刚坐上车回家。所以,他处于@Evening Commute状态。

他的代客设置声明他只希望在@Evening Commute状态(没有文字或电子邮件提醒)时收到通知电话。

一旦我们的应用看到 ContactA 处于@Evening Commute状态,并且他可以拨打电话,该应用将扫描他的所有联系人以查找他指定为首选的任何联系人调用

Th算法在其代理列表中识别 ContactA 的3个潜在匹配:

  • ContactX
  • ContactY
  • ContactZ

在@Evening Commute期间,如何决定提示 ContactA 连接哪一个?

首先,它应该看看这三个中的任何一个是否也在使用该应用程序。例如,它标识 ContactX ContactY 都在使用该应用,但 ContactZ 不是。

因此,它会进一步查看 ContactX ContactY ,看看其中任何一个当前是否处于接受电话呼叫的代客状态。

如果两者都是,它将查看是否是收藏夹。如果是这样,那个人优先考虑。

如果两者都没有,它可以回顾历史记录,看看哪个是最后一个联系方式最早的选择哪一个。

如果 ContactX ContactY 现在都显示为“不可用”,则根据应用代客设置,应用可以选择提示我拨打 ContactZ 即可。

提前致谢

1 个答案:

答案 0 :(得分:0)

伪代码(您没有要求任何特定语言,但这是代码中算法的简单实现)。 contactsSpecified将是所有联系人的数组"指定为Call"。

的首选
var contactsToCall[];
//Add all contacts that are using the app and are available
foreach(contact in contactsSepcified) {
    if(contact.isUsingApp() && contact.isAvailable()) {
        contactsToCall.add(contact);
    }
}

//Add all contacts not using the app if none of the app users have been added
if(contactsToCall.size() == 0) {
    foreach(contact in contactsSepcified) {
        if(!contact.isUsingApp()) {
            contactsToCall.add(contact);
        }
    }
}

foreach(contact in conctactsToCall) {
    if(conctact.isFavorite()) {
        call(contact);
        return;
    }
}

suggestContacts(contactsToCall);