@udzumaki

Каким образом должен работать этот алгоритм?

Читал я Бкхаргаву "Грокаем алгоритмы" и наткнулся на это чудо

5cf24a431d94f775872884.png

Как по вашему должен выполнится блок if если smallest = 0? Я естественно пошел проверять и у меня просто сработал return

def smallest(arr):
    smallest = arr[0]
    smallest_index = 1 # Я специально поставил один чтобы увидеть что в конце оно выкинет один
    for i in range(1,len(arr)):
        if arr[i] < smallest:
            smallest = arr[i]
            smallest_index = i
    return smallest_index 

d = [2,4,15,6,7,9,9]

print(smallest(d)) # 1


И как это понимать?

Вот вся страница:

5cf24ba92dd0a114146506.png
  • Вопрос задан
  • 559 просмотров
Решения вопроса 1
lastuniverse
@lastuniverse
Всегда вокруг да около IT тем
Алгоритм полностью рабочий. Вот посмотрите такой пример:

def smallest(arr):
    smallest = arr[0]
    smallest_index = 0
    for i in range(1,len(arr)):
        if arr[i] < smallest:
            smallest = arr[i]
            smallest_index = i
    return smallest_index 

d = [4,15,6,2,7,9,9]

print(smallest(d)) # 3
print(d[smallest(d)]) # 2
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
BorLaze
@BorLaze
Java developer
smallest = arr[0]
smallest_index = 1 # Я специально поставил один чтобы увидеть что в конце оно выкинет один


А вот не надо ставить 1 специально, когда надо ставить 0.

Смысл приведенного алгоритма - мы принимаем, что нулевой элемент массива - самый маленький. Соответственно, запоминаем, что это минимальное значение находится по индексу 0.

Дальше, начиная с первого элемента, просматриваем весь массив и, если какой-то элемент меньше минимального, то 1) записываем новый минимум и 2) запоминаем его позицию.

А Вы принимаете за минимальный элемент нулевой, но запоминаете, что он находится во второй ячейке массива (почему-то). А потом удивляетесь, почему не работает...
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы