Показать сообщение отдельно
Старый 03.11.2011, 14:59   #6
impersonalis
Зануда с интернетом
 
Аватар для impersonalis
 
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений
(для 20,935 пользователей)
Ответ: Выбор из множества

Дорогой, Aikon, очень приятно, что ты осилил мой пост и даже предложил своё решние
Const Size%=3
Dim Vector(Size)
For i=1 To Size
Vector(i)=i
Next

Global LI=0

While True
Local k%=WaitKey()
If Chr(k)="1" Then Exit
;=
If LI=0
LI=Rand(1,Size)
Else
Local newLI% = LI
newLI = Rand(1,Size)
If newLI = LI Then
newLI = (LI + 3) Mod Size
LI=newLI
EndIf
EndIf
;=
Print Vector(LI)
Wend
End

которое, к сожалению, выдаёт следующий ряд 22222222222222222222222222222222222222222222222222 222222222
Угадай: почему? Уж не из-за отсутствия "нафиг" ненужного рнд? Хотя прибавка размера (+3) тоже сильно "помогает".

Что касается предложения dsd (последнего, на которое ты сослался), то, такой механизм:
1) работает (опять-таки) разное время
2) потащит за собой дополнительные проверки на выход за границы массива
3) увеличивает вероятность выпадания одного из элементов на P`=1/(N-1), повышая тем самым автокорреляцию распределения.
4) при этом выгоды (перевешивающей п.1-3) я не вижу чего-то
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
(Offline)
 
Ответить с цитированием