Программирование с отходом назад

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

Программирование с отходом назад - student2.ru

Решение:

Мы промоделируем каждую возможную комбинацию из N ( 0 и 1 на i-м месте)

1, если вкл. и 0, если выкл.

Моделируем с помощью второго дерева.

Программирование с отходом назад - student2.ru

Программирование с отходом назад - student2.ru

Рекурсия

В математике и программировании это метод определения или выражения функции или процедуры для решения задачи посредством той же функции или процедуры.

Программирование с отходом назад - student2.ru

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

Программирование с отходом назад - student2.ru

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

Принято говорить, что глубина рекурсии, требуемая для вычисления Программирование с отходом назад - student2.ru , равна N.

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

Глубина рекурсии ряда Фибоначчи равна (N-3)

Программирование с отходом назад - student2.ru

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

Пример: функция Аккермана.

Программирование с отходом назад - student2.ru

Массив:

int a [10] char char a [10] [10]

Программирование с отходом назад - student2.ru

Программирование с отходом назад - student2.ru

Алгоритмы машины и математики

Не существует алгоритма сортировки, который был бы.

Эффективность зависит от:

1) какое число сортируемых элементов

2) все ли они могут быть помещены доступную оперативную память

3) до какой степени они отсортированы

4) какой диапазон сортируемых элементов

5) какова длина, сложность и требования к памяти алгоритма сортировки

6) предполагается ли добавление или исключение

Сортировка

Сортировка стала важным предметом вычислительной математики в основном потому, что она отнимает значительную часть времени работы ЭВМ. Осознание того, что 25% всего времени вычислений расходуется на сортировку данных , придает особое значение эффективным алгоритмам сортировки.

К сожалению ,нет алгоритма сортировки, который был бы наилучшим в любом случае. Трудно даже решить, какой алгоритм будет лучшим в данной ситуации, так как эффективность алгоритма сортировки может зависеть от множества факторов, например от того ,(1) каково число сортируемых элементов; (2) все ли элементы могут быть помещены в доступную оперативную память;(3) до какой степени элементы уже отсортированы; (4) каковы диапазон и распределение значений сортируемых элементов ; (5) записаны ли элементы на диске, магнитной ленте или перфокартах; (6) каковы длина , сложность и требования к памяти алгоритма сортировки ; (7) предполагается ли , что элементы будут периодически исключаться или добавляться ;(8) можно ли элементы сравнивать параллельно.

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

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

В этом разделе мы рассматриваем два из наиболее эффективных алгоритмов сортировки , быстрой сортировки и сортировки пирамидой (QUICKSORT и HEAPSORT) , и устанавливаем теоретически неулучшаемые границы для всех алгоритмов сортировки с помощью сравнений. В других разделах обсуждаются еще два алгоритма сортировки : сортировка простыми включениями (SIS) и параллельная сортировка (PARSORT).

Наши рекомендации