Мне было интересно, есть ли имя для алгоритма, который изучает порядок набора элементов на основе отсортированных списков этих элементов, а затем может сортировать списки, состоящие из некоторых из этих элементов, используя этот порядок.
Примере:
У нас есть 5 элементов: «крошечный», «маленький», «средний», «большой», «огромный». Конечно, алгоритм не понимает значения этих слов. Мы можем формировать списки с некоторыми из этих слов, которые отсортированы по «размеру» слова (от наименьшего к наибольшему):
- «маленький», «средний», «огромный»
- «крошечный», «средний», «большой»
- «крошечный», «маленький», «большой», «огромный»
Алгоритм, который я ищу, берет только эти отсортированные списки и формирует единый список со всеми правильно отсортированными словами (это будет [«крошечный», «маленький», «средний», «большой», «огромный»]).
2 ответа
Вы можете построить ориентированный граф из примеров, где слова являются вершинами, а рёбра отражают последовательность. Например. в первом примере края будут от «малого» до «среднего» и от «среднего» до «огромного».
Затем выполните топологическую сортировку графа.
Используйте любой алгоритм сортировки, алгоритм сортировки требует ввода, чтобы при сравнении двух элементов вы знали, какой элемент идет первым.
Например:
array.sort(compareFunction)
Где compareFunction
берет 2 элемента и возвращает, если первый элемент идет первым в списке, чем второй элемент.
Из списка ваших коротких списков вам нужно выяснить, что из каждых двух элементов идет первым.
Используйте свои списки ввода, создайте такую таблицу:
tiny small medium huge large
tiny - T T T T
small F - T T T
medium F F - T T
huge F F F - T
large F F F F -
Где table[i][j]
истинно, если i < j
.
Затем используйте эту таблицу для решения вашей функции compareFunction.
Похожие вопросы
Новые вопросы
algorithm
Алгоритм - это последовательность четко определенных шагов, которые определяют абстрактное решение проблемы. Используйте этот тег, если ваша проблема связана с дизайном алгоритма.