TE2+Hint.pdf

‫ﺳﺎﺧﺘﻤﺎندادهﻫﺎ و ﻣﺒﺎﻧ اﻟ ﻮرﯾﺘﻢﻫﺎ‬
‫ﻧﯿﻢﺳﺎل دوم ‪٩۵-٩۴‬‬
‫ﻣﺪرس‪ :‬دﮐﺘﺮ ﻋﻠ ﺷﺮﯾﻔ‬
‫داﻧﺸ ﺪهی ﻣﻬﻨﺪﺳ ﮐﺎﻣﭙﯿﻮﺗﺮ‬
‫ﭘﯿﭽﯿﺪﮔ اﻟ ﻮرﯾﺘﻢ‬
‫ﺗﻤﺮﯾﻦ ﻧﻈﺮی دوم‬
‫اﻣﯿﺮﻣﺤﺴﻦ آﻫﻨﭽ‬
‫ﻣﺴﺌﻠﻪی ‪ .١‬ﻣﺮﺗﺐ ﺳﺎزی‬
‫زﻣﺎن اﻟ ﻮرﯾﺘﻢ ﻫﺎی ﻣﺮﺗﺐ ﺳﺎزی زﯾﺮ را در ﺑﻬﺘﺮﯾﻦ )‪ (Best Case‬و ﺑﺪﺗﺮﯾﻦ ﺣﺎﻟﺖ )‪ (Worst Case‬ﺑﻪ ﻃﻮر دﻗﯿﻖ‬
‫)ﺑﺮ اﺳﺎس ﮐﺪ ﻫﺎی اراﺋﻪ ﺷﺪه در ﮐﻼس( ﺣﺴﺎب ﮐﺮده و ﻣﻘﺎﯾﺴﻪ ﮐﻨﯿﺪ‪.‬‬
‫‪Selection Sort .١‬‬
‫‪Insertion Sort .٢‬‬
‫‪Bubble Sort .٣‬‬
‫‪Merge Sort .۴‬‬
‫ﺣﻞ‪ .‬زﻣﺎن ﻣﻨﻈﻮر از زﻣﺎن در اﯾﻨﺠﺎ ﺗﻌﺪاد ﻣﻘﺎﯾﺴﻪ ﻫﺎی اﻧﺠﺎم ﺷﺪه اﺳﺖ‪.‬‬
‫ﺑﺮای ﻣﺮﺗﺐ ﺳﺎزی ﻫﺎی ‪ ٣ ،٢ ،١‬ﻣﺜﺎل }‪ {1, 2, ..., n‬ﺑﻬﺘﺮﯾﻦ ﺣﺎﻟﺖ اﺳﺖ و ﻣﺜﺎل }‪ {n, n-1, ..., 1‬ﺑﺪﺗﺮﯾﻦ ﺣﺎﻟﺖ‬
‫اﺳﺖ‪.‬‬
‫ﺟﺪول ‪ :١‬ﺗﻌﺪاد ﻣﻘﺎﯾﺴﻪ ﻫﺎی اﻟ ﻮرﯾﺘﻢ ﻫﺎی ﻣﺮﺗﺐ ﺳﺎزی‬
‫ﺗﻮﺿﯿﺤﺎت‬
‫) (‬
‫ﻫﻤﯿﺸﻪ ‪ n٢‬اﺳﺖ‬
‫‪Worst Case‬‬
‫) ‪(n‬‬
‫‪Best Case‬‬
‫) ‪(n‬‬
‫‪n‬‬
‫) ‪(n٢‬‬
‫‪٢‬‬
‫‪n‬‬
‫) ‪(n٢‬‬
‫‪٢‬‬
‫‪Sort Name‬‬
‫‪Selection Sort‬‬
‫‪Insertion Sort‬‬
‫‪Bubble Sort‬‬
‫در ﻣﺮﺗﺐ ﺳﺎزی ادﻏﺎﻣ ﻣﺜﺎل }‪ {1, 2, ..., n‬ﺑﻬﺘﺮﯾﻦ ﺣﺎﻟﺖ اﺳﺖ و اﻟ ﻮرﯾﺘﻢ زﯾﺮ ﻣﺜﺎل ﺑﺮای ﺑﺪﺗﺮﯾﻦ ﺣﺎﻟﺖ را ﻣ ﺳﺎزد‪.‬‬
‫ﻗﺒﻞ از آﺧﺮﯾﻦ ﻣﺮﺣﻠﻪ ﮐﻪ ﻣﺮﺗﺐ ﺳﺎزی ﺗﻤﺎم ﻣ ﺷﻮد‪ ،‬ﻧﺼﻔﻪ اول }‪ {1, 3, ..., 2k −1‬ﺑﺎﺷﺪ و ﻧﺼﻔﻪ دوم }‪{0, 2, ..., 2k‬‬
‫ﺑﺎﺷﺪ‪ ،‬ﺑﯿﺸﺘﺮﯾﻦ ﻣﻘﺎﯾﺴﻪ اﻧﺠﺎم ﻣ ﺷﻮد‪ .‬اﯾﻦ ﮐﺎر را ﺑﺮای ﻫﺮ دو دﺳﺘﻪ ﺑﻪ ﺻﻮرت ﺑﺎزﮔﺸﺘ اﻧﺠﺎﻣ ﻣ دﻫﯿﻢ‪.‬‬
‫‪١‬‬
‫ﻣﺜﺎل ﺑﺮای ‪:n = ٨‬‬
‫]‪[4,0,6,2,5,1,7,3‬‬
‫\ ‪/‬‬
‫‪/‬‬
‫\‬
‫]‪[4,0,6,2] and [5,1,7,3‬‬
‫\ ‪/‬‬
‫\ ‪/‬‬
‫‪/‬‬
‫\‬
‫‪/‬‬
‫\‬
‫]‪[4,0] [6,2‬‬
‫]‪[5,1] [7,3‬‬
‫|‬
‫|‬
‫|‬
‫|‬
‫|‬
‫|‬
‫|‬
‫|‬
‫]‪[0,4] [2,6‬‬
‫]‪[1,5] [3,7‬‬
‫\‬
‫‪/‬‬
‫\‬
‫‪/‬‬
‫\‬
‫‪/‬‬
‫\‬
‫‪/‬‬
‫]‪[0,2,4,6‬‬
‫]‪[1,3,5,7‬‬
‫\‬
‫‪/‬‬
‫\‬
‫‪/‬‬
‫]‪[0,1,2,3,4,5,6,7‬‬
‫▷‬
‫ﻣﺴﺌﻠﻪی ‪ .٢‬ﮐﺘﺎب‬
‫ﺳﻮاﻻت زﯾﺮ از و را از ﮐﺘﺎب درﺳ )ﮐﺘﺎب دﮐﺘﺮ ﻗﺪﺳ ( ﺣﻞ ﮐﻨﯿﺪ‪.‬‬
‫• ‪٢ .٢-٣‬‬
‫ﺣﻞ‪ i .‬و ‪ j‬ﻫﺮ ﮐﺪام ﺣﺪاﮐﺜﺮ ﯾ‬
‫ﺑﺎر ﺗﻐﯿﯿﺮ ﻣ ﮐﻨﺪ و ﭘﺲ ﻣ ﺗﻮان ﮔﻔﺖ اﻟ ﻮرﯾﺘﻢ از )‪ O(n‬اﺳﺖ‪.‬‬
‫▷‬
‫• ‪۵ .٣-٣‬‬
‫ﺣﻞ‪ .‬ﺗﻤﺮﯾﻦ )‪ (3.2-4‬ﮐﺘﺎب ‪.١ CLRS‬‬
‫▷‬
‫• ‪) ١٣ .٣-٣‬ﻣﻬﻢ(‬
‫ﺣﻞ‪ .‬ﺳﻮال )‪ (3.2‬ﮐﺘﺎب ‪CLRS.‬‬
‫▷‬
‫• ‪١۴ .٣-٣‬‬
‫ﺣﻞ‪ .‬ﺳﻮال )‪ (3.3‬ﮐﺘﺎب ‪CLRS‬‬
‫▷‬
‫ﻣﺴﺌﻠﻪی ‪(٠،١) .٣‬‬
‫درﺳﺘ و ﻧﺎ درﺳﺘ ﻋﺒﺎرت ﻫﺎی زﯾﺮ را ﺑﺮرﺳ ﮐﻨﯿﺪ‪.‬‬
‫))‪• f (n) + g(n) ∈ Θ(min(f (n), g(n‬‬
‫))‪• f (n) ∈ O(n) ⇒ g(n) ∈ Ω(f (n‬‬
‫‪١‬ﻣﻘﺪﻣﻪای ﺑﺮ اﻟ ﻮرﯾﺘﻢﻫﺎ‐وﯾﺮاﯾﺶ ﺳﻮم‬
‫‪٢‬‬
‫))‪• log(f (n)) ∈ Θ(log(g(n))) ⇒ f (n) ∈ Θ(g(n‬‬
‫) ‪• f (n) ∈ O(f (n)2‬‬
‫))‪• f (n) + o(f (n)) ∈ Θ(f (n‬‬
‫))‪• f (n) ∈ Θ(f (n/2‬‬
‫ﺣﻞ‪ .‬ﺳﻮال )‪ (3.4‬ﮐﺘﺎب ‪CLRS.‬‬
‫▷‬
‫ﻣﺴﺌﻠﻪی ‪ .۴‬اﺛﺒﺎت‬
‫‪ .١‬ﺛﺎﺑﺖ ﮐﻨﯿﺪ )‪log(n!) ∈ Θ(n log n‬‬
‫‪ Θ(log∗ log n) .٢‬و )‪ Θ(log log∗ n‬را ﻣﻘﺎﯾﺴﻪ ﮐﻨﯿﺪ‪.‬‬
‫√‬
‫‪ .٣‬ﺛﺎﺑﺖ ﮐﻨﯿﺪ )‪i ∈ Θ(n n‬‬
‫‪ .۴‬ﺛﺎﺑﺖ ﮐﻨﯿﺪ )‪∈ Θ(log n‬‬
‫√ ‪n‬‬
‫∑‬
‫‪1‬‬
‫‪n‬‬
‫‪i=1‬‬
‫‪.‬‬
‫‪n‬‬
‫∑‬
‫‪i=1‬‬
‫‪ .۵‬ﺛﺎﺑﺖ ﮐﻨﯿﺪ ﺗﺎﺑﻊ ﻓﯿﺒﻮﻧﺎﭼ از ﻣﺮﺗﺒﻪ ﻧﻤﺎﯾﯽ اﺳﺖ ))‪ f (n‬ﻧﻤﺎﯾﯽ اﺳﺖ اﮔﺮ ‪ (١ + δ)n ⩽ f (n) ⩽ (١ + ϵ)n‬ﮐﻪ‬
‫‪ ϵ‬و ‪ δ‬ﺛﺎﺑﺖ ﻫﺴﺘﻨﺪ(‬
‫∈ )‪.g(n‬‬
‫∈ )‪ f (n‬و ))‪/ O(f (n‬‬
‫‪ .۶‬دو ﺗﺎﺑﻊ )‪ f (n‬و )‪ g(n‬ﭘﯿﺪا ﮐﻨﯿﺪ ﮐﻪ ))‪/ O(g(n‬‬
‫‪ .٧‬ﺛﺎﺑﺖ ﮐﻨﯿﺪ )‪ logkb n ∈ O(n‬ﮐﻪ ‪ k‬و ‪ b‬ﺛﺎﺑﺖ اﻧﺪ‪.‬‬
‫ﺣﻞ‪.‬‬
‫‪ .١‬در ﮐﺘﺎب درﺳ اﺛﺒﺎت ﺷﺪه‪.‬‬
‫‪ .٢‬ﺗﻤﺮﯾﻦ )‪ (3.2-5‬ﮐﺘﺎب ‪CLRS‬‬
‫‪ .٣‬ﺗﺎﺑﻊ ﺑﻪ ﺷ ﻞ زﯾﺮ اﺳﺖ‪:‬‬
‫‪1+1+1+2+2+2+2+2+3+3+3+3+3+3+3+4+4+4+4+4+4+4+4+4+...‬‬
‫ﻫﺮ ‪ j‬در اﯾﻦ دﻧﺒﺎﻟﻪ ‪ (j + 1)2 − j 2 = 2j + 1‬ﺑﺎر ﺗﮑﺮار ﺷﺪه‪.‬‬
‫‪m‬‬
‫∑‬
‫ﮐﻪ ﻣ ﺗﻮان ﺑﻪ راﺣﺘ راﺑﻄﻪ ﺧﻮاﺳﺘﻪ ﺷﺪه را اﺛﺒﺎت ﮐﺮد‪.‬‬
‫ﭘﺲ اﯾﻦ ﺗﺎﺑﻊ ﺑﺮاﺑﺮ اﺳﺖ ﺑﺎ‪j(2j + 1) :‬‬
‫‪i=1‬‬
‫‪ .۴‬ﺗﺎﺑﻊ ﺑﻪ ﺷ ﻞ زﯾﺮ اﺳﺖ‪:‬‬
‫‪1 1 1 1 1 1 1 1‬‬
‫‪+ + + + + + + + ...‬‬
‫‪1 2 3 4 5 6 7 8‬‬
‫‪٣‬‬
‫ﮐﺮان ﭘﺎﯾﯿﻦ اﯾﻦ ﺗﺎﺑﻊ ﺑﺮاﺑﺮ اﺳﺖ ﺑﺎ‪:‬‬
‫‪1 1 1 1 1 1 1‬‬
‫‪1‬‬
‫‪+ + + + + + +‬‬
‫‪+ ...‬‬
‫‪2 4 4 8 8 8 8 16‬‬
‫ﮐﺮان ﺑﺎﻻ اﯾﻦ ﺗﺎﺑﻊ ﺑﺮاﺑﺮ اﺳﺖ ﺑﺎ‪:‬‬
‫‪1 1 1 1 1 1 1 1‬‬
‫‪+ + + + + + + + ...‬‬
‫‪1 2 2 4 4 4 4 8‬‬
‫و ﻣ ﺗﻮان از ﮐﺮان ﻫﺎی ﺑﺎﻻ راﺑﻄﻪ ﺧﻮاﺳﺘﻪ ﺷﺪه را اﺛﺒﺎت ﮐﺮد‪.‬‬
‫‪f (n) = f (n − 1) + f (n − 2) ⇒ 1.5f (n − 1) ⩽ f (n) ⩽ 2f (n − 1) .۵‬‬
‫‪f (n) = n1+sin n , g(n) = n .۶‬‬
‫‪ .٧‬از راﺑﻄﻪ ﻫﺎی زﯾﺮ ﻣ ﺗﻮان راﺑﻄﻪ ﺧﻮاﺳﺘﻪ ﺷﺪه را اﺛﺒﺎت ﮐﺮد‪:‬‬
‫‪log2 n‬‬
‫‪log2 b‬‬
‫= ‪logb n‬‬
‫‪k log log n < log n ⇒ logk n < n‬‬
‫▷‬
‫ﻣﺴﺌﻠﻪی ‪ .۵‬اﻟ ﻮرﯾﺘﻢ‬
‫ﯾ ﻣﺎﺗﺮﯾﺲ ‪ n × n‬در ﺣﺎﻓﻈﻪ ذﺧﯿﺮه ﺷﺪه اﺳﺖ ﺑﻪ ﻃﻮری ﮐﻪ ﻋﺪد ﻫﺮ ﺧﺎﻧﻪ ﮐﻮﭼ ﺘﺮ از ﺧﺎﻧﻪ راﺳﺖ و ﭘﺎﯾﯿﻨ ﺧﻮد اﺳﺖ‪.‬‬
‫اﻟ ﻮرﯾﺘﻤ از )‪ O(n‬در ﺑﺪﺗﺮﯾﻦ ﺣﺎﻟﺖ اراﺋﻪ دﻫﯿﺪ ﮐﻪ ﻣﺸﺨﺺ ﮐﻨﺪ ﻋﺪد ‪ X‬در ﻣﺎﺗﺮﯾﺲ داده ﺷﺪه وﺟﻮد دارد ﯾﺎ ﻧﻪ‪.‬‬
‫ﺣﻞ‪ .‬ﻓﺮض ﻣ ﮐﻨﯿﻢ ﺟﺪوﻟ ﺑﺎ اﺑﻌﺎد ‪ n × m‬دارﯾﻢ‪.‬‬
‫ﺑﺎ ﺷﺮوع از ﺑﺎﻻﺗﺮﯾﻦ و راﺳﺖ ﺗﺮﯾﻦ ﺧﺎﻧﻪ‪ ،‬ﺑﺮ اﺳﺎس ﻣﻘﺪار اﯾﻦ ﺧﺎﻧﻪ ﻣ ﺗﻮان ﻓﻬﻤﯿﺪ ﮐﻪ ‪ X‬در ﺳﻄﺮ اول ﯾﺎ ﺳﺘﻮن آﺧﺮ‬
‫وﺟﻮد ﻧﺪارد‪ ،‬ﺣﺎل ﺑﻪ ﺻﻮرت اﺳﺘﻘﺮاﯾﯽ اﻟ ﻮرﯾﺘﻢ را روی ﺟﺪول ﮐﻮﭼ ﺘﺮ ))‪ n × (m − ١‬ﯾﺎ ‪ ((n − ١) × m‬اﺟﺮا‬
‫▷‬
‫ﻣ ﮐﻨﯿﻢ‪.‬‬
‫ﻣﺴﺌﻠﻪی ‪ .۶‬ﮐﺪ‬
‫ﺗﺎﺑﻊ ﻫﺎی زﯾﺮ را در ﻧﻈﺮ ﺑ ﯿﺮﯾﺪ‪.‬‬
‫‪۴‬‬
1 def f1(n):
2
a = [0] * n
3
for i in range(n):
4
flag = True
5
while flag:
6
flag = False
7
a[i] = random.randint(0, n - 1)
8
for j in range(i):
9
if a[j] == a[i]:
10
flag = True
11
return a
1 def f2(n):
2
a = [0] * n
3
used = [0] * n
4
for i in range(n):
5
while True:
6
a[i] = random.randint(0, n - 1)
7
if not used[a[i]]:
8
break;
9
used[a[i]] = 1
10
return a
1 def f3(n):
2
a = [i for i in range(n)]
3
for i in range(n):
4
j = random.randint(0, i)
5
a[i], a[j] = a[j], a[i] #Swap element i with random element(0, i)
6
return a
.‫اﻟﻒ( ﺛﺎﺑﺖ ﮐﻨﯿﺪ اﯾﻦ ﺗﻮاﺑﻊ ﺟﺎﯾ ﺸﺖ ﻫﺎی ﺗﺼﺎدﻓ ﺑﺎ اﺣﺘﻤﺎل ﺑﺮاﺑﺮ ﺗﻮﻟﯿﺪ ﻣ ﮐﻨﻨﺪ‬
.‫ج( زﻣﺎن اﺟﺮای ﺗﻮاﺑﻊ در ﺑﺪﺗﺮﯾﻦ ﺣﺎﻟﺖ را ﺣﺴﺎب ﮐﻨﯿﺪ‬
.‫ﺣﻞ‬
.‫ ﻫﺮ ﺟﺎﯾ ﺸﺖ ﺑﻪ اﺣﺘﻤﺎل ﺑﺮاﺑﺮ ﺗﻮﻟﯿﺪ ﻣ ﺷﻮﻧﺪ‬f2 ‫ و‬f1 ‫اﻟﻒ( ﺑﻪ راﺣﺘ ﻣ ﺗﻮان ﺛﺎﺑﺖ ﮐﺮد ﮐﻪ در ﺗﺎﺑﻊ‬
.‫ را ﻫﻢ ﺑﻪ ﺻﻮرت اﺳﺘﻘﺮاﯾﯽ ﻣ ﺗﻮان ﺛﺎﺑﺖ ﮐﺮد‬f3 ‫ﺗﺎﺑﻊ‬
. (‫ ج‬،‫ب‬
‫ ﺗﺎﺑﻊ‬Average Case
Worst Case
‫راﻫﻨﻤﺎﯾﯽ‬
f1
Θ(n٢ log n)
‫ﺑﯽ ﻧﻬﺎﯾﺖ‬
g(i) =
f2
Θ(n log n)
‫ﺑﯽ ﻧﻬﺎﯾﺖ‬
g(i) =
f3
Θ(n)
Θ(n)
n−i
g(i + ١) +
n
n−i
g(i + ١) +
n
i
g(i) + i
n
i
g(i) + ١
n
‫ ﺑﺮاﺑﺮﻧﺪ‬Best Case ‫ و‬Worst Case
▷
۵