Вы используете связанные списки, двунаправленные связанные списки и так далее, в бизнес-программировании?

В прошлом году я сменил работу, чтобы уйти от PHP и работать на Python. Я очень доволен решением, которое я принял:)

Чтобы ответить на отдельные вопросы:

  1. Вам было веселее с питоном?

Да!

  1. Вы так же продуктивны, как и при использовании PHP?

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

  1. что заставило вас перейти на python?

От вас не ожидают, что вы будете мастером на все руки в работах, не относящихся к PHP. (Photoshop / Web Design / Flash требуется для многих заданий PHP, а я ненавижу Flash). И мне очень понравился Python / Django.

4. Would you do a project again in PHP? If so, why?

Если это мелкие вещи, которые лучше сделать без какой-либо основы, тогда да.

7
задан Anthony Mastrean 22 June 2009 в 14:36
поделиться

12 ответов

Это будет зависеть от языка и фреймворков, которые вы используете. Большинство современных языков и фреймворков не заставят вас изобретать эти колеса. Вместо этого они будут предоставлять такие вещи, как List или HashTable.

EDIT:

Мы, вероятно, постоянно используем связанные списки, но не осознаем этого. Нам не нужно писать реализации связанных списков самостоятельно, потому что фреймворки, которые мы используем, уже написали их для нас.

Вы также можете запутаться насчет «дженериков». Возможно, вы имеете в виду общие классы списков, такие как List . Это то же самое, что и неуниверсальный класс List, но где элемент всегда имеет тип T . Вероятно, он реализован как связанный список, но нам не нужно об этом заботиться.

Мы также не делаем ' Не нужно беспокоиться о распределении физической памяти, или о том, как работают прерывания, или о том, как создать файловую систему. Для этого у нас есть операционные системы. Но нас все равно могут научить этой информации в школе.

4
ответ дан 6 December 2019 в 21:18
поделиться

Безусловно. Многие реализации «Списка» в современных языках на самом деле представляют собой связанные списки, иногда в сочетании с массивами или хеш-таблицами для прямого доступа (по индексу, а не итерации).

Связанные списки (особенно двусвязные списки) очень часто используются в « реальных »структур данных.

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

При этом, Несколько раз в прошлом я сам писал реализацию связанного списка с нуля при создании кода инфраструктуры для сложных структур данных. Иногда рекомендуется иметь полный контроль над реализацией, а иногда вам нужно добавить «изюминку» в классическую реализацию, чтобы она соответствовала вашим конкретным требованиям. Когда дело доходит до написания кода собственной реализации, нет ничего правильного или неправильного, если вы понимаете альтернативы и компромиссы. В большинстве случаев и, конечно, в очень современных языках, таких как C #, я бы этого избегал.

Другой момент - когда вы должны использовать списки вместо массивов / векторов или хэш-таблиц. Из вашего вопроса я понимаю, что вы знаете о компромиссах здесь, поэтому я не буду вдаваться в подробности, но в основном, если ваше основное использование - это просмотр списков по порядку, и размер списка может значительно отличаться, список может быть приемлемым вариантом. Еще одно соображение - это тип вставки. Если обычным вариантом использования является «вставка посередине», то списки имеют значительное преимущество перед массивами / векторами. Я могу продолжить, но эта информация находится в классических книгах по CS:)

Уточнение: мой ответ не зависит от языка и не относится конкретно к Generics, которые, насколько я понимаю, имеют реализацию связанного списка.

3
ответ дан 6 December 2019 в 21:18
поделиться

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

1
ответ дан 6 December 2019 в 21:18
поделиться

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

И да, связанные списки включены в практически любая библиотека классов от C ++ / STL до .net.

И я бы хотел, чтобы вместо них использовались массивы.

В реальном мире связанные списки работают МЕДЛЕННО из-за таких вещей, как подкачка страниц и размер кеш-памяти ЦП (связанные списки имеют тенденцию распространяться вы данные, и это увеличивает вероятность того, что вам потребуется доступ к данным из разных областей памяти, и это намного медленнее на современных компьютерах, чем использование массивов, которые хранят все данные в одной последовательности).

Google "locality of reference" для получения дополнительной информации.

1
ответ дан 6 December 2019 в 21:18
поделиться

Односвязный список - это единственный способ получить эффективный для памяти неизменяемый список, который можно составить для его «мутации». Посмотрите, как это делает Erlang. Он может быть немного медленнее, чем список на основе массива, но он имеет очень полезные свойства в многопоточных и чисто функциональных реализациях.

2
ответ дан 6 December 2019 в 21:18
поделиться

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

В программе Java, которую я поддерживаю, профилирование показало, что я могу повысить производительность, перейдя от ArrayList к LinkedList для списка, в котором было много удалений в начале.

1
ответ дан 6 December 2019 в 21:18
поделиться

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

Это был мой опыт.

0
ответ дан 6 December 2019 в 21:18
поделиться

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

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

0
ответ дан 6 December 2019 в 21:18
поделиться

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

0
ответ дан 6 December 2019 в 21:18
поделиться

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

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

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

0
ответ дан 6 December 2019 в 21:18
поделиться

Да, знаю. Все зависит от ситуации. Если я не буду хранить в них много данных или если конкретному приложению нужна структура FIFO, я буду использовать их, не задумываясь, потому что они быстро внедряются.

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

0
ответ дан 6 December 2019 в 21:18
поделиться

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

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

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

0
ответ дан 6 December 2019 в 21:18
поделиться
Другие вопросы по тегам:

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