Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 |

 

  Вопрос: Шаффл списка Добавлено: 10.08.09 19:48  

Автор вопроса:  Winand | Web-сайт: winandfx.narod.ru
Придумал такой способ создания списка рандомно расположенных значений. Стало интересно, нет ли способа быстрее, на api и всё такое)
Public Function getRandomList(ByVal num As Long) As Long()
    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-сайт: xawp.narod.ru
 Профиль | | #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-сайт: xawp.narod.ru
 Профиль | | #4
Добавлено: 11.08.09 23:36
понял, туплю. Но не судите строго, было 06:23 утра =))))

Ответить

Номер ответа: 5
Автор ответа:
 Winand



Вопросов: 87
Ответов: 2795
 Web-сайт: winandfx.narod.ru
 Профиль | | #5
Добавлено: 12.08.09 00:16
ща глянул и понял, что tmp_value нафиг не нужно. Кстати, инт(рнд×0) и инт(рнд×1) оба вчегда дают ноль?

Ответить

Номер ответа: 6
Автор ответа:
 Winand



Вопросов: 87
Ответов: 2795
 Web-сайт: winandfx.narod.ru
 Профиль | | #6
Добавлено: 20.08.09 18:51
Окончательный вариант) Такой рандомизатор у меня 10'000'000-ный список создает за ~2.700c, предыдущий вариант ~3.5c, плюс он не работает для списков из 2-3 элементов
  1. Public Function getRandomList(ByVal num As Long) As Long()
  2.     Dim lst() As Long, i As Long, j As Long
  3.     If num > 0 Then
  4.         ReDim lst(0 To num - 1)
  5.         For i = 0 To num - 1
  6.             j = Int(Rnd * (i + 1))
  7.             lst(i) = lst(j)
  8.             lst(j) = i
  9.         Next i
  10.     End If
  11.     getRandomList = lst
  12. End Function

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам