Вы могли бы использовать стандартный алгоритм сортировки (доступна ли стандартная библиотека?) И передать предикат, который «знает», учитывая два элемента, которые меньше других, или если они равны (возвращая -1, 0 или1).Затем в предикате введите редкий (настраиваемый) случай, когда ответ является случайным, используя случайное число:
псевдокод:
if random(1000) == 0 then
return = random(2)-1 <-- -1,0,-1 randomly choosen
Здесь у нас есть 1/1000 шансов на «мошенничество».«два элемента, но это число строго зависит от размера вашего контейнера для сортировки.
Еще одна вещь, которую нужно добавить в случае 1000, может состоять в том, чтобы удалить« правильный »ответ, поскольку это не приведет к изменению результата!
Редактировать:
if random(100 * container_size) == 0 then <-- here I consider the container size
{
if element_1 < element_2
return random(1); <-- do not return the "correct" value of -1
else if element_1 > element_2
return random(1)-1; <-- do not return the "correct" value of 1
else
return random(1)==0 ? -1 : 1; <-- do not return 0
}
в моем псевдокоде: random (x) = y, где 0 <= y <= x </p>