46 lines
		
	
	
		
			4.0 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
		
		
			
		
	
	
			46 lines
		
	
	
		
			4.0 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
|   | --- | |||
|  | title: Big Theta Notation | |||
|  | localeTitle: Большая тета-нотация | |||
|  | --- | |||
|  | ## Большая тета-нотация
 | |||
|  | 
 | |||
|  | Большая Омега сообщает нам нижнюю границу времени выполнения функции, а Big O сообщает верхнюю границу. Часто они отличаются друг от друга, и мы не можем поставить гарантию на время выполнения - это будет варьироваться между двумя границами и входами. Но что происходит, когда они одинаковы? Тогда мы можем дать оценку **тета** (Θ) - наша функция будет работать в это время, независимо от того, какой вклад мы ее даем. В общем, мы всегда хотим, если возможно, дать тета-границу, потому что это самая точная и узкая граница. Если мы не сможем дать привязку тета, следующая лучшая вещь - это самая узкая O-граница. | |||
|  | 
 | |||
|  | Возьмем, например, функцию, которая ищет массив для значения 0: | |||
|  | 
 | |||
|  | ```python | |||
|  | def containsZero(arr): #assume normal array of length n with no edge cases  | |||
|  |   for num x in arr:  | |||
|  |     if x == 0:  | |||
|  |        return true  | |||
|  |   return false  | |||
|  | ``` | |||
|  | 
 | |||
|  | 1.  Какой лучший случай? Ну, если массив, который мы даем, имеет 0 в качестве первого значения, он будет занимать постоянное время: Ω (1) | |||
|  | 2.  В худшем случае? Если массив не содержит 0, мы будем итерации по всему массиву: O (n) | |||
|  | 
 | |||
|  | Мы дали ему омегу и О, а как насчет тета? Мы не можем дать его! В зависимости от массива, который мы даем, время выполнения будет находиться где-то между постоянным и линейным. | |||
|  | 
 | |||
|  | Давайте немного изменим наш код. | |||
|  | 
 | |||
|  | ```python | |||
|  | def printNums(arr): #assume normal array of length n with no edge cases  | |||
|  |   for num x in arr:  | |||
|  |     print(x)  | |||
|  | ``` | |||
|  | 
 | |||
|  | Можете ли вы подумать о лучшем случае и худшем случае? Я не могу! Независимо от того, какой массив мы его даем, мы должны проходить через каждое значение в массиве. Таким образом, функция будет принимать наименьшее время (Ω (n)), но мы также знаем, что это не займет больше времени n (O (n)). Что это значит? Наша функция займет **ровно** n раз: Θ (n). | |||
|  | 
 | |||
|  | Если границы сбивают с толку, подумайте об этом так. У нас есть 2 числа, x и y. Нам дано, что x <= y и y <= x. Если x меньше или равно y, а y меньше или равно x, то x должно быть равно y! | |||
|  | 
 | |||
|  | Если вы знакомы со связанными списками, проверьте себя и подумайте о времени выполнения каждой из этих функций! | |||
|  | 
 | |||
|  | 1.  получить | |||
|  | 2.  Удалить | |||
|  | 3.  Добавить | |||
|  | 
 | |||
|  | Все становится еще интереснее, когда вы рассматриваете двойной список! | |||
|  | 
 | |||
|  | #### Дополнительная информация:
 | |||
|  | 
 | |||
|  | https://www.khanacademy.org/computing/computer-science/algorithms/asymptotic-notation/a/big-big-theta-notation https://stackoverflow.com/questions/10376740/what-exactly-does-big-%D3%A8-notation-represent https://www.geeksforgeeks.org/analysis-of-algorithms-set-3asymptotic-notations/ |