Упражнение 2.2.1

Выразите функцию n3/1000 - 100n2 - 100т + 3 в O - обозначениях.

Для определения скорости роста и упрощения анализа выбираем член с наибольшим порядком.

n3/1000 - 100n2 - 100т + 3 = O(n3)

Упражнение 2.2.2

Сортировка выбором

Реализация на языке Python:

def selection_sort(array):
	for j in xrange(0, len(array)):
		tmp = j
		for i in xrange(j+1, len(array)):
			if array[tmp] > array[i]:
				tmp = i
		array[tmp], array[j] = array[j], array[tmp]
	return array

Для сортировки по убыванию меняем if array[tmp] < array[i]:

Какой инвариант цикла сохраняеться для этого алгоритма?

xz

Укажите время его работы в лучшем и худшем случаях, используя O - обозначения.

Вычеслительная сложность в лучшем случае: O(n)

Вычеслительная сложность в худшем случае: O(n2)

Упражнение 2.2.3

Сколько сравнений потребуеться в среднем этому алгоритму, если искомым элементом может быть любой елемент массива(с одинаковой вероятностью)

xz

Каково время работы в худшем случае и в среднем ? Как записать эти времена с помощью O обозначений ?

В худшем случае время работы будет n-1, в лучшем: алгоритм поиска остановиться на 1-й же итерации. Соответсвенно в среднем время работы будет n/2.

Записав это в O обозначении получаем: O(n) - в худшем и в среднем случаях.

Упражнение 2.2.4

Каким образом можно модифицировать почти каждый алгоритм, что бы получить оптимальное время работы в наилучшем случае ?

xz