Toposort сломан
От: Sinix  
Дата: 13.05.16 06:40
Оценка:
Тест кейз
        [TestCase(arg: new[] { "a", "b:a", "c" }, ExpectedResult = "a, c, b")] // fails
        public string TopoSort(string[] source)
        { ... }

Есть подозрение, что сделан простой DFS с проверкой на циклы, так?
Это неправильно. Теряется одна из киллфич: все элементы без взаимных зависимостей должны быть расположены рядом.

Киллфича нужна для кучи интересных сценариев наподобие автоматического распараллеливания обработки.
Например, вот такой вот граф
 a1 <- b1 <- c1 <- d1 <- e1
   \             \
    \------- c2 <------- e2
     \           
      ------------------ e3


при обходе с любого узла должен сортироваться вот так:
 a1    b1    c1    d1    e1
   
       c2          e2

       e3
(внутри каждого столбца порядок элементов произвольный)
Ну и элементы надо отдавать массивами (каждый слой — отдельный массив), а не простой последовательностью.

Доп. ссылки:
http://stackoverflow.com/questions/4073119/topological-sort-with-grouping
https://habrahabr.ru/post/66766/
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.