О случайном перемешивании...
G_Z 24.05.2004 22:47
/ 24.05.2004 22:53
Вот, собственно, наткнулся на такую задачу.
Имеем:
1. таблица, с уникальными записями в энном количестве – 1 штука;
Нужно:
1. выдать последовательность случайно перемешанных строк. (Грубо говоря, просто массив перемешанных номеров строк).
Всё просто, кроме одного логичного требования – строки не должны повторяться.
Ознакомился с содержимым форума на предмет – везде задачи просто на выбор случайного из массива.
Что не подходит.
Я сделал так:
@random_digits[limit][limit]
^if(!def $limit){$limit(1)}
$result[
$random_digits[^table::create{number}]
^while($random_digits < $limit){
$random_digit(^math:random($limit))
^if(!^random_digits.locate[number;$random_digit]){
^random_digits.append{$random_digit}
}
}
]
Можно и через хэш, но это монопенисуально.
При такой реализации можно сократить затраты на locate, однако циклы останутся.
Получается по 40-50 итераций для списка из 10 номеров.
Может это дело можно решать быстрее и проще?
- О случайном перемешивании..., G_Z [M] 24.05.2004 22:47 / 24.05.2004 22:53