Скачиваний:
23
Добавлен:
10.11.2023
Размер:
4 Кб
Скачать
import random
import time


# Реализация метода поиска Фибоначчи
def fibonacci_search(arr, x):
    n = len(arr)
    fib_m_minus_2 = 0
    fib_m_minus_1 = 1
    fib_current = fib_m_minus_1 + fib_m_minus_2

    while (fib_current < n):
        fib_m_minus_2 = fib_m_minus_1
        fib_m_minus_1 = fib_current
        fib_current = fib_m_minus_1 + fib_m_minus_2

    offset = -1

    while (fib_current > 1):
        i = min(offset + fib_m_minus_2, n - 1)

        if (arr[i] < x):
            fib_current = fib_m_minus_1
            fib_m_minus_1 = fib_m_minus_2
            fib_m_minus_2 = fib_current - fib_m_minus_1
            offset = i

        elif (arr[i] > x):
            fib_current = fib_m_minus_2
            fib_m_minus_1 = fib_m_minus_1 - fib_m_minus_2
            fib_m_minus_2 = fib_current - fib_m_minus_1

        else:
            return i

    if (fib_m_minus_1 and arr[offset + 1] == x):
        return offset + 1

    return -1


# Функция добавления элемента в массив
def add_element(arr, x):
    arr.append(x)
    arr.sort()


# Функция поиска элемента в массиве с использованием метода поиска Фибоначчи
def find_element_fibonacci(arr, x):
    return fibonacci_search(arr, x)


# Функция поиска элемента в массиве с использованием встроенного поиска Python
def find_element_builtin(arr, x):
    if x in arr:
        return arr.index(x)
    else:
        return -1


# Функция удаления элемента из массива
def delete_element(arr, x):
    if x in arr:
        arr.remove(x)
        return True
    else:
        return False


# Генерация случайных данных
random.seed(0)
arr = [random.randint(1, 10000000) for _ in range(10000000)]
arr.sort()

while True:
    print("\nМеню:")
    print("1. Добавить элемент")
    print("2. Найти элемент (метод Фибоначчи)")
    print("3. Найти элемент (встроенный поиск Python)")
    print("4. Удалить элемент")
    print("5. Выйти")

    choice = input("Выберите действие: ")

    if choice == '1':
        x = int(input("Введите элемент для добавления: "))
        add_element(arr, x)
        print(f"Элемент {x} добавлен в массив.")
    elif choice == '2':
        x = int(input("Введите элемент для поиска (метод Фибоначчи): "))
        start_time = time.time()
        result = find_element_fibonacci(arr, x)
        end_time = time.time()
        if result != -1:
            print(f"Элемент {x} найден на позиции {result}.")
        else:
            print(f"Элемент {x} не найден.")
        print(f"Время выполнения поиска Фибоначчи: {end_time - start_time} секунд.")
    elif choice == '3':
        x = int(input("Введите элемент для поиска (встроенный поиск Python): "))
        start_time = time.time()
        result = find_element_builtin(arr, x)
        end_time = time.time()
        if result != -1:
            print(f"Элемент {x} найден на позиции {result}.")
        else:
            print(f"Элемент {x} не найден.")
        print(f"Время выполнения встроенного поиска Python: {end_time - start_time} секунд.")
    elif choice == '4':
        x = int(input("Введите элемент для удаления: "))
        if delete_element(arr, x):
            print(f"Элемент {x} удален из массива.")
        else:
            print(f"Элемент {x} не найден в массиве.")
    elif choice == '5':
        break
    else:
        print("Некорректный выбор. Пожалуйста, выберите действие из меню.")

Соседние файлы в папке Лабораторные 1-5 для Вариант 19