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

C++ сложение и вычитание векторов, скалярное произведение векторов, умножение на скаляр, сравнение векторов, вычисление длины вектора
C++ Визуальное представление в виде WPF или CLI
C++ Представление графа в виде списка вершин.
C++ Представление кода в виде функции
C++ Простой неориентированный граф задан списком ребер, выведите его представление в виде матрицы смежности
C++ Представление числа N в виде всевозможных сумм K
C++ Создать класс для обработки векторов разность векторов норму векторов
C++ Как умножить две матрицы в виде векторов?

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

Поиск по форуму:
lemegeton
Форумчанин
2690 / 1215 / 44
Регистрация: 29.11.2010
Сообщений: 2,502
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;
stopanko
Новичок
1 / 1 / 0
Регистрация: 10.05.2012
Сообщений: 13
22.04.2013, 22:59  [ТС]     Представление матрицы в виде векторов Айлиффа   #3
Есть ли разница в скорости обращения с матрицей в таком виде?
lemegeton
Форумчанин
2690 / 1215 / 44
Регистрация: 29.11.2010
Сообщений: 2,502
23.04.2013, 08:50     Представление матрицы в виде векторов Айлиффа   #4
Цитата Сообщение от stopanko Посмотреть сообщение
Есть ли разница в скорости обращения с матрицей в таком виде?
Сравнивая с чем? С обычной int[H][W]? Как-то не замерял, но должна быть. Замерьте и расскажите.
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();
}
Миниатюры
Представление матрицы в виде векторов Айлиффа  
Yandex
Объявления
24.04.2013, 13:13     Представление матрицы в виде векторов Айлиффа
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Опции темы

Текущее время: 02:22. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.7 PL3
Copyright ©2000 - 2014, vBulletin Solutions, Inc.
Яндекс.Метрика