Увлекаясь расчетами энтропии для различных задач, я обнаружил интересную вещь.
Смысл заключается в том, что у каждого алгоритма с каждой его выполненной инструкцией уменьшается энтропия от некоторого максимума и вплоть до нуля. Эту энтропию можно вычислить на каждом шаге алгоритма, соответственно можно получить характеристику
, где
- энтропия задачи,
- шаг алгоритма. Если алгоритм правильно решает задачу, то энтропия будет равна нулю на последнем шаге
.
Интересно рассчитывать энтропийную характеристику
для итеративных и рекурсивных алгоритмов. В некоторых случаях эту характеристику можно получить аналитически.
Например, задача - найти максимальное число в массиве
, применяется рекурсивный алгоритм вида
при
,
, где
- максимальное значение на шаге
. Энтропийная характеристика алгоритма
. Видно, что перед началом работы алгоритма энтропия максимальна
, а после выполнения алгоритма наступает полная определенность
(количество итераций алгоритма равно
).
У некоторых алгоритмов энтропия зависит от входных данных, поэтому для таких алгоритмов могут быть найдены не точные аналитические характеристики, а, например, верхние или нижние оценки или математическое ожидание. В крайнем случае непосредственно в исследуемый алгоритм можно интегрировать алгоритм вычисления энтропии и получать энтропийные характеристики для конкретных входных данных, например, для алгоритма Евклида поиска НОД двух целых чисел.
Рассчитаны энтропийные характеристики для различных алгоритмов сортировок:
- сортировка вставкой (Insertion-Sort) - получен точный аналитический результат;
- пузырьковая сортировка (Bubble-Sort) - найдена нижняя оценка;
- быстрая сортировка (Quick-Sort) - найдено математическое ожидание;
- сортировка слиянием (Merge-Sort) - получен точный аналитический результат;
- пирамидальная сортировка (Heap-Sort) - написан алгоритм вычисления характеристики для конкретных входных данных.
Можно пробовать сопоставлять энтропийные характеристики
различных алгоритмов, решающих одну и ту же задачу. Но при этом следует понимать, что различные алгоритмы выполняются за различное количество итераций, а время выполнения итераций также может сильно разниться. Можно, например, допустить, что все алгоритмы выполняются за одинаковое время 100% и за счет предположения ось
отмасштабируется (ось
уже "отмасштабирована"). Хотя, конечно, вместо всяких допущений лучше отложить по горизонтальной оси реальное время работы алгоритма на заданной процессорной системе.
Я пытаюсь найти практическое применение энтропийным характеристикам алгоритмов. В частности, я обнаружил, что алгоритм Bubble-Sort работает эффективнее алгоритма Insertion-Sort до
итерации, а далее более живо уменьшает неопределенность алгоритм Insertion-Sort. (Оба алгоритма выполняются за
итерацию).
Задумываюсь: а что если энтропийные характеристики находить для алгоритмов machine learning? Это позволит оценивать эффективность работы алгоритма обучения и, например, оптимальным образом принимать решение на каждой итерации - остановиться, перейти на следующую эпоху, переключиться на другой алгоритм обучения и т.д. Для меня все это - непосильная задача, в математике несилен.
Может кому-то это станет интересно?