Блог пользователя stas99

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

Здравствуйте! Я недавно решил попрактиковаться в Java и решить простую задачу про выпуклую оболочку. Мое решение на С++ работает за 0.006 на макс. тесте, А на Java изначально — 0.644, после оптимизаций — 0.373. Мне кажется, что это слишком большая разница (ну не может быть java в 50 раз медленнее! Они утверждают, что Питон за 0.081 заходит!). Прошу вас мне помочь в поиске способа довести решение на java до адекватного времени работы. Сама задача: http://informatics.mccme.ru/mod/statements/view3.php?id=634&chapterid=638#1 Решение на С++: http://pastebin.com/L69S2vGx Решение на Java: http://pastebin.com/HnyTqMuF Заранее благодарен всем за вашу помощь.

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

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

Объектов наверно слишком много. Надо попробовать поменять массив точек на два массива координат.

А еще compareTo должен возвращать 0 на равных объектах. Кажется, в седьмой джаве иное поведение будет выбрасывать эксепшен.

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

Ну, во-первых, java по умолчанию сразу съедает какое-то количество времени, а в процессе работы разница во времени начинает сокращаться. Во-вторых, сильно похоже, что это на этом сервере какая-то медленная java. Там даже задачи за O(1) работают от 0.1с

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

    Да, похоже вы правы. Мое решение с полностью закоментированной функцией main работало 0.277

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

Ещё, кстати, в данном случае не сильно важно, но локальные переменные могут работать быстрее, а ещё лучше работать со статическими внутренними классами.