Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.10.24;
Скачать: CL | DM;

Вниз

Задача на общую программистскую логику   Найти похожие ветки 

 
DiamondShark ©   (2004-10-05 14:54) [40]


> KSergey ©   (05.10.04 14:20) [37]
> > [36] DiamondShark ©   (05.10.04 14:10)
> > Вместо перестановки использовать функцию преобразования
> > индекса.
>
> Но будет ли это хорошо, кроме формального удовлетворения
> условиям задачи? Вот что мне не понятно во всем этом...


А "хорошо" -- это как?


 
Igorek ©   (2004-10-05 16:24) [41]


> Igorek ©   (05.10.04 14:33) [38]

Сформулирую попонятнее. Пусть у нас есть функция doXOR(dest, op2, l) - делающая операцию искл. ИЛИ над двумя массивами, которые начинаются по адресах dest, op2 (0 - начало исходного массива) длиной l и результат и пишет результат начиная с адреса dest. Ессно. аргументы должны удовлетворять условию непересечения и не выхода за пределы m.

Задача: за константное время (причем минимальное) осуществить кольцевой сдвиг используя для изменения исх. массива только doXOR().


 
default ©   (2004-10-05 16:25) [42]

я думаю требовалось в задаче(по крайней мере такую раньше решал я...)без дополнительного массива обеспечить время работы алгоритма O(m)
то есть время работы алгоритма не зависит от величины свдига k


 
Igorek ©   (2004-10-05 16:30) [43]


> default ©   (05.10.04 16:25) [42]

Согласно условию:
1) в формуле О(...) вообще не должны фигурировать ни m ни k
2) нельзя брать дополнительную память вообще (ни под массив, ни под переменные)


 
default ©   (2004-10-05 16:34) [44]

Igorek ©   (05.10.04 16:30) [43]
пусть автор сабжа уточнит условие
я согласен что в нынешней постановке куча непоняток


 
Igorek ©   (2004-10-05 16:39) [45]


> default ©   (05.10.04 16:34) [44]
> Igorek ©   (05.10.04 16:30) [43]
> пусть автор сабжа уточнит условие
> я согласен что в нынешней постановке куча непоняток

Согласен. Но попробуй решить [41]. Я тоже дома посмотрю.


 
default ©   (2004-10-05 17:14) [46]

Igorek ©   (05.10.04 14:33) [38]
что-то я не понял
какой O(1)!?
этого быть просто не может при осуществлении физической перестановки, максимум без дополнительного массива можно достичь
временной сложности O(m) - это фактически значит что за одну перестановку каждый элемент массива обретает своё новое место
(это я делал)
в Вашем случае в подпрограмме doXor вы сами говорите о том чтоб длина массивов-параметров не превышала m
тут уже зависимость времени от m...


 
default ©   (2004-10-05 18:36) [47]

[33]
забыли индекс элемента поставить
вместо Array[(m + k) mod m]
надо
Array[(m+k+i) mod m)]
или
Array[(k+i) mod m]
i-индекс элемента, индексация с 0


 
Nikolay M. ©   (2004-10-05 18:45) [48]


> default ©   (05.10.04 18:36) [47]
> [33]
> забыли индекс элемента поставить

Угу, конечно :)


 
default ©   (2004-10-05 20:14) [49]

на основе [33]
то есть ф-ции отображения старых индексов на новые и обратной ей функции можно написать процедуру не зависящую от величины сдвига

procedure CyclicTransorm(var M: Array of TypeElement; Offset: Cardinal);
var
   i, DestIndex, SourceIndex: Cardinal;
   El1, El2: TypeElement;
begin
   DestIndex := 0;
   SourceIndex := Offset mod Length(M);
   El1 := M[SourceIndex];
   for i := 0 to High(M) do begin
     El2 := M[DestIndex];
     M[DestIndex] := El1;
     SourceIndex := DestIndex;
     if SourceIndex < Offset then
       DestIndex := SourceIndex - Offset + Length(M) else
       DestIndex := SourceIndex - Offset;
     El1 := El2;
   end;
end;


 
default ©   (2004-10-05 20:16) [50]

если нужно, то поясню подробнее...


 
default ©   (2004-10-05 21:18) [51]

[49]
опс, обломчик
не учёл преобр-ия индексов 0-2 2-0 и тд то есть то что они могут зациклив-ся


 
Igorek ©   (2004-10-06 11:50) [52]


> default ©   (05.10.04 17:14) [46]
> Igorek ©   (05.10.04 14:33) [38]
> что-то я не понял
> какой O(1)!?
> этого быть просто не может при осуществлении физической
> перестановки, максимум без дополнительного массива можно
> достичь
> временной сложности O(m) - это фактически значит что за
> одну перестановку каждый элемент массива обретает своё новое
> место
> (это я делал)
> в Вашем случае в подпрограмме doXor вы сами говорите о том
> чтоб длина массивов-параметров не превышала m
> тут уже зависимость времени от m...

Нас не интересует время работы doXor. Принимаем что оно константно.



Страницы: 1 2 вся ветка

Текущий архив: 2004.10.24;
Скачать: CL | DM;

Наверх




Память: 0.56 MB
Время: 0.026 c
1-1097566245
clampo
2004-10-12 11:30
2004.10.24
Текст по центру


6-1092814132
Sergey Vorobyev
2004-08-18 11:28
2004.10.24
Как настроить шлюз?


1-1097473055
Alekzzzz
2004-10-11 09:37
2004.10.24
Иконка из exe


1-1097164927
Zahar
2004-10-07 20:02
2004.10.24
Как отловить нажатие на TitleBar ???


4-1095760732
romario
2004-09-21 13:58
2004.10.24
Буфер обмена.