Я пытаюсь вычислить производительность моего алгоритма. В основном мой алгоритм решает операции над множествами, такие как объединение, разделение, пересечение и т. Д. Мой алгоритм может выполнять эти операции в O (logn) для сравнения с аналогичными алгоритмами, в которых реализован примитивный подход к решению, алгоритм фильтра Блумса , отсортировано Список, но когда я попытался вычислить время выполнения, я увидел, что для выполнения некоторых операций в другом алгоритме требуется буквально 0 (ноль) наносекунд. Под операцией я подразумеваю поиск объединения из двух наборов, каждый из которых содержит 10000 элементов. Как это возможно? Вы можете увидеть мой проект на Github .
Часть, которую я рассчитываю, находится на тестовом пакете
Я пытался использовать Jprofilier, чтобы убедиться, что все работает в одном потоке
Я пытался отладить интервалы времени, чтобы убедиться, что он не пренебрегает вычислениями, и находит правильные результаты
static Duration IntersectDocumentsTime(AlgorithmInterface algorithm)
{
Instant start = Instant.now(); // Time before calulation i tryed to put breakpoint here
algorithm.IntersectDocuments(); // returns Term[] result of elements after union operation
Instant end = Instant.now(); // Time after calulation
return Duration.between(start,end); // i put a breakpoint here to see if IntersectDocuments() result is correct and actually calculated
}
Вот так я печатаю результат
for (AlgorithmInterface al: Algorithms)
{
System.out.println("------------------------------------------------------------------------------");
System.out.println("Algorithm: "+al.getClass().toString()+"\tOperation: Union\nTime: "
+OperationsInterface.AddDocumentsTime(al).toNanos()+"\tseconds");
System.out.println("Algorithm: "+al.getClass().toString()+"\tOperation: Disjuction\nTime: "
+OperationsInterface.DisjointDocumentsTime(al).toNanos()+"\tseconds");
System.out.println("Algorithm: "+al.getClass().toString()+"\tOperation: Intersection\nTime: "
+OperationsInterface.IntersectDocumentsTime(al).toNanos()+"\tseconds");
System.out.println("Algorithm: "+al.getClass().toString()+"\tOperation: Subtraction\nTime: "
+OperationsInterface.SubtractDocumentsTime(al).toNanos()+"\tseconds");
System.out.println("Algorithm: "+al.getClass().toString()+"\tOperation: Find\nTime: "
+OperationsInterface.ContainsTermTime(al,new Term("A")).toNanos()+"\tseconds");
}
System.out.println("------------------------------------------------------------------------------");
Результат выглядит так
Алгоритм: Алгоритмы класса.FNA.FNA Операция: Союз
Время: 1851133600 секунд
Алгоритм: Алгоритмы класса. FNA.FNA Операция: Disjuction
Время: 1799607700 секунд
Алгоритм: Алгоритмы класса. FNA.FNA Операция: Пересечение
Время: 291703600 секунд
Алгоритм: Алгоритмы класса. FNA.FNA Операция: Вычитание
Время: 1022775100 секунд
Алгоритм: класс Алгоритмы.FNA.FNA Операция: Найти
Время: 1319100 секунд
Алгоритм: Алгоритмы класса. Примитив. Примитивная операция: объединение
Время: 81257800 секунд
Алгоритм: Алгоритмы класса. Примитив. Примитивная операция: дизъюкция
Время: 85717600 секунд
Алгоритм: Алгоритмы класса. Примитив. Примитивная операция: Пересечение
Время: 0 секунд
Алгоритм: Алгоритмы класса. Примитив. Примитивная операция: Вычитание
Время 66472900 секунд
Алгоритм: класс Algorithms.Primitive.Primitive Операция: Найти
Время: 0 секунд
Алгоритм: класс Algorithms.BloomsFilter.BloomsFilter Операция: Союз
Время 998900 секунд
Алгоритм: класс Algorithms.BloomsFilter.BloomsFilter Операция: Disjuction
Время: 0 секунд
Алгоритм: класс Algorithms.BloomsFilter.BloomsFilter Операция: Пересечение
Время: 503800 секунд
Алгоритм: класс Algorithms.BloomsFilter.BloomsFilter Операция: Вычитание
Время: 0 секунд
Алгоритм: класс Алгоритмы.BloomsFilter.BloomsFilter Операция: Найти
Время: 1312900 секунд
Алгоритм: класс Algorithms.SortedList.SortedList Операция: Объединение
Время: 0 секунд
Алгоритм: класс Алгоритмы.SortedList.SortedList Операция: Disjuction
Время: 3721800 секунд
Алгоритм: класс Algorithms.SortedList.SortedList Операция: Пересечение
Время: 0 секунд
Алгоритм: класс Алгоритмы.SortedList.SortedList Операция: Вычитание
Время: 810500 секунд
Алгоритм: класс Algorithms.SortedList.SortedList Операция: Найти
Время: 1173200 секунд