Я хочу найти MST графа, который имеет более 2000 узлов. Проблема, которую я получаю, заключается в том, что я не могу сделать матрицу смежности размером более 1500X1500 (если размер больше, чем эта ошибка сегментации, потому что мы можем создать массив размером не более 10^7). Как это можно сделать?Как реализовать минимальное связующее дерево в C++ с более чем 2000 узлами?
ответ
Существует множество проблем, о которых стоит подумать.
Вы должны быть в состоянии выделить массив размером 1500 × 1500, не вызывая Segfault, при условии, что вы делаете это правильно. Если вы попытаетесь выделить массив такого размера в стеке (то есть, как локальную переменную), то вы, вероятно, продублите пространство стека, что, скорее всего, вызывает ошибку, которую вы получаете. Однако, если вы выделите его с помощью
new[]
или с помощьюstd::vector
, тогда память будет храниться в куче, которая предназначена для размещения таких запросов.Матрицы adjacency - это только один способ представления графика, и они, как известно, являются космическими боровками, которые являются действительно хорошей идеей, если вы работаете с чрезвычайно плотными графами. Наиболее распространенной альтернативой является список смежности , который использует меньше пространства для хранения, легко реализуется и поддерживает многие соответствующие операции быстрее, чем матрица смежности. Возможно, вам стоит подумать о том, чтобы сделать этот переключатель вместе с помещением вещей в кучу, а не в стек.
- 1. Минимальное связующее дерево и кратчайшее дерево путей
- 2. Минимальное связующее дерево с алгоритмом Крускаля
- 3. Python: как визуализировать минимальное связующее дерево сети?
- 4. Двунаправленное минимальное связующее дерево ориентированного графа
- 5. Минимальное связующее дерево: что такое свойство Cut?
- 6. Евклидовое минимальное связующее дерево и триангуляция Делоне
- 7. matlab минимальное связующее дерево keep busy
- 8. Как найти Евклидовое минимальное связующее дерево с использованием библиотеки CGAL?
- 9. Минимальное связующее дерево из матрицы смежности в Java
- 10. Как представить минимальное связующее дерево в ограничениях линейного программирования?
- 11. Минимальное опалубочное дерево с листьями?
- 12. Минимальное связующее дерево между местом начала и набором нужных узлов
- 13. Второе минное связующее дерево
- 14. Иерархическое дерево с узлами
- 15. Как найти минимальное связующее дерево с заданным набором координат из входного файла с использованием алгоритма Prim's?
- 16. Java: минимальное остовное дерево с JGraphT?
- 17. Минимальное покрывающее дерево
- 18. минимальное дерево зависимостей построения
- 19. Непрямой график: минимальное связующее дерево с несколькими красными краями как возможно
- 20. Дизайн сети: почему минимальное связующее дерево так широко используется в дизайне сети
- 21. реализовать 2d дерево диапазона C++
- 22. Как искать дерево с тремя дочерними узлами?
- 23. Как реализовать вложенное дерево в Neo4j?
- 24. динамическое минимальное остовное дерево
- 25. Найти связующее дерево с использованием bfs в igraph
- 26. Как отправить письмо более чем 2000 получателю в iOS?
- 27. Как реализовать связанный список с несколькими узлами в C?
- 28. Минимальное остовное дерево
- 29. Geotools минимальное остовное дерево
- 30. Минимальное остовное дерево (матрица смежности) в java
_ «Как это можно сделать?» _ Используйте «std :: vector» вместо массива, созданного в стеке. –
Я работал с матрицей раньше, но не с графиками. Вероятно, вместо плотной матрицы можно использовать разреженную матрицу. Или создайте пользовательский класс, который представляет узлы с узлом node_id и список, который представляет соединение с этого узла на другие узлы. Может получить компьютер с большей памятью. Может распространять данные между разными компьютерами кластера компьютеров. Можно также попытаться найти способ разбить граф на более мелкие графы. Таким образом, вам не нужно работать с очень большим графиком. –