Страница: 1 |
Страница: 1 |
Вопрос: Шаффл списка
Добавлено: 10.08.09 19:48
Автор вопроса: Winand | Web-сайт:
Придумал такой способ создания списка рандомно расположенных значений. Стало интересно, нет ли способа быстрее, на api и всё такое)
Dim lst() As Long, i As Long, j As Long, tmp_value As Long
ReDim lst(0 To num - 1)
For i = 0 To num - 1
lst(i) = i
j = Int(Rnd * i)
tmp_value = lst(i)
lst(i) = lst(j)
lst(j) = tmp_value
Next i
getRandomList = lst
End Function
Ответы
Всего ответов: 6
Номер ответа: 1
Автор ответа:
VβÐUηìt
Вопросов: 246
Ответов: 3333
Web-сайт:
Профиль | | #1
Добавлено: 10.08.09 21:39
Сложность алгоритма n^1. Думаю, быстрее врят ли. Разве что через ASM.
Номер ответа: 2
Автор ответа:
AWP
ICQ: 345685652
Вопросов: 96
Ответов: 1212
Web-сайт:
Профиль | | #2
Добавлено: 11.08.09 06:23
А почему Int(Rnd * i), а не Int(Rnd * num)?
Номер ответа: 3
Автор ответа:
VβÐUηìt
Вопросов: 246
Ответов: 3333
Web-сайт:
Профиль | | #3
Добавлено: 11.08.09 11:27
По-мануальному потому что :D
Номер ответа: 4
Автор ответа:
AWP
ICQ: 345685652
Вопросов: 96
Ответов: 1212
Web-сайт:
Профиль | | #4
Добавлено: 11.08.09 23:36
понял, туплю. Но не судите строго, было 06:23 утра )))
Номер ответа: 5
Автор ответа:
Winand
Вопросов: 87
Ответов: 2795
Web-сайт:
Профиль | | #5
Добавлено: 12.08.09 00:16
ща глянул и понял, что tmp_value нафиг не нужно. Кстати, инт(рнд×0) и инт(рнд×1) оба вчегда дают ноль?
Номер ответа: 6
Автор ответа:
Winand
Вопросов: 87
Ответов: 2795
Web-сайт:
Профиль | | #6
Добавлено: 20.08.09 18:51
Окончательный вариант) Такой рандомизатор у меня 10'000'000-ный список создает за ~2.700c, предыдущий вариант ~3.5c, плюс он не работает для списков из 2-3 элементов