На этом сайте Вы найдете и сможете изучить наиболее важные компьютерные алгоритмы языков C и C++, которые востребованы в настоящее время.
Четыре основные части:
Собранный на этом сайте материал должен произвести наибольшее впечатление на тех читателей, которые знакомы с одним-двумя курсами по компьютерам или обладают аналогичным опытом в программировании: знакомых с программированием на языках высокого уровня, таких как C++, Java или C, и, возможно тех, кто прошел основные концепции систем программирования. Таким образом, в первую очередь, сайт предназначен тем, кто знаком с современным языком программирования и с основными свойствами современных компьютерных систем. В тексте присутствуют ссылки, которые могут поспособствовать восстановлению пробелов в знаниях.
Большинство математических выкладок, сопровождающих аналитические результаты, являются самодостаточными (либо же помечены как выходящие за рамки этого сайта)., поэтому для понимания изложенного на сайте материала требуется лишь минимальная математическая подготовка, хотя хорошая подготовка определенно будет способствовать лучшему усвоению.
Предисловие консультанта по C++
Изучение изложенного на сайте материала может существенно варьироваться в зависимости от предпочтений того, кто обучает и того, кто изучает программирование. Сайт содержит достаточный объем фундаментальных материалов, чтобы его можно было использовать для изучения структур данных начинающими. Так же приведено достаточное количество дополнительных материалов, что бы сайт мог быть использованным в качестве обучающего источника по разработке и анализу алгоритмов для более подготовленных программистов.
В элементарном курсе по структурам данных и алгоритмам основное внимание может уделяться основным структурам данных, описанным в части 2, и их использованию в реализациях, приведенных частях 3 и 4. В курсе по разработке и анализу алгоритмов, основное внимание может уделяться материалу, изложенному в «Анализе» и в разделе «Рекурсия и деревья». После чего можно приступить к изучению способов достижения хорошей асимптотической производительности алгоритмов, описанных в частях 3 и 4. в курсе по разработке программного обеспечения математические выкладки и дополнительные материалы по алгоритмам можно опустить, а основное внимание акцентировать на интеграции приведенных здесь реализаций в большие программы или системы. В курсе по алгоритмам может использоваться обзорный подход с рассмотрением концепций, относящихся ко всем названным темам.
Упражнения, представленные на сайте, разделяются на несколько типов. Ряд из них предназначены для проверки усвоения изложенного на сайте материала, и в них читателям просто предлагается проанализировать пример или применить описанные в тексе концепции. Другие же требуют реализации и сборки алгоритмов воедино или экспериментального исследования с целью сравнения вариантов алгоритмов и изучения их свойств. Третьи содержат важную информацию, уровень детализации которой выходит за рамки основного материала сайта. Ознакомление и выполнение упражнений будет полезно абсолютно всем изучающим программирование.
Каждый желающий как можно более эффективно использовать компьютер может воспользоваться этим сайтом как справочным пособием. Читатели, обладающие определенным опытом в программировании, смогут найти на сайте информацию по конкретным темам. В большинстве случаев отдельные разделы сайта не зависят один от другого, хотя иногда в алгоритмах используются методы, описанные в предыдущих разделах.
Сайт ориентирован на изучение алгоритмов, которые, скорее всего, найдут практическое применение. На нем приводится информация об инструментальных средствах, чтобы пользователи могли осознанно реализовать, отлаживать и настраивать алгоритмы для решения конкретных задач или для обеспечения заданных функциональных возможностей приложения. В описания включены полные реализации рассмотренных методов, а также описания действия этих программ применительно к последовательному набору примеров.
Поскольку работа выполняется с реальным, а не псевдокодом, программы можно быстро задействовать в практических целях. При изучении алгоритмов эти работающие программы можно использовать различными способами. Их можно прочесть для проверки своего понимания особенностей алгоритма или с целью ознакомления с одним из возможных способов обработки инициализации, граничных условий и других сложных ситуаций, которые зачастую вызывают затруднения при программировании. Читатели могут запустить их, чтобы увидеть алгоритмы в действии, для эмпирического исследования производительности и для сравнения полученных результатов с данными, приведенными в таблицах книги, либо же для тестирования внесенных изменений.
Когда это уместно, для обоснования предпочтительности определенных алгоритмов приводятся как экспериментальные, так и аналитические результаты. В представляющих интерес случаях описывается взаимосвязь между рассматриваемыми практическими алгоритмами и чисто теоретическими результатами. Хотя это и не подчеркивается, в содержании сайта устанавливается взаимосвязь между анализом алгоритмов и теорией компьютерных наук. На сайте собрана и проанализирована специфическая информация по характеристикам производительности алгоритмов и реализаций.
Для всех реализаций используется язык программирования C++. В программах применяется широкое множество стандартных идиом C++, а в текст включены краткие описания каждой из конструкций.
Авторы сайта разработали основанный на классах, шаблонах и перегруженных операциях стиль программирования C++, который по нашему мнению позволяет эффективно представлять алгоритмы и структуры данных в виде реальных программ. Мы стремимся к изящным, компактным, эффективным и переносным реализациям. Везде, где это возможно, мы стремились сохранить единство стиля, дабы сходные по действию программы выгладили похожими.
Для множества приведенных на этом сайте алгоритмов схожесть сохраняется независимо от языка: быстрая сортировка остается быстрой сортировкой (это лишь один яркий пример) независимо от того на каком языке программирования она выражена. С одной стороны, представленный нами код продиктован опытом реализации алгоритмов на этих и множестве других языков. С дугой стороны, отдельные особенности некоторых из этих языков продиктованы опытом их применения разработчиками по отношению к некоторым алгоритмам и структурам данных, которые рассматриваются в книге.
Первый раздел является характерным примером подобного подхода к разработке эффективных реализаций рассматриваемых алгоритмов на C++, а во втором разделе описывается используемый нами подход к их анализу. Третий и четвертый разделы посвящены описанию и обоснованию основных механизмов, используемых для реализаций типов данных и абстрактных типов данных. Эти четыре раздела закладывают фундамент для понимания остального материала сайта.
С уважением, создатели сайта
www.itdoco.com – алгоритмы программирования на языке C.