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

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

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

> Время выполнения алгоритма
сообщение
Сообщение #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 -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
сообщение
Сообщение #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

 





- Текстовая версия 9.09.2025 10:27
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name