1 Лабораторная работа.
Тема: Линейный поиск
Цель работы. Изучите алгоритмы линейного поиска и напишите программы.
Теоретическая часть.
Одной из самых распространенных задач в программировании является поиск информации. Существует несколько основных вариантов поиска, и для них разработаны разные алгоритмы.
Говорят, что линейный поиск ищет заданное значение произвольной функции в любом пересечении. Этот алгоритм является простым алгоритмом, в отличие от других алгоритмов, таких как бинарный поиск, здесь нет ограничений на функцию и его реализация проста.
Алгоритм линейного поиска
Поиск значения функции проверяется простым сравнением следующего значения (обычно в порядке возрастания слева направо). Есть два типа задач: 1) Найти первый найденный аргумент 2) Найти все аргументы.
Если индекс массива используется в качестве аргумента массива как функции, то необходимо найти таких i индексов a_i = x из массива a, заданного в результате линейного поиска.
Массив: 45, 12, 89, 12, -78, 12;
Позиции числа 12 — 2, 4, 6;
Линейный поиск.
В простом линейном поиске вы исследуете каждый элемент массива один за другим.
int функция LinearSearch (Array A, int L, int R, int Key);
начинать
для X = L to R сделать
если A [X] = ключ, то
вернуть Х
возврат -1; // элемент не найден
конец;
Переменные L и R — это интервалы, в которых ищется элемент.
Время выступления.
Если выполняется поиск по первому встречающемуся индексу в массиве, то время выполнения алгоритма линейного поиска равно:
В лучшем случае: О (1). То есть, если элемент, который вы ищете, находится в начале рассматриваемого интервала.
В худшем случае: O(n). То есть, если искомый элемент находится в конце искомого интервала или вообще не встречается.
n — количество элементов в искомом интервале. Для приведенного выше примера n = R-L + 1.
Алгоритм линейного поиска эффективен только тогда, когда длина искомого интервала мала.
Практическая часть.
Создайте и используйте функцию, которая возвращает количество встреч заданного значения в заданном массиве.
Примеры:
№
|
Input
|
Output
|
1
|
8
-8 9 -8 5 6 78 -8 8
-8
|
3
|
2
|
4
1 2 3 4
5
|
0
|
Yechimi.
#include
using namespace std;
int cnt_accureces(int x, int a[], int n) {
int res = 0;
for (int i = 0; i < n; i++) {
if (a[i]==x)
res++;
}
return res;
}
int main() {
int n;
cin >> n;
int a[n];
for (int i = 0; i < n; i++) {
cin >> a[i];
}
int x;
cin >> x;
cout << cnt_accureces(x, a, n) << endl;
}
лабораторная работа.
Вам дан одномерный массив и число k. Ваша задача состоит в том, чтобы создать программу поиска из заданного массива. То есть узнать в каких позициях он будет летать.Индекс массива начинается с 1.
Ответ:
#include
using namespace std;
int main()
{
int n, i;
cin>>n>>i;
double w[n+1];
for(i=1;i<=n; i++){
cin>>w[i+1];
}
double k,c=0;
cin>>k;
for(i=1; i<=n; i++){
if(w[i+1]==k) {c++;
}}
cout<
for(i=1;i<=n;i++){
if(w[i+1]==k) cout<
}
return 0;
}
Do'stlaringiz bilan baham: |