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

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

Вот подумал интересную вещь. Как эволюционировали олимпиады по информатике, и куда они движуться дальше?

Помню в 90-е... Не было ни STL, ни 256 метров памяти...
Проскакивали задачи на олимпиадах, вроде "отсортировать по возрастанию N<=100 чисел).
Огромным счастьем досовского Borland C++ 3.11 было то, что в нем можно было объявить массив больше чем 64 килобайт и о чем только мечталось в Borland Pascal 7.0 (там для массива в 200 килобайт нужно было выделять 4 массива по 50 кб в динамической памяти :) )

Из алгоритмов, к примеру, нахождение простых чисел от 1 до N вполне получалось за N*sqrt(N) , так как решето Эратосфена NlogNlogN не могло себя проявить в полной мере (так как размеры массивов были не велики) (и оно зараза только жрало лишнюю память :)

Теоретический минимум был на порядок уже чем сегодня.

Сегодня "среднедипломированный" школьник уже пишет деревья интервалов, сумматоры, , более продвинутые школьники уже используют декартовые деревья.

А раньше такое далеко не все топ-студенты умели... Индустрия движется вперед огромными темпами.

В связи с этим возник интересный вопрос. Кто бы что спрогнозировал на 10(20)(50) лет в олимпиадах по информатике (школьных и студенческих).

Какие алгоритмические задачи (которые не распространены сейчас) будут на олимпиадах будущего?
Какие будут ограничения на размеры входных данных (например для задачи о кратчайшем пути в ориентированном неразреженом графе)?
В каком году в задаче про построение выпуклой оболочки, количество точек будет равно 10^9 ? :)
Какие алгоритмы(или оптимизационные трюки) вымрут через Х лет на олимпиадах?
Какие вещи в 2020 году будут писать девятикласники на летней компьютерной школе?
Появятся ли на привычных нам олимпиадах программирование устройств?

Ну вобщем, прогнозы в студию!

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

14 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится
Мне кажется, что с дальнейшим развитием многоядерных CPU в олимпиадные задачи добавится необходимость параллельных вычислений, соответственно привычные реализации давно знакомых алгоритмов нужно будет переосмысливать, переоптимизировать.
  • 14 лет назад, # ^ |
      Проголосовать: нравится +11 Проголосовать: не нравится
    Думаю, ближайшие лет 5-10 мы такого не увидим. Возможно, и дальше.
    С задачей распараллеливания должны будут справляться компиляторы/интерпретаторы. Может, иногда и важно будет знать, что что-то параллелится лучше, но точно так же, как сейчас важно, чтобы всё в кэш поместилось. Просто будет ещё одна тонкость и возможность для пропихивания плохого решения.
    • 14 лет назад, # ^ |
        Проголосовать: нравится +1 Проголосовать: не нравится
      Оказывается 5-10 лет ждать не потребовалось, Intel уже оказывается с 2008-го года свой мультиядерный челлендж проводит, вот ссылка на текущий: Intel Threading Challenge 2011.

      Из описани тестовой среды:
      Hardware:
      * Processor: Four Intel® Xeon E7-4860 @ 2.27GHz, 40 cores
      * Installed Physical Memory ( RAM): 64 GB

      К сожалению узнал о нём поздновато, первый тур у них уже завершен.


      • 14 лет назад, # ^ |
          Проголосовать: нравится 0 Проголосовать: не нравится
        Ну то, что есть контесты марафонного плана, на которых надо жёстко оптимизить, я не отрицаю. Подобного контеста с ограничением времени в несколько часов пока наверняка нет. Это разные дисциплины.
14 лет назад, # |
  Проголосовать: нравится -6 Проголосовать: не нравится
Думаю, что ограничения просто будут не 1-2 сек, а 50 мл сек или как-то так.
14 лет назад, # |
  Проголосовать: нравится +8 Проголосовать: не нравится
Квантовые компьютеры? "Взлом RSA"?
Думаю, что появятся задачи, в которых асимптотически лучшее решение с огромной константой будет ощутимо лучше решения с меньшей константой, но большей асимптотиков.
  • 14 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится
    Ну такое и сейчас есть. Вот если через пять лет будут свободно различать алгоритмы, отличающиеся на log, а через 10 - на обратную функцию Аккермана, тогда да. А вообще сейчас олимпиады идут по принципу "кто быстрее набирает код", как мне кажется.
    • 14 лет назад, # ^ |
        Проголосовать: нравится 0 Проголосовать: не нравится
      Ну на logN и сейчас различить можно.
      Просто N надо подобрать такое, что O(N) вкладывается в 0.5 секунд.
      Тогда NlogN вкладывается всего лишь в 0.5logN секунд.

      ===
      А вообще сейчас олимпиады идут по принципу "кто быстрее набирает код", как мне кажется.
      Хм, я думал, что это мое субъективное мнение. Но вижу, не одному мне такое мерешится...

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

      ну это, видимо, неизбежно, особенно на быстрых контестах, как CF/TC

      Ибо 1000чел на 3/5 задач, это получается для каждого кол-ва задач сотни человек, которые набрали такое. Как их еще ранжировать, кроме времени?
    • 14 лет назад, # ^ |
        Проголосовать: нравится +8 Проголосовать: не нравится
      На хороших командных ACM-контестах приходится подумать. По крайней мере мне и моей (хоть и недавней) команде. Да и остальным участникам не все задачи кажутся очевидными после прочтения. Проблема в том, что из 11 задач - 6 или 7 будут как раз "на покодить", и большей части команд этого хватает на 5 часов. А слабым командам еще и подумать придется.
      Выходом мне кажется проведение отдельных контестов со сложными задачами - т.е. не "идеальных сбалансированных", а "гробовых". Это многим не понравится, но отдельные участники/команды будут довольны (например я). Задачи на такие контесты можно брать из нескольких неизвестных контестов (например, польских), оставляя только сложные.
      К сожалению, в олимпиадном программировании еще нет так много участников, которым сложные задачи предпочтительнее. Но уже гораздо больше, чем раньше. Будем надеяться.
14 лет назад, # |
  Проголосовать: нравится -24 Проголосовать: не нравится
10^18 не будет ТЛиться о_0
14 лет назад, # |
  Проголосовать: нравится +1 Проголосовать: не нравится

А что на счет вычислений на видео карте?

CUDA жжет синим пламенем и вообще управление таким количеством процессоров как единым организмом не особо тривиальная задача.

  • 14 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится
    Вполне вероятно, только мне кажется, что будут использовать opencl - он более кросплатформен. Да и GPU от ati показывают себя лучше в неграфических вычислениях, нежели nvidia.
14 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

Интересно, а вымрет ли программирование как олимпиадное направление в скором будущем? Или, может быть, потеряет свою полезность для ежедневной жизни, отсутствие которой и так критикуют уже в наше время (алгоритмы ненужные, код олимпиадный непрактичный и т.д.)

В наше время мало кто, допустим, метает копье в повседневной жизни, потому что это ему нужно по работе или чтоб добыть пищу:) А в спорте - как раз:)

Подобная история сейчас в комп. печати - мол, раньше работа машинистки была нужной, а сейчас есть ридеры различные, быстро развивается голосовой набор, скоро будет "чисто спорт".

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

И олимпиадным будут заниматься только те, кто как раз "ищет оптимизации и новые алгоритмы", или же хочет показать, что он "знает как оно работает".

Я уже молчу о привычном для фантастики "придумали искусственный интелект, который теперь всех нагибает и сам разрабатывает оптимизации себя самого, имитируя деятельность человека":)

=====

Если же серьезней... Уровень быстро растет. Мне вот рассказывают, какой диковинкой пару лет назад был FFT. Или как призеры финала мира прямо во время финала придумали Форда-Фалкерстона - при том что они толком и не слышали о таком понятии, как поток в графе, и тем более об соответствующих алгоритмах.

  • 14 лет назад, # ^ |
      Проголосовать: нравится +1 Проголосовать: не нравится
    ===откуда пользователи тянут функу, даже не подозревая, как она работает...
    всякие qsort, да и весь STL тому пример.
    Сколько процентов использующих STL знают как организован map?
    А сколько его напишут сами? :)


14 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится
Есть достаточно известная точка зрения, что в скором времени будет наконец-то создан искусственный интеллект, и тогда само понятие "программирование" будет размыто, и распадется на "инжениринг" и "обучение". А программирование в нынешнем понимании, чем мы сейчас все занимаемся, уйдет.

Я не совсем сторонник этой точки зрения, к тому же понятние "в скором времени" весьма туманное...
Просто подкинул идею для обсуждения =)
  • 14 лет назад, # ^ |
      Проголосовать: нравится +3 Проголосовать: не нравится
    Получается мы все останемся без куска хлеба? Я не хочу переквалифицироваться. Мне нравится то, чем я занимаюсь. :)
    • 14 лет назад, # ^ |
        Проголосовать: нравится +1 Проголосовать: не нравится
      Ну без куска хлеба не останешься. Просто пекарня другая будет :)
      Вон раньше сколько народу на асемблере кодили?
      Помню в 90-х даже конкурсы были насамую короткую по кол-ву байт програму (скомпиленую). И алгоритмами тогда не так баловались.
  • 14 лет назад, # ^ |
      Проголосовать: нравится +5 Проголосовать: не нравится
    С созданием искусственного интеллекта, способного заменить программиста, будет размыто не только понятие "программирование", но и большая часть других профессиональных обозначений. Преимущество машин в эффективности станет вопросом времени, а ресурсов им наверняка потребуется меньше.
    Вот тогда можно будет оставить разработку и поддержку ПО ботам, а самим спокойно заниматься спортивным кодингом %)
    • 14 лет назад, # ^ |
        Проголосовать: нравится +8 Проголосовать: не нравится
      скайнет же
    • 14 лет назад, # ^ |
        Проголосовать: нравится 0 Проголосовать: не нравится
      Нельзя, ибо тогда умные машины устроят то, что было в Матрице. Возможно даже, что этот фильм им и подкинет эту идею :)
      • 14 лет назад, # ^ |
          Проголосовать: нравится -6 Проголосовать: не нравится
        Быстро сжигаем Голливуд пока они еще чего-нибудь не сняли:)
        • 14 лет назад, # ^ |
            Проголосовать: нравится +1 Проголосовать: не нравится
          Дался вам этот Голливуд... как будто у нас хуже.
          Раз уж речь зашла о футуризме и искусственном интеллекте, я всем очень рекомендую послушать вот это - по ссылке есть, как видите, ещё и рецензия, и авторский видеоряд к первым десяти трекам.
14 лет назад, # |
Rev. 2   Проголосовать: нравится 0 Проголосовать: не нравится
не туда написал
13 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится
тут еще подумал, было бы прикольно, если б массовые олимпиады эволюционировали в сторону программирования устройств.

На старте стоит 100 игрушечных роботов.
Пофиг запрограммируешь ты быстрее всех, или лучше всех. Показателем победы будет приход робота на финиш в лабиринте.

Можешь за 10 минут написать тупую программу, и твой робот будет блуждать до конца контеста.
А можешь потратить 100 минут, а робот за оставшиеся 20 справиться с задачей :)
  • 13 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится
    Или что еще интересней: не просто программировать робота относительно внешних неподвижных обстоятельств.
    А по отношению к другим роботам :)

    Эдакая модель общества :)
  • 13 лет назад, # ^ |
      Проголосовать: нравится +2 Проголосовать: не нравится
    Что-то такое уже есть: Eurobot, World Robot Olympiad.
    Там, правда, правила известны примерно за год и можно готовиться. Но и задания на порядок сложнее, чем "пройти лабиринт".
  • 13 лет назад, # ^ |
    Rev. 2   Проголосовать: нравится +8 Проголосовать: не нравится

    Наверное, немножко не то, что ты имел в виду, но тоже про роботов: robozzle.com, пару лет назад хорошенько так на неё залип, очаровала основательно. Как раз почти что про блуждание в лабиринтах. Желательно, чтобы браузер поддерживал Silverlight, голая javascript версия там вроде бы тоже есть, но она не торт.

    На ютубе демка http://www.youtube.com/watch?v=MmqBVWi_Pc0

    UPD: Оказывается, есть ещё Light-Bot, кажись то же самое, только в анимированной 3D графике.
    • 13 лет назад, # ^ |
        Проголосовать: нравится 0 Проголосовать: не нравится
      Не, Light-Bot это флэш. Можно загуглить и поиграть. Только там уровней мало =_=
13 лет назад, # |
Rev. 2   Проголосовать: нравится -6 Проголосовать: не нравится

Как-то после полуфинала, который мы благополучно слили, обсуждали будущее олимпиад.

Нашли вот такое шуточное развитие событий:
Решили, что если докажут равенство P=NP и сделают еще пару клевых открытий, то можно будет делать так:
Один участник пишет специальный анализатор(допустим он делает это 4 часа)
Остальные 2 участника формализуют задачи под какую-то конкретную задачу, которую решает анализатор.

Остается час, что бы вбить формальные решения в процедуру и отправить это все джуджу :)
13 лет назад, # |
Rev. 2   Проголосовать: нравится 0 Проголосовать: не нравится

Ставлю на то что в ближайшие 10 лет по крайней мере некоторые из соревновательных ресурсов вымрут превратившись в рассадники троллей по ряду причин, обусловленных неидельными административными и техническими решениями.

На срок больший 10 лет полагаю загадывать не имеет смысла. Для роста производительности наверняка можно в грубой форме воспользоваться законом Мура - удвоение числа объектов в задачах будет происходить каждые 1-2 года. Однако на длинных периодах 20-50 лет вероятно могут быть революционные изменения в науках и технологиях которые качественно повлияют на учебные и спортивные процессы.

Многие авторы фантастических книг обещали в будущем массовое использование видеотелефонов. Зато мало у кого в книгах встречаются мобильники. Вышло всё наоборот - видеосвязь востребована мало даже при её доступности, зато мобильность крайне актуальна.
  • 13 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится
    Последние 5 лет закон Мура идёт лесом по двум обстоятельствам:

    1) В однопоточном режиме современные процессоры "быстреют" за счёт векторных команд (типа SSE) и улучшением суперскалярного декодера. На олимпиадах выставляются настройки компиляторов, которые запрещают использование всяких подобных фишек (запретить суперскалярность особо нельзя, но реально рассчитывать на неё тоже невозможно).
    2) Основное направление развития - в сторону большего количества ядер. Пока олимпиадные задачи не подразумевают параллельных вычислений, использовать это не представляется возможным.
    • 13 лет назад, # ^ |
        Проголосовать: нравится 0 Проголосовать: не нравится
      И что, последние 5 лет ограничения по задачам не растут? ;-)

      Закон Мура можно более общо рассматривать - например в приложении к самим задачам а не к технике, на которой они выполняются... Т.е. общее предположение что объёмы обрабатываемых данных растут экспоненциально со временем... Или я не прав?