Выбор языка для соревнований по алгоритму [дубликат]

    

У этого вопроса уже есть ответ:

    

Привет всем Я только начал участвовать в онлайн-конкурсах кодирования. Мне хотелось бы знать, какой язык будет лучше в отношении эффективности и удобства отладки. Я стараюсь избегать c ++ и вообще переходить с java. 1. Может ли какой-нибудь другой язык быть подходящим? Как насчет c sharp или python или какой-либо другой ( Нет проблем с обучением нового ). 2. Является ли знание C ++ необходимым для эффективного программирования? 3. И из java & c #, что лучше для соревнований алгоритмов?

6 голосов | спросил filokalk 24 J000000Sunday11 2011, 06:59:56

12 ответов


10

Я думаю, что это должно быть опубликовано на программистах SE , но это мои два цента:

  1. Я бы посоветовал вам быть опытным с C. Простота, примеры и то, что является базой Java и C #, послужит вам подготовкой к будущим. Кроме того, множество примеров и демонстраций основаны на C. В качестве примера см. Статистику этого сайта .

  2. Я не думаю, что знание c ++ необходимо. Но верьте, что C есть.

  3. Между Java и C # я буду использовать C # для гибкости.

ответил Randolf Rincón Fadul 24 J000000Sunday11 2011, 07:04:45
10

Использовать python

Во-первых, python короче, что в сценарии конкуренции является значительным преимуществом.

Рассмотрим:

std::map<string, int> foo;
std::stringstream str(input);
while(!str.eof())
{
      std::string x;
      str >> x;
      foo[x] += 1
}

против

foo = Counter( text.split() )

Не только этот питон устраняет бесполезную типизацию, но обеспечивает более мощные конструкции, которые позволяют быстрее создавать ваш код.

Во-вторых, отладка работает хорошо.

Объекты распечатываются полезными способами. Вы можете «распечатать» любой объект. Контейнеры покажут их содержимое. Это может быть полезно при отладке стиля печати. Если вы используете графический отладчик (я использую winpdb), интроспективные и динамические возможности python дают ему возможность легко просматривать и манипулировать всеми аспектами объекта.

Однако:

Самая большая проблема заключается в том, что конкурс должен поддерживать python. Такие вещи, как ACM, обычно требуют C, C ++, Java или аналогичных. Тем не менее, многие из онлайн-конкурсов поддерживают python.

Вторая проблема - скорость. Однако это, как правило, не вызывает большой озабоченности, потому что ваш алгоритм не должен преуспеть в зависимости от скорости выполнения, а скорее от умения алгоритма. То есть C ++ может позволить вам выполнить ваш алгоритм O (n ^ 5) лучше, но в целом нужно найти алгоритм O (n). Если вы найдете правильный алгоритм, язык не имеет значения.

ответил Winston Ewert 24 J000000Sunday11 2011, 14:12:48
5

Я участвую в соревнованиях ACM в США и некоторых онлайн-играх. Для конкурса я выбираю Java для удобства отладки и кодирования. Для онлайн-судей я склонен использовать c ++ /C, потому что компьютеры-судьи медленны, и я предпочел бы просто закодировать алгоритм, чем тратить время, используя разные методы ввода-вывода в Java, чтобы заставить его работать (поскольку некоторые временные ограничения смешны, а Java - немного медленнее при обработке ввода-вывода). Это только мое мнение, но вы можете использовать все, что захотите. Самыми популярными языками являются C ++ и Java для соревнований, если вы посмотрите на конечные языковые категории результатов, чтобы вы, вероятно, не ошибетесь ни с одним из них (очевидно, многие другие поддерживаются, просто не используются часто).

ответил Jesus Ramos 24 J000000Sunday11 2011, 07:03:11
5

Я бы пошел с java или C #, с которыми очень легко отлаживать. В Java вы должны найти хорошую среду IDE, которая поддерживает в отладке, например

точки останова стек вызовов наблюдаемые переменные наблюдал за местными жителями.

Но в C # вам не нужно беспокоиться ни о чем, все это уже построено в Visual C # IDE

ответил SSpoke 24 J000000Sunday11 2011, 07:05:26
4

Функциональные языки, такие как F # и Haskell заслуживают внимания, если вы выполняете алгоритмы. Такие функции, как дискриминированные объединения и сопоставление шаблонов, упрощают концептуальную разработку, прототип и полировку математических /вычислительных задач много .

F #, вероятно, более доступный, так как он многопарадигматичен (он также так же быстро и часто быстрее, чем C #), но Haskell - интересная задача.

ответил Rei Miyasaka 24 J000000Sunday11 2011, 14:26:10
3

Если конкурс рассчитан на время, и любой язык разрешен, я бы выбрал Perl. Java слишком многословна, а стандартная библиотека C слишком ограничена. Perl намного лучше подходит для соревнований по программированию, поскольку он был запрещен для Ассоциации компьютерных наук UCLA в 1998 году.

ответил kevin cline 24 J000000Sunday11 2011, 08:21:04
2

Я уже поддерживал ...

Это своего рода материал, который должен быть в комментариях, но его слишком много ...

C избавляет от множества ненужных материалов большой системы, которые поддерживаются C ++, C # и т. д. Вам не нужны ООП, шаблоны и т. д., чтобы писать небольшие алгоритмические системы.

Тем не менее, у C ++ есть свои плюсы - если вы это знаете, и знаете, как и когда следует избегать скрытия данных и других проблем, связанных с абстракцией и доставкой, используйте его.

Когда-то я бы предложил Modula 2 (или нестандартный Pascal, возможно, даже Ada) в качестве альтернативы C. Есть некоторые преимущества для более строгой типизации, некоторые недостатки для менее богатого набора операторов , яда-яда. В наши дни мир в основном оставил эти языки позади, хотя, вероятно, они, вероятно, не являются реальными вариантами.

Python, вероятно, даст вам гораздо более быструю скорость разработки, в зависимости от того, что вы делаете. Конечно, у OOP есть OOP, но этого легче избежать, когда вам это не нужно, кроме C # или Java. Проблемы состоят в следующем: (1) что производительность во время выполнения может отсутствовать, если вы сами делаете все материалы низкого уровня (вместо использования библиотек, написанных на языке C), и (2) есть моменты, когда вы можете хотите управлять памятью себя в низкоуровневом коде, сохраняя вещи в стеке, а не загромождая кучу, не полагаясь на сборку мусора и т. д.

Генераторы /итераторы Python также очень полезный инструмент, который вы не видите на многих других языках.

Написание критических компонентов в C-модулях для использования в Python - это вариант, но я очень волнуюсь о том, чтобы входить в многоязычную разработку с ограничениями времени на конкурс - есть по крайней мере в два раза больше возможностей для продвижения ошибочно ошибочно.

Цель CAML - нечистый функциональный язык. Он может делать все, что может сделать нормальный императивный язык, и у него есть очень полезные приемы из функционального мира. Я не так разбираюсь в этом, но я, конечно, считаю, что он устраняет много беспорядка, позволяя вам сосредоточиться на том, что вы делаете, - поддерживает сопоставление шаблонов, требующих начала. И это родной скомпилированный язык, который запускает fast , хотя «возможно, захочет управлять памятью для себя», вероятно, также относится к Objective CAML (и F #).

Haskell - абсолютно узнайте об этом, но не с целью использовать его для конкурсов с сильным алгоритмом фокуса - но если вы дойдете до точки, где, по вашему мнению, это будет хороший выбор, и вы поняли мою критику и отвергли ее (или обнаружили, что они действительны, но неважны) - не боритесь с ней.

ответил Steve314 24 J000000Sunday11 2011, 20:01:44
1

Я думаю, что проще всего отлаживать, а язык - это C # (VS имеет много вещей, чтобы сделать лучше).

  1. Является ли знание C ++ необходимым для эффективного программирования?

Не так! Вы также должны знать механизм машины.

  1. И из java & c #, что лучше для соревнований алгоритмов?

C #, но java тоже не так уж плох. Если вы больше работаете с java в NetBeans, выберите java. Потому что после NetBeans его трудно использовать VS.

ответил Kak Ylia 24 J000000Sunday11 2011, 10:53:12
1

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

Для соревнований я предпочитаю сценарий и динамический язык, вам нужно быстро закодировать и быстрее видеть результат. Более важно, чтобы вы быстро меняли код.
Python, Ruby или JavaScript являются сильными кандидатами.

Я участвовал в Google Jam в прошлом, и Java не был лучшим выбором.

Если вам действительно нравится функциональное программирование (и я имею в виду действительно удобный), то я рекомендую этот маршрут.
Lisp, Haskell или Erlang - мои личные выборы.

ответил Chiron 24 J000000Sunday11 2011, 21:47:09
1

Я участвовал в IOI пару раз и кодировался в C. В то время я не знал о OO или даже о том, как выделить память в куче (я выделил всю память, которая мне нужна в стеке). Все внимание было сосредоточено на алгоритме.

Однако, в настоящее время я придерживаюсь Java, из-за наличия большой библиотеки алгоритмов и структур данных. Но, конечно, примите во внимание, что при IOI вам не разрешается приносить какой-либо подготовленный код, поэтому огромная библиотека алгоритмов и структур является большим преимуществом. Онлайн-соревнования - это, наверное, другое дело ...

ответил Per Alexandersson 29 PM00000040000000931 2011, 16:14:09
0

У вас есть проблема в том, что разные разработчики предпочитают разные языки, и это не всегда касается разумного технического аргумента, а того, какой стиль развития они чувствуют наиболее комфортно.

Лично я бы проводил конкурс, у которого есть категория для каждого языка. Конкурс на каждый язык должен быть установлен кем-то, кто является поклонником этого языка (поэтому задача будет тем, что привлекает других поклонников этого языка).

ответил Peter Lawrey 24 J000000Sunday11 2011, 11:05:41
-1

Я бы использовал Common Lisp, потому что он очень прагматичный и выразительный.

ответил Svante 29 PM000000100000000031 2011, 22:17:00

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132