Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 16.12.2014, 13:24   #1
Praud
Форумчанин
 
Аватар для Praud
 
Регистрация: 11.10.2012
Сообщений: 409
По умолчанию Бинарный поиск

Дихотомический поиск по нескольким условиям (первое - ведущее).

Код:
include <iostream>
#include <locale.h>
#include <time.h>
using namespace std;

const int N = 10;

int BinarySearch(int[], int); //  Дихотомический поиск 
void BubbleSort(int[]); // Пузырьковая сортировка

int main()
{
	setlocale(LC_ALL, "Rus"); // Русский язык в консоли

	srand(time(NULL)); 

	int mas[N];
	int key;

	for (int i = 0; i < N; i++)
		mas[i] = 0 + rand() % 10; // Заполняем массив случайными числами

	BubbleSort(mas); // Сортируем массив по возрастанию

	cout << "Массив числовых ключей:" << endl;

	for (int i = 0; i < N; i++)
		cout << mas[i] << " ";  // Выводим массив в консоль

	cout << endl;
	cout << "Введите ключ: ";
	cin >> key; // Запрос ключа

	if (BinarySearch(mas, key) != -1)  // Поиск ключа
		cout << "Ключ найден!";
	else cout << "Ключ не найден!";

	cout << endl;
	system("pause");
}

// Бинарный поиск
int BinarySearch(int arr[], int key)
{
	int l = arr[0];            // нижняя граница
	int u =  N-1;    // верхняя граница

	while (l <= u) 
	{
		int m = (l + u) / 2;  // средний элемент
		if (arr[m] == key) return m;
		if (arr[m] < key) l = m + 1;
		if (arr[m] > key) u = m - 1;
	}
	return -1;
}

// Пузырьковая сортировка
void BubbleSort(int arr[])
{
	int temp;

	for (int i = 0; i < N - 1; i++)
		for (int j = 0; j < N - i - 1; j++)
			if (arr[j] > arr[j + 1])
			{
				temp = arr[j];
				arr[j] = arr[j + 1];
				arr[j + 1] = temp;
			}
}
Написал обычный бинарный поиск. Теперь помогите понять что означает "по нескольким условиям?"
Какие условия?
Praud вне форума Ответить с цитированием
Старый 16.12.2014, 13:31   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

А как полностью звучит задание?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 16.12.2014, 13:41   #3
Praud
Форумчанин
 
Аватар для Praud
 
Регистрация: 11.10.2012
Сообщений: 409
По умолчанию

Лабораторная работа № 1

Тема. Методы поиска в таблице

Цель. Изучить и освоить метод поиска информации.

Задание.

Вар №6. Дихотомический поиск по нескольким условиям (первое - ведущее).

Методические указания

1.​ Изучить раздел 2 методических указаний к самостоятельной работе по курсу «алгоритмы и структуры данных»

2.​ В качестве исходных данных рассматривать массив числовых ключей.

3.​ Выполнить ручной просчет для заданного метода поиска.

4.​ Создать алгоритм и программную реализацию метода.

5.​ Сравнить полученные результаты.
Praud вне форума Ответить с цитированием
Старый 16.12.2014, 13:50   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Мдя... Это нужно знать что на уме у препода чтоб на этот вопрос ответить.
Я не припомню чтоб нам в ВУЗе так давали алгоритмику.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 16.12.2014, 13:50   #5
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Цитата:
Методы поиска в таблице
это ключевая фраза, а у вас просто поиск в массиве типа integer. Наверно в массиве структур нужно поиск делать
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 16.12.2014 в 13:53.
Аватар вне форума Ответить с цитированием
Старый 16.12.2014, 14:07   #6
Poma][a
Новичок
Джуниор
 
Регистрация: 11.10.2011
Сообщений: 3,882
По умолчанию

Цитата:
Наверно в массиве структур нужно поиск делать
Как-то не ахти..
Пусть у нас есть некая структура
Код:
struct st
{
   int x, y, z;
};
И vector<st> v;
И нужно нахимичить поиск по v по заданному ключу (x, y, z)
Мы ведь не сможем за O(log n) (и предварительной сортировкой за O(n*log n)) найти элемент с ключом x (или y, или z).. Т.к. сортировка проводится только по одному значению.. А мы ищем сразу по 2-м (или более)..
Уж тогда проще сделать vector<_st> x, y, z..
где
Код:
struct _st
{
    value, number;
};
Сортировать отдельно каждый массив по value.. Вот и все.. Где я ошибся?
Poma][a вне форума Ответить с цитированием
Старый 16.12.2014, 14:20   #7
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Цитата:
Т.к. сортировка проводится только по одному значению
Кто мешает сортировку сделать по тем же полям, по которым нужно поиск реализовать?
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 16.12.2014, 14:29   #8
Poma][a
Новичок
Джуниор
 
Регистрация: 11.10.2011
Сообщений: 3,882
По умолчанию

Эм..
Дык захочу я поиск сначала по полю x, затем по y, потом x, а уже потом z.
Каждый раз сортировать будем?
Poma][a вне форума Ответить с цитированием
Старый 16.12.2014, 14:48   #9
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

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

Последний раз редактировалось Аватар; 16.12.2014 в 14:51.
Аватар вне форума Ответить с цитированием
Старый 16.12.2014, 14:54   #10
Poma][a
Новичок
Джуниор
 
Регистрация: 11.10.2011
Сообщений: 3,882
По умолчанию

Мой-то вариант-то требует 3 сортировки, а Ваш 143
Poma][a вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помощь в доработке программы на языке паскаль (бинарный поиск, поиск перебором) DimzNOVIchok45 Помощь студентам 0 13.10.2014 20:11
Реализовать два метода поиска строк в массиве: поиск перебором, бинарный поиск на языке Pascal DimzNOVIchok45 Помощь студентам 7 19.09.2014 21:40
Бинарный поиск. Bezukhoff Помощь студентам 0 16.03.2012 03:34
Бинарный поиск CraZZZy-GameRRR Общие вопросы Delphi 8 25.05.2010 14:57