Имам множество подредени списъци. За съжаление, редът на елементите не е просто алфа или цифрово сравнение, в противен случай това е тривиално. Така че това, което имам, е нещо като:
List #1 List #2 List #3
groundhog groundhog easter
mothersday mayday mothersday
midsummer laborday halloween
christmas
И от това мога да разбера отколкото мармот ‹ ден на майката, но връзката между мармот и Великден е неизвестна. Гарантирано ми е, че редът на елементите от списък до списък е самопоследователен. (т.е. че без значение в кой списък се среща, Великден винаги е преди Хелоуин)
Но това, от което се нуждая, е нов подреден списък, който представя всеки елемент в другите списъци само веднъж, който запазва всички известни връзки по-горе:
groundhog
easter
mayday
mothersday
midsummer
laborday
halloween
christmas
Въпреки това, следният списък също е напълно валиден:
easter
groundhog
mothersday
mayday
midsummer
laborday
halloween
christmas
Търся сравнително бърз алгоритъм с общо предназначение, който мога да използвам, за да подредя N списъка по този начин. (Със сигурност работещият C# код е плюс, но не е необходимо.)
Имам решение, което работи, но е O(N^2) и куче с дори скромни набори от данни.