Люди все еще пишут свои собственные структуры данных и алгоритмы?

Вместо STL и подобных библиотек на других языках?

Как новичок, насколько я должен копаться в этой части разработки программного обеспечения? В ширину или глубина?

Действительно ли только концептуальное понимание необходимо в эти дни? Или я должен быть в состоянии реализовать ослепленный двунаправленный связанный список?

22
задан devilcrack 22 February 2010 в 23:32
поделиться

11 ответов

Да, он работает, но необходимо установить библиотеки GUI и установить параметр DISPLAY на сервер X, который требуется отобразить. Сейчас он работает на CentOS 5.4 и должен был использовать опцию установки «Server - GUI» стих «Server». Тогда я просто использую «ssh -X» из системы, где я хочу, чтобы он отображался.

-121--843056-

Если вы установите тэг изображения src равным # или пустой, это вызовет двойную загрузку страницы, я столкнулся с этим на хром и до на firefox.

Вы можете поместить любой символ или последовательность вместо пустого или #, чтобы решить эту проблему.

-121--1328170-

Хотя никто больше не катит свои собственные стопки или очереди, очень важно понять, как и почему они отличаются. Так что нет, чтобы эффективно использовать простые структуры данных, не на 100% необходимо иметь возможность выполнять всю правильную проверку ошибок на наличие петель/нулевого конца/параллелизма/и т.д. в связанном списке с завязанными глазами.

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

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

16
ответ дан 29 November 2019 в 04:50
поделиться

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

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

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

4
ответ дан 29 November 2019 в 04:50
поделиться

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

4
ответ дан 29 November 2019 в 04:50
поделиться

Ответ на этот вопрос заключается в реализации метода делегата ScrollView willBeginDragging. UITableView наследует от UIScrollView.

- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView;
       [textField resignFirstResponder];
}

Это приводит к отключению клавиатуры, как только таблица View начинает прокрутку

По этому наследованию также можно удерживать таблицу View от прокрутки, точка. Установите для свойства scrollEnabled значение NO, a la

self.tableView.scrollEnabled = NO;
-121--4434978-

Я думаю, что все намного сложнее, чем вы думаете...

Если для отображаемого значения формы установлен набор none с классом css или только с атрибутом style на странице inital, нажатие клавиши enter в текстовом поле не работает только при наличии нескольких полей ввода с типом текста... если у вас есть одно текстовое поле, это прекрасно работает.. если у вас есть более одного, это не вызывает подачи формы...

Здесь я сделал демо...

Хорошо работает (обычная форма) http://yasinergul.com/stackoverflow/ie8-enter-key-bug/one.html

Хорошо работает (форма скрыта и установлена видимой, но при одном текстовом вводе) http://yasinergul.com/stackoverflow/ie8-enter-key-bug/two.html

Не работает (форма скрыта и установлена видимой, но с двумя текстовыми вводами) http://yasinergul.com/stackoverflow/ie8-enter-key-bug/three.html

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

$(".hidden").hide();

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

-121--1573891-

Лично я чувствую, что эти вещи подпадают под Закон об абстракциях утечек .

Конечно, вы могли бы потратить свои дни на написание кода C # с хорошим типом последовательностей , но в какой-то пункт вам придется понять разницу между «\r\n » и «\n» , и почему svn, кажется, прекрасно импортирует из окон, но заваливает свою linux-машину, и это помогает реализовать последовательность функции.

Как человек, который кодировал последнее десятилетие: нет, я не переписываю списки с двойными связями, но это потому, что я написал их первые сто раз. Как новый программист, сделайте это пару раз, затем возьмите хороший API. Предпочтительно скважинный документ...

3
ответ дан 29 November 2019 в 04:50
поделиться

Все зависит от того, что вам нужно / что вы хотите сделать.

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

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

Если вы студент, то узнайте о них столько, сколько захотите!

2
ответ дан 29 November 2019 в 04:50
поделиться

Вы должны быть настройки делегатом NSTextField , созданного в контроллере, а затем реализовать textField: shouldChireInRange: replaceyString: в контроллере, чтобы вы получали уведомления о любых изменениях текста в текстовом поле.

При изменении текста храните измененный текст в свойстве контроллера.

При создании NSTextField в cellForRowAtIndexPath задайте значение из этого свойства.

Помните, что с Cocoa вы должны держать данные модели отдельно от вашего представления.

-121--4434979-

В зависимости от того, сколько лет книге, она может относиться к сегментированным архитектурам, где существуют два различных «размера» указателя: ближние указатели, которые указывают на локальный сегмент (и могут быть установлены в 16 бит), и дальние или длинные указатели, которые могут указывать на другой сегмент (и, следовательно, были больше). Вот почему вы видите типы, как LPVOID в Win32 API: LPVOID является «длинный (дальний) указатель на пустоту», то есть указатель на любое место в памяти.

Использование LP и NP является зависанием от Win16 и сегментированных процессорных архитектур того времени. В современной Windows, с ее плоскими виртуальными адресными местами, ближние и дальние указатели, как правило, представляют только археологический интерес: есть только один вид указателя, и вы можете игнорировать «ближний» и «длинный/дальний» квалификаторы.

-121--1849179-

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

3
ответ дан 29 November 2019 в 04:50
поделиться

С точки зрения профессионального развития вы должны уметь реализовать все, что вам может понадобиться; когда-нибудь вам, вероятно, придется реализовать что-то, чего нет в библиотеке, и вам также, вероятно, придется время от времени изобретать новые алгоритмы.

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

1
ответ дан 29 November 2019 в 04:50
поделиться

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

Существуют и другие структуры данных, которые обычно переписываются и которые не являются частью STL. Одним из примеров является кольцевой буфер или кольцевая очередь. Некоторые магазины предпочитают переписать код, чем возиться с лицензионными отчислениями или законами об авторском праве при использовании готовых библиотек.

2
ответ дан 29 November 2019 в 04:50
поделиться

Вы должны быть в состоянии писать свои собственные структуры данных. На самом деле выполнение этого для работы должно быть необычным обстоятельством. Коллекции C ++ STL, Java или .NET должны подходить для 99% случаев.

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

Однако такая возможность случилась со мной только раз в десять лет.

1
ответ дан 29 November 2019 в 04:50
поделиться

… Вместо STL и подобных библиотек на других языках?

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

Как новичок, насколько я должен углубляться в эту часть разработки программного обеспечения? В ширину или в глубину?

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

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

Это только концептуальное понимание { {1}} необходимо в наши дни? Или мне следует создать двусвязный список с завязанными глазами?

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

2
ответ дан 29 November 2019 в 04:50
поделиться

Вы, наверное, слышали о правиле 80/20. 80% разработчиков не имеют практического (реального) опыта реализации структур данных в выбранном ими языке. Поэтому, чтобы быть в числе этих 20%, постарайтесь изучить его и получить практический опыт. При этом в реальности 80% работы, которую вы будете выполнять, не потребует реализации собственных DS. В случае таких языков, как Java и C#, иногда написание собственного DS может вызвать критику. У вас есть пакеты/либраторы для большинства ваших нужд. Но реализуя эти DS на своем языке, вы улучшите свои навыки программирования. Так что приступайте к созданию своего собственного стека и очереди. Я уверен, что первое, что вы узнаете (если вы используете java/c# в качестве своего языка) - это утечки памяти :)

.
1
ответ дан 29 November 2019 в 04:50
поделиться
Другие вопросы по тегам:

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