Форум программистов, компьютерный форум CyberForum.ru

Интерполирующий поиск в массиве структур типа char - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ С++.Строки.Вывести слова http://www.cyberforum.ru/cpp-beginners/thread1053606.html
Нужно вывести все слова отличные от слова hello. У меня есть похожая задача(там надо вывести слова с двумя буквами d) Может кто-нибудь исправить код чтобы подходил к моей задаче? Вот код #include "stdafx.h" #include <iostream> using namespace std;
C++ Для данных N и M cформировать двумерный массив: Для данных N и M cформировать двумерный массив: 1 2 3 4 5 … N 1 4 9 16 25 … N^2 1 8 27 64 125 … N^3 … 1^M 2^M 3^M 4^M 5^M … N^M Не понимаю как ее решить. Подскажите пожалуйста. http://www.cyberforum.ru/cpp-beginners/thread1053594.html
Матрица. Отпечатать номера строк, которыми заданы точки, удаленные друг от друга не более чем на заданную величину C++
Дана матрица из 4 столбцов и 6 строк. Двумя первыми элементами каждой строки заданы координаты одной, а двумя последними — соответствую- щие координаты другой точки плоскости. Отпечатать номера строк, кото- рыми заданы точки, удаленные друг от друга не более чем на заданную величину, и число таких строк. ума не приложу как сделать, помогите, пожалуйста ) Добавлено через 3 часа 5 минут...
C++ Массив. Вычислить частное между суммой положительных и суммой отрицательных
:wall: Надо создать числовой массив А.Значение N вводится с клавиатуры.Вычислить и выдавать на экран частное между суммой положительных и суммой отрицательных элементов массива.
C++ Обработка матриц http://www.cyberforum.ru/cpp-beginners/thread1053574.html
Дан двумерный массив. В каждой строке все его элементы, не равные нулю, переписать (сохраняя порядок) в начало строки, а нулевые элементы – в конец массива. Новый массив не заводить. Добавлено через 2 часа 4 минуты очень нужно Добавлено через 43 минуты up ^
C++ Минимальный элемент одномерного массива A заменить на третий отрицательный элемент Минимальный элемент одномерного массива A заменить на третий отрицательный элемент. Третий отрицательный искать от минимального элемента. подробнее

Показать сообщение отдельно
ShadowFirst
54 / 47 / 1
Регистрация: 31.10.2013
Сообщений: 161
23.12.2013, 20:26     Интерполирующий поиск в массиве структур типа char
Просто обдумывание этого у меня займет немного времени, но пока могу посоветовать посмотреть информацию по этой ссылке, может тебя быстрее осенит.
http://kvodo.ru/interpoliruyushhiy-poisk.html

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

Вот мы имеем для числа такой поиск:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
int interpolationSearch(int *A, int n, int x)
{
    int m; int l=0; int r=n-1;
    while (A[l]<x && A[r]>x)
    {
        m=l+(x-A[l])/(A[r]-A[l])*(r-l);
        if (A[m]<x) l=m+1;
       else if (A[m]>x) r=m-1;
           else return m;
    }
    if (A[l]==x) return l;
    else if (A[r]==x) return r;
        else return -1;
}
Теперь на вход его вместо массива для поиска числа передаем то где у тебя хранятся данные и ключи, какой то массив структур упорядоченный уже по ключам, назовем его Massiv, так же его размер и ключ который нужно найти, а вернуть можно указатель на этот элимент, либо само значение не знаю что там у тебя хранится.
C++
1
const Massiv *interpolationSearch(Massiv *A, int size, string key)
Теперь действуем также как было приведено в том алгоритме:
C++
1
2
3
4
5
6
7
8
    int m; int l=0; int r=n-1;
    while (A[l]->at(0) < key.at(0) && A[r]->at(0) > key.at(0))
    {
        m=l+(x-A[l])/(A[r]-A[l])*(r-l);
        if (A[m]->at(0)<key.at(0)) l=m+1;
       else if (A[m]->at(0)>key.at(0)) r=m-1;
           else //Здесь мы найдем нужную букву ключа;
    }
Еще раз предупрежу это только наработки и общие рассуждения, если что то еще надумаю еще напишу.
По идее это нужно повторять все в цикле в зависимости от количества букв в ключе, но конечно нужно учитывать что длины некоторых ключей могут быть меньше чем тот который задан.
 
Текущее время: 15:47. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru