Скачиваний:
12
Добавлен:
10.11.2023
Размер:
165.09 Кб
Скачать

Федеральное агентство связи

Ордена Трудового Красного Знамени

Федеральное государственное бюджетное образовательное учреждение высшего образования

«Московский технический университет связи и информатики»

Кафедра Математической Кибернетики и Информационных Технологий

Отчет по лабораторной работе

по предмету «СиАОД»

на тему:

«Методы поиска»

Выполнил: студент группы УБСТ2204

Становов Роман Андреевич

Руководитель:

Кутейников Иван Алексеевич

Москва 2023

Цель работы

Реализовать заданный метод поиска в соответствии с индивидуальным заданием. Организовать генерацию начального набора случайных данных. Для всех вариантов добавить реализацию добавления, поиска и удаления элементов. Оценить время работы каждого алгоритма поиска и сравнить его со временем работы стандартной функции поиска, используемой в выбранном языке программирования.

Вариант 19

Метод поиска Фибоначчи

Код программы

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