Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Теоретические вопросы _ Реализация динамических матриц

Автор: sheka 13.04.2011 3:14

Цитата
...чтобы работать с динамическими матрицами, проще всего представить матрицу, как массив векторов...

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

Автор: volvo 13.04.2011 3:32

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

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

Автор: sheka 13.04.2011 4:34

Время. Все дело во времени.

Вот как-то так:
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 13.04.2011 6:51

Разница во времени вряд ли велика и будет зависеть от оптимизации.

Цитата(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 14.04.2011 0:25

ДосБокс - для того, чтобы можно было посчитать время для массива 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 14.04.2011 0:57

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

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

Цитата
еще раз повторюсь, что цель курсача:
сравнивание времени сортировки вектора, трехмерного массива разной формы. Суммарное количество элементов одинаковое и если изменение времени будет как раз из-за того что я использовал как-то по разному обращение к элементам - это не хорошо.
Я еще раз не понимаю, почему надо использовать разные способы обращения к элементам? Не умеешь создавать динамический трехмерный массив? http://forum.sources.ru/index.php?showtopic=51192&view=findpost&p=2677514 . Создал массив A[1..2,1..3,1..5], массив B[1..5,1..1,1..6], и массив С[1..3,1..10,1..1]. Все три - динамические, у всех общее число элементов = 30, у всех одинаковый метод доступа. И сравнивай время сортировки...

Автор: Lapp 14.04.2011 3:37

Цитата(sheka @ 13.04.2011 21:25) *
ДосБокс - для того, чтобы можно было посчитать время для массива 40*40*n (какое n - еще пока не придумал), но размер не очень большой.
ДосБокс в качестве замедлителя?.. blink.gif Это в корне неверный подход. Ты не знаешь, что в нем происходит. Используй многогратные проходы.

И вообще, подобные исследования на современных процах с многоуровневым многомегабайтным кешем и в многозадачной системе - дело непростое. Плюс - проц наверняка 64-битный, в про систему ты не обмолвился.. Да тут параметров для учета больше, чем звезд на небе (well, в городе)). Сначала надо бы понять, что ты хочешь и поставить задачу точнее (учтя влияния всех компонент).

Автор: sheka 14.04.2011 4:13

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

А вот тут моя больная фантазия бы наделала кучу процедур, передавала бы туда сечение итд итп, где-бы и применялись
Цитата
разные способы обращения к элементам
. Но к счастью так делать нельзя и все надо писать слитным текстом. Так же если использовать дин. массив, то думал, что обращение к элементам будет существенно искажать результат.

Автор: Lapp 14.04.2011 4:24

Цитата(sheka @ 14.04.2011 1:13) *
ы.. тут ответ однозначный - Сдать lol.gif

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

Автор: sheka 16.04.2011 5:30

Цитата
ы.. тут ответ однозначный - Сдать
А если серьезно

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

Плох тот студент, который не желает сдать.

Автор: Lapp 16.04.2011 10:17

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

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