Компьютеры, программирование

  • 741. Алгоритмы выделения контуров
    Информация пополнение в коллекции 12.01.2009
  • 742. Алгоритмы вычерчивания графических примитивов
    Контрольная работа пополнение в коллекции 26.04.2012

    Круг%20%d0%bf%d0%bb%d0%be%d1%81%d0%ba%d0%be%d1%81%d1%82%d0%b8%20<http://ru.wikipedia.org/wiki/%D0%9F%D0%BB%D0%BE%D1%81%D0%BA%D0%BE%D1%81%D1%82%D1%8C_%28%D0%B3%D0%B5%D0%BE%D0%BC%D0%B5%D1%82%D1%80%D0%B8%D1%8F%29>,%20%d1%80%d0%b0%d1%81%d1%81%d1%82%d0%be%d1%8f%d0%bd%d0%b8%d0%b5%20%d0%be%d1%82%20%d0%ba%d0%be%d1%82%d0%be%d1%80%d1%8b%d1%85%20%d0%b4%d0%be%20%d0%b7%d0%b0%d0%b4%d0%b0%d0%bd%d0%bd%d0%be%d0%b9%20%d1%82%d0%be%d1%87%d0%ba%d0%b8,%20%d0%bd%d0%b0%d0%b7%d1%8b%d0%b2%d0%b0%d0%b5%d0%bc%d0%be%d0%b9%20%d1%86%d0%b5%d0%bd%d1%82%d1%80%d0%be%d0%bc%20%d0%ba%d1%80%d1%83%d0%b3%d0%b0,%20%d0%bd%d0%b5%20%d0%bf%d1%80%d0%b5%d0%b2%d1%8b%d1%88%d0%b0%d0%b5%d1%82%20%d0%b7%d0%b0%d0%b4%d0%b0%d0%bd%d0%bd%d0%be%d0%b3%d0%be%20%d0%bd%d0%b5%d0%be%d1%82%d1%80%d0%b8%d1%86%d0%b0%d1%82%d0%b5%d0%bb%d1%8c%d0%bd%d0%be%d0%b3%d0%be%20%d1%87%d0%b8%d1%81%d0%bb%d0%b0,%20%d0%bd%d0%b0%d0%b7%d1%8b%d0%b2%d0%b0%d0%b5%d0%bc%d0%be%d0%b3%d0%be%20%d1%80%d0%b0%d0%b4%d0%b8%d1%83%d1%81%d0%be%d0%bc%20%d1%8d%d1%82%d0%be%d0%b3%d0%be%20%d0%ba%d1%80%d1%83%d0%b3%d0%b0.%20%d0%95%d1%81%d0%bb%d0%b8%20%d1%80%d0%b0%d0%b4%d0%b8%d1%83%d1%81%20%d1%80%d0%b0%d0%b2%d0%b5%d0%bd%20%d0%bd%d1%83%d0%bb%d1%8e,%20%d1%82%d0%be%20%d0%ba%d1%80%d1%83%d0%b3%20%d0%b2%d1%8b%d1%80%d0%be%d0%b6%d0%b4%d0%b0%d0%b5%d1%82%d1%81%d1%8f%20%d0%b2%20%d1%82%d0%be%d1%87%d0%ba%d1%83."> - геометрическое место точек <http://ru.wikipedia.org/wiki/%D0%93%D0%B5%D0%BE%D0%BC%D0%B5%D1%82%D1%80%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%BE%D0%B5_%D0%BC%D0%B5%D1%81%D1%82%D0%BE_%D1%82%D0%BE%D1%87%D0%B5%D0%BA> плоскости <http://ru.wikipedia.org/wiki/%D0%9F%D0%BB%D0%BE%D1%81%D0%BA%D0%BE%D1%81%D1%82%D1%8C_%28%D0%B3%D0%B5%D0%BE%D0%BC%D0%B5%D1%82%D1%80%D0%B8%D1%8F%29>, расстояние от которых до заданной точки, называемой центром круга, не превышает заданного неотрицательного числа, называемого радиусом этого круга. Если радиус равен нулю, то круг вырождается в точку.

  • 743. Алгоритмы для вычисления корней системы на языке Паскаль
    Дипломная работа пополнение в коллекции 07.05.2011

    Последовательность разделов описания объектов (LABEL, CONST, TYPE, VAR и др.) программы может быть произвольной. В случае необходимости типы разделов могут повторяться. Умолчаний в Паскале нет. Все, что используется в программе: константы, переменные, метки, - должно быть объявлено явно. Каждый объект программы должен быть описан и только один раз для данной области действия, объекты программы имеют областью их действия блок, в котором они объявлены, и все вложенные в него блоки, процедуры и функции, в которых они не переобъявлены. Поэтому одни и те же идентификаторы можно использовать в различных подпрограммах (процедурах и функциях) программы в разных смыслах.

  • 744. Алгоритмы и протоколы маршрутизации
    Информация пополнение в коллекции 12.01.2009

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

  • 745. Алгоритмы и блок-схемы
    Информация пополнение в коллекции 29.03.2010

    Подробные блок-схемы, однако, устарели; они только мешают, и в лучшем случае пригодны для обучения новичков, еще не умеющих алгоритмически мыслить. В свое время предложенные Голдстайном и Нейманом маленькие квадратики на блок-схемах вместе со своим содержанием выступали в качестве языков высокого уровня, объединяя абсолютно непонятные операторы машинного языка в группы, имеющие определенный смысл. Как давно уже указал Айверсон"><http://khpi-iip.mipk.kharkiv.edu/library/extent/prog/brooks/comment.htm>, в систематическом языке высокого уровня такая группировка уже осуществлена, так что каждый квадратик просто соответствует оператору (рис. 15.2). Тогда сами квадратики превращаются в случайное и ненужное упражнение по рисованию, и от них можно отказаться. Но теперь не остается ничего, кроме стрелок. Стрелки, соединяющие оператор со следующим за ним, не нужны, сотрем их. Остаются только операторы перехода. Но если следовать хорошей практике, а использовать блочные структуры для минимизации числа операторов перехода, то останется совсем/немного стрелок, вот они-то очень сильно облегчают понимание. Эти стрелки можно перенести прямо ни распечатку программы и совсем избавиться от блок-схемы.

  • 746. Алгоритмы и механизмы синхронизации процессов в операционных системах
    Дипломная работа пополнение в коллекции 28.06.2012
  • 747. Алгоритмы и механизмы синхронизации процессов в операционных системах
    Дипломная работа пополнение в коллекции 02.06.2012

    Этап урокаУчительУченикиДоска1Здравствуйте, садитесь. Давайте отметим, кто отсутствует сегодня на уроке.2Сегодня на уроке мы продолжим изучать процессы и узнаем, как они взаимодействуют, так же мы познакомимся с механизмом синхронизации типа семафор, который обеспечивает безошибочное взаимодействие между процессами. Записывают число и тему урока. Число и тема урока (Изучение механизма синхронизации семафор)3Но сначала давайте вспомним материал предыдущего урока, а именно что такое процесс и поток? Чем они отличаются? Какое значение они имеют для операционной системы? Так же давайте повторим основные алгоритмические конструкции, которые понадобятся нам на сегодняшнем уроке. Это следование, ветвление и цикл.Отвечают на вопросы.Примеры алгоритмических структур (следование, ветвление, цикл)4С ростом вычислительной мощности компьютеров, появилась тенденция к усложнению программ и расширению их функционала. Из-за этого большинство современного ПО стало разрабатываться с учетом многопоточности, призванной ускорить работу программ путем распределения различных вычислений по разным процессам/потокам. Это весьма эффективно, но работа разных процессов в одной области данных может привести к ошибкам различного рода или даже к краху программы. Для корректного взаимодействия процессов недостаточно одних организационных усилий операционной системы. Необходимы определенные внутренние изменения в поведении процессов. Для этих целей были созданы механизмы синхронизации. Чтобы понимать принципы взаимодействия процессов и предотвращать ошибки, связанные с их совместной работой, следует знать особенности реализации и структуру механизмов синхронизации. Важным понятием при изучении способов синхронизации процессов является понятие критической секции (critical section) программы. Критическая секция - это часть программы, исполнение которой может привести к возникновению гонок для определенного набора программ. Чтобы исключить эффект гонок по отношению к некоторому ресурсу, необходимо организовать работу так, чтобы в каждый момент времени только один процесс мог находиться в своей критической секции, связанной с этим ресурсом. Иными словами, необходимо обеспечить реализацию взаимоисключения для критических секций программ. Реализация взаимоисключения для критических секций процессов с практической точки зрения означает, что по отношению к другим процессам, участвующим во взаимодействии, критическая секция начинает выполняться как единая операция для всех процессов. Семафор представляет собой целую переменную, принимающую неотрицательные значения, доступ любого процесса к которой, за исключением момента ее инициализации, может осуществляться только через две атомарные операции: P (от датского слова proberen - проверять) и V (от verhogen - увеличивать). P-операция над семафором представляет собой попытку уменьшения значения семафора на 1. Если перед выполнением P-операции значение семафора было больше 0, то P-операция выполняется без задержек. Если перед выполнением P-операции значение семафора было 0, то процесс, выполняющий P-операцию, переводится в состояние ожидания до тех пор, пока значение семафора не станет большим 0. V-операция над семафором представляет собой увеличение значения семафора на 1. Если при этом имеются процессы, задержанные на выполнении P-операции на данном семафоре, один из этих процессов выходит из состояния ожидания и может выполнить свою P-операцию. Семафоры, принимающие два значения (с возможными значениями 0 и 1), называются двоичными. Считающие семафоры (семафоры со счетчиками) принимают целые неотрицательные значения, большие двух. Операции P и V являются неделимыми. Неделимость операций означает, что в каждый момент времени только один процесс может выполнять операцию P или V над данным семафором. Неделимость операции также означает, что если несколько процессов задерживаются на P-операции, то только один из них может успешно завершить свою P-операцию, если значение семафора стало больше 0, при этом никаких предположений не делается о том, какой это будет процесс. P(S): if S=1 Then S=S-1 /*закрыть семафор*/ else БЛОКИРОВАТЬ обратившийся процесс по S V(S): if список процессов, ожидающих S, не пуст then ДЕБЛОКИРОВАТЬ процесс, ожидающий S else S=1 /*открыть семафор*/ Для реализации взаимного исключения, например, предотвращения возможности одновременного изменения двумя или более процессами общих данных, создается двоичный семафор S. Начальное значение этого семафора устанавливается равным 1. Критические секции кода (секции, которые могут одновременно выполняться только одним процессом) обрамляются операциями P(S) (в начале секции) и V(S) (в конце секции). P(S) критическая секция V(S) Процесс, входящий в критическую секцию, выполняет операцию P(S) и переводит семафор в 0. Если в критической секции уже находится другой процесс, то значение семафора уже равно 0. Тогда второй процесс, желающий войти в критическую секцию, блокируется своей P-операцией до тех пор, пока процесс, находящийся в критической секции сейчас, не выйдет из нее, выполнив на выходе операцию V(S). Если начальное значение семафора равно единице, то взаимное исключение действительно гарантировано, так как процесс может выполнить P-операцию до того, как другой выполнит V-операцию. Кроме того, процесс без необходимости не перекрывает входы внутрь своей критической секции. Процесс отменяет вход, только, если значение семафора равно 0. Теперь попробуйте закончить описание механизм двоичного семафора (для двух процессов) по этой алгоритмической схеме. Записывают определение механизмов синхронизации. Записывают определение критической секции. Записывают определение семафора. Записывают значения V и P операций. Разбирают и объяснять алгоритм семафора. Придумывают описание критической секции. Довершают описание схемы работы двоичного семафора. Определение механизмов синхронизации. Определение критической секции. Определение семафора. Значение V и P операций. Алгоритм семафора. 5На этом урок мы познакомились с механизмами синхронизации, которые помогают процессам взаимодействовать без ошибок. Разобрали понятие критической секции и научились составить алгоритм работы семафора.Прощаются с учителем.

  • 748. Алгоритмы и протоколы маршрутизации
    Доклад пополнение в коллекции 09.12.2008

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

    1. Считывает из заголовка пакета, соответствующий сетевому уровню модели OSI, адрес назначения, т.е. сетевой адрес получателя;
    2. По таблице маршрутизации определяется адрес следующего транзитного маршрутизатора, пересылка к которому соответствует оптимальному пути до пункта назначения;
    3. Заменяет в заголовке пакета, соответствующий канальному уровню модели OSI, свой МАС- адрес на МАС- адрес выбранного транзитного маршрутизатора;
    4. Отсылает пакет выбранному транзитному маршрутизатору.
  • 749. Алгоритмы на графах. Кратчайшие расстояния на графах
    Курсовой проект пополнение в коллекции 11.03.2010

    Его механик Винт Р. сделал устройство, вычисляющее эту функцию в несколько этапов с использование промежуточной памяти и вспомогательных функций. Для вычисления каждой из функций требуется, чтобы в ячейках памяти уже находились вычисленные параметры (которые являются значениями вычисленных функций), необходимые для ее вычисления. Вычисление функции без параметров может производится в любое время. После вычисления функции ячейки могут быть использованы повторно (хотя бы для записи результата вычисленной функции). Структура вызова функций такова, что каждая функция вычисляется не более одного раза и любой параметр используется не более одного раза. Любой параметр есть имя функции. Так как Скрудж не хочет тратить лишних денег на микросхемы, он поставил задачу минимизировать память прибора. По заданной структуре вызовов функций необходимо определить минимальный возможный размер памяти прибора и указать последовательность вычисления функций.

  • 750. Алгоритмы на графах. Независимые и доминирующие множества
    Контрольная работа пополнение в коллекции 07.03.2010

     

    1. Адельсон-Вельский Г.М., Диниц Е.А., Карзанов А.В. Потоковые алгоритмы. - М.: Наука, 1975.
    2. Берж К. Теория графов и ее применение. - М.: ИЛ, 1962.
    3. Емеличев В.А., Мельников О.И., Сарванов В.И., Тышкевич Р.И. Лекции по теории графов. - М.: Наука, 1990.
    4. Зыков А.А. Теория конечных графов. - Новосибирск: Наука; Сиб. отд-ние, 1969.
    5. Йенсен П., Барнес Д. Потоковое программирование.-М.:Радио и связь, 1984.
    6. Касьянов В.Н., Сабельфельд В.К. Сборник заданий по практикуму на ЭВМ. - М.: Наука, 1986.
    7. Кристофидес Н. Теория графов. Алгоритмический подход. - М.: Мир, 1978.
    8. Кофман А. Введение в прикладную комбинаторику. - М.: Наука, 1975.
    9. Липский В. Комбинаторика для программистов. - М.: Мир, 1988.
    10. Майника Э. Алгоритмы оптимизации на сетях и графах.-М.:Мир, 1981.
    11. Нечепуренко М.И., Попков В.К., Майнагашев С.М. и др. Алгоритмы и программы решения задач на графах и сетях. - Новосибирск: Наука; Сиб. отд-ние, 1990.
    12. Окулов С.М. Конспекты занятий по информатике (алгоритмы на графах). Учебное пособие для студентов и учителей школ. - Киров, 1996.
    13. Пападимитриу Х., Стайглиц К. Комбинаторная оптимизация: Алгоритмы и сложность.-М.:Мир, 1985.
    14. Свами М., Тхуласираман К. Графы, сети и алгоритмы. - М.: Мир, 1984.
    15. Филипс Д., Гарсиа-Диас А. Методы анализа сетей. - М.: Мир, 1984.
    16. Форд Л.Р., Фалкерсон Д.Р. Потоки в сетях. - М.: Мир, 1963.
    17. Фрэнк Г., Фриш И. Сети, связь и потоки. - М.: Связь, 1978.
    18. Харари Ф. Теория графов. - М.: Мир, 1973.
  • 751. Алгоритмы нейрокибернетики
    Информация пополнение в коллекции 12.01.2009

    Принцип обучения такой нейронной сети базируется на вычислении отклонений значений сигналов на выходных процессорных элементах от эталонных и обратном "прогоне" этих отклонений до породивших их элементов с целью коррекции ошибки. Еще в 1974 году
    Поль Дж. Вербос изобрел значительно более эффективную процедуру для вычисления величины, называемой производной ошибки по весу, когда работал над своей докторской диссертацией в Гарвардском университете. Процедура, известная теперь как алгоритм обратного распространения, стала одним из наиболее важных инструментов в обучении нейронных сетей. Однако этому алгоритму свойственны и недостатки, главный из которых - отсутствие сколько-нибудь приемлемых оценок времени обучения. Понимание, что сеть в конце концов обучится, мало утешает, если на это могут уйти годы. Тем не менее, алгоритм обратного распространения имеет широчайшее применение. Например, успех фирмы NEC в распознавании букв, был достигнут именно благодаря алгоритму обратного распространения. Мой пример и является сетью с обратным распространением. Этот метод является достаточно сложным и очень наглядным, поэтому я остановлюсь на нём подробнее.

  • 752. Алгоритмы обработки больших массивов. Алгоритмы обработки данных
    Курсовой проект пополнение в коллекции 09.02.2011

    В таком случае мы говорим, что данные представляют собой (последовательный) файл.. Наиболее важный из них сортировка с помощью слияния. Слияние означает объединение двух (или более) последовательностей в одну-единственную упорядоченную последовательность с помощью повторяющегося выбора из доступных в данный момент элементов. Слияние намного проще сортировки, и его используют как вспомогательную операцию в более сложных процессах сортировки последовательностей. Одна из сортировок на основе слияния называется простым, слиянием. Она выполняется следующим образом:

    1. Последовательность а разбивается на две половины: b и с.
    2. Части b и с сливаются, при этом одиночные элементы образуют упорядоченные пары.
    3. Полученная последовательность под именем о вновь обрабатывается как указано в пунктах 1, 2;при этом упорядоченные пары переходят в такие же четверки.
    4. Повторяя предыдущие шаги, сливаем четверки в восьмерки и т. д., каждый раз «удваивая» длинуслитых подпоследовательностей до тех пор, пока не будет упорядочена целиком вся последовательность.
  • 753. Алгоритмы обработки данных линейной и нелинейной структуры
    Курсовой проект пополнение в коллекции 21.03.2011

     

    • программы, нажмите на кнопку “Programs Data”. Вверху под надписью “Array” будет выведен массив.
    • Если Вы желаете ввести данные самостоятельно, в поле над кнопками “Delete Element” и “Add Element”, введите число, затем нажмите кнопку “Add Element”, введенное число появится под надписью “Array”.
    • Далее следует выбрать тип пирамиды, для этого установите метку напротив желаемой пирамиды, затем нажмите кнопку “Show Tree”. В поле слева от панели параметров вы увидите получившуюся пирамиду.
    • Если Вы хотите добавить элемент в уже существующую пирамиду , в поле над кнопками “Delete Element” и “Add Element”, введите число, затем нажмите кнопку “Add Element”, введенное число будет добавлено в конец массива.
    • Если вы хотите удалить элемент, введите его значение в поле над кнопками “Delete Element” и “Add Element” и нажмите кнопку “Delete Element”, если этот элемент является корнем, произойдет его удаление.
  • 754. Алгоритмы параллельных процессов при исследовании устойчивости подкрепленных пологих оболочек
    Дипломная работа пополнение в коллекции 18.11.2010

    В дальнейшем будем предполагать, что имеется сеть из нескольких компьютеров (будем называть их вычислительными узлами,%20%d0%b2%d0%ba%d0%bb%d1%8e%d1%87%d0%b0%d1%8e%d1%89%d0%b8%d1%85%20%d0%b8%d0%bd%d1%82%d0%b5%d0%b3%d1%80%d0%b8%d1%80%d0%be%d0%b2%d0%b0%d0%bd%d0%bd%d1%83%d1%8e%20%d1%81%d1%80%d0%b5%d0%b4%d1%83%20%d1%80%d0%b0%d0%b7%d1%80%d0%b0%d0%b1%d0%be%d1%82%d0%ba%d0%b8%20<http://ru.wikipedia.org/wiki/%D0%98%D0%BD%D1%82%D0%B5%D0%B3%D1%80%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D0%B0%D1%8F_%D1%81%D1%80%D0%B5%D0%B4%D0%B0_%D1%80%D0%B0%D0%B7%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D0%B8>%20%d0%bf%d1%80%d0%be%d0%b3%d1%80%d0%b0%d0%bc%d0%bc%d0%bd%d0%be%d0%b3%d0%be%20%d0%be%d0%b1%d0%b5%d1%81%d0%bf%d0%b5%d1%87%d0%b5%d0%bd%d0%b8%d1%8f%20%d0%b8%20%d1%80%d1%8f%d0%b4%20%d0%b4%d1%80%d1%83%d0%b3%d0%b8%d1%85%20%d0%b8%d0%bd%d1%81%d1%82%d1%80%d1%83%d0%bc%d0%b5%d0%bd%d1%82%d0%b0%d0%bb%d1%8c%d0%bd%d1%8b%d1%85%20%d1%81%d1%80%d0%b5%d0%b4%d1%81%d1%82%d0%b2.%20Microsoft%20Visual%20Studio%202008%20C++%20Express%20Edition%20-%20%d0%bb%d0%b5%d0%b3%d0%ba%d0%be%d0%b2%d0%b5%d1%81%d0%bd%d0%b0%d1%8f%20%d1%81%d1%80%d0%b5%d0%b4%d0%b0%20%d1%80%d0%b0%d0%b7%d1%80%d0%b0%d0%b1%d0%be%d1%82%d0%ba%d0%b8,%20%d0%bf%d1%80%d0%b5%d0%b4%d1%81%d1%82%d0%b0%d0%b2%d0%bb%d1%8f%d1%8e%d1%89%d0%b0%d1%8f%20%d1%81%d0%be%d0%b1%d0%be%d0%b9%20%d1%83%d1%80%d0%b5%d0%b7%d0%b0%d0%bd%d0%bd%d1%83%d1%8e%20%d0%b2%d0%b5%d1%80%d1%81%d0%b8%d1%8e%20Visual%20Studio.%20%d0%92%20%d0%be%d1%82%d0%bb%d0%b8%d1%87%d0%b8%d0%b5%20%d0%be%d1%82%20%d0%bf%d0%be%d0%bb%d0%bd%d0%be%d0%b9%20%d0%b2%d0%b5%d1%80%d1%81%d0%b8%d0%b8,%20%d1%82%d0%b0%d0%ba%d0%b0%d1%8f%20%d1%81%d1%80%d0%b5%d0%b4%d0%b0%20%d0%bf%d1%80%d0%b5%d0%b4%d0%bd%d0%b0%d0%b7%d0%bd%d0%b0%d1%87%d0%b5%d0%bd%d0%b0%20%d0%b4%d0%bb%d1%8f%20%d1%8f%d0%b7%d1%8b%d0%ba%d0%b0%20%d0%bf%d1%80%d0%be%d0%b3%d1%80%d0%b0%d0%bc%d0%bc%d0%b8%d1%80%d0%be%d0%b2%d0%b0%d0%bd%d0%b8%d1%8f%20C/C++.%20%d0%9e%d0%bd%d0%b0%20%d0%b2%d0%ba%d0%bb%d1%8e%d1%87%d0%b0%d0%b5%d1%82%20%d0%b2%20%d1%81%d0%b5%d0%b1%d1%8f%20%d0%bd%d0%b5%d0%b1%d0%be%d0%bb%d1%8c%d1%88%d0%be%d0%b9%20%d0%bd%d0%b0%d0%b1%d0%be%d1%80%20%d0%b8%d0%bd%d1%81%d1%82%d1%80%d1%83%d0%bc%d0%b5%d0%bd%d1%82%d0%be%d0%b2,%20%d0%b2%20%d0%be%d1%82%d0%bb%d0%b8%d1%87%d0%b8%d0%b5%20%d0%be%d1%82%20%d0%bf%d0%be%d0%bb%d0%bd%d1%8b%d1%85%20%d0%b2%d0%b5%d1%80%d1%81%d0%b8%d0%b9:%20%d0%be%d1%82%d1%81%d1%83%d1%82%d1%81%d1%82%d0%b2%d1%83%d0%b5%d1%82%20%d0%b4%d0%b8%d0%b7%d0%b0%d0%b9%d0%bd%d0%b5%d1%80%20%d0%ba%d0%bb%d0%b0%d1%81%d1%81%d0%be%d0%b2%20%d0%b8%20%d0%bc%d0%bd%d0%be%d0%b3%d0%b8%d0%b5%20%d0%b4%d1%80%d1%83%d0%b3%d0%b8%d0%b5%20%d0%b8%d0%bd%d1%81%d1%82%d1%80%d1%83%d0%bc%d0%b5%d0%bd%d1%82%d1%8b,%20%d0%b0%20%d1%82%d0%b0%d0%ba%d0%b6%d0%b5%20%d0%bf%d0%be%d0%b4%d0%b4%d0%b5%d1%80%d0%b6%d0%ba%d0%b0%20%d0%bf%d0%bb%d0%b0%d0%b3%d0%b8%d0%bd%d0%be%d0%b2%20<http://ru.wikipedia.org/wiki/%D0%9F%D0%BB%D0%B0%D0%B3%D0%B8%D0%BD>%20%d0%b8%20%d1%83%d0%b4%d0%b0%d0%bb%d1%91%d0%bd%d0%bd%d1%8b%d1%85%20%d0%b1%d0%b0%d0%b7%20%d0%b4%d0%b0%d0%bd%d0%bd%d1%8b%d1%85%20<http://ru.wikipedia.org/wiki/%D0%91%D0%B0%D0%B7%D0%B0_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85>%20%d0%b2%20%d0%b4%d0%b8%d0%b7%d0%b0%d0%b9%d0%bd%d0%b5%d1%80%d0%b5%20%d0%b4%d0%b0%d0%bd%d0%bd%d1%8b%d1%85.%20%d0%9a%d0%be%d0%bc%d0%bf%d0%b8%d0%bb%d1%8f%d1%82%d0%be%d1%80%d1%8b%20%d0%b2%2064-%d0%b1%d0%b8%d1%82%d0%bd%d1%8b%d0%b9%20%d0%ba%d0%be%d0%b4%20%d1%82%d0%b0%d0%ba%d0%b6%d0%b5%20%d0%bd%d0%b5%d0%b4%d0%be%d1%81%d1%82%d1%83%d0%bf%d0%bd%d1%8b%20%d0%b2%20Express%20%d1%80%d0%b5%d0%b4%d0%b0%d0%ba%d1%86%d0%b8%d1%8f%d1%85.%20Microsoft%20<http://ru.wikipedia.org/wiki/Microsoft>%20%d0%bf%d0%be%d0%b7%d0%b8%d1%86%d0%b8%d0%be%d0%bd%d0%b8%d1%80%d1%83%d0%b5%d1%82%20%d1%8d%d1%82%d1%83%20%d0%bb%d0%b8%d0%bd%d0%b5%d0%b9%d0%ba%d1%83%20IDE%20<http://ru.wikipedia.org/wiki/%D0%98%D0%BD%D1%82%D0%B5%D0%B3%D1%80%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D0%B0%D1%8F_%D1%81%D1%80%D0%B5%D0%B4%D0%B0_%D1%80%D0%B0%D0%B7%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D0%B8>%20%d0%b4%d0%bb%d1%8f%20%d1%81%d1%82%d1%83%d0%b4%d0%b5%d0%bd%d1%82%d0%be%d0%b2.%20%d0%9f%d1%80%d0%be%d0%b3%d1%80%d0%b0%d0%bc%d0%bc%d1%83,%20%d0%b8%d1%81%d0%bf%d0%be%d0%bb%d1%8c%d0%b7%d1%83%d1%8e%d1%89%d1%83%d1%8e%20MPI,%20%d0%b8%20%d0%bf%d1%80%d0%b5%d0%b4%d0%bd%d0%b0%d0%b7%d0%bd%d0%b0%d1%87%d0%b5%d0%bd%d0%bd%d1%83%d1%8e%20%d0%b4%d0%bb%d1%8f%20%d0%b7%d0%b0%d0%bf%d1%83%d1%81%d0%ba%d0%b0%20%d0%bd%d0%b0%20%d0%bd%d0%b5%d1%81%d0%ba%d0%be%d0%bb%d1%8c%d0%ba%d0%b8%d1%85%20%d0%b2%d1%8b%d1%87%d0%b8%d1%81%d0%bb%d0%b8%d1%82%d0%b5%d0%bb%d1%8c%d0%bd%d1%8b%d1%85%20%d1%83%d0%b7%d0%bb%d0%b0%d1%85,%20%d0%b1%d1%83%d0%b4%d0%b5%d0%bc%20%d0%bd%d0%b0%d0%b7%d1%8b%d0%b2%d0%b0%d1%82%d1%8c%20">), работающих под управлением Windows. Для учебных целей можно запускать все вычислительные процессы и на одном компьютере. Если компьютер одноядерный, то, естественно, прирост быстродействия не получится, - только замедление. В качестве среды разработки использовалась IDE Microsoft Visual Studio 2008 C++ Express Edition. Microsoft Visual Studio - линейка продуктов компании Майкрософт <http://ru.wikipedia.org/wiki/%D0%9C%D0%B0%D0%B9%D0%BA%D1%80%D0%BE%D1%81%D0%BE%D1%84%D1%82>, включающих интегрированную среду разработки <http://ru.wikipedia.org/wiki/%D0%98%D0%BD%D1%82%D0%B5%D0%B3%D1%80%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D0%B0%D1%8F_%D1%81%D1%80%D0%B5%D0%B4%D0%B0_%D1%80%D0%B0%D0%B7%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D0%B8> программного обеспечения и ряд других инструментальных средств. Microsoft Visual Studio 2008 C++ Express Edition - легковесная среда разработки, представляющая собой урезанную версию Visual Studio. В отличие от полной версии, такая среда предназначена для языка программирования C/C++. Она включает в себя небольшой набор инструментов, в отличие от полных версий: отсутствует дизайнер классов и многие другие инструменты, а также поддержка плагинов <http://ru.wikipedia.org/wiki/%D0%9F%D0%BB%D0%B0%D0%B3%D0%B8%D0%BD> и удалённых баз данных <http://ru.wikipedia.org/wiki/%D0%91%D0%B0%D0%B7%D0%B0_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85> в дизайнере данных. Компиляторы в 64-битный код также недоступны в Express редакциях. Microsoft <http://ru.wikipedia.org/wiki/Microsoft> позиционирует эту линейку IDE <http://ru.wikipedia.org/wiki/%D0%98%D0%BD%D1%82%D0%B5%D0%B3%D1%80%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D0%B0%D1%8F_%D1%81%D1%80%D0%B5%D0%B4%D0%B0_%D1%80%D0%B0%D0%B7%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D0%B8> для студентов. Программу, использующую MPI, и предназначенную для запуска на нескольких вычислительных узлах, будем называть MPI-программой.

  • 755. Алгоритмы планирования действий
    Информация пополнение в коллекции 23.01.2011

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

    1. начальная позиция "а";
    2. переход к "b";
    3. переход к "d";
    4. выбор максимальной из оценок преемников позиции "d", получено V(d)=4;
    5. возврат к "b" и переход к "e";
    6. рассмотрение первого преемника позиции "e" с оценкой 5. В этот момент МАКС обнаруживает, что ему гарантирована в позиции "e" оценка, не меньшая, чем 5, независимо от оценок других (возможно, более предпочтительных) вариантов хода. Этого вполне достаточно для того, чтобы МИН, даже не зная точной оценки позиции "e", понял, что в позиции "b" ход в "е" хуже, чем ход в "d".
  • 756. Алгоритмы поиска в тексте
    Информация пополнение в коллекции 12.01.2009

    Хотя рассмотренный упрощенный алгоритм вполне пригоден с практической точки зрения (и часто применяется), нельзя не заметить, что результаты сравнений используются недостаточно эффективно. Действительно, на втором шаге, когда у нас совпали три символа, мы, зная, что последовательность “bad” встречается в образце только один раз, могли бы сразу сместить образец на всю его длину, а не на один символ. Теперь мы рассмотрим другой, немного более сложный вариант алгоритма Бойера-Мура, позволяющий учесть результаты предыдущих сравнений в случае частичного совпадения образца и подстроки. Прежде всего изменим принцип построения таблицы смещений. В этом варианте алгоритма таблица двумерная, каждому символу образца соответствует один столбец таблицы, а каждой букве алфавита одна строка. В ячейках таблицы содержатся значения смещений, на которые нужно сдвинуть образец, если при проверке данного символа образца обнаружено несовпадение и вместо искомого символа получен символ алфавита, соответствующий некоторой строке в таблице. Например, таблица последовательности “abdab” для нашего пятибуквенного алфавита будет выглядеть следующим образом:

  • 757. Алгоритмы поиска и сортировки данных
    Курсовой проект пополнение в коллекции 15.04.2012

    %20''%20theni%20:=%201%20to%20Memo1.Lines.Count%20do[i]%20:=%20Memo1.Lines[i-1];:=%20Memo1.Lines.Count;.Enabled%20:=%20true;.Enabled%20:=%20true;.Enabled%20:=%20true;.Enabled%20:=%20true;.Enabled%20:=%20true;.Enabled%20:=%20true;.Enabled%20:=%20true;.Enabled%20:=%20true;_Shablon.Enabled%20:=%20true;.Enabled%20:=%20true;('%d0%9d%d0%b5%20%d0%b2%d0%b2%d0%b5%d0%b4%d0%b5%d0%bd%20%d1%81%d0%bf%d0%b8%d1%81%d0%be%d0%ba!',%20mtWarning,%20[mbOK],%200);;TMainForm.Button2Click(Sender:%20TObject);,%20j,%20min%20:%20integer;:%20String;(iCounterPerSec);(T1);i%20:=%201%20to%20kol-1%20do:=%20i;j%20:=%20i+1%20to%20kol%20domas[j]%20<%20mas[min]%20then:=%20j;:=%20mas[min];[min]%20:=%20mas[i];[i]%20:=%20temp;;(T2);CheckBox1.Checked%20=%20true%20then('%d0%92%d1%80%d0%b5%d0%bc%d1%8f%20%d1%81%d0%be%d1%80%d1%82%d0%b8%d1%80%d0%be%d0%b2%d0%ba%d0%b8%20'%20+%20FormatFloat('0.00000000000',%20(T2%20-%20T1)%20/%20iCounterPerSec)%20+%20'%20%d1%81%d0%b5%d0%ba.',%20mtInformation,%20[mbOK],%200);.Lines.Clear;i%20:=%201%20to%20kol%20do.Lines.Add(mas[i]);;TMainForm.Button3Click(Sender:%20TObject);,%20j,%20min%20:%20integer;:%20String;(iCounterPerSec);(T1);i%20:=%201%20to%20kol-1%20doj%20:=%201%20to%20kol-i%20domas[j+1]%20<%20mas[j]%20then:=%20mas[j];[j]%20:=%20mas[j+1];[j+1]%20:=%20temp;;(T2);CheckBox1.Checked%20=%20true%20then('%d0%92%d1%80%d0%b5%d0%bc%d1%8f%20%d1%81%d0%be%d1%80%d1%82%d0%b8%d1%80%d0%be%d0%b2%d0%ba%d0%b8%20'%20+%20FormatFloat('0.00000000000',%20(T2%20-%20T1)%20/%20iCounterPerSec)%20+%20'%20%d1%81%d0%b5%d0%ba.',%20mtInformation,%20[mbOK],%200);.Lines.Clear;i%20:=%201%20to%20kol%20do.Lines.Add(mas[i]);;TMainForm.Button4Click(Sender:%20TObject);,%20j,%20min%20:%20integer;:%20String;(iCounterPerSec);(T1);i:=1%20to%20kol%20do:=%20mas[i];:=%20i-1;(j%20>=%200)%20and%20(mas[j]%20>%20temp)%20do[j+1]%20:=%20mas[j];:=%20j-1;[j+1]%20:=%20temp;;(T2);CheckBox1.Checked%20=%20true%20then('%d0%92%d1%80%d0%b5%d0%bc%d1%8f%20%d1%81%d0%be%d1%80%d1%82%d0%b8%d1%80%d0%be%d0%b2%d0%ba%d0%b8%20'%20+%20FormatFloat('0.00000000000',%20(T2%20-%20T1)%20/%20iCounterPerSec)%20+%20'%20%d1%81%d0%b5%d0%ba.',%20mtInformation,%20[mbOK],%200);.Lines.Clear;i%20:=%201%20to%20kol%20do.Lines.Add(mas[i]);;TMainForm.Button5Click(Sender:%20TObject);,%20j,%20min%20:%20integer;:%20array%20[0..10000]%20of%20String;:%20array%20[0..10000]%20of%20integer;(iCounterPerSec);(T1);i%20:=%201%20to%20kol%20do[i]%20:=%200;i%20:=%201%20to%20kol-1%20doj%20:=%20i+1%20to%20kol%20domas[i]%20<%20mas[j]%20then(count[j])(count[i]);;i%20:=%201%20to%20kol%20do[count[i]]%20:=%20mas[i];(T2);CheckBox1.Checked%20=%20true%20then('%d0%92%d1%80%d0%b5%d0%bc%d1%8f%20%d1%81%d0%be%d1%80%d1%82%d0%b8%d1%80%d0%be%d0%b2%d0%ba%d0%b8%20'%20+%20FormatFloat('0.00000000000',%20(T2%20-%20T1)%20/%20iCounterPerSec)%20+%20'%20%d1%81%d0%b5%d0%ba.',%20mtInformation,%20[mbOK],%200);.Lines.Clear;i%20:=%201%20to%20kol%20do[i]%20:=%20temp[i-1];.Lines.Add(mas[i]);;;TMainForm.Button6Click(Sender:%20TObject);">{$R *.dfm}TMainForm.Button1Click(Sender: TObject);, i : integer;Memo1.Text <> '' theni := 1 to Memo1.Lines.Count do[i] := Memo1.Lines[i-1];:= Memo1.Lines.Count;.Enabled := true;.Enabled := true;.Enabled := true;.Enabled := true;.Enabled := true;.Enabled := true;.Enabled := true;.Enabled := true;_Shablon.Enabled := true;.Enabled := true;('Не введен список!', mtWarning, [mbOK], 0);;TMainForm.Button2Click(Sender: TObject);, j, min : integer;: String;(iCounterPerSec);(T1);i := 1 to kol-1 do:= i;j := i+1 to kol domas[j] < mas[min] then:= j;:= mas[min];[min] := mas[i];[i] := temp;;(T2);CheckBox1.Checked = true then('Время сортировки ' + FormatFloat('0.00000000000', (T2 - T1) / iCounterPerSec) + ' сек.', mtInformation, [mbOK], 0);.Lines.Clear;i := 1 to kol do.Lines.Add(mas[i]);;TMainForm.Button3Click(Sender: TObject);, j, min : integer;: String;(iCounterPerSec);(T1);i := 1 to kol-1 doj := 1 to kol-i domas[j+1] < mas[j] then:= mas[j];[j] := mas[j+1];[j+1] := temp;;(T2);CheckBox1.Checked = true then('Время сортировки ' + FormatFloat('0.00000000000', (T2 - T1) / iCounterPerSec) + ' сек.', mtInformation, [mbOK], 0);.Lines.Clear;i := 1 to kol do.Lines.Add(mas[i]);;TMainForm.Button4Click(Sender: TObject);, j, min : integer;: String;(iCounterPerSec);(T1);i:=1 to kol do:= mas[i];:= i-1;(j >= 0) and (mas[j] > temp) do[j+1] := mas[j];:= j-1;[j+1] := temp;;(T2);CheckBox1.Checked = true then('Время сортировки ' + FormatFloat('0.00000000000', (T2 - T1) / iCounterPerSec) + ' сек.', mtInformation, [mbOK], 0);.Lines.Clear;i := 1 to kol do.Lines.Add(mas[i]);;TMainForm.Button5Click(Sender: TObject);, j, min : integer;: array [0..10000] of String;: array [0..10000] of integer;(iCounterPerSec);(T1);i := 1 to kol do[i] := 0;i := 1 to kol-1 doj := i+1 to kol domas[i] < mas[j] then(count[j])(count[i]);;i := 1 to kol do[count[i]] := mas[i];(T2);CheckBox1.Checked = true then('Время сортировки ' + FormatFloat('0.00000000000', (T2 - T1) / iCounterPerSec) + ' сек.', mtInformation, [mbOK], 0);.Lines.Clear;i := 1 to kol do[i] := temp[i-1];.Lines.Add(mas[i]);;;TMainForm.Button6Click(Sender: TObject);%200%20doi%20:=%200%20to%20kol-d%20do:=%20i;(j%20>=%200)%20and%20(mas[j]%20>%20mas[j+d])%20do:=%20mas[j];[j]:=%20mas[j+d];[j+d]%20:=%20temp;:=j-d;;;:=%20d%20div%202;;(T2);CheckBox1.Checked%20=%20true%20then('%d0%92%d1%80%d0%b5%d0%bc%d1%8f%20%d1%81%d0%be%d1%80%d1%82%d0%b8%d1%80%d0%be%d0%b2%d0%ba%d0%b8%20'%20+%20FormatFloat('0.00000000000',%20(T2%20-%20T1)%20/%20iCounterPerSec)%20+%20'%20%d1%81%d0%b5%d0%ba.',%20mtInformation,%20[mbOK],%200);.Lines.Clear;i%20:=%201%20to%20kol%20do.Lines.Add(mas[i]);;TMainForm.Button7Click(Sender:%20TObject);:%20String;,%20line%20:%20integer;:%20array%20[0..10000]%20of%20String;Memo1.Text%20<>%20''%20theni%20:=%201%20to%20Memo1.Lines.Count%20do[i]%20:=%20Memo1.Lines[i-1];:=%20Memo1.Lines.Count;('%d0%9d%d0%b5%20%d0%b2%d0%b2%d0%b5%d0%b4%d0%b5%d0%bd%20%d1%81%d0%bf%d0%b8%d1%81%d0%be%d0%ba!',%20mtWarning,%20[mbOK],%200);LE_Shablon.Text%20=%20''%20then('%d0%9d%d0%b5%20%d0%b7%d0%b0%d0%b4%d0%b0%d0%bd%20%d1%88%d0%b0%d0%b1%d0%bb%d0%be%d0%bd%20%d0%bf%d0%be%d0%b8%d1%81%d0%ba%d0%b0',%20mtWarning,%20[mbOK],%200):=%20LE_Shablon.Text;i%20:=%201%20to%20kol%20dotemp[i]%20=%20str%20then;i%20<=%20kol%20then.SelStart%20:=%20Memo1.Perform(EM_LINEINDEX,%20i-1,%200);.SelLength%20:=%20Length(Memo1.Lines[i-1]);.SetFocus;('%d0%a8%d0%b0%d0%b1%d0%bb%d0%be%d0%bd%20%d0%bf%d0%be%d0%b8%d1%81%d0%ba%d0%b0%20%d0%bd%d0%b5%20%d0%bd%d0%b0%d0%b9%d0%b4%d0%b5%d0%bd!',%20mtWarning,%20[mbOK],%200);;;TMainForm.Button9Click(Sender:%20TObject);,%20high,%20mid,%20i:%20integer;,%20flag:boolean;:%20String;">,i,j: integer;: word;: String;(iCounterPerSec);(T1);:= kol div 2;d > 0 doi := 0 to kol-d do:= i;(j >= 0) and (mas[j] > mas[j+d]) do:= mas[j];[j]:= mas[j+d];[j+d] := temp;:=j-d;;;:= d div 2;;(T2);CheckBox1.Checked = true then('Время сортировки ' + FormatFloat('0.00000000000', (T2 - T1) / iCounterPerSec) + ' сек.', mtInformation, [mbOK], 0);.Lines.Clear;i := 1 to kol do.Lines.Add(mas[i]);;TMainForm.Button7Click(Sender: TObject);: String;, line : integer;: array [0..10000] of String;Memo1.Text <> '' theni := 1 to Memo1.Lines.Count do[i] := Memo1.Lines[i-1];:= Memo1.Lines.Count;('Не введен список!', mtWarning, [mbOK], 0);LE_Shablon.Text = '' then('Не задан шаблон поиска', mtWarning, [mbOK], 0):= LE_Shablon.Text;i := 1 to kol dotemp[i] = str then;i <= kol then.SelStart := Memo1.Perform(EM_LINEINDEX, i-1, 0);.SelLength := Length(Memo1.Lines[i-1]);.SetFocus;('Шаблон поиска не найден!', mtWarning, [mbOK], 0);;;TMainForm.Button9Click(Sender: TObject);, high, mid, i: integer;, flag:boolean;: String;

  • 758. Алгоритмы поиска кратчайших покрытий булевых матриц
    Курсовой проект пополнение в коллекции 12.12.2010

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

  • 759. Алгоритмы поиска остовного дерева Прима и Крускала
    Курсовой проект пополнение в коллекции 30.08.2010

    По определению безопасного ребра свойство "А является подмножеством некоторого минимального остова" (для пустого множества это свойство, очевидно, выполнено) остаётся истинным для любого числа итераций цикла, так что в строке 5 алгоритм выдаёт минимальный остов. Конечно, главный вопрос в том, как искать безопасное ребро в строке 3. Такое ребро существует (если А является подмножеством минимального остова, то любое ребро этого остова, не входящее в А, является безопасным). Заметим, что множество А не может содержать циклов (поскольку является частью минимального остова). Поэтому добавляемое в строке 4 ребро соединяет различные компоненты графа Ga = (V,A), и с каждой итерацией цикла число компонент уменьшается на 1. Вначале каждая точка представляет собой отдельную компоненту; в конце весь остов - одна компонента, так что цикл повторяется |V| - 1 раз.

  • 760. Алгоритмы поиска подстроки в строке
    Курсовой проект пополнение в коллекции 23.07.2007

    АлгоритмВремя на пред. обработкуСреднее время поискаХудшее время поискаЗатраты памятиВремя работы (мс) при длине строки ?250 ПримечанияАлгоритмы основанные на алгоритме последовательного поискаАлгоритм прямого поискаНет O((m-n+1)*n+1)/2O((m-n+1)*n+1)Нет234Mалые трудозатраты на программу, малая эффективность.Алгоритм РабинаНетO(m+n)O((m-n+1)*n+1)Нет93Алгоритм Кнута-Морриса-ПраттаКМПO(m)O(n+m)O(n+m)O(m)31Универсальный алгоритм, если неизвестна длина образцаАлгоритм Бойера-МураБМO(m+s)O(n+m)O(n*m)O(m+s)32Алгоритмы этой группы наиболее эффективны в обычных ситуациях. Быстродействие повышается при увеличении образца или алфавита.Исходя из полученных результатов, видно, что алгоритм Бойера Мура является ведущим по всем параметрам, казалось бы, найден самый эффективный алгоритм. Но, как показывает эксперимент, алгоритм Кнута Мориса - Пратта, превосходит алгоритм БМ на небольших длинах образца. Поэтому я не могу сделать вывод, что какой-то из алгоритмов является самым оптимальным. Каждый алгоритм позволяет эффективно действовать лишь для своего класса задач, об этом еще говорят различные узконаправленные улучшения. Алгоритм поиска подстроки в строке следует выбирать только после точной постановки задачи, которые должна выполнять программа.