Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
Я в МГУ в 90х годах слышал про эту задачу в такой постановке - мы приходим на продуктовый рынок, там цены на одни и те же товары сравнимого качества сильно разнятся, пусть это будут помидоры, задача - купить самые дешевые помидоры, не возвращаясь обратно.
Нужно обойти примерно размер рынка деленное на "e" и купить первые помидоры, которые дешевле тех, что уже обошли. Это будут с большой вероятностью самые дешевые помидоры.
Мы конечно не знаем закон, по которому распределены случайные числа в конвертах, но предположим, что это равномерное распределение на (0; +inf).Собственно закон распределения тут играет решающую роль при выборе стратегии. Что такое «равномерное распределение на (0:+inf)» науке не известно, посему и все остальные рассуждения смысле не имеют.
b=a&0x55555555;
a=(a>>1)&0x55555555;
a=((a&b)<<1) | (a^b);
b=a&0x33333333;
a=(a>>2)&0x33333333;
c=(a&b)<<1;
a^=b^c;
b=a&0x0f0f0f0f;
a=(a>>4)&0x0f0f0f0f;
c=(a&b)<<1;
a^=b;
b=(a&c)<<1;
a^=b^c;
b=a&0x00ff00ff;
a=(a>>8)&0x00ff00ff;
c=(a&b)<<1;
a^=b;
b=(a&c)<<1;
a^=c;
c=(a&b)<<1;
a^=b^c;
b=a&0x0000ffff;
a>>=16;
c=(a&b)<<1;
a^=b;
b=(a&c)<<1;
a^=c;
c=(a&b)<<1;
a^=b;
b=(a&c)<<1;
a^=b^c;
++ -+ -- +- ++ -+ и т.д.
0 1 2 3 ++ +- -- +- ++ ++ ++ -+
| а | б | с |
-------------------------------
0 | ++ | 1 | 3 | 2 |
| ++ | | | |
-------------------------------
1 | -+ | 0,2,3 | 1 | 1 |
| ++ | | | |
-------------------------------
2 | -- | 1 | 2 | 0,3 |
| ++ | | | |
-------------------------------
3 | +- | 1 | 0 | 2 |
| -+ | | | |
while(state != 0) {
switch(state) {
case 1:
а();
break;
case 2:
с();
break;
case 3:
б();
break;
}
state = getState();
}
Пара старых задачек по-массачусетски