Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.78/23: Рейтинг темы: голосов - 23, средняя оценка - 4.78
3 / 4 / 1
Регистрация: 13.07.2011
Сообщений: 313

Как лучше всего хранить коэффициенты?

26.02.2012, 13:58. Показов 5612. Ответов 52
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Мне нужно работать с матрицей порядка 100 000. Она сильно разреженная, по этому хранить все коэффициенты - не вижу смысла. Стало быть нужно хранить только не нулевые элементы матрицы. Но вот как это сделать лучше всего, чтобы было задействовано как можно меньше памяти?
Элементы матрицы типа double
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
26.02.2012, 13:58
Ответы с готовыми решениями:

Задача на алгоритм Дейкстры (как лучше хранить информацию?)
Доброго времени суток. Есть задача: Есть идея хранить входные данные след. образом: Выделить в памяти 2-х матрицы(Tab1 и Tab2...

Оконный менеджер. Как лучше хранить указатели на элементы менеджера?
Привет! Делаю тут 3D движок :wizard: В общем есть главный класс движка mgeSystem, так же есть класс окна mgeWindow, который не...

Как лучше всего хранить контент сайта?
Привет всем. Недавно стал вопрос, как правильно хранить контент с тегами в бд. Допустим у меня есть 3000 статей из разных категорий, каждая...

52
385 / 229 / 12
Регистрация: 06.07.2011
Сообщений: 512
03.03.2012, 02:24
Студворк — интернет-сервис помощи студентам
упаковка разреженных матриц - это не просто баловство. это необходимость. и она очень ярко проявляется, скажем, в реализациях метода конечных элементов. правда там это прежде всего симметричные ленточные матрицы, но полезность этого приема не уменьшается.
0
Автор FAQ
 Аватар для -=ЮрА=-
6614 / 4256 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
03.03.2012, 02:30
Paporotnik, упаковать не проблемма и держать в памяти можно только ненулевые элементы, а как потом такую матрицу загнать в любой из существующих методов решения СЛАУ - в этом вся и соль...
0
385 / 229 / 12
Регистрация: 06.07.2011
Сообщений: 512
03.03.2012, 02:36
Лучший ответ Сообщение было отмечено как решение

Решение

а что этим методам нужно от матрицы? ответ - знать какой элемент находится по таким-то координатам. и методы упаковки позволяют восстановить эту информацию, пускай и в несколько шагов и разумеется не так быстро, как прямой доступ к массиву. но экономия памяти колоссальна. я показал это выше.
0
Автор FAQ
 Аватар для -=ЮрА=-
6614 / 4256 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
03.03.2012, 02:41
Цитата Сообщение от Paporotnik Посмотреть сообщение
а что этим методам нужно от матрицы? ответ - знать какой элемент находится по таким-то координатам. и методы упаковки позволяют восстановить эту информацию, пускай и в несколько шагов и разумеется не так быстро, как прямой доступ к массиву. но экономия памяти колоссальна. я показал это выше.
- решить систему А*В = Х
А 4000х4000 В - 4000 элементов. Проект по ссылке в посте 38 решал систему по методу Гаусса. Рзультаты получились довольно приемлимыми, однако не совпали с результатами полученными в SCILAB. Следует отметить что в исходной матрице А некоторые строки были полностью нулевыми, поэтому был ещё разработан алгоритм эффективного вычеркивания соотв строки и столбца...
0
Эксперт С++
 Аватар для valeriikozlov
4728 / 2549 / 757
Регистрация: 18.08.2009
Сообщений: 4,568
03.03.2012, 02:45
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
а как потом такую матрицу загнать в любой из существующих методов решения СЛАУ - в этом вся и соль...
Любой метод можно подогнать под любой вид матрицы. Будет такой метод работать медленнее чем для обычной матрицы.
Как всегда: выигрываем во времени - проигрываем в памяти. Выигрываем в памяти - проигрываем во времени.
0
Автор FAQ
 Аватар для -=ЮрА=-
6614 / 4256 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
03.03.2012, 02:49
Цитата Сообщение от valeriikozlov Посмотреть сообщение
Любой метод можно подогнать под любой вид матрицы. Будет такой метод работать медленнее чем для обычной матрицы.
Как всегда: выигрываем во времени - проигрываем в памяти. Выигрываем в памяти - проигрываем во времени.
valeriikozlov, проект с полным объёмом памяти позволил получить решение за 10 секунд. Аналогичный алгоритм с поэлементной работой отрабатывал где-то по памяти за мин 25(как раз успевал кофейка выпить). (Правда ЭВМ для теста была паршивая ОЗУ 384 Мб и Celeron 1.1)
0
385 / 229 / 12
Регистрация: 06.07.2011
Сообщений: 512
03.03.2012, 02:50
и? вы пытаетесь опровергнуть пользу упаковки матриц тем, что вы решили общую задачу общим методом? при том, что 4000 на 4000 это совсем не масштаб реальных вычислений в реальных ситуациях?
я вам привожу факты из конкретных инженерных областей. не понимаю, о чем тут можно спорить.

да, и в конце концов. ТС задал вопрос - я дал ответ.
0
Автор FAQ
 Аватар для -=ЮрА=-
6614 / 4256 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
03.03.2012, 02:55
Лично моё мнение - существуют спец методы решение СЛАУ высокого порядка(алгоритмы работают лишь с частями матрицы по своим особым правилам) - решение получается крайне точным однако нормального описания в литратуре я так и не встретил, так упоминания о производительности и быстроте и всё. Так что ответчикам лучше бросить на усилия по поиску спец метода чем обсуждать нужны ли структуры или нет. Мой ответ не нужны, так как никакого выиграша в производительности не дадут, а лишь дополнительно усложнят алгоритм. Как вариант надо рассмтреть алгоритм перезаписи файла, возможно файла отображённого в память. Вот моё видение проблеммы...

Добавлено через 2 минуты

Не по теме:

Цитата Сообщение от Paporotnik Посмотреть сообщение
задачу общим методом
- коррективы были причём несколько(это позволило ускорить нашего Гаусса в пару раз).
Есть желание открываем проект и смотрим код...
Я тут спорить ни с кем не хочу:cofee:
hello19, сам меня попросил написать своё мнение - я написал, а его дело прислушиваться ко мне или нет...
PS В своё время истратил на алгоритм где-то с недельку и знаю подводные камни решения этой системы как отче наш. Предлагаю не вступать в палемику а написать код решения, думаю это будет максимально полезно для ТС;)

0
385 / 229 / 12
Регистрация: 06.07.2011
Сообщений: 512
03.03.2012, 02:59
на правах пищи для размышлений занимательную статью: http://vestnik.vgasu.ru/?source=4&articleno=253
0
Эксперт С++
 Аватар для valeriikozlov
4728 / 2549 / 757
Регистрация: 18.08.2009
Сообщений: 4,568
03.03.2012, 03:02
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
valeriikozlov, проект с полным объёмом памяти позволил получить решение за 10 секунд. Аналогичный алгоритм с поэлементной работой отрабатывал где-то по памяти за мин 25(как раз успевал кофейка выпить). (Правда ЭВМ для теста была паршивая ОЗУ 384 Мб и Celeron 1.1)
Давно таких ЭВМ не встречал. Суть не в этом, сейчас обращаюсь к hello19:
Хотелось бы услышать полное условие задачи именно от Вас. Заинтересовало
0
3 / 4 / 1
Регистрация: 13.07.2011
Сообщений: 313
03.03.2012, 19:17  [ТС]
Цитата Сообщение от Paporotnik Посмотреть сообщение
для хранения разреженных матриц методов много. одни сильно выигрывают по памяти, но уступают по скорости "распаковки", другие - наоборот.
если матрица у нас N*N и в ней k ненулевых элементов, то есть метод, позволяющий хранить 2*k значений для сохранения данных о матрице. алгоритм таков:

пусть дана матрица:
0 0 3 0 0
1 0 2 0 0
0 0 0 0 4
0 5 0 1 0
0 0 0 0 1
Заведем массив Values, в котором перечислим все значения, выбрав определенный способ обхода (по столбцам, к примеру).
Values={1,5,3,2,1,4,1}
Теперь заведем массив Coords, элементами которого будет значение i+(j-1)*n, где i-номер строки, j-номер столбца элемента из массива Values, а n-порядок матрицы. Проще говоря порядковый номер при выбранном виде обхода. Получим:
Coords={2,9,11,12,19,23,25}

Соответственно, для проверки возьмем произвольные координаты элементов: (3;4) и (4;2). Подставляем в формулу выше и получаем значения 18 и 9. Ищем эти значения в массиве coords. 18 не найдено, значит элемент нулевой. 9 найдено, значит элемент не нулевой. Берем индекс этого значения в Coords - под этим же номером в Values будет храниться значение.

Если матрица симметричная, то алгоритмы еще интереснее. А если к тому же и ленточная (все ненулевые элементы близко к диагонали), то там крайне эффективные схемы хранения есть.
Идейка очень интересная... пожалуй стоит задуматься над ее реализацией...
да и памяти тут съедается немного...

-=ЮрА=- мне же не надо хранить всю матрицу - только ее не отрицательные элементы... по этому памяти не будет так много съедаться...
что качается метода решения - вообщем то передо мной стоит задача как раз решить систему итерационным методом
0
03.03.2012, 22:47

Не по теме:

Цитата Сообщение от hello19 Посмотреть сообщение
-=ЮрА=- мне же не надо хранить всю матрицу - только ее не отрицательные элементы... по этому памяти не будет так много съедаться...
- ну ок, раз так считаешь пусть так и будет;)В принципе тебе видней что и к чему должно быть в решении(я даже не представляю для каких целей понадобилось решение такой огромной системы)...

0
3 / 4 / 1
Регистрация: 13.07.2011
Сообщений: 313
07.03.2012, 19:04  [ТС]
а как считать элементы в эти 2 массива?
Вот у меня например вот такая системка:
x1 + 3x2 = 4
x2 = 1

Матрица ненулевых коэффициентов у меня выглядит вот так:
(1;1)(2;3)
(2;1)

Как мне просто считать в вектор values значения 1,3,1
Ну и, соответственно в вектор coords значения 1, 3, 4
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
07.03.2012, 19:04
Помогаю со студенческими работами здесь

Как лучше всего хранить данные для приложения?
Допустим есть статический массив интов,или булов.Как его сохранять(onDestroy()) и подгружать(onCreate), наиболее минимальным кол-вом строк...

Где и как лучше всего хранить структурированную информацию
У меня строковые данные вида: департамент строительства приказ N 21 письмо 12 письмо о тарифах департамент...

Как лучше всего хранить двумерный массив переменного размера
Здравствуйте! Мне нужно хранить квадратный массив, размер которого может увеличиваться, но он всегда остается квадратным (храню матрицу...

Как лучше всего хранить текстовые данные (более 1000 слов)
В чём суть вопроса: начинаю делать игру для android, думаю над лучшим решением для хранения словаря со словами, которых более тысячи. Как в...

Где и как лучше всего хранить строку, которая будет подвергаться значительным изменениям
Добрый вечер. Пишу программу, которая использует строку и предполагает большое кол-во внесенных и изменений в данную строку. Насколько мне...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
53
Ответ Создать тему
Новые блоги и статьи
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru