parser

Написать ответ на текущее сообщение

 

 
   команды управления поиском

О случайном перемешивании...

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 номеров.
Может это дело можно решать быстрее и проще?