Помощь - Поиск - Пользователи - Календарь
Полная версия: Реализация динамических матриц
Форум «Всё о Паскале» > Pascal, Object Pascal > Теоретические вопросы
sheka
Цитата
...чтобы работать с динамическими матрицами, проще всего представить матрицу, как массив векторов...

http://volvo71.narod.ru/faq_folder/dyn_arr.htm
А как работать с ними если сделать "сложнее" (если объявить размерность через запятую).
Вопрос тупой - прошу такой же ответ, т.к. задача стоит сортировать трехмерный массив и замерить время, а если использовать представление трехмерного массива как массив матриц, то показатели должны исказиться, что недопустимо.
volvo
Цитата
если использовать представление трехмерного массива как массив матриц, то показатели должны исказиться, что недопустимо.
Показатели должны исказиться относительно чего, можно узнать?

Что значит,
Цитата
(если объявить размерность через запятую).
? Как ты хочешь объявлять массивы, покажи...
sheka
Время. Все дело во времени.

Вот как-то так:
type ta = array[1..1 .. maxint div sizeof(TType),1 .. maxint div sizeof(TType)] :TType;

Цель курсача:
сравнивание времени сортировки вектора, трехмерного массива разной формы. Суммарное количество элементов одинаковое.

Брр... скорее всего, я не тот вопрос задал. Вот "гвоздь программы":
На сколько я понимаЛ, обращение к элементу массива a^[1] должно было быть дольше чем b[1], но вот эта программка на миллионе проверок выдает результаты одинаковые, то чуть больше в одну сторону, то в другую. Так ли это на самом деле?
Код (Показать/Скрыть)

Вааще ниче не шарю:
выводит такие результаты:
1921
2304
2288
Все наоборот..
FPC, win7. из под ДосБокса, к сожалению, не могу попробовать, чтобы принудительно уменьшить скорость процессора, поэтому брал количеством.
Lapp
Разница во времени вряд ли велика и будет зависеть от оптимизации.
Цитата(sheka @ 13.04.2011 1:34) *
Вааще ниче не шарю:
выводит такие результаты:
1921
2304
2288
Все наоборот..
FPC, win7. из под ДосБокса, к сожалению, не могу попробовать, чтобы принудительно уменьшить скорость процессора, поэтому брал количеством.

А ты вообще обращаешь внимание на параметры компиляции?
Вот результаты на моем компе.
1. Без оптимизации, с Range Check
872
844
844

2. С оптимизацией, с Range Check
391
272
262

3. С оптимизацией, без Range Check
262
261
260

А DosBox может существенно портить картину..

sheka
ДосБокс - для того, чтобы можно было посчитать время для массива 40*40*n (какое n - еще пока не придумал), но размер не очень большой.

Значит вы считаете, что скорость многоразового выполнения вот этого (того, что написано в каждой строчке)
многоразово a[i,j,k]
многоразово a[i][j][k]
многоразово a^[i]^[j]^[k]
однократно b := a^[i], а потом многоразово b^[j]^[k]
однократно с := a^[i]^[j], а потом многоразово с^[k]
будет одинаковой, т.е. разницей можно пренебречь даже для довольно малых размеров массива?

Ваше мнение очень важно, т.к. еще раз повторюсь, что цель курсача:
сравнивание времени сортировки вектора, трехмерного массива разной формы. Суммарное количество элементов одинаковое и если изменение времени будет как раз из-за того что я использовал как-то по разному обращение к элементам - это не хорошо.
volvo
Разницей во времени обращения можно пренебречь в данном случае. В Release-сборке различия несущественны. Другое дело - что, когда ты начнешь решать свою задачу, может быть не тот результат который есть сейчас. Сейчас ты тестируешь скорость обращения к одному (причем первому) элементу массива. Как только начнется обращение к разным элементам - картина может чуть-чуть поменяться. Но не сильно, не беспокойся, я сделал несколько прогонов, отличия - в 3-5 единиц. Это, опять же, несущественно.

Можешь проверить не время 1 млн. обращений, а количество тактов на каждое (одно) обращение: здесь лежит функция. Тоже, после нескольких прогонов, увидишь, что средние значения примерно равны.

Цитата
еще раз повторюсь, что цель курсача:
сравнивание времени сортировки вектора, трехмерного массива разной формы. Суммарное количество элементов одинаковое и если изменение времени будет как раз из-за того что я использовал как-то по разному обращение к элементам - это не хорошо.
Я еще раз не понимаю, почему надо использовать разные способы обращения к элементам? Не умеешь создавать динамический трехмерный массив? Учись . Создал массив A[1..2,1..3,1..5], массив B[1..5,1..1,1..6], и массив С[1..3,1..10,1..1]. Все три - динамические, у всех общее число элементов = 30, у всех одинаковый метод доступа. И сравнивай время сортировки...
Lapp
Цитата(sheka @ 13.04.2011 21:25) *
ДосБокс - для того, чтобы можно было посчитать время для массива 40*40*n (какое n - еще пока не придумал), но размер не очень большой.
ДосБокс в качестве замедлителя?.. blink.gif Это в корне неверный подход. Ты не знаешь, что в нем происходит. Используй многогратные проходы.

И вообще, подобные исследования на современных процах с многоуровневым многомегабайтным кешем и в многозадачной системе - дело непростое. Плюс - проц наверняка 64-битный, в про систему ты не обмолвился.. Да тут параметров для учета больше, чем звезд на небе (well, в городе)). Сначала надо бы понять, что ты хочешь и поставить задачу точнее (учтя влияния всех компонент).
sheka
Цитата
Не умеешь создавать динамический трехмерный массив?
C этим проблем нет.
Цитата
Я еще раз не понимаю, почему надо использовать разные способы обращения к элементам? .... Все три - динамические, у всех общее число элементов = 30, у всех одинаковый метод доступа. И сравнивай время сортировки...
Так и буду делать, но вдруг там что-то придумаю, а так делать окажется нельзя.
Цитата
ДосБокс в качестве замедлителя?.. Это в корне неверный подход. Ты не знаешь, что в нем происходит. Используй многогратные проходы.
Это уже не мне решать smile.gif
Цитата
Сначала надо бы понять, что ты хочешь и поставить задачу точнее (учтя влияния всех компонент).
ы.. тут ответ однозначный - Сдать lol.gif
А если серьезно, то задача очень простая(если не вникать в подробности smile.gif ):
Упорядочить отдельно каждое сечение трехмерного массива А [p, m, n] насквозь по колонкам по неубыванию.
Проход по сечению разными вариантами.

А вот тут моя больная фантазия бы наделала кучу процедур, передавала бы туда сечение итд итп, где-бы и применялись
Цитата
разные способы обращения к элементам
. Но к счастью так делать нельзя и все надо писать слитным текстом. Так же если использовать дин. массив, то думал, что обращение к элементам будет существенно искажать результат.
Lapp
Цитата(sheka @ 14.04.2011 1:13) *
ы.. тут ответ однозначный - Сдать lol.gif

желаю успеха..
я больше в эт тему не глядец..
sheka
Цитата
ы.. тут ответ однозначный - Сдать
А если серьезно

Цитата
желаю успеха..
я больше в эт тему не глядец..

Плох тот студент, который не желает сдать.
Lapp
Цитата(sheka @ 16.04.2011 2:30) *
Плох тот студент, который не желает сдать.

Саш, я все понимаю и не хочу выгядеть ханжой (конечно, сдавай!), но и ты пойми: когда я не вижу способа посоветовать, исходя из разумных соображений, я лучше не буду советовать совсем (иначе я скорее помешаю, чем помогу).
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.