Возрастающая последовательность, разность элементов...

и задачки для интервью.
User avatar
M. Ridcully
Уже с Приветом
Posts: 12003
Joined: 08 Sep 2006 20:07
Location: Силиконка

Возрастающая последовательность, разность элементов...

Post by M. Ridcully »

Что-то я мозги сломал, никак не получается решить.

Есть некая возрастающая последовательность N(i). Нужно сгенерировать последовательность всех пар (i, j) в таком порядке, чтобы значения N(j) - N(i) возрастали.

Если это как-то помогает, N(i+1) - N(i) > N(i) - N(i - 1) для всех i.
demo
Уже с Приветом
Posts: 267
Joined: 14 Jul 2005 04:28
Location: Nsk -> College Park, MD

Re: Возрастающая последовательность, разность элементов...

Post by demo »

N(1)...N(n) - the sequence

add (1,n) to agenda
while agenda is not empty do
remove the longest element (i,j) from agenda
output (i,j)
if i < j-1 then
add (i,j-1) to agenda
add (i+1,j) to agenda
done

это решение не требует N(i+1) - N(i) > N(i) - N(i - 1), возможно с этим условием есть более елегантное решение.
User avatar
M. Ridcully
Уже с Приветом
Posts: 12003
Joined: 08 Sep 2006 20:07
Location: Силиконка

Re: Возрастающая последовательность, разность элементов...

Post by M. Ridcully »

N(i) бесконечная.

Т.е. надо написать генератор (i, j), у которого N(j) - N(i) возрастают (ну или не убывают)
.
User avatar
M. Ridcully
Уже с Приветом
Posts: 12003
Joined: 08 Sep 2006 20:07
Location: Силиконка

Re: Возрастающая последовательность, разность элементов...

Post by M. Ridcully »

Я сначала чисто интуитивно (c учётом возрастающей разности последующих элементов) попробовал что-то вроде:

упс, фигню явную написал...
demo
Уже с Приветом
Posts: 267
Joined: 14 Jul 2005 04:28
Location: Nsk -> College Park, MD

Re: Возрастающая последовательность, разность элементов...

Post by demo »

Да, я попутал маленько, вместо возрастающей написал убывающую последовательность.

Если последовательность бесконечная, то решение в общем виде потребует бесконечной памяти:
Положим N(2) - N(1) = 1.
Для любого числа M можно подобрать такое приращение шага e, что N(M+1)-N(M) < 2
В таком случае, все отрезки длиной больше 2, а их M*(M-2) не могут быть посланы на вывод, поскольку впереди может отрезок длиной 2.

Тут что-то не так, как говоорил Джон Сильвер ;)
User avatar
vlad12345
Уже с Приветом
Posts: 605
Joined: 14 Feb 2002 10:01
Location: Russia

Re: Возрастающая последовательность, разность элементов...

Post by vlad12345 »

M. Ridcully wrote:...Есть некая возрастающая последовательность N(i). Нужно сгенерировать последовательность всех пар (i, j) в таком порядке, чтобы значения N(j) - N(i) возрастали.
Что значит "всех пар" ? Вот например пара (1,1) и пара (2,2), для них N(j) - N(i) = 0, как их ни расставь возрастания не получится. Или предполагается, что не все возможные паросочетания, а каждый элемент может участвовать только один раз в какой-либо паре? Или один раз слева, один раз справа? Или еще как...
M. Ridcully wrote:Если это как-то помогает, N(i+1) - N(i) > N(i) - N(i - 1) для всех i.
T.е. у нас не любая возрастающая последовательность, а только такая, что удовлетворяет этому условию?

Return to “Головоломки”