Учитывая массив модулей, каков наилучший способ возврата массива, который описывает нормализованные (минимальные) отношения порядка между модулями? Каждый элемент массива должен быть массивом пар модулей, имеющих отношение родительский-родительский. Ребенок-родительский порядок в каждой паре имеет значение, но порядок между парами не имеет значения. Нормализованное упорядочение означает, что все, что может быть получено из транзитивности, должно быть исключено из массива.Создание отношения класса
Например, если [Object, Comparable, Float, Fixnum, Integer]
, ответ был бы:
[
[Float, Object],
[Float, Comparable],
[Fixnum, Integer],
[Integer, Object],
[Integer, Comparable],
]
пять пар в массиве соответствует пяти ребер в этой диаграммы Хассе:
Подсказка: Module#<=>other
возвращается -1
, 0
, 1
если есть отношение к заказу, и nil
если нет отношение к заказу.
Вы можете удалить строку 'map', если' arr' был массивом констант. – Stefan
Я думаю, что этот ответ неверен. Здесь есть проблема с блоком 'reject'. Транзитивность не обязательно между соседними узлами. Например, предположим, что 'A sawa
Хороший момент, Стефан. Я починил это. sawa, я думаю, что все в порядке, поскольку 'a' не модифицируется' reject'. –