Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/6: Рейтинг темы: голосов - 6, средняя оценка - 5.00
stopanko
1 / 1 / 0
Регистрация: 10.05.2012
Сообщений: 13
1

Представление матрицы в виде векторов Айлиффа

21.04.2013, 17:59. Просмотров 1046. Ответов 4
Метки нет (Все метки)

Нужно реализовать представление матрицы методом Айлиффа. С принципом ознакомился но как реализовать не знаю
http://samoucka.ru/document24926.html
Хелп плис. Если можно маленький пример с матрицей 2 на 2 или 4 на 4 на c# или на с++.
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.04.2013, 17:59
Ответы с готовыми решениями:

Как умножить две матрицы в виде векторов?
Подскажите пж фрагмент кода как перемножить две матрицы представленых ввиде...

Простой неориентированный граф задан списком ребер, выведите его представление в виде матрицы смежности
Нужно задать граф списком ребер и вывести его в виде матрицы смежности. ...

Адресация методом Айлиффа
Необходимо создать адресацию в 4-х мерном массиве(base) методом Aйлиффа. Вот...

Представление формулы в виде кода
Здравствуйте. Подскажите, пожалуйста, как представить в виде кода первую часть...

Представление числа в 16-ричном виде
Как это звучит на русском? e=C%16; d=C/16;...

4
lemegeton
2935 / 1364 / 467
Регистрация: 29.11.2010
Сообщений: 2,725
22.04.2013, 01:00 2
Прочитал. Не увидел разницы между методом Айлиффа и банальным вложением указателей. Суть, похоже, одинаковая -- экономия на умножении при адресации за счет выделения дополнительной памяти.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
// указатель на указатели на интеджер
int **matrix;
 
// Создание и заполнение случайными числами
// создание первого массива
matrix = new int*[10];
for (int i = 0; i < 10; ++i) {
  // создание вложенных массивов
  matrix[i] = new int[10];
  // заполнение значений случайными числами 
  for (int j = 0; j < 10; ++j) {
    matrix[i][j] = rand() % 10;
  }
}
 
// обычное обращение
std::cout << matrix[2][2] << std::endl;
 
// удаление
for (int i = 0; i < 10; ++i) {
  delete [] matrix[i];
}
delete [] matrix;
2
stopanko
1 / 1 / 0
Регистрация: 10.05.2012
Сообщений: 13
22.04.2013, 22:59  [ТС] 3
Есть ли разница в скорости обращения с матрицей в таком виде?
0
lemegeton
2935 / 1364 / 467
Регистрация: 29.11.2010
Сообщений: 2,725
23.04.2013, 08:50 4
Цитата Сообщение от stopanko Посмотреть сообщение
Есть ли разница в скорости обращения с матрицей в таком виде?
Сравнивая с чем? С обычной int[H][W]? Как-то не замерял, но должна быть. Замерьте и расскажите.
0
stopanko
1 / 1 / 0
Регистрация: 10.05.2012
Сообщений: 13
24.04.2013, 13:13  [ТС] 5
Замерял время - разница очень маленькая. Увеличить размерность нельзя 254 - максимум 260 - уже ошибка
(First chance exception at $75A8812F. Exception class EStackOverflow with message 'Stack overflow'. Process Allif.exe (904))
Error




Есть ли более точные методы для вычисления времени работы кода или как увеличить размерность?

Code

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
int _tmain(int argc, _TCHAR* argv[])
{
 
DWORD start; // дпочаткове запамят часу
DWORD d1, d2;// різниця в часі
int n = 254;
int m = 254;
int Rmas1[254][254];// масив результатів 1
int Rmas2[254][254];// масив результатів 2
int mas1[254][254];// масив для операцій перший
int mas2[254][254];// масив для операцій друугий
int **matrix1; //головний масив 1
int **matrix2; //головний масив 2
 
  /////////////
 
  for (int i = 0; i < n; i++) {
           for (int j = 0; j < m; j++) {
           mas1[i][j] = random(n);
           mas1[i][j] = random(m);
           }
 
       }
 
 
      matrix1 = new int*[n];
       for (int i = 0; i < n; i++) {
           matrix1[i] = new int[m];
           for (int j = 0; j < m; j++) {
                matrix1[i][j] = random(m);
                //cout<<matrix1[i][j]<<" ";
 
           }
           cout<<"\n";
       }
 
       matrix2 = new int*[n];
       for (int i = 0; i < n; i++) {
           matrix2[i] = new int[m];
           for (int j = 0; j < m; j++) {
                matrix2[i][j] = random(m);
                //cout<<matrix2[i][j]<<" ";
 
           }
           cout<<"\n";
       }
 
 
 
       start = GetTickCount(); //Старт
       for (int i = 0; i < n; i++) {
           for (int j = 0; j < m; j++) {
           Rmas1[i][j] = mas1[i][j] + mas2[i][j];
           //cout<<Rmas1[i][j]<<" ";
           }
           cout<<"\n";
       }
       d1 = (GetTickCount()-start);
  ////////////////
 
  start = GetTickCount();
       for (int i = 0; i < n; i++) {
           for (int j = 0; j < m; j++) {
           Rmas2[i][j] = matrix1[i][j] + matrix2[i][j];
            //cout<<Rmas2[i][j]<<" ";
            }
            cout<<"\n";
       }
       d2 = (GetTickCount()-start);
 
 
//d1 = (GetTickCount()-start);
/*for (int i = 0; i < n; i++)
{
  delete[] matrix1[i];
  delete[] matrix2[i];
}*/
//Ob.init(int &mas1, 10, 10);
    cout<<"d1= "<<d1<<" d2= "<<d2;
getch();
}
0
Миниатюры
Представление матрицы в виде векторов Айлиффа  
24.04.2013, 13:13
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.04.2013, 13:13

Представление кода в виде функции
Столкнулся с проблемой, сделал код в виде функций, все запускается и вроде бы...

Представление числа в виде суммы 3 и 5
Известно что любое целое положительное число, которое больше 7, можно...

Представление числа N в виде всевозможных сумм K
Составить программу, которая печатает все различные представление числа N в...


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

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

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