кодесурса

Упражнения на Java: поиск указанного элемента в заданном массиве элементов с использованием интерполяционного поиска

script1adsense2code
script1adsense3code

Поиск Java: упражнение 4 с решением

Напишите программу на Java, чтобы найти указанный элемент в данном массиве элементов, используя поиск интерполяции.

Из Википедии Интерполяционный поиск - это алгоритм поиска ключа в массиве, который был упорядочен по числовым значениям, назначенным ключам (значениям ключей). Впервые он был описан В. В. Петерсоном в 1957 году. Интерполяционный поиск напоминает метод, с помощью которого люди ищут в телефонном справочнике имя (ключевое значение, по которому упорядочиваются записи в книге): на каждом этапе алгоритм вычисляет, где в оставшемся пространстве поиска искомый элемент может быть основан на значениях ключа в границах пространства поиска и значении искомого ключа, обычно с помощью линейной интерполяции. Значение ключа, фактически найденное в этой предполагаемой позиции, затем сравнивается с искомым значением ключа. Если он не равен, то в зависимости от сравнения оставшееся пространство поиска уменьшается до части до или после расчетной позиции. Этот метод будет работать только в том случае, если расчеты размера различий между ключевыми значениями являются разумными.

Пример решения:

Java-код:

public class Main {
    public static void main(String[] args){
        int nums[] = {1, 2, 2, 3, 4, 5, 5, 6, 7, 8, 21, 34, 45, 91, 120, 130, 456, 564};
        int searched_num = 91;
	   // Find the index of searched item
        int index_result = Interpolation_search(nums, searched_num);
        System.out.println(searched_num + " is found at index " + index_result);
    }
    public static int Interpolation_search(int[] nums, int searched_num) {
        int low_num = 0;
        int high_num = nums.length - 1;
        int mid_num;
        while (nums[high_num] != nums[low_num] && nums[low_num] < searched_num && nums[high_num] >= searched_num) {
            mid_num = low_num + ((searched_num - nums[low_num]) * (high_num - low_num) / (nums[high_num] - nums[low_num]));
            if (searched_num > nums[mid_num])
                low_num = mid_num + 1;
            else if (searched_num < nums[mid_num])
                high_num = mid_num - 1;
            else
                return mid_num;
        }
        if (nums[low_num] == searched_num) {
            return low_num;
        } else {
            return -1;
        }
    }
}

Пример вывода:

 91 находится по индексу 13

Блок - схема:

«Блок-схема:

Редактор кода Java:

Внесите свой код и комментарии через Disqus.

Предыдущий: Напишите Java-программу для поиска указанного элемента в заданном отсортированном массиве элементов с помощью Jump Search.
Далее: Напишите программу на Java, чтобы найти указанный элемент в заданном отсортированном массиве элементов, используя экспоненциальный поиск.

Каков уровень сложности этого упражнения?

Новый контент: Composer: менеджер зависимостей для PHP , R программирования


script1adsense4code
script1adsense5code
disqus2code
script1adsense6code
script1adsense7code
script1adsense8code
buysellads2code