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

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

26.02.2012, 13:58. Показов 6388. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Часы с термометром и праздничным календарем
yariko 12.11.2026
Сегодня мы рассмотрим как можно сделать отличные многофункциональные часы. Итак, поставим конкретную задачу: разработать часы с календарем, двумя термодатчиками, выводом поздравительных сообщений. . .
Транслитерация текста с кириллицы на латиницу (вариант №1)
Maks 11.11.2026
Решил облегчить жизнь себе и коллегам админам при создании электронных почтовых ящиков для пользователей, в результате написал обработку "Транслитерация текста" с кириллицы на латиницу, а в ней. . .
Книги по геймдизайну, левел-дизайну, игровым механикам и проектированию игрового опыта
8Observer8 08.11.2026
Содержание блога | English Version 1. 2003 - 06 - Designing Virtual Worlds (1st Edition) Автор: Richard A. Bartle | Объем: 768 стр. Ссылки: Amazon . . .
Родители токсичные абьюзеры по отношению к своим детям ругают их оскорбляют не любят
zorxor 08.11.2026
Жить в атмосфере постоянных оскорблений, критики и холодности со стороны родителей — это тяжелое и болезненное испытание, которое оставляет глубокие эмоциональные раны. Токсичное и абьюзивное. . .
Как только я захожу к себе в свою комнату я сразу же с себя снимаю свои трусы. Ответ от Джемени ИИ.
zorxor 08.11.2026
Джемени, как только я захожу к себе в свою комнату я сразу же с себя снимаю свои трусы. Многие люди, возвращаясь домой, сразу переодеваются в максимально свободную одежду или вовсе предпочитают. . .
Паттерн очереди действий/команд (Action / Command Queue). Система очереди действий и кат-сцен с SDL3 Callbacks, cglm и OpenGL
8Observer8 07.11.2026
Содержание блога | English Version Руководство для начинающих по реализации паттерна очереди действий/ команд (Action / Command Queue) на C++ (C++20) с использованием официального SDL3 Callbacks. . .
Проверка полного ФИО в типовом справочнике
Maks 07.11.2026
Решение реализовано в конфигурации КА2, на примере справочника "КонтактныеЛицаПартнеров". Задача: Запрет инициалов. Не допускаеть использование сокращений вида "И. И. ", "И. И. ", "И И" и. . .
Про "Windows must die!"
kumehtar 04.11.2026
Знаете, чет накатило. . . . Когда-то это было почти боевым кличем: мол, нормальный человек сидит на DOS, OS/ 2 или Linux, а вот это вот - Must Die. А теперь человек произносит «мастдай» с усмешкой - и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru