Программы по двоичному поиску
Проектирование структуры данных, определение структуры алгоритма. Понятие бинарного поиска, его распространение и преимущества. Инициализация, основной цикл, получение центрального ключа, проверка на успешное завершение, сравнение, безуспешный поиск.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | курсовая работа |
Язык | русский |
Дата добавления | 28.06.2016 |
Размер файла | 16,0 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
Реферат
бинарный алгоритм поиск
Пояснительная записка 13 с., 1 рис., 3 источника.
ПОИСК, ПРОГРАММА, АЛГОРИТМ, ФАЙЛ, ФУНКЦИЯ, СОРТИРОВКА, МАССИВ, ЦИКЛ, КЛЮЧ, ЭЛЕМЕНТ
Объектом работы является задача по написанию программы по двоичному поиску.
Цель работы - определение оптимального алгоритма.
Методом сравнительного анализа выбран алгоритм деления массива на две части.
В результате разработки программы подтвердилась правильность выбора алгоритма.
Поставленная задача, всеобъемлемо охватывает вопрос стремительного развития информационных технологий, в том числе и алгоритмизацию процессов в производстве.
Содержание
Введение
1. Описание алгоритма
2. Разработанная программа
3. Результаты выполнения программы
Заключение
Список литературных источников
Введение
Первоначально применение ЭВМ ограничивалось в основном вычислительными задачами, и структуры данных были очень простыми - числа и числовые массивы. Основную трудность в создании программ представляло проектирование алгоритма.
В дальнейшем, сначала при разработке трансляторов и операционных систем, а затем и при создании прикладных программ, особенно систем с элементами искусственного интеллекта, экспертных систем, использовались все более сложные структуры данных и центр тяжести в разработке программ перемещался к данным.
Проектирование структуры данных является наиболее трудной и ответственной проблемой в создании сложных программ. Выбор структуры данных и способа их представления в памяти компьютера во многом (иногда почти однозначно) определяет структуру алгоритма [1].
Одно из наиболее часто встречающихся в программировании действий - поиск данных. Существует несколько основных вариантов поиска, и для них создано много различных алгоритмов. Поиск требуемой информации применяется ко всем основным структурам данных с произвольным доступом: массивам, спискам (одно- и двусвязным), деревьям, графам, таблицам. На практике довольно часто производится поиск в массиве, элементы которого упорядочены по некоторому критерию (такие массивы называются упорядоченными). В случае, если массив упорядочен, то применяют другие, более эффективные по сравнению с методом простого перебора алгоритмы, один из которых -- метод бинарного поиска.
Двоичный (бинарный) поиск (также известен как метод деления пополам и дихотомия) -- классический алгоритм поиска элемента в отсортированном массиве (векторе), использующий дробление массива на половины. Используется в информатике, вычислительной математике и математическом программировании.
Самое широкое распространение метод получил в информатике для навигации (поиска) в структурах данных. Также его применяют в качестве численного метода для нахождения приближённого решения уравнений. Метод служит для нахождения экстремума целевой функции и в этом случае является методом условной одномерной оптимизации. Когда функция имеет вещественный аргумент, найти решение с точностью до можно за время, где. Когда аргумент дискретен, и изначально лежит на отрезке длины N, поиск решения займёт времени [2].
1. Описание алгоритма
Предположим, что мы обратились к середине файла и обнаружили там ключ Кi. Сравним К и Кi. Если К = Кi, то нужная запись найдена. Если K < Кi, то ключ К должен находиться в части файла, предшествующей Кi (если запись с ключом К вообще существует). Аналогично, если Кi < К, то дальнейший поиск следует вести в части файла, следующей за Кi. Если повторять эту процедуру проверки ключа К, из середины не просмотренной части файла, тогда каждое безуспешное сравнение К с Кi будет исключать из рассмотрения приблизительно половину не просмотренной части.
Algorithm BSEARCH (Binary search - двоичный поиск) поиска записи с ключом К в файле с N ? 2 записями, ключи которых упорядочены по возрастанию K1 < K2 ... < KN.
Шаг 0. [Инициализация] Set FIRST< 1; LAST< N. (FIRST и LAST- указатели первого и последнего ключей в еще не просмотренной части файла.)
Шаг 1. [Основной цикл] While LAST ? FIRST do through шаг 4 od.
Шаг 2. [Получение центрального ключа] Set I< |_(FIRST + LAST)/2_| .(Ki ключ, расположенный в середине или слева от середины еще не просмотренной части файла.)
Шаг 3. [Проверка на успешное завершение] If K=Ki then PRINT «Успешное окончание, ключ равен КI»; and STOP fi.
Шаг 4. [Сравнение] If K < KI then set LAST< I-1 else set FIRST<I+1 fi.
Шаг 5. [Безуспешный поиск] PRINT «безуспешно»; and STOP [3].
2. Разработанная программа
#include <iostream>
#include <algorithm>
#include <cstdlib>
#include <cstdio>
using namespace std;
void newMas(int *mas,int &size);// заполнение массива и его сортировка
void file(int *mas,int &size); // открытие (создание нового) файла и запись массива в файл
int search(int *mas,int &size,int key);// загрузка массива из файла и поиск числа
int main() {
setlocale(LC_ALL, "rus"); // корректное отображение Кириллицы
int S,K;//количетсво элементов в массиве и искомое значение (ключ)
cout << "Введите размер масива: ";
cin >> S; // ввод размера массива
int *M = new int[S]; // Выделение памяти для массива
newMas(M,S);
file(M,S);
cout<<"Введите число для поиска: "<<endl;
cin>>K;
if(search(M,S,K) < 0)
cout<<"Число "<< K <<" в прочтенном файле не обнаружено"<<endl;
else
cout<<"Число "<< K <<" расположено в позиции:" << search(M,S,K) << endl;
delete [] M; // очистка памяти
system("pause");
return 0;
}
void newMas(int *mas,int &size){
cout<<"Заполнение массива:"<<endl;
cout<<"Вводите числа через ENTER: "<<endl;
for (int i = 0; i < size; i++) { // Заполнение массива числами
cin>>mas[i];}
sort(mas, mas+size);// сортировка массива стадатной фунцией
cout<<"Отсортированный массив:"<<endl;
for(int i=0;i<size;i++)
cout<<mas[i]<<endl;//вывод отсортированного массива
}
void file(int *mas,int &size){
FILE *file;
if ((file = fopen("file.txt", "wb")) != NULL) // открытие файладля записи массива
for(int i=0;i<size;i++)
fprintf(file, "%d", mas[i]);//запсись массива в файл
fclose(file);// закрытие файла
}
int search(int *mas,int &size, int key)
{
FILE *file;
if ((file = fopen("file.txt", "rb"))!=NULL)// открытие файладля чтения массива
for(int i=0;i<size;i++)
fscanf(file, "%d", &mas[i]);//чтение массива из файла в программу
fclose(file);
int left, right, mid;//объявление переменных-границ и среднего элемента
left = 0;
right = size;
while(left <= right) {// проверка условия выполнения цикла
mid = (left + right) / 2;//определение середины массива
if(key < mas[mid])
right = mid - 1;//"откидывание" правой части массива и уменьшение диапазона левой части
else if(key > mas[mid])
left = mid + 1;//"откидывание" левой части массива и уменьшение диапазона правой части
else
return mid;// возврат номера элемента в главную функцию
}
return -1;// возврат отрицательного значения (поиск не дал результатов)
}
3. Результаты выполнения программы
Введите размер массива: 27
Заполнение массива:
Вводите числа через ENTER:
6
546
29
-816
543
687
549
-38
-86
-516
84
38
189
84
4
1
168
-86
86
16
-819
-89
-889
-847
846
647
58
Отсортированный массив:
-889
-847
-819
-816
-516
-89
-86
-86
-38
1
4
6
16
29
38
58
84
84
86
168
189
543
546
549
647
687
846
Введите число для поиска:
-516
Число -516 расположено в позиции: 4
Для продолжения нажмите любую клавишу . . .
Заключение
Бинарный (двоичный, дихотомический) поиск является поиском заданного элемента на упорядоченном множестве, осуществляемым путем неоднократного деления этого множества на две части таким образом, что искомый элемент попадает в одну из этих частей. Бинарный поиск применяется к отсортированным множествам.
Преимуществом бинарного поиска является более низкая трудоемкость по сравнению с последовательным поиском. Недостаток бинарного поиска состоит в том, что он применим только на отсортированных множествах.
Список литературных источников
1.Казанский национальный исследовательский технический университет им. А. Н. Туполева. Программирование(4172,4173). Лекции. Лекция 14. Данные и алгоритмы // http://www.studfiles.ru/preview/2020438/
2.Левитин А. В. Глава 4. Метод декомпозиции: Бинарный поиск // Алгоритмы. Введение в разработку и анализ -- М.: Вильямс, 2006. -- С. 180--183. -- 576 с. -- ISBN 978-5-8459-0987-9
3.Предместьин В. Р., Моисеева И. Д., Семенова М. Э. Курсовая работа по программированию и основам алгоритмизации. Методические указания / ГОУ ВПО «РХТУ им. Д. И. Менделеева», Новомосковский институт (филиал). - Новомосковск, 2009 - 44с.
Размещено на Allbest.ru
...Подобные документы
Понятие алгоритма как набора инструкций, описывающего порядок действий. Поиск в ширину - метод обхода графа и поиска пути в нем. Пример работы алгоритма поиска в ширину, его неформальное и формальное описание. Реализация с помощью структуры "очередь".
курсовая работа [684,8 K], добавлен 05.04.2015Разработка клиентской программы, демонстрирующей возможности таблицы символов, реализованной на базе бинарного поиска. Программная проверка подлинности информационного массива. Временная эффективность поиска, алгоритмов создания таблицы символов.
контрольная работа [235,1 K], добавлен 10.03.2019Создание программы, работающей с набором данных на внешнем устройстве. Описание программного комплекса. Обзор структуры главной программы. Процедура добавления новых элементов, поиска и создания на экране вертикального меню. Проверка работы программы.
курсовая работа [265,6 K], добавлен 28.08.2017Разработка программы на языке С#, которая будет заниматься построением бинарного дерева для исходных данных и их редактированием, поиском информации о товарах по заданному ключу. Графические схемы алгоритмов поиска и удаления элемента бинарного дерева.
курсовая работа [796,9 K], добавлен 22.02.2016Характеристика структурированного языка программирования С, его основных структурных компонентов, области памяти, библиотеки. Методы поиска в массивах данных. Описание программы, функции сортировки и меню выбора, последовательного и бинарного поиска.
курсовая работа [1,7 M], добавлен 19.05.2014Описание процедуры выбора структуры хранения данных. Программная реализация одномерного неоднородного массива. Представление бинарного дерева в виде динамической структуры данных. Изучение способов поиска в упорядоченном дереве. Содержание базы данных.
практическая работа [850,0 K], добавлен 16.04.2015Проектирование структуры базы данных. Технология обработки данных. Порядок установки и запуска программы. Описание объектов приложения и структура данных. Ввод и изменение исходных данных. Получение выходных документов и тестирование программы.
отчет по практике [2,3 M], добавлен 22.07.2012Разработка алгоритма реализации на ЭВМ процесса поиска кратчайшего пути в графе методом Дейкстры. Программная реализация алгоритма поиска кратчайшего пути между двумя любыми вершинами графа. Проверка работоспособности программы на тестовых примерах.
реферат [929,8 K], добавлен 23.09.2013Принцип работы алгоритма бинарного поиска в массиве. Способы исследования алгоритма "прямое включение". Формулы зависимости числа сравнений от элементов в массиве. Графики среднего числа сравнений и перемещений практических и теоретических измерений.
курсовая работа [646,1 K], добавлен 07.01.2014Описание структуры бинарного дерева поиска на языке C# среды Visual Studio. Требования к интерфейсу пользователя, структуре данных и программным средствам. Компоненты программных средств, результаты тестирования, диаграммы вариантов использования классов.
курсовая работа [968,2 K], добавлен 26.01.2013Анализ предметной области. Обзор программ-аналогов. Рассмотрение средств решения поставленной задачи. Проектирование структуры программы и базовых алгоритмов. Изучение руководства программиста и пользователя. Проектирование структуры базы данных.
курсовая работа [1,0 M], добавлен 14.11.2017Понятие таблицы, анализ способов ее формирования и организации, особенности создания доступа по имени. Сущность хеширования данных. Преимущества и недостатки связывания. Применение бинарного (двоичного) поиска и характеристика интерфейса программы.
курсовая работа [307,6 K], добавлен 16.06.2012Сбалансированные многоходовые деревья поиска. Исследование структуры B+-дерева, её основные операции. Доказательство их вычислительной сложности. Утверждение о высоте. Поиск, вставка, удаление записи, поиск по диапазону. B+-деревья в системах баз данных.
курсовая работа [705,5 K], добавлен 26.12.2013Проектирование структуры базы данных. Конструирование структуры будущих таблиц баз данных, основные приемы их заполнения и редактирования. Простая сортировка значений таблицы. Поиск записей по образцу. Как правильно сохранить и загрузить базу данных.
практическая работа [4,4 M], добавлен 02.04.2009Характеристика функциональных возможностей разрабатываемой программы в среде Delphi для регистрации абитуриентов. Описание алгоритма и структуры данной программы. Поиск данных в базе по заданным параметрам. Описание модулей и листинг программы.
курсовая работа [801,5 K], добавлен 19.07.2011Организация поиска информации по заданной теме в сети Интернет. Поиск с помощью поисковых машин. Преимущества и недостатки метода поиска по ключевому слову (фразе). Поиск в каталогах информационных ресурсов. Преимущества и недостатки предметных каталогов.
курсовая работа [47,5 K], добавлен 03.11.2010Линейные динамические структуры. Построение списочной структуры, состоящей из трехнаправленного и двух однонаправленных списков, связанных между собой. Дерево двоичного поиска для заданного множества целых чисел. Листинг программы на языках Си и Паскаль.
курсовая работа [451,1 K], добавлен 19.10.2013Многомерные структуры данных и поиск информации. Интеллектуальные системы и мягкие вычисления. Интегрированные и распределенные информационные системы. Построение базы данных. Проверка ввода некорректных символов и фильтрации, вывода и печати отчета.
отчет по практике [732,5 K], добавлен 07.07.2012Программа поиска в базе данных в среде Borland Delphi 7.0 Enterprise. Условия и блок-схемы задач. Ввод массива. Текст программ в Delphi, в Паскаль. Текст программы поиска в базе данных. Кодирование материала. Изготовление реляционной базы данных.
практическая работа [27,6 K], добавлен 11.10.2008Проектирование и описание логической структуры программы для работы электронного магазина в среде Microsoft Visual C++. Инструкция, описывающая сведения для запуска программы. Обновление данных о доступных товарах. Поиск по каталогу доступных товаров.
курсовая работа [27,6 M], добавлен 27.04.2012