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 14:33
Сообщение #2


Гость






Так... Давай для начал разберемся, что ты делаешь, и имеешь ли ты право вот так запросто сравнивать результаты. Чуть-чуть изменяем
  function PCube_SelectExchange2_byTruthIndex(var Cube: PCube; const p, m, n: word): longint;
var
B: MyType;
i,
ks, js,
jt, kt: word;
StartTime, FinishTime: TTime;
cnt : longint; // <--- 1
Begin
cnt := 0;
with StartTime do GetTime(Hours,Minutes,Seconds,HSeconds);
for i := 1 to p do
for ks := 1 to n do
for js := 1 to m do
begin
for jt := js+1 to m do
begin
inc(cnt); // <--- 2
if Cube^[i]^[jt]^[ks] <= Cube^[i]^[js]^[ks] then
begin
b := Cube^[i]^[jt]^[ks];
Cube^[i]^[jt]^[ks] := Cube^[i]^[js]^[ks];
Cube^[i]^[js]^[ks] := b;
end;
end;
for kt := ks+1 to n do
begin
inc(cnt); // <--- 3
for jt :=1 to m do
if Cube^[i]^[jt]^[kt] <= Cube^[i]^[js]^[ks] then
begin
b := Cube^[i]^[jt]^[kt];
Cube^[i]^[jt]^[kt] := Cube^[i]^[js]^[ks];
Cube^[i]^[js]^[ks] := b;
end;
end;
end;
with FinishTime do GetTime(Hours,Minutes,Seconds,HSeconds);
writeln ('count = ', cnt); // <--- 4
PCube_SelectExchange2_byTruthIndex := ResTime(StartTime, FinishTime);
end;
, то есть, проверяем количество сравнений (от него же зависит общее время работы с матрицей). Что имеем? Правильно: у матриц (100*4*400) и (100*400*4) счетчик одинаков и = 32160000. А вот у матрицы (100*40*40) - 6240000, то бишь в 5 с лишним раз меньше. Откуда возникают вопросы. Первый из них - ты вообще тестировал свой алгоритм? Скажем, на матрицах 5*6*2 и 5*3*4? Визуально проверял, работает ли он? Сортируется одинаково? А то выполняешь вслепую какие-то действия, потом сравниваешь результаты, а их, возможно, вообще нельзя сравнивать...
 К началу страницы 
+ Ответить 

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


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

 



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