Шпаргалки по "Программированию"

Автор работы: Пользователь скрыл имя, 09 Июня 2015 в 01:40, шпаргалка

Описание работы

1.Раньше хорошими программистами считали тех, кто писал хитроумные программы, которые занимали минимум оперативной памяти и выполнялись за кратчайшее время. Это было естественно, потому что размер оперативной памяти был сильно ограничен, а машины были намного медленнее, чем сегодня. Результатом этого оказывались программы, которые было трудно понять другим лицам.

Файлы: 1 файл

Shpory_Programmirovaniyu_1.docx

— 187.37 Кб (Скачать файл)

1.Раньше хорошими программистами считали тех, кто писал хитроумные программы, которые занимали минимум оперативной памяти и выполнялись за кратчайшее время. Это было естественно, потому что размер оперативной памяти был сильно ограничен, а машины были намного медленнее, чем сегодня. Результатом этого оказывались программы, которые было трудно понять другим лицам.

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

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

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

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

Нисходящая разработка организует проектирование программ сверху вниз с использованием разбиением на модули( более прост части)

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

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

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

имитаторами – заглушками.Это позволяет с самого начала видеть функциональность проекта в целом, отлаживать и демонстрировать готовые модули, не дожидаясь завершения всех модулей. При разбиении программы на модули следует учитывать ряд правил:

1. Модуль может быть  отдельной программой.

2. На модуль можно ссылаться  с помощью имени.

3. Модуль должен возвращать  управление тому модулю, который  еговызвал.

4. Может обращаться к  другим модулям.

5. Должен иметь один вход и один выход.

6. Должен быть сравнительно небольшим (до 200 строк кода).

7. Не должен быть зависим от истории своих вызовов.

8. В идеале модуль должен  реализовывать одну функцию, причем  целиком.

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

 Следование означает последовательное выполнение модулей или частей кода. Развилка в зависимости от некоторых условий направляет программный поток по разным ветвям. Цикл

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

Структурные программы могут быть наглядно представлены в виде псевдокода – произвольного текста, включающего ключевые слова для выде-

ления конструкций развилки.  Пример:

ЕСЛИ условие 1

ТО

      Действие 2

      Действие 3

      ЕСЛИ условие 4

      ТО

      ИНАЧЕ

            Действие 5

      ВСЁ-ЕСЛИ

ИНАЧЕ

      Действие 6

      ЦИКЛ-ПОКА условие 7

            Действие 8

            Действие 9

      ВСЁ-ЦИКЛ

      Действие 10

ВСЁ-ЕСЛИ

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

Структурные программы могут быть наглядно представлены в виде псевдокода – произвольного текста, включающего ключевые слова для выде-

ления конструкций развилки.  Пример:

ЕСЛИ условие 1

ТО

      Действие 2

      Действие 3

      ЕСЛИ условие 4

      ТО

      ИНАЧЕ

            Действие 5

      ВСЁ-ЕСЛИ

ИНАЧЕ

      Действие 6

      ЦИКЛ-ПОКА условие 7

            Действие 8

            Действие 9

      ВСЁ-ЦИКЛ

      Действие 10

ВСЁ-ЕСЛИ

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

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

-Невозможно проверить все комбинации входных данных.

Анализ кода работает по принципу «проверь коллегу». При проверке кода много внимания уделяется правильному оформлению программы, применению наработанных приемов программирования, исключению «рискованных» фрагментов кода.

6.I этап. Создание любой программы начинается с постановки задачи. (Качели)

Постановка задачи завершается созданием технического задания, а затем внешней

спецификации программы, включающей в себя:

• описание исходных данных и результатов (типы, форматы, точность, способ

передачи, ограничения)^;

• описание задачи, реализуемой программой;

• способ обращения к программе;

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

II этап. Разработка внутренних структур данных. начинать надо с разработки

структур, необходимых для представления входных, выходных и промежуточных

данных.

III этап. Проектировани.разбиение задачи на

подзадачи меньшей сложности, которые можно рассматривать раздельно

IV этап. Структурное программирование. Процесс

«сверху вниз»: вначале кодируются модули самого верхнего уровня и составляются тестовые примеры для их отладки, при этом на месте

еще не написанных модулей следующего уровня ставятся «заглушки» — временные  программы. V этап Тестирование.

7.Любая деятельность, или комплекс деятельности, в которой используются ресурсы для преобразования входов в выходы, может рассматриваться как процесс.

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

Связывание выходов одних процессов со входами других называется взаимодействием процессов.

Декомпозиция позволяет получить более детальное представление процесса как системы взаимосвязанных подпроцессов.

Композиция позволяет синтезировать из простых процессов новый более сложный процесс.

 

8.ERмодель данных, которая позволяет описывать концептуальные схемы с помощью обобщенных конструкций блоков. Покупатель-номер карты,ФИО,Год. Продукт-Код,наименова, цена

ER-модель - это мета-модель  данных, то есть средство описания  моделей данных.

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

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

Иначе, атрибут - это любой семантически важный описатель предмета

9.  Связь – набор осмысленных ассоциаций между экземплярами сущностей определенных типов.

Кардинальность связи служит для обозначения отношения числа экземпляров родительской сущности к числу экземпляров дочерней. Многозначные связи  – это когда, каждому экземпляру одного объекта (А) могут соответствовать несколько экземпляров второго объекта (В) и наоборот.

Однозначные связи имеют место, когда каждому экземпляру первого объекта (А) соответствует только один экземпляр второго объекта (В) и наоборот.

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

Атрибут В функционально зависит от атрибута А, если каждому значению А соответствует в точности одно значение В

Независимые атрибуты. Если ни один из атрибутов не является зависимым от других

атрибутов.

Постоянные атрибуты характеризуют объект в его классе (например, номер счета, категория, имя человека и т.п.).

Переменные атрибуты характеризуют текущее состояние объекта (например, баланс счета, возраст человека и т.п.) изменяя их мы изменяем состояние объекта.

11. Атрибут В функционально зависит от атрибута А, если каждому значению А соответствует в точности одно значение В.

Дублирование возникает из необходимости хранить идентичные данные (ФИО,Группа)

Виртуальные атрибуты – это не хранимые, а вычисляемые атрибуты.

Вычисляются через базовые атрибуты на ходу посредством задаваемых формул.(Excel)

Агрегатн типы могут быть определены в программном модуле двумя способами:

1) некоторые значения заранее известны в программном модуле из его глобального и локального контекста;

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

12. Интерфейс как посредник между пользователем и системой. Множество пользователей отождествляют пользовательский интерфейс и саму систему. Это неудивительно, поскольку большинство из них взаимодействует с системой только через интерфейс. Правильно спроектированный интерфейс-прощение промахов в реализации. Хорошо спроектированный интерфейс позволяет существенно снизить время, необходимое пользователям, чтобы научиться работать с системой. Должен отвечать требованиям пользователей и рабочих. Не создавать трудности. Прост и удобен.

Факторы, определяющие тип диалога: 
   - инициатор; 
   - возможность выбора; 
   - однозначность интерпретации

Выход (N/Y)

13.Интерфейс как посредник между пользователем и системой

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

Уровни интерфейса: 1)Внешний:Изменился стиль (Появились иконки).

2)Концептуальный:Элементы и структуры интер.

3)Логический (Библиотека классов  (VCL)

Внешний уровень интерфейса – метафора.

Ассоциация, позволяющая пользователю эффективно интерпретировать данные, представленные в интерфейсе

Внешний уровень интерфейса – стиль

Появились тени. Можно изменять шрифт,его цвет,заливку,иконки

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

Элементы интерфейса

→1)Конмпозиционные

→2)Простые→а)декоративные,б)Управляющие

→Представление данных

Элементы для представления данных: 1)Поле,Переключатель (галочки),список,таблицы,дерево,радиокнопка,

флажок ,значок,список. Декоративные – гаджеты.

Управляющие элементы- Кнопка «Создать»,»Открыть». Прокрутка «колесиком мыши». Композиционные эл-ты : Панель ,окно,закладки

15.Геометрия эл.польз.инт: Можно менять размер каждого элемента (высота,ширина,смещенее вправо). Реакция элементов инт: Anchors

- настраивать положение  объекта (выравнивание)

Left-true;Right-false;Top-true;Bottom-false (Выравнивание по левому краю,смещение вверх)

align — задает выравнивание элемента относительно других элементов на странице

None – по середине, Left – слева

Исп выравнив при комп экрана: (Выравнивание кнопок с++)

16.Видимость элементов:Свойство-Visible Предназначен для отображения или скрытия элемента, включая рамку вокруг него и фон. место, которое элемент занимает, остается за ним.

Чувствительность элементов

Доступ к компонентам можно разрешить или запретить, используя свойство Enabled

Реализация событийного принципа. Сценарии^

Нажимаешь «Создать постовщика»,в след окне вводишь его данные, оформляешь заказ (пример курсовой)

17. Цель - повышение скорости разработки и качества программза счет лучшей структуризации и повторного использования кода. инкапсуляция – объединение данных и методов их обработки в виде классов с ограничением доступа для различных категорий пользователей;

 полиморфизм – выполнение разных действий одноименными методами различных классов.

Языки программированияC#, C++, Java, Delphi,

Одним из основных принципов, С++, является его совместимость с С, что гарантировала применимость разработанных на С программ.

Отличия С:1)Небольшое число элементов языка

2)Высокая скорость выполнения

3)Поддержка модульного  программирования

4)Хорошая мобильность  наряду с работой на "нижнем  уровне"

С++: 1)Простота и надежность использования

2)Возможность повторного  использования программного кода

3)Хорошая скорость 

4)Ясность и читабельность 

Эквивалент-е пон-я: Тип данных-Класс;Функция-Метод; Переменная-Объект

18.Классы служат для  инкапсуляции-объединения данных  и методов работы с ними  в новые типы

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

данным и методам. Возможно создание иерархии классов посредством на-

следования.Все определения в классе относятся к одной из трех областей: закрытой,защи-ой или открытой

Private - могут использоваться только методами данного класса или дружественными функциями.

Protected - могут использоваться методами данного и наследуемых классов.

Public - могут использоваться любыми функциями программы. Определение методов класса:

<-Прим ограничения доступа к элементам класса

 

 

 

19. Конструктор предназначен для инициализации объекта и вызывается автоматически при его создании.

Св-ва:1. Имя конструктора совпадает с именем класса.

2. Конструктор не возвращает  никакого значения.

3. Для класса без конструктора  создается конструктор по умолчанию.

4. Могут быть перегружены.

5. Не наследуются.

6. Не могут вызываться явно из программы

Перегрузка конструктора позволяет одному классу иметь несколько

конструкторов,

Конструктор копирования —получает в

качестве единственного параметра указатель на объект этого же класса.

Деструктор — это особый вид метода, применяется для освобождения памяти,

занимаемой объектом. Деструктор вызывается автоматически, когда объект выходит из области видимости:Св-ва:

1.Имя деструктора совпадает с именем класса и предваряется тильдой.

2. Не возвращает никакого значения.

3. Для класса без деструктора  генерируется деструктор по умолчанию.

4. Не наследуются.

5. Не могут предаваться аргументы.

6. Могут описываться как виртуальные (virtual)

7. Могут вызываться явно.

Создание объектов класса

Статическое

void func()

{

   Rectangle r1(200, 100), r2(150), r3(r1);

   ...

}

Динамическое

void func()

{

   Rectangle *r1 = new Rectangle(200, 100);

   Rectangle *r2 = new Rectangle(150);

   Rectangle *r3 = new Rectangle(*r1);

}

Разрушение объектов класса

Статическое

void func()

{

   Rectangle rect(200, 100);

   ...

}

Динамическое

void func()

{

   Rectangle *rect = new Rectangle(200, 100);

   ...

   delete rect;

}

 

20. Статические атрибуты являются общими для

всех объектов данного класса

class Rectangle

{

private:

static int count; //

public:

Rectangle(int Width, int Height);

~Rectangle();

static int Count() { return(count); }

};

Использ-е статич.элементов.в метод-х класса:

int Rectangle::count = 0;

Rectangle::Rectangle(int Width, int Height)

{

   int w = Width;

   int h = Height;

   count++;

}

Rectangle::~Rectangle()

{

   count--;

}

Указатель на самого себя: this

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

Этот указатель может быть использован только внутри методов класса для получения адреса текущего объекта

class Rectangle

{

private:

   int   w;

   int   h;

public:

   Rectangle& Zoom(float Rate);

};

Rectangle& Rectangle::Zoom(float Rate)

{

   w = (float)w*Rate;

   h = (float)h*Rate;

   return(*this);

}

Rectangle r(300, 200);

int s = r.Zoom(0.25).Square();

21. Абстракция- это выделение существенных характеристик объектов,

Противоположностью абстракции является

конкретизация, которая уточняет наборы свойств

 

 

Наследование –создание новых классов на базе уже существующих.

При простом наследовании производный класс имеет только один базовый класс. При множественном наследовании производный класс

имеет несколько родительских классов..

«Хорошая»

1. Критерий включения. Производный класс должны обладать всеми свойствами базовых классов.

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

3. Критерий специализации. Нарушение,если производный класс ограничивает св-ва базового.

4. Критерий единства. Наследование и полиморфизм обеспечивают единообразное выполнение аналогичных функций классов.

22.Наследование - создание новых классов на базе уже существующих. При этом новые классы

получают все элементы (атрибуты и методы) наследуемых классов (базовых).

Ограничения слов public, protected и private возможно изменение области видимости трибутов наследуемых классов

Конструкторы и деструкторы не наследуются. При создании объекта производного класса наследуемые им данные должны инициироваться конструктором базового класса. Конструкторы производных классов могут передавать аргументы конструкторам базовых классов.

23.Понятие полиморфизма  тесно связано с понятием наследования. Оно означает феномен различного выполнения одноименных функций в разных классах.

Перегрузка функций и операторов также является одной из составляющих полиморфизма.

Переопреределение: Если в производном классе появляется метод с декларацией, базового класса, то происходит «замещение» вновь определенным методом.Раннее связывание осуществляется на этапе компиляции. Компилятор выбирает метод по типу объекта или указателя на объект, с помощью которых вызывается метод.

Позднее связывание осуществляется в процессе выполнения программы. указывается ключевое слово virtual и такие методы называются виртуальными.

24.Чисто виртуальные методы не имеют тела и предназначены для задания интерфейса производных классов.

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

объекты. Они всегда находятся на вершине иерархии классов

class Figure // абстрактный класс «Фигура»

{

...

public:

virtual float Area() = 0; // чисто виртуальный метод

};

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

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

25. Перегрузка методов в С++ осуществляется аналогично перегрузке функций – в рамках одного класса определяются методы с одинаковыми именами, но с разными списками параметров.

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

int abs(int x);

short abs(short x);

char abs(char x);

float abs(float x);

double abs(double x);

Перегружаемые функции 1)должны находиться в одной области определения.

2)различаться компилятором по их параметрам.

Посредством перегрузки вызываемая версия функции соответствует конкретным типам параметров. Переопределение описание ф-ии в другой обл определения.

Переопределяемые функции имеют идентичные имена и типы параметров.

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

Скрываемые и скрывающие функции имеют идентичные имена.Доступ осуществляется через оператор расширения обла видимости.

26.В языке С++ операторы  аналогичны функциям, что дает  возможность их перегрузки.

При перегрузке

1. Нельзя определять новые  операторы.

2. Нельзя перегружать операторы :: , ?: , . , * , #, ##

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

4. Нельзя изменять общий  синтаксис оператора (число операндов, приоритет, задаваемые аргументы).

Перегрузка операторов ++ и –– имеет свои особенности. Для того чтобы различить префиксную и постфиксную форму операторов, при декларации постфиксной формы нужно задать один параметр типа int:

class Circle

{

private:

double radius;

public:

Circle(double R) { radius = R; }

Circle& operator++(); // префиксная форма

Circle& operator++(int); // постфиксная форма

Circle& operator--(); // префиксная форма

Circle& operator--(int); // постфиксная форма

};

Circle& operator++() // префиксная форма

{

radius *= 2;

return(*this);

}

Circle& operator++(int) // постфиксная форма

{

static Circle x(0);

x.radius = radius;

radius *= 2;

return(x);

}

Circle A(10); // радиус А = 10

Circle B = A++; // радиус В = 10, радиус А =20

Circle C = ++A; // радиус С = 40, радиус А = 40

27.Шаблон-Мощное средство автоматической генерации кода.

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

При полном замещении все параметры шаблона заменяются конкретными классами. При частич-

ном замещении часть параметров шаблона сохраняется.На основе шаблонов возможно создание новых типов данных с использованием операт. typedef:

typedef Stack<Circle> StackOfCircles;

typedef Stack<Square> StackOfSquares;

StackOfCircles circles(100);

StackOfSquares squares(120);

28.Алгоритм -это конечный набор правил, необходимый для последоват-ого выполнения операций при решении задач.

Дискретность — Решение задачи путем последовательного выполнения простых шагов. Детерминированность Для одних и тех же исходных данных один и тот же результат.

Конечность — при правильно заданных исходных данных один и тот же результат.

Масштабируемость — алгоритм должен быть применим к разным  исходным данным.

Результативность — завершение алгоритма определенными результатами.

Эффективность — завершение алгоритма определенными результатами за определенное число шагов (время). 

Не существует системы обработки данных, которая могла бы обрабатывать более 2*1047 бит в секунду на грамм своей массы.

 

29.Представления алгоритмов через Блок-схемы дают наглядное представление алгоритма в графическом виде.Они обладают хорошей наглядностью.

Ввод N

I = 1

N = 1

ЦИКЛ ПОКА I <= N

F = F · I

I = I + 1

ВСЁ ЦИКЛ

Вывод F

 

Классы алгоритмов:Поиск,сортировка.оптимизация, обход графов

30.Сортировка - упорядочение массива в соответствии со значениями ключа

Прямые методы сортировки отличаются простотой реализации,но низкой эффективностью

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

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

Метод прямого обмена, более известный как метод «пузырька»

(Bubble sort), заключается в попарном сравнении соседних элементов и об-

мене их местами, если правый элемент больше левого

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

31. Сортировка - упорядочение массива в соответствии со значениями ключа

Улучшенный метод Шелла В этом методе сначала сортируется не весь массив, а только группы элементов, которые отстоят друг от друга на определенные расстояния. Сначала сортировка выполняется в небольших группах, и это существенно улучшает порядок в массиве. Последовательность расстояний 1, 3, 7, 15, 31...

Эффективность n1.2

Метод быстрой сортировки. В основе этого

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

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

32. Алгоритм поиска в массиве заключается в нахождении записи по значению ключа.

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

Линейный поиск заключается в последовательном переборе элементов

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

Можно исп-ть в неупорядоченном массиве

Двоичный поиск основан на делении массива на две части путем взятия некоторого элемента  и сравнения с ним.

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

m = L + ((Val – p[L]) (R – L))/(p[R] – p[L]), где L и R – границы поиска; Val – значение ключа поиска; p[i] – значение элемента массива

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

Прямой поиск заключается в посимвольном сравнении текста и образца начиная от начала текста. При несовпадении очередного символа образец «сдвигается» на одну позицию вправо и процедура сравнения повторяется.

Алгоритм Кнута–Морриса–Пратта Сравнение строк слева направо и сдвиг на вычисляемое число позиций.

Алгоритм Боуера–Мура. В этом алгоритме сравнение с образцом на-

чинается не сначала, а с конца образца. При несовпадении образец

смещается на некоторое число символов в зависимости от символа строки, на

котором было несовпадение

34.При поиске в файлах  наибольшая часть времени тратится  на чтение данных с дисков.

Индексно-последовательный метод доступа

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

муле K = log2 N, где N – число блоков.

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

35.Динамическиме структуры данных структуры размер которых изменяется во время выполнения программы.

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

и назад.

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

Очередь представляет собой

список, организованный по принципу «первым вошел – первым вышел»

Стек же  «последним вошел – первым

вышел»

36. Динамическиме структуры данных структуры размер которых изменяется во время выполнения программы.Велосипед представлен деревом: Колесо-спицы,втулка,больт. Обход: Начиная с корня дерева определяется количество входящих  как произведение размера партии на коэффициент комплектации. И так для каждого узла.

Граф-структура, в которой узлы могут иметь много входящих дуг. Обход:1) Для каждого узла подсчитывается число входящих дуг, чтобы знать, которое посещений узла является последним

2)И тогда можно двигаться  «вглубь»

37.Задачи комб опт:Смена краски на предприятии за мин время.Задача  Комми: Требуется объехать все города, побывав в каждом только один раз, и затратив минимальное время на весь путь.

Если расстояние описать матрицей С размерами n*n,то в случае Сij = Сji задача явл-ся сиимм-ой.

Алг «грубой силой» основан на переборе всех возможных вариантов.Но это очень долго сложности определяется как (n – 1)!.

Алг ближ соседа.Из всех возможных путей выбирать самые короткие. Работает быстро,но неопримальный результат.

Метод ветвей и границ.Основан на разделении всего множества решений на подмножества

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

Эвристич-е алг: 1. Последовательно выполняются N шагов, где N - число заданий.

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

3. Выбор на основе стоимостной  функции для всех комбинаций  инструмент - станция.

4. При вычислении стоимостной  функции учитывается влияние  выбора на оставшиеся задания.

5. Ограничения применяются  как можно раньше для снижения  размерности задачи.

   



 


Информация о работе Шпаргалки по "Программированию"