Форум программистов, компьютерный форум CyberForum.ru

Разреженные матрицы - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 38, средняя оценка - 4.68
artlinenn
0 / 0 / 0
Регистрация: 15.02.2013
Сообщений: 58
14.03.2013, 17:49     Разреженные матрицы #1
Даны две разреженные матрицы общего вида. Сложить их и результат занести в разреженную матрицу CSS.
с меня +1)) очень нужно! спасибо заранее!!!
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
GoldenId
 Аватар для GoldenId
45 / 43 / 2
Регистрация: 11.11.2010
Сообщений: 272
Завершенные тесты: 1
14.03.2013, 18:29     Разреженные матрицы #2
Каким образом связаны разреженные матрицы и CSS?
artlinenn
0 / 0 / 0
Регистрация: 15.02.2013
Сообщений: 58
14.03.2013, 18:41  [ТС]     Разреженные матрицы #3
GoldenId, Это матрица такая, есть матрицы CSR и CSS.
CSR - Это матрицы с разреженным пространством строк. Грубо говоря, некоторые строки нулевые.
а про CSS мало что знаю(
Tmin100
 Аватар для Tmin100
6 / 6 / 0
Регистрация: 12.10.2012
Сообщений: 71
15.03.2013, 22:21     Разреженные матрицы #4
Задача №4 из второй лабы?)
У меня похожая:
Даны две разреженные структурно симметричные матрицы. Из одной матрицы вычесть другую и результат занести в разреженную матрицу CSS.

Вообще не знаю что такое CSS матрица, гугл ничего интересного не поведал. Про структурно симметричные тоже не совсем ясно...
GoldenId
 Аватар для GoldenId
45 / 43 / 2
Регистрация: 11.11.2010
Сообщений: 272
Завершенные тесты: 1
16.03.2013, 17:37     Разреженные матрицы #5
Какого размера матрицы?
Tmin100
 Аватар для Tmin100
6 / 6 / 0
Регистрация: 12.10.2012
Сообщений: 71
16.03.2013, 17:55     Разреженные матрицы #6
Размер N, т.е. устанавливается пользователем
Кудаив
328 / 405 / 24
Регистрация: 27.05.2012
Сообщений: 1,162
Завершенные тесты: 2
16.03.2013, 18:11     Разреженные матрицы #7
честно говоря про CSR и CSS матрицы ничего не знаю, но как с разреженными работать идейка есть - создать класс разреженная матрица, полями которой будет размерность и вектор ненулевых элементов, ненулевой элемент описывается структурой pair в которой первое поле это также структура pair- cоответственно координаты (строка, столбец), а второе поле это собственно значение данной ячейки матрицы. Ну и остатся перегрузить оператор сложения матриц и вуаля))
GoldenId
 Аватар для GoldenId
45 / 43 / 2
Регистрация: 11.11.2010
Сообщений: 272
Завершенные тесты: 1
16.03.2013, 20:01     Разреженные матрицы #8
Цитата Сообщение от Кудаив Посмотреть сообщение
честно говоря про CSR и CSS матрицы ничего не знаю, но как с разреженными работать идейка есть - создать класс разреженная матрица, полями которой будет размерность и вектор ненулевых элементов, ненулевой элемент описывается структурой pair в которой первое поле это также структура pair- cоответственно координаты (строка, столбец), а второе поле это собственно значение данной ячейки матрицы. Ну и остатся перегрузить оператор сложения матриц и вуаля))
Действительно, я к тому и спросил про размер матриц. Если матрицы N ~ 10 000 000 000, а элементов там от силы 100, то делать стоит именно как сказал Кудаив, а если N воплне реальное, N ~ 10 000, то можно и стандартным способом.
Привет от капитана.
artlinenn
0 / 0 / 0
Регистрация: 15.02.2013
Сообщений: 58
16.03.2013, 20:06  [ТС]     Разреженные матрицы #9
Хотелось бы увидеть, что получиться где N - реальное число. Вашим методом)
Кудаив
328 / 405 / 24
Регистрация: 27.05.2012
Сообщений: 1,162
Завершенные тесты: 2
16.03.2013, 20:17     Разреженные матрицы #10
есть такая книга "С++ Мастер-класс. 85 нетривиальных проектов, решений и задач", одна из первых задач про разреженные матрицы и решение есть
Tmin100
 Аватар для Tmin100
6 / 6 / 0
Регистрация: 12.10.2012
Сообщений: 71
16.03.2013, 22:02     Разреженные матрицы #11
Почитаем, но думаю в данной задаче можно ограничиться матрицами 100х100, мне просто не совсем ясно, что такое CSS матрица, и что такое структурно симметричная матрица.
GoldenId
 Аватар для GoldenId
45 / 43 / 2
Регистрация: 11.11.2010
Сообщений: 272
Завершенные тесты: 1
18.03.2013, 00:42     Разреженные матрицы #12
Цитата Сообщение от artlinenn Посмотреть сообщение
Хотелось бы увидеть, что получиться где N - реальное число. Вашим методом)
Честно? Активничаю с полнедели, а от "Мне нужно написать класс, с двумя методами, которые..." уже устал
artlinenn
0 / 0 / 0
Регистрация: 15.02.2013
Сообщений: 58
18.03.2013, 07:57  [ТС]     Разреженные матрицы #13
Цитата Сообщение от GoldenId Посмотреть сообщение
Честно? Активничаю с полнедели, а от "Мне нужно написать класс, с двумя методами, которые..." уже устал
за готовый код с объяснениями готов заплатить) пиши в ЛС!
GoldenId
 Аватар для GoldenId
45 / 43 / 2
Регистрация: 11.11.2010
Сообщений: 272
Завершенные тесты: 1
18.03.2013, 09:41     Разреженные матрицы #14
artlinenn, я Вас умоляю
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
#include <iostream>
 
using namespace std;
 
void main()
{
    const int n = 100;
    float a[ n ][ n ];
    float b[ n ][ n ];
 
    float c[ n ][ n ];
 
    int i, j;
 
    // каким-то образом ввести матрицы a и b
    // если хочется проверить чувство юмора преподавателя,
    // можно из стандартного ввода:
    cout << "Введите a: " << endl;
    for( i = 0; i < n; i++ )
        for( j = 0; j < n; j++ )
            cin >> a[ i ][ j ];
    // аналогично для b
 
    // прогнать двойной цикл для сложения
    for( i = 0; i < n; i++ )
        for( j = 0; j < n; j++ )
            c[ i ][ j ] = a[ i ][ j ] + b[ i ][ j ];
 
    // передать результат c, куда следует
    // а вы уж сами решите, куда... следует
}
Не больше не меньше. Я не злой, мне просто dx по dy
DIEZEL-man
13 / 13 / 0
Регистрация: 17.02.2013
Сообщений: 54
18.03.2013, 17:14     Разреженные матрицы #15
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
#include<iostream>
#include<iomanip.h>
using namespace std;
int main () {
srand(time(0));
int n, k, l;
cout<<"Vvedite poryadok matric A, B, CSS:"<<endl;
cin>>n;
int a[n][n], b[n][n], css[n][n];
for(int i=0; i<n; i++){
        for(int j=0; j<n; j++){
                a[i][j]=0;}}
for(int i=0; i<n; i++){
        for(int j=0; j<n; j++){
                b[i][j]=0;}}
for(int i=0; i<n; i++){
        for(int j=0; j<n; j++){k=rand()%2; l=rand()%2;
        if(i+k < n){ if(j+l < n) {
                a[i+k][j+l]=50-(rand()%100);}}}}
for(int i=0; i<n; i++){
        for(int j=0; j<n; j++){k=rand()%2; l=rand()%2;
        if(i+k < n){ if(j+l < n) {
                b[i+k][j+l]=50-(rand()%100);}}}}
for(int i=0; i<n; i++){
        for(int j=0; j<n; j++){
                css[i][j]=a[i][j]+b[i][j];}}
cout<<"Matrix A:"<<endl;
for(int i=0; i<n; i++){
        cout<<endl;
        for(int j=0; j<n; j++){
                cout<<setw(3)<<a[i][j];}}
cout<<endl<<endl<<endl;
cout<<"Matrix B:"<<endl;
for(int i=0; i<n; i++){
        cout<<endl;
        for(int j=0; j<n; j++){
                cout<<setw(3)<<b[i][j];}}
cout<<endl<<endl<<endl;
cout<<"Matrix CSS(result A+B):"<<endl;
for(int i=0; i<n; i++){
        cout<<endl;
        for(int j=0; j<n; j++){
                cout<<setw(3)<<css[i][j];}}
cout<<endl;
system("pause");    
return 0;   
}
Дополненная версия*
artlinenn
0 / 0 / 0
Регистрация: 15.02.2013
Сообщений: 58
18.03.2013, 17:17  [ТС]     Разреженные матрицы #16
DIEZEL-man, у меня прога не запускается, высвечивает n в строке 9, как ошибку! пишет, что в этом случае нужно указывать константные значения!
Байт
 Аватар для Байт
13964 / 8795 / 1223
Регистрация: 24.12.2010
Сообщений: 15,930
18.03.2013, 17:25     Разреженные матрицы #17
Цитата Сообщение от artlinenn Посмотреть сообщение
нужно указывать константные значения!
C++
1
2
3
int **a;
a = (int **)malloc(n*sizeof(int *));
for(i=0; i<n; i++) a[i] = (int *)malloc(n*sizeof(int));
Semenltd
0 / 0 / 0
Регистрация: 15.02.2013
Сообщений: 9
28.03.2013, 11:15     Разреженные матрицы #18
CSS метод хранения разреженных матриц, когда матрица хранится в упакованном экономном виде.
Заключается он вот в чем:
a1 - числовые значения.
a2 - координата ненулевой строки.
a3 - состояние столбца.
Привожу похожий пример, только упаковка в CSR матрицу ( a2 меняется с a3 ).

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
114
115
116
117
118
119
120
121
122
123
124
125
126
#include <cstdlib> 
#include <iostream> 
 
using namespace std; 
 
int main(int argc, char *argv[]) 
{ 
srand(time(0)); 
int A[4][4]; 
int B[4][4]; 
int css[4][4]; 
int css2[4][4]; 
int a1[4],a2[4],a3[5]={1,1,1,1,1}; 
for(int i=0; i<4;i++) 
{ 
for(int j =0;j<4;j++) 
{ 
A[i][j]=0; 
B[i][j]=0; 
} 
} 
 
for ( int i =0 ;i<4;i++) 
{ 
A[i][i]=rand()%10; 
B[i][i]=rand()%10; 
} 
cout «" MATRIX A IS:" « endl ; 
for(int i =0; i<4;i++) 
{ 
 
for(int j =0;j<4;j++) 
{ 
cout « A[i][j] « " " ; 
} 
cout « endl; 
} 
cout «" MATRIX B IS:" « endl ; 
for(int i =0; i<4;i++) 
{ 
cout « endl; 
for(int j =0;j<4;j++) 
{ 
cout « B[i][j] « " " ; 
} 
} 
for(int i =0; i<4;i++) 
{ 
cout « endl; 
for(int j =0;j<4;j++) 
{ 
css[i][j]=0; 
} 
} 
 
for ( int i=0;i<4;i++) 
{ 
 
for ( int j=0;j<4;j++) 
{ 
css[i][j]=0; 
for( int k=0;k<4;k++) 
{ 
css[i][j]=css[i][j]+A[i][k]*B[k][j]; 
} 
 
} 
} 
 
cout «" MATRIX CSS IS:" « endl ; 
for(int i =0; i<4;i++) 
{ cout « endl; 
for(int j =0;j<4;j++) 
{ 
cout « css[i][j] « " " ; 
} 
} 
for ( int i=0;i<4;i++) 
{ 
for (int j=0;j<4;j++) 
{ 
if (!(css[i][j]==0)) { a1[i]=css[i][j]; a2[i]=j; a3[i+1]=a3[i]+1;} 
} 
} 
cout « "\n" « "a1 is:" ; 
for ( int i=0;i<4;i++) 
{ 
cout « " " « a1[i]; 
} 
cout « "\n" « "a2 is:"; 
for ( int i=0;i<4;i++) 
{ 
cout « " " « a2[i]; 
} 
cout « "\n" « "a3 is:"; 
for ( int i=0;i<5;i++) 
{ 
cout « " " « a3[i]; 
} 
cout « endl; 
for (int i=0;i<4;i++) 
{ 
for (int j=0;j<4;j++) 
{ 
css2[i][j]=0; 
} 
} 
for ( int i=0;i<4;i++) 
{ 
for ( int i1=a3[i];i1<a3[i+1];i1++) 
{ 
css2[i][(a2[i])]=a1[i]; 
} 
} 
cout « "\n" «" MATRIX CSS2 IS:" « endl ; 
for(int i =0; i<4;i++) 
{ 
cout « endl; 
for(int j=0;j<4;j++) 
{ 
cout « css2[i][j] « " " ; 
} 
} 
system("PAUSE"); 
return EXIT_SUCCESS; 
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.03.2013, 13:07     Разреженные матрицы
Еще ссылки по теме:

C++ Преобразование матрицы (удалить из матрицы столбец с наибольшей по модулю суммой элементов)

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

Или воспользуйтесь поиском по форуму:
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
28.03.2013, 13:07     Разреженные матрицы #19
Авторам разреженных матриц читать Герберта Шилдта в надежде почерпнуть идеи или прямо из текста, или оттолкнувшись от текста пойти дальше.
Yandex
Объявления
28.03.2013, 13:07     Разреженные матрицы
Ответ Создать тему
Опции темы

Текущее время: 09:07. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru