avva: (Default)
[personal profile] avva

Знакомый рассказал, ему на интервью задали. Красивая задачка, но совсем не подходящая для интервью, по-моему.

Есть некий поток элементов. Вызывая снова и снова функцию getnext(), вы получаете каждый раз следующий элемент из потока, и так до тех пор, пока функция не вернет EOF, что означает, что поток закончился. Гарантировано, что все элементы, полученные таким образом, будут отличаться друг от друга. Вернуться к началу потока, или получать элементы в каком-то другом порядке, кроме как один за другим с помощью getnext(), невозможно.

Известно, что поток когда-нибудь кончается, но заранее про количество элементов ничего не известно.

Требуется: написать функцию, которая, когда ее вызывают (а вызывают ее один раз), возвращает выбранный случайным образом один из элементов потока, притом у каждого из элементов потока одинаковая вероятность быть возвращенным этой функцией.

Функция должна использовать фиксированное количество памяти (иными словами, O(1) памяти).

Update: учтите, что в комментариях уже есть правильные ответы.

:)

Date: 2007-02-21 02:05 pm (UTC)
From: [identity profile] yurilax.livejournal.com
ага, напомнило вот это:

Image

Re: :)

Date: 2007-02-21 02:13 pm (UTC)
From: [identity profile] toyvo.livejournal.com
Примерно так:)
Вопрос контекста:)

January 2026

S M T W T F S
    1 2 3
4 5 6 7 8 910
11 12 1314 15 1617
18192021222324
25262728293031

Most Popular Tags

Page Summary

Style Credit

Expand Cut Tags

No cut tags
Page generated Jan. 16th, 2026 04:04 pm
Powered by Dreamwidth Studios