Программы по двоичному поиску

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

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык русский
Дата добавления 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

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.