Я использую класс Random в своей структуре CompareTo (), чтобы с одинаковой вероятностью выбрать одну из структур, когда оба имеют одинаковые значения поля.
Во-первых, это совершенно странная вещь. Это все равно, что сказать: «Когда меня просят отсортировать группу чисел, и двум из них по 12, я выбираю одну из 12 наугад, чтобы она была меньше». Это не имеет смысла. Эти два двенадцати идентичны . У тебя нет способа отличить двенадцать от другого!
Почему ты делаешь эту странную вещь? Если эти два значения идентичны, то говорят, что они идентичны.
После более внимательного прочтения вашего кода я вижу, что вы сохраняете случайное число в состоянии структуры. Если вы хотите сделать эту странную вещь, это правильный путь.
Первоначально я думал, что вы рандомизировали сам оператор сравнения . Это чрезвычайно опасная вещь . Алгоритмы сортировки могут иметь сильные зависимости от сортировки по полному порядку. Для сравнения требуется , чтобы найти общий порядок, который является самосогласованным . Вы никогда не должны говорить, что первый элемент больше второго, второй больше третьего, а третий больше первого. Это нарушает требуемую транзитивность сравнения, и алгоритму сортировки разрешается входить в бесконечный цикл или выполнять любое другое странное поведение, если ему дается операция сравнения, которая ведет себя плохо.
Я подумываю заменить случайные числа ссылкой на память или GetHashCode ().
Это еще хуже идея. GetHashCode полезен только для одной цели: балансировки хеш-таблицы. Если вы не балансируете хеш-таблицу и вызываете GetHashCode , вы делаете что-то не так .
Более того, продумайте это до конца. Ситуация, в которой вы находитесь, состоит в том, что две структуры в противном случае сравниваются как равные. По контракту GetHashCode должен возвращать одинаковый результат для любых двух структур, которые сравниваются как равные . GetHashCode явно не является источником неоднозначности между двумя одинаковыми вещами! Это на самом деле противоположность этому.
Будет ли это гарантировать, что выбор сделан с равной вероятностью?
Неа. GetHashCode не является источником случайности и не дает никаких гарантий относительно распределения хеш-кодов.
Будет ли это гарантией того, что я получу те же результаты, если снова запустите программу?
Абсолютно нет.