Главная страница


ru.algorithms

 
 - RU.ALGORITHMS ----------------------------------------------------------------
 From : Sergey Kabikov                       2:5020/175.2   30 Aug 2001  14:59:54
 To : Boris Sivko
 Subject : Hужно решение
 -------------------------------------------------------------------------------- 
 
 Thu Aug 30 2001 08:20, Boris Sivko wrote to Abbat:
 
  A>> Есть массив целых чисел от 0 до N (на практике N не больше 100). Числа
  A>> в массиве расположенны по порядку (0-100). Требуется перемешать массив
  A>> произвольным образом. Скорость критична (счет идет на ms).
 
  BS> ------ From: Leonid Troyanovsky
  BS>   for i := Low(a) to High(a) do
  BS>     begin
  BS>       idx := Low(a) + Random(SizeOf(a));
  BS>       tmp := a[i];
  BS>       a[i] := a[idx];
  BS>       a[idx] := tmp;
  BS>     end;
 
 Это не совсем оптимальный способ. Легко заметить, что N перестановок хорошо
 перемешают массив из N элементов не всегда. Я бы сделал так :
 
 for i := Low(a) to High(a)-1 do begin
    idx := i + Low(a) + Random(SizeOf(a) - i);
 и далее по тексту.
 
 Разница в том, что на каждом шаге фиксируется один случайно выбранный элемент
 массива, который в дальнейших перестановках не участвует. IMHO статистически
 это правильнее.
 
 С уважением
 Сергей
 
 ...Планетоид на эпилептической орбите (с) переводчик StarTrek
 
 --- ifmail v.2.15
  * Origin: FidoNet Online - http://www.fido-online.com (2:5020/175.2)
 
 

Вернуться к списку тем, сортированных по: возрастание даты  уменьшение даты  тема  автор 

 Тема:    Автор:    Дата:  
 Hужно решение   Sergey Kabikov   30 Aug 2001 14:59:54 
 Hужно решение   Leonid Troyanovsky   30 Aug 2001 21:35:26 
 Hужно решение   Boris Sivko   31 Aug 2001 17:02:56 
Архивное /ru.algorithms/3300e3872a83.html, оценка 1 из 5, голосов 10
Яндекс.Метрика
Valid HTML 4.01 Transitional