Форум программистов, компьютерный форум, киберфорум
Наши страницы
C++ Builder
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.78/9: Рейтинг темы: голосов - 9, средняя оценка - 4.78
Azdeman
Фрилансер
Эксперт HTML/CSSЭксперт PHP
1741 / 1283 / 579
Регистрация: 12.01.2011
Сообщений: 5,087
1

Разработать способ экономного хранения в памяти разреженных матриц

30.03.2012, 17:23. Просмотров 1638. Ответов 2
Метки нет (Все метки)

Помогите плз зделать
Задание
1 Разработать способ экономного хранения в памяти разреженных матриц (таблиц). Разработать процедуры и функции для обеспечения доступа (чтение-запись) к элементам матрицы.
2 В контрольном примере обеспечить чтение и запись всех элементов матрицы. Оценить время выполнения операций.

Вот что надо зделать:
Сохранить все нулевые элементы, размещенные а шахматном порядке, начиная с 1-го элемента 1-й строки

Заранее спасибо
0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.03.2012, 17:23
Ответы с готовыми решениями:

Разработать способ экономического хранения в памяти разреженных матриц
задание Разработать способ экономического хранения в памяти разреженных матриц. Разработать...

Разработать способ экономного размещения в памяти заданной разреженной таблицы
Быть может кто-нибудь может сделать задачу? Был бы очень благодарен. Разработать способ экономного...

Разработать способ экономного размещения в памяти заданного разреженного массива
Добрый день! Помогите пожалуйста разобраться почему программа автоматически определяет нулевой...

Умножение треугольных матриц«Методы обработки разреженных матриц»
Нужно перемножить треугольные матрицы в обычном виде и в свёрнутом. С обычным проблем нет. Доступ...

Хранения матриц в динамически распределяемой области памяти
Скажите пожалуйста или приведите пример хранения матриц в динамически распределяемой области...

2
soon
2547 / 1312 / 177
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
03.04.2012, 20:29 2
Лучший ответ Сообщение было отмечено Azdeman как решение

Решение

С учетом пожеланий ТС об удалении всех нулей
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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
#include <iostream>
#include <vector>
#include <algorithm>
#include <initializer_list>
#include <cstdlib>
#include <stdexcept>
#include <chrono>
#include <iomanip>
////////////////////////////////////////////////////////////////////////////////
template <class T>
class SparseMatrix
{
    using T_row     = std::vector<T>;
    using T_matrix  = std::vector<T_row>;
    //--------------------------------------------------------------------------
    T_matrix _matrix;
    //--------------------------------------------------------------------------
public:
    SparseMatrix
    (
        std::initializer_list
        <
            std::initializer_list<T>
        >   l
    ):  _matrix(l.begin(), l.end())
    {
        for(auto& row: _matrix)
            row.erase(std::remove(row.begin(), row.end(), 0), row.end());
 
        _matrix.erase
        (
            std::remove(_matrix.begin(), _matrix.end(), T_row()),
            _matrix.end()
        );
    }
    //--------------------------------------------------------------------------
    const std::size_t rows() const
    {
        return _matrix.size();
    }
    //--------------------------------------------------------------------------
    const std::size_t cols(const std::size_t& row) const
    {
        if(row < _matrix.size())
            return _matrix.at(row).size();
        else
            throw std::out_of_range("SparseMatrix::cols");
    }
    //--------------------------------------------------------------------------
    T& at(const std::size_t& row, const std::size_t& col) const
    {
        if(row < _matrix.size())
        {
            if(col < _matrix.at(row).size())
                return _matrix.at(row).at(col);
        }
        else
            throw std::out_of_range("SparseMatrix::at");
    }
    //--------------------------------------------------------------------------
    void insertRow
    (
        const std::size_t& row,
        const std::initializer_list<T>& l = { }
    )
    {
        if(row <= _matrix.size())
        {
            _matrix.emplace(_matrix.begin() + row, l);
            _matrix.at(row).erase
            (
                std::remove
                (
                    _matrix.at(row).begin(),
                    _matrix.at(row).end(),
                    0
                ),
                _matrix.at(row).end()
            );
            if(_matrix.at(row).size() == 0)
                _matrix.erase(_matrix.begin() + row);
        }
        else
            throw std::out_of_range("SparseMatrix::insertRow");
    }
    //--------------------------------------------------------------------------
    friend std::ostream& operator<< (std::ostream& stream, SparseMatrix& m)
    {
        for(const auto& row: m._matrix)
        {
            for(const auto& elem: row)
                stream << std::setw(4) << elem;
            std::cout << std::endl;
        }
        return stream;
    }
};
////////////////////////////////////////////////////////////////////////////////
int main()
{
    const auto start1 = std::chrono::high_resolution_clock::now();
    SparseMatrix<int> matrix({ { 1, 0, 3 }, { 0, 0, 6 }, { 0, 0, 0 } });
    const auto finish1 = std::chrono::high_resolution_clock::now();
    std::cout   <<  "time for creating matrix = "
                <<  std::chrono::duration_cast
                <
                    std::chrono::milliseconds
                >(finish1 - start1).count() << std::endl;
    std::cout << matrix << std::endl;
    matrix.insertRow(2, { 1, 2, 3, 4, 5, 0, 7 });
    std::cout << matrix << std::endl;
    return 0;
}
Хроно запихнул как пример
Для компиляции нужна поддержка C++11.
http://liveworkspace.org/code/16b40dabb5fee87195e5b9acdc53f64c
0
Azdeman
Фрилансер
Эксперт HTML/CSSЭксперт PHP
1741 / 1283 / 579
Регистрация: 12.01.2011
Сообщений: 5,087
06.04.2012, 15:51  [ТС] 3
Как сделать в Билдере? Сохранить все 0 элементы.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.04.2012, 15:51

Определители разреженных матриц
Здравствуйте! Помогите посчитать определители следующих матриц: 1) \begin{vmatrix}1 &amp; 2 &amp; 0 &amp; ......

Найти сумму двух сильно разреженных матриц
Найти сумму двух сильно разреженных матриц A(m,n) и B(m,n), хранящихся в упакованном виде....

Сложение разреженных матриц в схеме CSR / CRS / Метод разряженных строк / Схема Чанга и Густавсона
Здравствуйте, нужна ваша помощь! Стоит задача &quot;свернуть&quot; две разреженные матрицы в CRS схему...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru