Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Алгоритмы > Сохранение матрицы


Автор: AppleMan 6.10.2006, 11:38
Надо решить такую задачу: есть матрица взаимосвязи слов приблизительно такого вида:

    Вася    Маша    Коля    Лена
Вася    0    2    3    4
Маша    2    0    1    2
Коля    3    1    0    1
Лена    4    2    1    0

Надо сохранить матрицу на жестком диске так, чтобы потом можно было довольно быстро доставать данные (размерность матрицы будет где-то 300'000х300'000, так что обычная БД загнется).

Автор: MBo 6.10.2006, 11:54
Файл, содержащий N*(N-1)/2 элементов (судя по приведенной таблице, A->B =B->A, и достаточно хранить ее половину), интерпретируется как треугольный массив. 
P.S. А что, разве нет БД, которые ~10^11 элементов могут хранить?

Автор: Akina 6.10.2006, 16:46
Взаимосвязи - именно целого типа? или по-иному - существует ли полное множество значений связи, и если да - сколько в нем элементов.
Является ли матрица связности разреженной?
Что планируется делать с этой матрицей связности?

Автор: Rodman 6.10.2006, 18:40
Цитата(AppleMan @  6.10.2006,  11:38 Найти цитируемый пост)
так что обычная БД загнется

ну это ты загнул....


но мои варианты это:
1. Программа которая по именнам сама будет формировать матрицу по именам (так что храниться придется только именна)... 
2. База данных, но таблица с таким большим количеством столбцов, предется долго создавать, но работать будет.
3. Создать структуру и хранить в типизированном файле, но также кол-во полей большое...

Автор: Earnest 9.10.2006, 15:00
Обычно графы хранят в виде пар Маша-Вася.
Естественно, чтобы не дублировать строки, лучше приделать узлам какие-либо ид-ры, сохранить один раз список пар ид-р - строка, а потом уже хранить пары ид-р - ид-р. Хочешь - базу данных используй, хочешь проприентарный файл.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)