用于检查与N个任务重叠的时间的更好算法

时间:2017-03-27 07:01:05

标签: algorithm

首先,这是一个讨论类型的建议问题。假设我有开始和结束时间的任务,当我创建新任务时,我想要检查时间是否与所有现有任务有效重叠。我目前正在使用的是什么 -

    checkTaskTimeOverlapping (List<Task> existingTasks, Task newTask){
       List<String> overlappingTimePeriods = new ArrayList<>();

       for(Task existingTask : existingTasks) {
           if( existingTask.beginTime < newTask.endTime && existingTask.endTime > newTask.beginTime) {
                  overlappingTimePeriods.add(existingTask.beginTime+ "-" + existingTask.endTime);     
             }  

       }
    } 

现在您可以看到,此算法使用O(N)复杂度来检查与N个现有任务重叠的时间。现在应该是一大堆任务,所以..我的问题是,有没有办法更好地优化这个算法来检查与现有任务重叠的时间,比如小于O(N)? 或者我应该保留现有的O(N)算法

1 个答案:

答案 0 :(得分:3)

您可以将beginTasks按beginTime排序,并使用Collections.binarySearch获取插入新任务的索引,并与上一个和下一个任务进行比较。 那当然是O(log(N))