Скачиваний:
38
Добавлен:
17.03.2016
Размер:
20.46 Кб
Скачать

Программирование на языке СИ A.noneline { font-family: Arial, Serif; text-decoration: none; } FONT.arial { font-family: Arial, Serif; } TD.arial { font-family: Arial, Serif; } TH.arial { font-family: Arial, Serif; } PRE { font-family: Monospace; color: navy; } SAMP { font-family: Monospace; color: navy; } TT { font-family: Monospace; color: navy; } VAR { font-family: Monospace; color: navy; } //

UkrLinkExchange Member

Нажмите CTRL-D что бы добавить эту страницу в папку "избранное"

Библиотека программиста

2.3.1. Последовательный поиск Задача поиска. Пусть заданы линейные списки: список элементов В= и список ключей V= (в простейшем случае это целые числа). Требуется для каждого значения Vi из V найти множество всех совпадающих с ним элементов из В. Чаще всего встречается ситуация когда V содержит один элемент, а в В имеется не более одного такого элемента. Эффективность некоторого алгоритма поиска А оценивается максимальным Max{А} и средним Avg{А} количествами сравнений, необходимых для нахождения элемента V в В. Если Pi - относительная частота использования элемента Кi в В, а Si - количество сравнений, необходимое для его поиска, то n Max{А} = max{ Si, i=1,n } ; Avg{А} = Pi Si . i=1 Последовательный поиск предусматривает последовательный просмотр всех элементов списка В в порядке их расположения, пока не найдется элемент равный V. Если достоверно неизвестно, что такой элемент имеется в списке, то необходимо следить за тем, чтобы поиск не вышел за пределы списка, что достигается использованием стоппера. Очевидно, что Max последовательного поиска равен N. Если частота использования каждого элемента списка одинакова, т.е. P=1/N, то Avg последовательного поиска равно N/2. При различной частоте использования элементов Avg можно улучшить, если поместить часто встречаемые элементы в начало списка. Пусть во входном потоке задано 100 целых чисел К1,К2,... К100 и ключ V. Составим программу для последовательного хранения элементов Кi и поиска среди них элемента, равного V, причем такого элемента может и не быть в списке. Без использования стоппера программа может быть реализована следующим образом: /* последовательный поиск без стоппера */ #include main() { int k[100],v,i; for (i=0;i=m) { b[p]=b[t]; p++; } m=search(b, j, i); /* поиск в B" */ } if (j < i) { for (p=0, t=0; t < n; t++) if (b[t] < m) b[p++]=b[t]; m=search(b, n-j, i-j); /* поиск в B" */ } return m; } Рекурсивная функция search реализует алгоритм выбора i-того наибольшего значения. Для ее вызова можно использовать следующую программу #include #include main() { int search (int *b, int n, int i); int *b; int l, i, k, t; scanf("%d%d",&l,&i); printf ("\nВыбор %d максимального элемента из %d штук",i,l); b=(int *)(calloc(100,sizeof(int))); for (k=0; k

Соседние файлы в папке Программирование на языке Си