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

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

26.02.2012, 13:58. Показов 5625. Ответов 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
 Аватар для thebvog
74 / 54 / 12
Регистрация: 20.02.2012
Сообщений: 239
26.02.2012, 19:22
hello19, лучший вариант, по-моему, связанные списки.
C++
1
2
3
4
struct num {
        double value;
        num* prev, next;
}
Экономия памяти обеспечена.
0
3 / 4 / 1
Регистрация: 13.07.2011
Сообщений: 313
27.02.2012, 01:17  [ТС]
Цитата Сообщение от thebvog Посмотреть сообщение
[b]
C++
1
        num* prev, next;
Экономия памяти обеспечена.
Что это строчка означает? Я так понимаю, что это что-то типа координат...
но как же потом с ними работать?
Вот допустим, что мне надо сделать какие-либо алгебраические операции с элементами одной строки... как это сделать?
0
Эксперт С++
2924 / 1274 / 114
Регистрация: 27.05.2008
Сообщений: 3,465
27.02.2012, 10:33
Напиши для себя раз и навсегда класс "разреженная матрица", лучше всего - шаблонный. А может, он уже кем-нибудь написан (погугли, задача-то типовая).... Там будет один-два некрупных архитектурных вопроса (типа "что делать, если запрошенный элемент не существует?"), но даже написание такого класса с нуля - ну, полдня.... с тестами - ну, еще полдня; итого день. Потом будешь многократно применять его "по месту", и все. Думать уже будет не надо. :-)
0
3 / 4 / 1
Регистрация: 13.07.2011
Сообщений: 313
27.02.2012, 22:04  [ТС]
Цитата Сообщение от CheshireCat Посмотреть сообщение
Напиши для себя раз и навсегда класс "разреженная матрица", лучше всего - шаблонный. А может, он уже кем-нибудь написан (погугли, задача-то типовая).... Там будет один-два некрупных архитектурных вопроса (типа "что делать, если запрошенный элемент не существует?"), но даже написание такого класса с нуля - ну, полдня.... с тестами - ну, еще полдня; итого день. Потом будешь многократно применять его "по месту", и все. Думать уже будет не надо. :-)
я в проге не силен...
Можешь примерно накидать то, что должно быть?
0
12 / 12 / 3
Регистрация: 09.05.2010
Сообщений: 384
27.02.2012, 22:25
C++
1
2
3
4
5
6
    struct Item{
     T     node;
         Item *next;
     int i; //string
     int j; //column
    };
0
3 / 4 / 1
Регистрация: 13.07.2011
Сообщений: 313
28.02.2012, 20:22  [ТС]
Цитата Сообщение от AKE Посмотреть сообщение
C++
1
2
3
4
5
6
    struct Item{
     T     node;
         Item *next;
     int i; //string
     int j; //column
    };
не могли бы вы пояснить код...
Что за строчки:
C++
1
2
     T     node;
         Item *next;
0
 Аватар для thebvog
74 / 54 / 12
Регистрация: 20.02.2012
Сообщений: 239
28.02.2012, 20:26
hello19,
C++
1
2
         T     node; // Переменная с каким-то типом
         Item *next; // Указатель на следующий элемент типа Item
0
3 / 4 / 1
Регистрация: 13.07.2011
Сообщений: 313
28.02.2012, 20:34  [ТС]
Цитата Сообщение от thebvog Посмотреть сообщение
hello19,
C++
1
2
         T     node; // Переменная с каким-то типом
         Item *next; // Указатель на следующий элемент типа Item
как с этим работать дальше?
Вот например, как мне считать из файла значения коэффициентов?
0
 Аватар для thebvog
74 / 54 / 12
Регистрация: 20.02.2012
Сообщений: 239
28.02.2012, 20:42
hello19,
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
        struct Item{
         T     node;
         Item *next;
         int value;
         int i; //string
         int j; //column
        };
 
int main()
{
    ...
    Item *p;
    Item *begin;
    p = new Item;
    p->next = NULL;
    begin  = p;
    while (cin>>a)
    {
        p->value = a;
        p->next = new Item;
        p = p->next;
        p->next = NULL;
    }
    ...
}
1
3 / 4 / 1
Регистрация: 13.07.2011
Сообщений: 313
28.02.2012, 20:48  [ТС]
Все-таки хочется узнать, что это за типы:
C++
1
2
3
  
         T     node;
         Item *next;
А так же интересно, вот что тут происходит. Я так понимаю, что тут обычное считывание.. Но уж непонятны строчки... если сможете, сделайте комментарии к ним..
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
 
int main()
{
    ...
    Item *p;
    Item *begin;
    p = new Item;
    p->next = NULL;
    begin  = p;
    while (cin>>a)
    {
        p->value = a;
        p->next = new Item;
        p = p->next;
        p->next = NULL;
    }
    ...
}
0
 Аватар для thebvog
74 / 54 / 12
Регистрация: 20.02.2012
Сообщений: 239
28.02.2012, 20:55
hello19, мы создали структуру Item.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
int main()
{
    ...
    Item *p; // Создаем указатель на неё, а не на саму структуру
    Item *begin; // начало массива, тоже указатель
    p = new Item; // Создаем первый элемент в памяти, а переменная p указывает на неё
    p->next = NULL;
    begin  = p;
    while (cin>>a)
    {
        p->value = a; // Текущей структуру, на которую указывает p присваеваем value значение a
        p->next = new Item; // Создаем следующую структуру
        p = p->next; // И делаем указатель и с первой структуры на вторую
        p->next = NULL;
    }
    ...
}
Смысл таков: каждый элемент - структура указывает на следующей за ней элемент.
Вообщем лучше почитать про само понятие связанных списков.
0
3 / 4 / 1
Регистрация: 13.07.2011
Сообщений: 313
28.02.2012, 20:59  [ТС]
а что за тип такой node в структуре?
0
 Аватар для thebvog
74 / 54 / 12
Регистрация: 20.02.2012
Сообщений: 239
28.02.2012, 21:02
hello19, честно, не знаю, что под этой переменной имел ввиду AKE.

Думаю можно и без неё, главное принцип понять.
0
3 / 4 / 1
Регистрация: 13.07.2011
Сообщений: 313
28.02.2012, 21:13  [ТС]
Да принцип то давно понял.. вот реализация хромает дико...
Вот у меня вопрос, можно ли сделать вот такую вот структурку:
C++
1
2
3
4
5
6
7
    struct elements
    {
        int one; // строка
        int two; // столбец
        double three; // значение коэффициента
    };
        vector <elements> matrix;
Вот только не соображу как тут хранить элементы так, чтобы нулевые элементы не хранить...
допустим мне нужно записать элементы первой строки, первого и 4-го столбцов...
Ну, допустим, что как нить их я считаю. Дальше мне с ними нужно будет делать преобразования... как минимум - запускать цикл..
0
 Аватар для thebvog
74 / 54 / 12
Регистрация: 20.02.2012
Сообщений: 239
28.02.2012, 21:24
hello19, да, это будет работать. Всё зависит от того, как вы к ним собираетесь обращаться.
0
3 / 4 / 1
Регистрация: 13.07.2011
Сообщений: 313
01.03.2012, 12:24  [ТС]
да там вроде бы ничего сложного...
C++
1
2
3
matrix[i].one // обращение к строке
matrix[i].two // обращение с столбцу
matrix[i].three // обращение к значению коэффициенту матрицы
единственное, что меня напрягает, так это то, что... вот мне придется делать кое какие преобразования с коэффициентам, стоящими в каждой отдельной строке...
Там нужно будет сделать что-то типа цикла.. не соображу, как можно это реализовать....

Добавлено через 1 час 23 минуты
Не соображу, как сделать функцию доступа к нужным элементам...
0
 Аватар для thebvog
74 / 54 / 12
Регистрация: 20.02.2012
Сообщений: 239
01.03.2012, 20:19
hello19, нет, я не это имею ввиду (программную реализацию я знаю). Вы можете сказать задачу, в которой вам нужно использовать динамический массив, я хочу понять что вам лучше использовать.
0
3 / 4 / 1
Регистрация: 13.07.2011
Сообщений: 313
01.03.2012, 20:21  [ТС]
задача следующая - решить систему уравнений итерационным методом. Матрица системы - сильноразреженная. По этому нет смысла хранить все элементы, т.к. большая их часть просто нули.
Я хочу хранить лишь ненулевые элементы и уже с ними работать...
Вот только не знаю, как лучше их хранить...
0
 Аватар для thebvog
74 / 54 / 12
Регистрация: 20.02.2012
Сообщений: 239
01.03.2012, 20:27
hello19, как мне кажется, можно сделать обычный динамический массив (можно vector), и каждый раз где надо использовать коэффициент, сравнивать, если индекс элемента динамического коэффициента равен индексу коэффициента, то подставляем и прибавляем счётчик текущего индекса динам. массива, иначе вставляем 0, и переходим к следующему. Если я правильно вас понял.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
01.03.2012, 20:27
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это дополнительная запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru