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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 26.04.2016, 18:47   #1
manchester_alan
Форумчанин
 
Регистрация: 07.01.2015
Сообщений: 231
По умолчанию Алгоритм блочного поиска

Помогите, пожалуйста, реализовать блочный поиск числа в массиве...
manchester_alan вне форума Ответить с цитированием
Старый 27.04.2016, 21:03   #2
manchester_alan
Форумчанин
 
Регистрация: 07.01.2015
Сообщений: 231
По умолчанию

Как вообще реализуется блочный поиск?
manchester_alan вне форума Ответить с цитированием
Старый 27.04.2016, 21:42   #3
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

погуглил.
нарыл описание блочного поиска:
Цитата:
БЛОЧНЫЙ ПОИСК
Упорядоченные по возрастанию ключей записи таблицы группируются в блоки, каждый из которых содержит равное количество записей (оптимальное их число равно квадратному корню из числа запи¬сей в файле;. Па каждом шаге считывается первая запись каждого блока и ее ключ сравнивается с аргументом поиска. Шаги повторяются, начиная с первой записи таблицы, до тех пор, пока не будет выполнено одно из трех условий:
1 ключ записи совпадает с аргументом поиска - и этом случае поиск завершается успешно;
2обнаружена запись с ключом, превышающим apгумент поиска -в том случае начинается последовательный просмотр записей преды¬дущего блока и сравнение их ключей с аргументом поиска до тех пор, пока либо не будет обнаружена искомая запись (успешный поиск), либо блок не будет просмотрен полностью (поиск неудачен;:
3) достигнут конец файла - в этом случае поиск завершается неудачно.
всё просто.
Вам нужно отсортировать массив.
разделите массив на блоки (просто считайте, что блок состоит из M записей.
Дальше нужно брать первую запись очередного блока, если она меньше искомого значения, значит надо брать первую запись следующего блока, если она равна - конец поиска, если она больше,
то возврать к предыдущему блоку и последовательный перебор записей пока не найдётся нужная запись (или пока очередное значение не станет больше искомого.)
Serge_Bliznykov вне форума Ответить с цитированием
Старый 28.04.2016, 18:48   #4
manchester_alan
Форумчанин
 
Регистрация: 07.01.2015
Сообщений: 231
По умолчанию

ну я тоже примерно знаю алгоритм, но проблема в том, что не знаю, как поделить массив на блоки, как это программно реализовать... Кто поможет
manchester_alan вне форума Ответить с цитированием
Старый 30.04.2016, 21:26   #5
manchester_alan
Форумчанин
 
Регистрация: 07.01.2015
Сообщений: 231
По умолчанию

Код:
void main()
{
    int i, a[100], b[100], j, s = 0, k, x, z;
    int t;
 
    for (i = 0; i < 100; i++)
        a[i] = 0, b[i] = 0;
 
    // Ввод массива (упорядоченного!)
    for (i = 0;; i++)   
    {
        printf("Enter A:");
        scanf("%d", &a[i]);
        if (a[i] == -1)
            break;
    }
 
    // Ввод длинн подмассивов
    for (j = 0;; j++)   
    {
        printf("Enter LEN");
        scanf("%d", &b[j]);
        if ((s += b[j]) >= i)
            break;
    }
 
    printf("Find:");
    scanf("%d", &x);
 
    j = 0;
    // printf("%d  %d  %d\n", k, a[k], b[j-1]);
    for (k = b[j++] - 1; (a[k] < x) && (k <= i); k += b[j++]) ; 
    if (k > i) {
        printf("Error");
        return;
    }
    for (z = k - b[j - 1]; (z <= k); z++) {
        if (a[z] == x) {
            printf("Number:%d\n", z);
            break;
        }
    }
    if (z >= k)
        printf("Not found\n");
}
или никто не сможет помочь перевести с++ на делфи?
manchester_alan вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Алгоритм поиска Sylar9 Общие вопросы C/C++ 0 03.04.2012 12:38
A* алгоритм поиска Nicko_mt Помощь студентам 2 04.10.2011 02:24
алгоритм поиска незнайка_на_земле Помощь студентам 4 08.03.2011 10:46
Алгоритм поиска!!!! vit1990 Помощь студентам 14 29.01.2011 21:18
Алгоритм поиска... Johnson Общие вопросы Delphi 1 26.10.2008 08:35