1 / 88

Основы анализа алгоритмов

Основы анализа алгоритмов. Алгоритм - точное предписание, задающее процесс преобразования исходных данных в результаты. Свойства: Результативность Конечность Однозначность Массовость Детерминированность Эффективность. Обозначения. M – набор машинных инструкций, составляющих программу;

elia
Download Presentation

Основы анализа алгоритмов

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Основы анализа алгоритмов

  2. Алгоритм - точное предписание, задающее процесс преобразования исходных данных в результаты. • Свойства: • Результативность • Конечность • Однозначность • Массовость • Детерминированность • Эффективность

  3. Обозначения • M – набор машинных инструкций, составляющих программу; • S – память для стека и хранения промежуточных результатов; • d(n) – набор входных данных; • D(n) = {d(n)} – множество всевозможных наборов входных данных; • Т = {t} – время выполнения программы;

  4. Допущения • каждая машинная команда выполняется не более чем за фиксированное время; • рассматриваем правильные и финитные алгоритмы, т.е. алгоритмы, дающие единственное решение общей проблемы

  5. В силу сделанных допущений • Для любого начального набора данных алгоритм выполняет не более, чем конечное количество «элементарных» операций абстрактной машины. • Под трудоемкостью Fdалгоритма для данного набора начальных данных – d(n), будем понимать количество «элементарных» операций (время их выполнения), соверша-емых алгоритмом для решения конкретной проблемы, в данной формальной системе.

  6. Время выполнения программы t = c1* d(n) + c2 * M + c3 * S, здесь ci(d(n)) – «веса» ресурсов T^ = maxdD T – наихудший случай Tv = mindD T – наилучший случай Ť = Σ t /|T|–средний случай

  7. Классификация алгоритмов по виду функции трудоёмкости • Параметрически-зависимые (порядко-независимые) Fd = f(n); T^ = Tv = Ť • Порядко-зависимые Fd = f(d,n); T^(d,n) Ť(n)  Tv(d,n)

  8. c2g(n) f(n) c1g(n) f,g n n0 Асимптотические оценки •  (тета) f(n) и g(n): c1,c2,n0:n>n0 c2*g(n)f(n)c1*g(n)  f(n) = ( g(n) ) Ex: F(x) = 4x2+ sin(x) = (x2)

  9. cg(n) f(n) Асимптотические оценки • O (О большое) f(n) и g(n): c,n0:n>n0 c*g(n)≥f(n)>0  f(n) = O( g(n) ) Ex: F(x) = 4x2+ x = O(x2)

  10. F(n) cg(n) Асимптотические оценки • Ω (Омега) f(n) и g(n): c,n0:n>n0 f(n)  c*g(n)  0  f(n) = Ω( g(n) ) Ex: Ω( x*ln(x) ) – класс функций, которые растут не медленнее, чем x*ln(x)

  11. Сравнение времен выполнения алгоритмов 1 мин

  12. Казни Иосифа • n = 10 • m = 3 • k = 1

  13. Казни Иосифа • n = 10 • m = 3 • k = 2

  14. Казни Иосифа • n = 10 • m = 3 • k = 3 3

  15. Казни Иосифа • n = 10 • m = 3 • k = 4 • 3

  16. Казни Иосифа • n = 10 • m = 3 • k = 5 • 3

  17. Казни Иосифа • n = 3 • m = 10 • k = 6 • 3 6

  18. Казни Иосифа • n = 3 • m = 10 • k = 7 • 3 6

  19. Казни Иосифа • n = 3 • m = 10 • k = 8 • 3 6

  20. Казни Иосифа • n = 3 • m = 10 • k = 9 • 3 6 9

  21. Казни Иосифа • n = 10 • m = 3 • k = 10 • 3 6 9

  22. Казни Иосифа • n = 10 • m = 3 • k = 11 • 3 6 9

  23. Казни Иосифа • n = 10 • m = 3 • k = 12 • 3 6 9

  24. Казни Иосифа • n = 10 • m = 3 • k = 13 • 3 6 9 2

  25. Казни Иосифа • n = 10 • m = 3 • k = 14 • 3 6 9 2

  26. Казни Иосифа • n = 10 • m = 3 • k = 15 • 3 6 9 2

  27. Казни Иосифа • n = 10 • m = 3 • k = 16 • 3 6 9 2

  28. Казни Иосифа • n = 10 • m = 3 • k = 17 • 3 6 9 2

  29. Казни Иосифа • n = 10 • m = 3 • k = 18 • 3 6 9 2 7

  30. Казни Иосифа • n = 10 • m = 3 • k = 19 • 3 6 9 2 7

  31. Казни Иосифа • n = 10 • m = 3 • k = 20 • 3 6 9 2 7

  32. Казни Иосифа • n = 10 • m = 3 • k = 21 • 3 6 9 2 7

  33. Казни Иосифа • n = 10 • m = 3 • k = 22 • 3 6 9 2 7 1

  34. Казни Иосифа • n = 10 • m = 3 • k = 23 • 3 6 9 2 7 1

  35. Казни Иосифа • n = 10 • m = 3 • k = 24 • 3 6 9 2 7 1

  36. Казни Иосифа • n = 10 • m = 3 • k = 25 • 3 6 9 2 7 1

  37. Казни Иосифа • n = 10 • m = 3 • k = 26 • 3 6 9 2 7 1

  38. Казни Иосифа • n = 10 • m = 3 • k = 27 • 3 6 9 2 7 1

  39. Казни Иосифа • n = 10 • m = 3 • k = 28 • 3 6 9 2 7 1

  40. Казни Иосифа • n = 10 • m = 3 • k = 29 • 3 6 9 2 7 1 8

  41. Казни Иосифа • n = 10 • m = 3 • k = 30 • 3 6 9 2 7 1 8

  42. Казни Иосифа • n = 10 • m = 3 • k = 34 • 3 6 9 2 7 1 8

  43. Казни Иосифа • n = 10 • m = 3 • k = 35 • 3 6 9 2 7 1 8

  44. Казни Иосифа • n = 10 • m = 3 • k = 36 • 3 6 9 2 7 1 8 5

  45. Казни Иосифа • n = 10 • m = 3 • k = 40 • 3 6 9 2 7 1 8 5

  46. Казни Иосифа • n = 10 • m = 3 • k = 40 • 3 6 9 2 7 1 8 5

  47. Казни Иосифа • n = 10 • m = 3 • k = 44 • 3 6 9 2 7 1 8 5

  48. Казни Иосифа • n = 10 • m = 3 • k = 50 • 3 6 9 2 7 1 8 5

  49. Казни Иосифа • n = 10 • m = 3 • k = 51 • 3 6 9 2 7 1 8 5 10

  50. Казни Иосифа #include <iostream.h> const int n=1000,m=1000; void main(void) { long s=0; int a[n],i,j=0,k=m; for(i=0;i<n;i++) a[i]=i+1; for(i=0;i<n-1;i++,k=m) { while(k) { if(a[j]) --k; j=j==n-1?0:j+1; s++; } a[(j?j:n)-1]=0; } for(i=0; i<n; i++) if(a[i]) break; cout << n << ' ' << m << '\t' << a[i] << '\t' << s << '\n';}

More Related