IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

> Время выполнения алгоритма
sheka
сообщение 16.04.2011 11:29
Сообщение #1


Я.
****

Группа: Пользователи
Сообщений: 809
Пол: Мужской
Реальное имя: Саша

Репутация: -  11  +


Упорядочить отдельно каждое сечение трехмерного массива А [p, m, n] насквозь по колонкам по неубыванию.
сортировка (Показать/Скрыть)
Сортировка выдает удивительные вещи для разных размеров массива, хотя по идее должна выдавать одинаковые(как-бы логично):Прикрепленное изображение
Ведь если(допустим массив отсортирован) посчитать количество таких (первых)
выражений (Показать/Скрыть)
то получится p*n*(m2+m-2)/2, а таких (вторых)
выражений (Показать/Скрыть)
то получится p*m*(n2+n-2)/2*m
Если все это упростить и построить график http://www.wolframalpha.com/input/?i=plot+...10%2C+n%3D1..10 то он окажется почти симметричным относительно m и n, без резких перегибов в какую либо сторону.

Сообщение отредактировано: sheka - 16.04.2011 11:52
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
volvo
сообщение 17.04.2011 17:24
Сообщение #2


Гость






И все равно нельзя сравнивать время обработки матриц. Количество сравнений - одинаковое (что-то я проморгал, не туда воткнул счетчик, согласен). Но...
Сравним количество перемещений: (Показать/Скрыть)


Для чистоты эксперимента я решил прогнать этот тест на абсолютно одинаковых данных:

  // -- 60 randoms for test --
const RSize = 5 * 6 * 2;
var R : array[1 .. RSize] of MyType;

procedure PCube_Init(var Cube: PCube; const p, m, n: word);
var
i, j, k: word;
curr : Word;
begin
curr := 1;
for i := 1 to p do
for j := 1 to m do
for k := 1 to n do
begin
Cube^[i]^[j]^[k] := R[curr];
Inc(Curr);
end;
end;
procedure PCube_Print(var Cube: PCube; const p, m, n: word);
var
i, j, k: word;
begin
for i := 1 to p do
begin
writeln;
writeln('Layer:', i);
for j := 1 to m do
begin
for k := 1 to n do
begin
write(Cube^[i]^[j]^[k]:5);
end;
writeln;
end;
end;
end;

При входе в Menu, еще до Repeat, выполняется
for i := 1 to RSize do
begin
R[i] := Random(100);
end;

, т.о., генерируются случайные данные, которые потом будут использованы для инициализации матрицы. И проверим, сколько перемещений делается в матрице (5*6*2), и сколько - в матрице (5*3*4). Как? Вот так:
      2: // Выбрана сортировка Cube в меню
begin
(*
Create(Cube,p,m,n);
CubeFill[FillType](Cube,p,m,n);
Time := CubeSort[SortType](Cube,p,m,n);
writeln('Time = ',Time);
Destroy(Cube,p,m,n);
*)
writeln('first');
p := 5; m := 6; n := 2;
PCube_Create(Cube,p,m,n);
PCube_Init(Cube,p,m,n);
PCube_Print(Cube,p,m,n);
readln;

Time := CubeSort[3](Cube,p,m,n);
PCube_Print(Cube,p,m,n);
writeln('Time = ',Time);
Destroy(Cube,p,m,n);

readln;

writeln('second');
p := 5; m := 3; n := 4;
PCube_Create(Cube,p,m,n);
PCube_Init(Cube,p,m,n);
PCube_Print(Cube,p,m,n);
readln;

Time := CubeSort[3](Cube,p,m,n);
PCube_Print(Cube,p,m,n);
writeln('Time = ',Time);
Destroy(Cube,p,m,n);
end;
, дальше все без изменений.

Запускаем, выполняем, и получаем: (Показать/Скрыть)
Чувствуешь разницу? На первой матрице count = 170, на второй - 135. Как думаешь, какая из них будет обрабатываться дольше? Здесь по значению Time этого не видно, очень маленькие размеры. Но у второй матрицы (в данном случае) явно есть преимущества в скорости. В эту сторону тоже посмотри...
 К началу страницы 
+ Ответить 

Сообщений в этой теме


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 21.07.2025 10:39
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"