# Проанализировать скорость и сложность одного - трёх любых алгоритмов,
# разработанных в рамках домашнего задания первых трех уроков.

import timeit
import cProfile

# Анализ алгоритма поиска двух наименьших чисел списка из задачи 7 урока 3
import random

def find_min(array):
    min_1 = array[0]
    min_2 = array[0]

    for i in array:
        if i < min_1:
            min_1 = i
    if array.count(min_1) == 1:
        for i in array:
            if i < min_2 and i != min_1:
              min_2 = i
    else:
        min_2 = min_1

    return 'Самый маленький элемент массива: {}. Следующий самый маленький элемент: {}'.format(min_1, min_2)

arr = [random.randint(1, 500) for _ in range(15)]

# через cProfile

cProfile.run('find_min(arr)')

# 1    0.001    0.001    0.002    0.002 less4_task1.py:10(find_min)  --- диапазон 5000000 для списка из 15000
# 1    0.009    0.009    0.012    0.012 less4_task1.py:10(find_min)  --- диапазон 500000000 для списка из 150000
# 1    0.120    0.120    0.144    0.144 less4_task1.py:10(find_min)  --- диапазон 50000000000 для списка из 1500000

# через timeit

# Из-за сложностей с получением массива в качестве аргумента функции (выдает сплошные ошибки), для проверки через timeit
# была взята другая функция, без массивов на входе, см. файл less4_task1_timeit.py


# Проанализировать скорость и сложность одного - трёх любых алгоритмов,
# разработанных в рамках домашнего задания первых трех уроков.

import timeit
import cProfile

# Анализ алгоритма поиска двух наименьших чисел списка из задачи 7 урока 3
import random

def find_min(array):
    min_1 = array[0]
    min_2 = array[0]

    for i in array:
        if i < min_1:
            min_1 = i
    if array.count(min_1) == 1:
        for i in array:
            if i < min_2 and i != min_1:
              min_2 = i
    else:
        min_2 = min_1

    return 'Самый маленький элемент массива: {}. Следующий самый маленький элемент: {}'.format(min_1, min_2)

arr = [random.randint(1, 500) for _ in range(15)]

# через cProfile

cProfile.run('find_min(arr)')

# 1    0.001    0.001    0.002    0.002 less4_task1.py:10(find_min)  --- диапазон 5000000 для списка из 15000
# 1    0.009    0.009    0.012    0.012 less4_task1.py:10(find_min)  --- диапазон 500000000 для списка из 150000
# 1    0.120    0.120    0.144    0.144 less4_task1.py:10(find_min)  --- диапазон 50000000000 для списка из 1500000

# через timeit

# Из-за сложностей с получением массива в качестве аргумента функции (выдает сплошные ошибки), для проверки через timeit
# была взята другая функция, без массивов на входе, см. файл less4_task1_timeit.py


# Проанализировать скорость и сложность одного - трёх любых алгоритмов, # разработанных в рамках домашнего задания первых трех уроков. # Анализ алгоритма поиска двух наименьших чисел списка из задачи 7 урока 3 # через cProfile # 1    0.001    0.001    0.002    0.002 less4_task1.py:10(find_min)  --- диапазон 5000000 для списка из 15000 # 1    0.009    0.009    0.012    0.012 less4_task1.py:10(find_min)  --- диапазон 500000000 для списка из 150000 # 1    0.120    0.120    0.144    0.144 less4_task1.py:10(find_min)  --- диапазон 50000000000 для списка из 1500000 # через timeit # Из-за сложностей с получением массива в качестве аргумента функции (выдает сплошные ошибки), для проверки через timeit # была взята другая функция, без массивов на входе, см. файл less4_task1_timeit.py