طراحی الگوریتم فصل 1

Post on 20-Jul-2015

227 views 1 download

Transcript of طراحی الگوریتم فصل 1

1

2

3

4

T(n) = n-1 + T(n-1) = n-1 + n-2 + T(n-2)

= n-1 + n-2 + n-3 + T(n-3)

...

...

T(n) = n-1 + n-2 +...+2+1 = 𝑛(𝑛−1)

2

5

T(n)=n-1+T(n-1) n>1

0 n=1

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

1 void seqsearch (int n,const keytype s[],keytype x, index &location)

2 {

3 location=1;

4 while (location<=n&&s[location]!=x)

5 location++;

6 if(location>n)

7 location=0;

8 }

22

T(n)=1+T(n-1) n>1

1 n=1

T(n) = 1+ T(n-1) = 1+1+T(n-2) = 1+1+1+T(n-3) = n

23

1 void binsearch (int n,const keytype s[],keytype x, index &location){

2 index low,high,mid;

3 low=1; high=n; location=0;

4 while(low<=high && location==0){

5 mid=[(low+high)/2];

6 if(x==s[mid])

7 location=mid;

8 else if(x<s[mid])

9 high=mid-1;

10 else

11 low=mid+1;

12 }

13 }

24

T(n)=1+T(n/2) n>11 n=1

n=2𝑘:فرض

T(n) = 1+ T(n/2) = 1+1+T(n/22) = 1+1+1+T(n/23)

=k+T(n/2𝑘) = k+1

T(n)=log2 𝑛 +1

25

26

27

28

29

30

31

32

33

34

1 void mergesort (int n, keytype S[])

2 {

3 if (n>1) {

4 const int h=[n/2], m = n - h;

5 keytype U[1 ..h], V[1 ..m];

6 copy S[1] through S[h] to U[1] through U[h];

7 copy S[h+1] through S[n] to V[1] through V[m];

8 mergesort(h, U);

9 mergesort(m, V);

10 merge (h, m, U, V, S);

11 }

12 }

35

T(n)2T(n/2)+n-1 n>1

0 n=1

n=2𝑘:فرض

T(n)=2T(n/2)+n-1 = 2[2T(n/2)+(n/2)-1]+n-1

=22T(n/22)+n-2 +n-20

=22T(n/22)+2n-[21+20]

...

...

=2𝑘T(n/2𝑘)+kn-[2𝑘−1 +⋯+ 20]

=kn-1 x (1-2𝑘)/(1-2)=kn+1-2𝑘

T(n)=nlog2 𝑛+1-n

36

1 void merge (int h, int m, const keytype U[], const keytype V[],keytype S[]){

2 index i, j, k;

3 i = 1, j = 1, k = 1;

4 while (i< = h && j <= m) {

5 if (U[i] < V[j]) {

6 S[k] = U[i];

7 i++;}

8 else{

9 S[k] = V[j];

10 j++;}

11 k++;

12 if (i>h)

13 copy V[j] through V[m] to S[k] through S[h+m];

14 else

15 copy U[i] through U[h] to S[k] through S[h+m];

16 }

17 }

37

38

39

40

41

42

43

44

1 procedure maxmin(i,j,fmax,fmin)

2 begin

3 case

4 i = j : Fmax Fmin A(i)

5 i = j-1 : if A(i)<A(j) then

6 Fmax A(j),Fmin A(i);

7 else

8 Fmax A(i),Fmin A(j)

9 else : mid [(i+j)/2]

10 call maxmin(i,mid,gmax,gmin);

11 call maxmin(mid+1,j,hmax,hmin);

12 Fmax max(gmax,hmax);

13 Fm𝐢𝐧 min(gmin,hmin);

14 endelse;

15 end;

45

A=[5,7,-3,-2,7,9,3,6]

minMax(A,1,8,-3,9)

46

A=[5,7,-3,-2,7,9,3,6]

minMax(A,1,8,-3,9)

minMax(A,1,4,-3,7) minMax(A,5,8, 3,9)

47

A=[5,7,-3,-2,7,9,3,6]

minMax(A,1,8,-3,9)

minMax(A,1,4,-3,7) minMax(A,5,8, 3,9)

48

T(n)=

2T(n/2)+2 n>2

0 n=1

n=2𝑘:فرض

n/2=2𝑘−1

T(n)=2T(n/2)+2= 2[2T(n/4)+2]+2

=22T(n/22)+22 + 21

=23T(n/23)+23 + +22 + 21

...

...

=2𝑘−1T(n/2𝑘−1)+2𝑘−1 +⋯+ 2

=n/2+2 x 1−2𝑘−1

1−2=n/2-2+2𝑘 = (n/2)-2+n

T(n)=3(n/2)-2

1 n=2

49

≤ X X ≥X

50

51

1 void quicksort (index low,index high)

2 {

3 index pivot point;

4 if (high>low)

5 {

6 partition(low,high,pivot point);

7 quicksort(low,pivot point-1);

8 quicksort(pivot point+1,high);

9 }

10 }

52

53

1 void partition (index low,index high,index &pivotpoint)

2 {

3 index i,j;

4 keytype pivotitem;

5 pivotitem=s[low];

6 i=low;

7 for(j=low+1;j<=high;j++)

8 if(s[j]<pivotitem){

9 i++;

10 exchange s[i]ands[j];

11 }

12 pivot point=i;

13 exchange s[low]ands[pivot point];

14 }

54

55

56

57

58

59

60

61

62

63

64

65

6666

T(n)=n-1+T(0)+T(n-1) n>1

0 n=1

n=2𝑘:فرض

T(n) = n-1+T(n-1)= n-1+n-2+T(n-2)

= n-1+n-2+n-3+ T(n-3)

...

...

= n-1 + n-2 + n-3 + ... + 3 + 2 + 1

= n(n-1)/2

T(n)=𝑛2

2−𝑛

2

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

𝑻 𝒏 = 𝒂𝑻𝒏

𝒃+ 𝑪𝒏𝒌

T(n)=

a > 𝑏𝑘

a = 𝑏𝑘

a < 𝑏𝑘

𝑛log𝑏 𝑎

𝑛𝑘 log2 𝑛

𝑛𝑘

82

T(n)=1+T(n/2) n>11 n=1

a=1 , b=2 , k=0 (a = 𝑏𝑘)

T(n) = log2 𝑛

Example : Binary search

83

84

85

86

87

88

89

90

91

92

93

𝑎0𝑥0 + 𝑎1𝑥

1 +⋯+ 𝑎𝑛−1𝑥𝑛−1

𝑏0𝑥0 + 𝑏1𝑥

1 +⋯+ 𝑏𝑛−1𝑥𝑛−1

94

5𝑥2 + 4𝑥 − 5

5|2| 4|1| -5|0|

0 1 2 3

-5 4 5 0

2 1 0

5 4 -5

95

1 mult(A,B,C)

2 for i = 0 to 2(n-1) do

3 c[i] = 0

4 for i = 0 to n-1 do

5 for j = 0 to n-1 do

6 c[i+j] = c[i+j] + A[i] * B[j]

7 end

96

1 + x + 3𝑥2 − 4𝑥3 = 1 + 𝑥 + 3 − 4𝑥 𝑥2

1 + 2x − 5𝑥2 − 3𝑥3 = 1 + 2𝑥 + (−5 − 3𝑥)𝑥2

P1(x) Pr(x)

Qr(x)Q1(x)

R(x)=P(x).Q(x)=[P1+Pr.𝑥2][Q1+Qr.𝑥2]

R(x)=P(x).Q(x)=[P1.Q1+P1.Qr. 𝑥2+Pr.Q1. 𝑥2+Pr.Qr. 𝑥4]

97

a=4

b=2

k=1

a>𝑏𝑘

T(n)=𝑛log2 4 = 𝑛2

T(n)=4T(n/2)+n n>1

c n=1

98

𝒂𝟎 + 𝒂𝟏𝒙 +⋯+ 𝒂𝒏𝒙𝒏−𝟏

𝑎0 + 𝑎1𝑥 +⋯+ 𝑎𝑛2−1𝑥𝑛

2−1

+[𝑎𝑛2+ 𝑎𝑛

2+1𝑥 +⋯+ 𝑎𝑛−1𝑥

𝑛2−1]𝑥

𝑛2

𝒃𝟎 + 𝒃𝟏𝒙 +⋯+ 𝒃𝒏𝒙𝒏−𝟏

𝑏0 + 𝑏1𝑥 +⋯+ 𝑏𝑛2−1𝑥

𝑛

2−1

+[𝑏𝑛2+ 𝑏𝑛

2+1𝑥 +⋯+ 𝑏𝑛−1𝑥

𝑛2−1]𝑥

𝑛2

P1(x)

Pr(x)

Q1(x)

Qr(x)

99

𝑥𝑛

2 𝑥𝑛

2

𝑥𝑛

2 𝑥𝑛

a=4

𝑏𝑘=2

a>𝑏𝑘

T(n)=𝑛2

T(n)=4T(n/2)+𝜃n n>2b else

100

𝑥𝑛

2 𝑥𝑛

T(n)3T(n/2)+𝜃n n>2

b else

a=3 , 𝑏𝑘=2 ,a> 𝑏𝑘

T(n)=𝑛log2 3

101

±10𝑛

× → 34 + 12 102

18 + (56)102

P1(x) Pr(x)

Qr(x)Q1(x)

102 104

102

× × × × × 102 × × 104

× → × × × × × × 102

× → × × × × × × 102

0 × → × × × × × × 102

2 × → × × × × × × 102

× → × × × × × × 102