需要审查我的解决方案。计算开票的平均天数

时间:2014-11-16 18:54:52

标签: algorithm

首先,对不起,如果我在错误的论坛上发布这个问题,我知道有几个针对不同类型的问题。我的问题是关于如何实现问题的解决方案,而不是实际代码本身的问题。

想象一下,您有一个支持系统,用户可以在其中提交票证(非常类似于osticket系统)。门票可以有多个状态,例如“submittet / assigned”等一直到“关闭”。

现在假设您想要票证已经打开的平均天数(即从提交票证到关闭票证的平均天数)。你想要一周一周的这些数字。你会如何解决这个问题?

我所做的与以下伪代码有效。

    Pick out all tickets that have ever existed and are in any state = alltheticketsarray
    for(var i =0; i<alltheticketsarray.length; i++){

    var weekarray = //determine which date that is smallest/largest and create an array containing all those weeks and weeks in between. Creating an empty object inside each index with the year-week as a key.
    }

    for(var i =0; i < alltheticketsarray.length; i++){
      var startdate = //picking out which date a ticket is submitted, converting it into a year-week number to know in which index in weekarray to start.
    var stop = //getting the week number when the ticket is closed, if not avaliable stop=weekarray.length

    for(var k =startdate; k < stop; k++){
    //add number of days the ticket has been open so far to weekarray, that is 
    number of days so far 
    add that number to  weekarray[k].opendays += convertToDays(weekarray[k] - weekarray[startdate])
    if(weekarray[k]===weekarray[startdate]){ 
        use moment.js to get which day number (1-7) the submittet value is and add hat value to weekarray[k].opendays
    }
    weekarray[k].opentickets++;
    }
}

然后,为了获得平均日,我每周都会打开一张门票weekarray[k].opendays/weekarray[k].opentickets

这是怎么解决这个问题的?我问的原因是因为我不断得到不合理的高价值,比如平均70天,我不确定这是否正确。

1 个答案:

答案 0 :(得分:0)

您的伪代码中存在错误,其中包含

weekarray[k].opendays += convertToDays(weekarray[k] - weekarray[startdate])

这可能是对的,因为如果我理解你的代码正确,convertToDays(...)表达式会计算从startdate到周的天数&#39; k&#39;。但是,您应该在本周的每周开头添加最多7个&#39; k&#39;在循环中的这一点(将此与处理单独打开故障单的第一周的下一行进行比较)。

最有可能的是,在本周的第一周你应该有一个类似的特殊情况。