Помощь в написании студенческих работ
Антистрессовый сервис

Реализация алгоритмов. 
Технология разработки программного обеспечения

РефератПомощь в написанииУзнать стоимостьмоей работы

Поиск, удаление, поиск: поиск индекса минимального элемента в списке, удаление его, снова поиск минимального, возвращение удаленного элемента обратно в список. Элемент 477 оказался наименьшим (назовем это «первым случаем»). Поэтому обновляем содержимое переменных mini и min2. так как нашли новый наименьший элемент. Поиск, удаление, поиск. Поиск индекса минимального элемента в списке, удаление… Читать ещё >

Реализация алгоритмов. Технология разработки программного обеспечения (реферат, курсовая, диплом, контрольная)

Предположим, необходимо найти позицию наименьшего элемента в следующем наборе данных: 809, 834, 477, 478, 307, 122, 96, 102, 324, 476.

Первым делом выбираем подходящий для хранения тип данных. Очевидно, что это будет список:

«> counts = [809, 834, 477, 478, 307, 122, 96, 102, 324, 476].

>" counts. index (min (counts)).

# решение задачи в одну строку!

>>>

Усложним задачу и попытаемся найти позицию двух наименьших элементов в неотсортированном списке. Возможные алгоритмы решения:

  • 1) поиск, удаление, поиск. Поиск индекса минимального элемента в списке, удаление его, снова поиск минимального, возвращаем удаленный элемент в список;
  • 2) сортировка, поиск минимальных, определение индексов;
  • 3) перебор всего списка. Сравниваем каждый элемент, но порядку, получаем два наименьших значения, обновляем значения, если найдены наименьшие.

Рассмотрим каждый из перечисленных алгоритмов.

1. Поиск, удаление, поиск: поиск индекса минимального элемента в списке, удаление его, снова поиск минимального, возвращение удаленного элемента обратно в список.

Начнем:

[809, 834, 477, 478, 307, 122, 96, 102, 324, 476] индекс: 0 1 23 4 567 8 9.

Первый минимальный: 96.

Индекс элемента 96: 6.

Удаляем из списка найденный минимальный элемент (96), при этом индексы в обновленном списке смещаются:

[809, 834, 477, 478, 307, 122, 102, 324, 476].

индекс :12 345 6 7 8

Второй минимальный: 102.

Индекс элемента 102: 6.

Возвращаем удаленный (первый минимальный) элемент обратно в список:

[809, 834, 477, 478, 307, 122, 96, 102, 324, 476] индекс: 0 1 23 4567 8 9

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

def find_two_smallest (L): smallest = min (L) mini = L. index (smallest).

L.remove (smallest).

# удаляем первый минимальный элемент next_smallest = min (L).

min2 = L. index (next_smallest).

L.insert (mini, smallest).

# возвращаем первый минимальный.

# проверяем индекс второго минимального из-за смещения: if mini <= min2:

min2 += 1 # min2 = min2 + 1.

return (mini, min2) # возвращаем кортеж.

2. Сортировка, поиск минимальных, определение индексов:

реализация второго алгоритма интуитивно понятна, поэтому приведем только исходный текст функции:

def find_two_smallest (L): temp_list = sorted (L) smallest = temp_list[0] next_smallest = temp_list[l] mini = L. index (smallest) min2 = L. index (next_smallest) return (mini, min2).

3. Перебор всего списка: сравниваем каждый элемент по порядку, получаем два наименьших значения, обновляем значения, если найдены наименьшие.

Третий алгоритм наиболее сложный из перечисленных выше, поэтому остановимся на нем подробнее.

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

На первом шаге рассматриваются первые два элемента списка.

[809, 834, …].

индекс: 0 1.

Сравниваем 809 и 834 и определяем наименьший из них, чтобы задать начальные значения mini и min2, где будут храниться индексы первого минимального и второго минимального элементов соответственно. Затем перебираем элементы, начиная с индекса 2 до окончания списка.

Определили, что 809 — первый минимальный, а 834 — второй минимальный элемент из двух первых встретившихся значений списка. Рассматриваем следующий элемент списка (477).

Элемент 477 оказался наименьшим (назовем это «первым случаем»). Поэтому обновляем содержимое переменных mini и min2. так как нашли новый наименьший элемент.

Рассматриваем следующий элемент списка (478). Он оказался между двумя минимальными элементами (назовем это «вторым случаем»).

Снова обновляем минимальные элементы (теперь обновился только min2), и т. д. пока не дойдем до конца списка.

Далее представлен исходный текст функции, реализующий предложенный алгоритм:

def find_two_smallest (L): if L[0] < L[1]:

mini, min2 = 0, 1.

# устанавливаем начальные значения else:

mini, min2 = 1, 0.

for i in range (2, len (L)):

if L[i] < L[minl]: # «первый случай» min2 = mini mini = i.

elif L[i] < L[min2]: # «второй случай» min2 = i.

return (mini, min2).

Показать весь текст
Заполнить форму текущей работой