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

Кстати ещё одна фича влияния ключа (несортированного массива, задающего перестановки (кодирующего признаки)) на результат.
;графический хлам
Graphics 800,600,32,2
SetBuffer BackBuffer()
SetFont LoadFont("Arial",22)

;пример входа
Const N%=10;размер массива
Global p%[N];массив
Global r%[N];дополнительный массив
Local ec%
Local key$
For iv=1 To 3
Init()
Select iv
Case 1
key="1111111111"
Case 2
key="1111100000"
Case 3
key="0001111000"
End Select
GenKey(key)
ec=Output()
If ec=27 Exit
sort()
Color 255,0,0
Print "-----"
Color 255,255,255
ec=Output()
If ec=27 Exit
Cls
Locate 0,0
Next
End
;============================
Function Init()
For i=1 To N
p[i]=i;заполним чисилками
Next
End Function
Function GenKey(bit_key$)
;хиытрй шаффл
SeedRnd MilliSecs();рандомайз (u=2637)
If Len(bit_key)<N
RuntimeError "er len"
EndIf
For i=1 To N
r[i]=Rand(1,1000)*Int(Mid(bit_key,i,1));собственно шум
Next
End Function
Function sort()
;теперь подействуемна массив некоей функицей,
;например, отсортируем по убыванию, например,
;"вставками"
Local k%,z%
Local IterCnt%=0;число повторений (некая характеристкиа сложности)
For i=1 To N
k=r[i];при этом, с исходным массивом, мы
z=p[i];должны делать такие же преобразования,
j=i-1
While j>0 And r[j]<k
r[j+1]=r[j];что и с ориганльным -
p[j+1]=p[j];такая вот, связь =)
j=j-1
IterCnt=IterCnt+1
Wend
r[j+1]=k; и тут
p[j+1]=z; =)
Next
End Function
Function Output()
;==
;вывод массива
For i=1 To N
Print Chr(p[i]+64)+" "+Str(r[i]);для красоты будем выводить
;1 как 'A', 2 - как 'B' и т.д.
Next
Return WaitKey();дождёмся тыка от пользователя
;==
End Function

Код приведён для демонстрации алгоритма, т.к. реализация не оптимальна.

ключ 945.627.329.749.753.579.117.51.73.589
результат A.E.D.B.J.F.C.G.I.H
комментарий весь массив перемешан

ключ 529.160.618.44.688.0.0.0.0.0
результат E.C.A.B.D.F.G.H.I.J
комментарий перемешаны первые 5 элементов (правые элементы в ключе были априори на месте)

ключ 0.0.0.901.370.798.72.0.0.0
результат D.F.E.G.A.B.C.H.I.J
комментарий 4 средних элемента перемешаны и сдвинуты в начало

ключ 9.9.9.4.7.3.8.0.0.0 (генерируется другим методом)
результат A.B.C.G.E.D.F.H.I.J
комментарий 4 средних элемента перемешаны

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

Опять-таки – стиль изложения и общие познания автора – оставляют желать лучшего, так что учтите это перед тем как, радостно потирая ладони, строчить гневный отзыв.
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?

Последний раз редактировалось impersonalis, 19.11.2010 в 14:25.
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Randomize (21.11.2010)