LINUX.ORG.RU
ФорумTalks

[разминка для ума] кривой рандом


0

1

Про грин-карты. Когда мне гугл подсунул эту новость (о том, что американцы отменили результаты лотереи с грин-картами из-за того, что 90% выигравших заявок были поданы в первые два дня приёма), я подумал — это что за алгоритм такой?

Думал долго, придумал два алгоритма. Первый я назвал «алгоритмом Единой России» (пример на перле)

my @winners = ();
MAIN: while (@requests) {
    foreach $req (@requests) {
        if ( int(rand(2)) ) {
            print "winner is $req\n";
            push @winners, $req;
            @requests = grep { $_ != $req } @requests;
            next MAIN;
        }
    }
}

Для тех, кто не знаком с перлом: берём заявки по очереди и для каждой бросаем монетку: орёл — выиграла, решка — не выиграла. Потом повторяем для остальных. Какая из заявок первой получила орла — та и победила. Почему это называется методом «Единой России» — потому что она получает первое место в бюллетенях как раз в половине случаев. По тексту на ленте сильно похоже, что там использовался именно такой алгоритм.

Тут я решил, что должны быть другие кривые алгоритмы, подумал-подумал, придумал совершенно убогий алгоритм: разбить пул заявок на несколько частей (прямо по порядку, первые 100, вторые 100), выбрать наугад одну часть и набрать из неё победителей. Но это надо быть круто упоротым, чтобы такой алгоритм использовать.

Дальше моя инженерная мысль не пошла. Помогите придумать ещё алгоритмов.

★★

Последнее исправление: name_no (всего исправлений: 1)

Есть ещё алгоритм, которым микрософт «рандомизировали» положение браузеров на страничке для их выбора - ну, которую сделать ЕС заставил.
Вот он: http://javascript.about.com/library/blsort2.htm
После рандомизации массива берешь N первых в качестве победителей.

Smacker ★★★★★
()
Ответ на: комментарий от stevejobs

> а почему второй алгоритм - упоротый? ;)

потому что на части разбивается не по рандому, а по порядку, первые 100 заявок, вторые сто заявок... при таком подходе если набирать победителей только из одной части, получится совсем уж издевательство над здравым смыслом

name_no ★★
() автор топика

Да, скорее всего имел место первый алгоритм. Либо коэффициенты были расчитаны на N заявок а поступило больше расчетных и поэтому втихую подкрутили коэффициенты

DNA_Seq ★★☆☆☆
()

предлагаю набирать людей из предварительно заготовленного списка. Например тех, кто уплотил взяточку

stevejobs ★★★★☆
()
Ответ на: комментарий от Eddy_Em

> сват

человек, состоящий в S.W.A.T.

брат


человек, стоящий на руководящих позициях мафии или эквивалентной криминальной структуры

друг


человек, с которым у вас много общих откатов и зарытых в карьере братьев, свавтов и других друзей


да, я бы тоже дал

stevejobs ★★★★☆
()
Ответ на: комментарий от name_no

> потому что на части разбивается не по рандому, а по порядку

И что?

при таком подходе если набирать победителей только из одной части, получится совсем уж издевательство над здравым смыслом


Никакого издевательства. Вероятность выигрыша отдельного участника не изменится — хоть рандомно бей, хоть по порядку. Дай название быдловуза, в котором ты отучился, и в котором не объясняют таких базовых вещей.

fang
()
Ответ на: комментарий от fang

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

stevejobs ★★★★☆
()

Ну, можно ещё rand(half)+rand(half). Получим треугольный график вероятности распределения.

Sadler ★★★
()
Ответ на: комментарий от fang

> Вероятность выигрыша отдельного участника не изменится — хоть рандомно бей, хоть по порядку. Дай название быдловуза, в котором ты отучился, и в котором не объясняют таких базовых вещей.

Сходи к себе в деканат и попроси порвать твой диплом, двоечник.

name_no ★★
() автор топика
Ответ на: комментарий от Sadler

> Ну, можно ещё rand(half)+rand(half). Получим треугольный график вероятности распределения.

О, спасибо, хитрый алгоритм

name_no ★★
() автор топика
Ответ на: комментарий от name_no

Я лучше схожу к оператору биоректора и попрошу, чтобы тебя там сожгли вне очереди.

fang
()
Ответ на: комментарий от name_no

> О, спасибо, хитрый алгоритм

Это ЦПТ. Если будет больше сложений, получится нормальное распределение.

Sadler ★★★
()

Есть N заявок. Выбираем случайное число от 1 до N-первый выигравший - пусть это N1. Берем случайное число от 1 до N1 - получаем N2. итд

cvs-255 ★★★★★
()
Ответ на: комментарий от cvs-255

При этом первая заявка всегда выигрывает. Вот и возможность для блата.

cvs-255 ★★★★★
()
Ответ на: комментарий от cvs-255

Вероятность выиграть игроку номер m равна 1/m

cvs-255 ★★★★★
()

Бабллсорт от рандома.

МС так сортировало браузеры в окошке их выбора.

Гугли.

Тоже даёт неравномерные результаты.

ChALkeR ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.