Форум программистов, компьютерный форум 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
lemegeton
Форумчанин
2688 / 1213 / 44
Регистрация: 29.11.2010
Сообщений: 2,495
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
Форумчанин
2688 / 1213 / 44
Регистрация: 29.11.2010
Сообщений: 2,495
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
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать новую тему

Похожие темы
Тема Раздел Ответов Автор Дата
C++ Простой неориентированный граф задан списком ребер, выведите его представление в виде матрицы смежности
Нужно задать граф списком ребер и вывести его в виде матрицы смежности. Знаю что в i строке j столбце ставят 1 если между вершинами i и j существует ребро или 0, если его не существует. Список...
С++ для начинающих 1 Pomogi 03.11.2013 19:37
C++ представление текста в виде списка
взять произвольный тексти вывести в консоль все слова, которые начинаются с буквы, отличную от буквы, с которой начинается первое слово текста. Перед печатью удалить из слов все буквы 'a' и 'o'. Для...
С++ для начинающих 0 __Александр__ 26.10.2013 14:28
C++ представление бинарного дерева в виде массива
привет всем! как реализуется бинарное дерево в виде массива ? пришлите пожалуйста код для изучения или посоветуйте какую нибудь литературу (где это тема подробно описано ).
С++ для начинающих 0 septe-mber 31.05.2013 08:42
C++ Представление кода в виде функции
Столкнулся с проблемой, сделал код в виде функций, все запускается и вроде бы работает, но как введу значения жму Enter и программа просто виснет. В чем может быть проблема? Компилятор все норм...
С++ для начинающих 10 samarcs 30.12.2012 00:34
C++ символьное представление в виде последовательности цифр
Помогите пожалуйста решить такие задачи:а) Дано натуральное число n. Получить символьное представление n в виде последовательности цифр и пробелов, отделяющих группы по 3 цифры начиная с права....
С++ для начинающих 0 SKripon 18.12.2012 21:16
C++ Представление графа через вектор векторов
Есть граф, нужно записать его список смежности в вектор векторов, на практике в ВУЗе был дан алгоритм, но есть проблема программа считывает только первую строку а адальше все проскакивает, собственно...
С++ для начинающих 0 MsHassium 14.09.2012 22:00
C++ Представление графа в виде списка вершин.
Стыдно спрашивать, просто хочется сделать чтобы все работало правильно и быстро. Дело в том, что раньше я всегда хранил граф в виде списка ребер, если знаете(head, next, to). А теперь хочу сделать,...
С++ для начинающих 2 MadMag 23.07.2011 14:02
C++ сложение и вычитание векторов, скалярное произведение векторов, умножение на скаляр, сравнение векторов, вычисление длины вектора
вот 2 вопроса первый простой для спецов а второй может я чтото не понял но в лабе он так и звучит. 1) Составить программу для вычисления суммы 10 заданных целых чисел. 2) Создать класс...
С++ для начинающих 5 xz386 27.05.2010 00:43
Опции темы

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