Не совсем про Linux, но считается под ним, так что не совсем офтопик :D
Есть такая задача. M (~8) матриц в цепочке, у каждой из которых есть N*N элементов с весовыми коэффициентами и ссылки на предыдущую и следующую матрицу.
Каждая следующая матрица имеет на входе те же элементы, что и предыдущая. Но выходные — другие. Такие же, что следующая в цепочке на входе.
Ну, для простоты, первая матрица: типы компьютеров × ОС:
| Десктоп | Смартфон | Сервер
Windows | 9 | 6 | 6
Linux | 6 | 3 | 9
Android | 3 | 9 | 3
Вторая матрица в цепочке — ОС × процессор. Скажем:
| Windows | Linux | Android
ARM | 3 | 9 | 9
x86 | 9 | 9 | 6
MIPS | 3 | 3 | 6
Следующая в цепочке — процессор x производитель:
| ARM | x86 | MIPS
Intel | 6 | 9 | 3
AMD | 3 | 9 | 3
Toshiba | 3 | 3 | 6
Т.е. получаются такие цепочки:
Десктоп → Windows → ARM → Intel = 9+3+6 = 18
Десктоп → Windows → ARM → AMD = 9+3+3 = 15
Десктоп → Windows → ARM → Toshiba = 9+3+3 = 15
Десктоп → Windows → x86 → Intel = 9+9+6 = 23
Десктоп → Windows → x86 → AMD = 9+9+3 = 21
Десктоп → Windows → x86 → Toshiba = 9+9+3 = 21
...
Сервер → Android → MIPS → Toshiba = 3+6+6 = 15
На самом деле матрицы не квадратные, но это для примера не важно.
Нужно найти лучшие и худшие цепочки, скажем, по десятку тех и других.
Проблема в том, что количество матриц в цепочке достигает 8 (и может быть больше), а число элементов бывает 5..10..30. А 15**8 = 2.5 млрд комбинаций. Да ещё цепочек матриц может быть несколько десятков. Весовые коэффициенты считаются тоже отдельно, по результатам голосов многих людей :)
Если считать это в лоб, просчитав все комбинации, записав их итоговый вес, то сортировать придётся гигабайты данных.
Может быть это как-то можно оптимизировать? :)
А то тут не хватает моей соображаловки, куда можно копать в плане оптимизации. Что-то с оптимизацией деревьев?