Просто рассуждаю здесь, но одну вещь, которую я представляю, это оптимизация запросов к базе данных.
Запрос к базе данных на декларативном языке, таком как SQL, должен быть переведен в пошаговую программу, называемую «план выполнения». Один SQL-запрос обычно можно преобразовать в несколько таких планов выполнения, которые все дают одинаковый результат, но могут иметь очень различную производительность. Оптимизатор запросов должен найти самый быстрый или хотя бы достаточно быстрый.
Оптимизаторы запросов на основе стоимости имеют «функцию стоимости», которую они используют для оценки времени выполнения данного плана. Исчерпывающие оптимизаторы просматривают все возможные планы (для некоторого значения «все возможные») и выбирают самый быстрый. Для сложных запросов количество возможных планов может быть чрезмерно большим, что приводит к чрезмерно долгому времени оптимизации (даже прежде чем вы начнете поиск в базе данных!), Поэтому существуют также неисчерпывающие оптимизаторы. Они только смотрят на некоторые планы, возможно, со случайным элементом в выборе, какие из них. Это работает, так как обычно существует большое количество «хороших» планов, и, возможно, не так важно найти абсолютно лучший план - вероятно, лучше выбрать 5-секундный план вместо оптимального 2-секундного плана. , если для поиска 2-секундного плана требуется несколько минут оптимизации.
Некоторые алгоритмы оптимизации используют отсортированную очередь «многообещающих» (частичных) планов. Если это не имеет значения, если вы найдете абсолютно лучший план, возможно, вы могли бы использовать почти отсортированную очередь?
Другая идея (и я до сих пор только размышляю) - это планировщик для процессов или потоков в системе с разделением времени, где это может не иметь значения, если определенный процесс или поток получает свой временной интервал на несколько миллисекунд позже, чем если бы строго отсортировано по приоритету.