Блог пользователя T-D-K

Автор T-D-K, 10 лет назад, По-русски

Господа, может кто-нибудь помочь найти ошибку в этой посылке: ? Всю голову уже изломал. Может я вообще неправильно решаю...

  • Проголосовать: нравится
  • +8
  • Проголосовать: не нравится

»
10 лет назад, # |
Rev. 2   Проголосовать: нравится +10 Проголосовать: не нравится

Ошибка в процедуре Union. Вы переподвешиваете не корень дерева, а другую вершину. Из-за этого внутреннее устройство СНМ нарушается. Правильный вариант: 10425406.

  • »
    »
    10 лет назад, # ^ |
      Проголосовать: нравится +3 Проголосовать: не нравится

    Большое спасибо! Всегда был уверен, что напишу СНМ без ошибок в любом в состоянии. Видимо надо больше отдыхать. Ещё раз большое спасибо.

    • »
      »
      »
      10 лет назад, # ^ |
        Проголосовать: нравится +11 Проголосовать: не нравится

      Чтобы избегать таких ошибок проще писать так И код получается короче, и ошибок нет.

    • »
      »
      »
      10 лет назад, # ^ |
        Проголосовать: нравится 0 Проголосовать: не нравится

      А ещё лучше будет писать без рандомных оптимизаций, а с использованием ранговой

»
10 лет назад, # |
Rev. 2   Проголосовать: нравится 0 Проголосовать: не нравится

nvm

  • »
    »
    10 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится

    Судя по [этому ](https://msdn.microsoft.com/en-us/library/h343ddh9(v=vs.110).aspx) большой проблемы в этом нет, т.к. рандом по умолчанию инициализируется от времени.

    • »
      »
      »
      10 лет назад, # ^ |
        Проголосовать: нравится 0 Проголосовать: не нравится

      ой, это C#, я попутал, сорри

    • »
      »
      »
      10 лет назад, # ^ |
        Проголосовать: нравится +2 Проголосовать: не нравится

      Большая проблема в этом еще как есть. Random — это ссылочный тип, объект, принадлежащий оному, динамически выделяется в куче. Вы же, думаю, понимаете, насколько большой overhead у таких объектов в языках со сборкой мусора?

      • »
        »
        »
        »
        10 лет назад, # ^ |
          Проголосовать: нравится 0 Проголосовать: не нравится

        Безусловно вы правы. Это ссылочный тип. Память под него выделяется каждый раз в куче. Сборщик мусора вынужден периодически её чистить из-за этого, останавливая выполнение всей остальной программы и т.д. На работе я бы сам за такое убил, но в этой задаче это не даёт больших тормозов и память критично не забивается.

        Сделал статический рандом и обращался к нему. Памяти стало меньше использоваться на 40 Кб.Ссылка на решение