Professional Documents
Culture Documents
*→xD
9¥
'
limn -so
< to
⇐ awoke → Siegen)⇐ lfnzno 0£ fan , ⇐ c. 9cm -
✗So pom
-
O
limn -
> • ¥? > 0 ⇐ *elk xp face 9in)⇐ In >_ No 0<-09 ( n ) ⇐ fcn ) -
1*00×-1
few fcn, r
limn >
-
• gTn) > o eel limn→N-gm< ✗ ⇐ tacos .ok Get ☒ He ⇐ FNZ No OECe.gov ← fcn) -2829cm -
☒ 27 00h
-
yep ik -
tch / =
019cm)
ten,
limn → a gin]
=
0 -
"
TM ok ⇐
plan ☒ ☒⇐ g
-
N - Honk IT t
yah
-
tch )=wC9cn))
limn → t =D pips ak⇐
tanks
⇐ g- N - Hawk fire t
ft Fo Size So *
- ' - -
ON →
oclogn ) → 0cm →
Ocnlogn) →
0cm ) → Oczn ) →
Ocn ! )
Éi =
ncn -11 )
2
=
① (n -
) :
gala me .
i=1
""
71ST
✗
Iz
c- -1
11--11 ② (✗ I
"
nwo ✗ =
✗ -
e
=
soap ic•
.
e. °
a. ¥0 d-
"
1×1<1 ✗ ① a)
§
ogk.ro#ic.lnln1sHnElncn)-1.s.Hn--&i----0(logn.gmaaniCa
no
= = '
✗ an ☒
i=^
Mi =
⑦ (nd ) dn.HN p§a•
5=0
-
a "CWNok ☐ JIND @ -
ji >✗
f- ( n)
=
( him) Jc gcn)=O( him ) od fin> =
Ocgcn) ) ok .
9cn)=I( fan,) •
"
ok f- In )= 019cm ) •
for/ =
-019cm) •
☒☒✗☒
* n↳kN7 GOIN -
→ xp RO -
*
-
13TH -
* 377 I' e-
: -437C .li
• TIN G ahh -28 Heat 3T 'kD am 83W Oya
'
G-item -4 Hey → -30 + nd ix. Tcm '
Of
9>-1
,
b > 1
,
for) > 0
,
Tcn )= AT (G) +
f- (n) :QokN7 Colt
Nl% ) ( nl%a
"
E)
-
1-
(a) =
②( .sk Eso flap fcn, =
• k e
① ( nl°%
"
TCnt-0~fcnilogn.sk fcn, = ) ok 2
T(n1= ② ( fin , /
gli Ccl flap af (G) ← c- fcn , et Eso gap • for )=I( nd E) pkz
*☒TT
Linked List / → em am
2. head
⑦ (1) ⑦ (n )
k k k
stack / - joint
Last in first out
-
LIFO →
A ⑥ → Solo -
iscmptycs) return :
true if S is empty ,
else -
false .
① (d) :#027×10150
TON-l83Nka_jonNeWN.nfalaaSynoN-WNka_y0ANeN@HS.t
010=407254
-0€ ☒a raw 6 oxy'M top Manner .
HONG Toya
-
top ogk -_
-
j NA Ako •
✗ ✗ Xz ✗4 S [ 1] 2ND
D gone no 'k7
i z
YOMA
-
-
"
② (1) .
>
+1%02--10150 -
Queue 1nA
Q .
head Q - tail first in first Out
-
FIFO -
QQ D8 Solo -
false
:
.
dequeuecs) : remove and return the least recently added item from the queue 0
8Wh
:p A
TON -183N Hank
HON * lmao) fates ↳ H -
*
-
:p .HN je a.
xp pond dojo -
Ga CA ) ⑥
TONS *Tae 1hpm n msn.sk 8- Close * Wha ) ka la *agha head •
-
- -
head
taitl-NITNas.HN#in5ctai--head--o-rfmNNn*-
,
head -11 . - - - -
② a) * lion Hsia
' -
-
'
N'e- or
' '
→*
- 1) ' ASK N
77137 ☒ '
N' 3 MS 'S -4377
-
-
ya 37 Ms 'S 01ft -13T£ +13 1 " ' -
"
AHN KO NAM -41317
7h
f3NkN risk
" -
>
.
on ND -7148 Msa amah
*
so to
ONS
'
;)
- -
YI
⑦ (1) xD 07Th D8 nailed I. e-
110 20
In fact
f) not -17071×1--13150
joint ANA
. -
-1×1 ADT
,
#
- Got D8 It Kia To#
MBS do
Irisa -1£ ma ) • *ftp.ask we Kia new Po #
foil 21¥77 ki 882 217217
@ ok ?
-
-
ja ☒ 317217 147 780 -
I @ ajñ
'
ON K' 7
317217 @ INT
-
a - v13
TN
this kiX-lpX@H3k3a.n3h Ron 147 X-D PAINT 887--5
-
l kit
g- in Pf Dale
-
> 80 -
fi #N '
↳ -48 His oh -301 * MESA 88 WHN IM
Api ly's mya
-
→
'
- e *
a a
=/
☒ if b
b
↳ ink
1*22 - v13 e. is It 1st II
'
←
pya 2h O
b '
- v3 88 we 80 KIT left my 's 88 -
:InN7
°
↳ re
k
: in
KE - HAN offs it
'
80 -
a #3
•
HUH 1-17
+07 ☒ HoH fines por AMN left -
poi ago µ
a hied fast T .
root
-
7750
'
K'712Th
DLR µ
'
← Gene ← Gie -
preorder -
⑦ (n) LDR µ
.
← his ← fine -
Inorder
-
LRD em ←
*
← Gene -
post order -
① ( h)
⑦ ( h)
⑦ Chl
:3 -8 ✗ GIN at apian ✗ GOD
-
1- O ' '
All MN ) ,
Ho Ki ) ✗
ya ik X -
S - Kal
② Clogn ) wya ye
✗ -5 ok >
IN a.
In ✗ alma y -
K sie , -
?⃝
••
Hbd ☒ $8 • 338
"
→ ☒*
↳ :L told ,
HOL *v3 N Go ab ask ;D IN
nD§ Ni = Zi : i THOS
-
HI
'
ON -1
# h
L=Nn=
h
2h :p -807 ON -2
2h
"
h= { hi =
{ 2i= l -
:p #37
'
ON 3
i -0 i=o
h=lo9zCn+l ) -
1 : adf.tt
N L -
-_ 2h -1 =L -
f :p "Nj☒ own
'
ON I
AAVVK a. ☐ j§W a- 300 0001 ) yah ⑦ Clognl aka on • jslkt only 'D 810'M 30 '
h(✗ left ) -
hcx right)
. £1 Has naan ✗ Matt G *a -140 -
.
-1 1k 1 1k O ki lista ATO > NIG .
f- shot
'
NK =
Nk -
et Nk -2+1 :
the -11^38 -86 '
04
AVL a -
→ Ifip
HIM 03N Ystad '
XD Hc3ihoµ I a * ☒ a) • ☒ 8 7k BST -
a no -5027 YIK
☒ thaws a- 278 ANKHS
! - is >8 alla
1- Smell •
Joanna ↳ 070 -
joys kfk Foro je ya 1-8 ,
an Ioa @ listen 41st ,
AVL too -
•
n -
-1.3cm ① (e) -
,
• 20ft ,
exist
We
G see
88
% ki -
@ CONS Hyo
ab mys 80
If
# IQ 7*8 73 147 a
'
*
'
:O • " -
→
ja je Tha
e .
2-1×0 807 ask @ * 37 68.1
. -
ya je e .
Geneve - v13 685 fine
'
887
P-N138ak.3Heaph.ninO.ae@nsHyisGk.7.wG
Je JN e l I
'
we
µ e. if - e lo
'
- 7012 → v72
MOI
① ( n) -2 ☒N lion ⑦ CN -
a
a.jo -
l
①(lognl Dongen -
* 3N -101N 's 't -4317.2
7 N' 787 -
flax
Cmax-heaPlWQyo8HeikoiaealHh@T87X.ke
✗ -
G) ⑥
yz parent (✗ 1. key 1min heap) 42 -
08 am 1k FT 31721T pot
-
p.jo 18 Die
Yinka 21,721M
-
¥7 Kia → a e. e oof → No -
- y So →Nie
v8 "
① ( n) : -10150
① Clogn ) → miso
⑦ ( logh) : -101N
⑦ Cnlogn ) : -10120
-
IN'D → 12015
Ne -
68 I
WON -N' ☒ at -0
jut got
'
• →
-
'
link A)ON
• p.no
'k V2 D '
7×0 Go -
pilot → K oNjN - ✗ K :
-
IN -0
'
2 TONN -
JIN
→ IN ☒
'
-
- ✗
k fl Gil 2. NJ 7't
'
i' 3177
Dk Pdk 2W M
'
⑦ Clogn) -
a
✗ * N I a. fam
'
053
-
•
→ -
X key X.keyzE.n.tl/.Keyx.n2nik8naoaomoN7oN30--moN7 •
-
, ←
xN137aky3NajKHfo-X.leafoo.i@si3Oax-8X.Ci.X.ca
KID
N 'D ☒3 G-
✗ Cia
-
-1 X.ci P'30h jet * →Na '
- HAH ☒ * ON X -
key ; not
-
,
AN orris , > v13 I •
Cpu :
0111
Disk OU )
:
CPU Oltlogtnl
:
CPU Oct )
:
Delete
let Go) Me aye → 137
Cpu Octlogtnl
:
Disk: 01109in )
Cpu Octlogtn )
:
Cpu 04109in )
:
⑨ Dok SK -
my 'd µ§ build -
0Mt N
→HN 4317
'
j N 'T TAN
- -
-
- →
Hft MO of AVL -
.
• . .
→
☒ NOD mate -0 Boy AVL folk -
* →Not @ IM am -0 AVL do -
→ is 6×1*1 no 'k
-
YAN KO
TON K' 7 ANTO : 71058
µ§µNSert
,
search delete ,
-
food swift - mate @ → ya at -1*8 .
3) * To am
-
☒ as -
jib -
HAND oh ,
0706 a. OOD Hall man e- * a note
DA ,
h da 'd
'
2 J Roys
flat 1USD 83kt at >
'
27 -
' '
*a →I
'
MON je y # # at > a)
'
'
* - - ,
nine of also
he Jae - na
'
ka G - K fol ka Go avast ,
22h ask Kot →
01M AND > For Ca * 8's
text
0725k - K also 77 7
0 fears Ms
Kaadhal alphas -
'
3h jk * →
'
Kor OIN Jail Mia] -011) finch # a N
'
2 & In µ
← jll'S 12
⑦ (n) '
Otomi kx idk 8
'
,
"
CAN INCISE "
✗ =
Em .
> taiga C @ ONIOT 02M → K X-D / NO )
Cs n
'
pinata ON -
Ca fate -
M
-
031×1No ② (1+2) AT
'
I' ☒ AID 012117 "
CHOI sik ☐ lay
"
*a →× Cd IN
(hash ⑥ ON 'M loyal awk ✗ a aorta * Ga )
M= ⑦ ( n ) -0 Ij tool ✗ =
Am ,
2=0-11) all ①☒ →
so 0151 MS 031dm fax ⇐
① at MD 0*0,0×4 pis He sina.li ↳If G. xk a. list MIG
2. Stay 37310 nina8 23 'S
PhD M=kP my oj 8 HA N
sifl ② more is :D 'M
'
leg Koon a' 317 ONT K AN
"
-
sic * - -
' .
2=78-9%3514 (jem) M=7o1 my SK (✗~~3) 831ms He ain't 3 8*8 Pyon ykl A- 2000 ok : 28
JI
'
Open Addressing
ok C-IN ① 7C 'M
.
-
MCW MK * ☒ 2N ,
010×720 1*1 →
'
k
Oj > 78734 ,
1881*30 Go * NC ) pins'k7 IS
⇐ find God)a☒-
'
,
please ,
Alex ask 01*8
'
D
-
ADD A hlkio) tick , ,
e) . -
.
hck ,
I -
1) AKA ✗k
p ✗
+
i -
A * 3-G' KD KX Had
7707
'
-
>a
"
yo
" '
/
'
Ii Ms
.jo 15134420 :p Text hlk.at#-tipl2a.fwD,hashjaIx-W-eioMxfifd
§ Nato ON 281k , Skin k k3Nb - - 1k Ask * sk ,
a' a -K D ,
☒ at 210 He ntlk as )
focal,
① (Itn # 1) *Gw win -0¥) :@is no'm -
031am INS
.jo kx 1.34020
)
>
jowl ,
'
ON MA ) -
00pm →
•
008 mail.tk ojsj 1344
,
fast
IwhCK.il-ChYk1-i1modmDkfN-skX@Aliz-n3tyk7Cio2.C
hash
'
ON is
'
e
U yiot.BA
ml.gs#3GNnof-MIIemp7l'.tI1s-7J0-0ap * Ghote
'
•
M : news
,
Double
Hashing .2
383
'
2- hz ( K) ,
-
'
ha
'
d- heck)
1. nioso alex
that's MIND fix
'
I 1+8 114*10 ☒* KS ,
031AM / Nsa Diaz - KID -1%07 -
2D a
TO
-
✗
'
ON
-
- -
, -
=
-
1-8 Ak
✗ f. 38 021
'
•
-
'
-
,
I a -
,
→☒ am ✗ ON ON
'
☒a 74
-
0100
" " =
Linear probing
linear probing open Addressing
↳ not a)TON
hash chaining -
50 →88
* AN IQ ok *
open addressing
-
p
e 't -1Mt Y
'
PK *
* A
1C
H1N1 @ •
"
.
: - →
"
merge sort & quick sort 0308 yd →
sealane acts -
Tent anon →
C. e-
☐ 3
' '
i' N
-
( 2>1
'
•
:p Na
-11111W 0010N IN
-
Insertion sort -
yd -111ha ,
0010N IN
-
merge Sort -
☒a
' -
mi i
'
→ ,
a -3 ,
-
I to → Not "
anjt ,
23
'
i. d ,
-
+ § xD pit
-
Radix sort -
- too *
'
ONE yah -
K
y it 07.1
( → 50 iks
-
- I '
idk -1×2 IT ¥7 OH DOM Alka → * - k - : fill -2
<3 'T
'
1*28 -1807 .
# MA →
k f > 3 : f-3.3
② Wiek=§or€
•
GON IN →Chek xk CNN.tk#1H
IN two Act - ☒7 → He b ¥0M HK
[ v1 , map DINA ①or a ON → + 2- 8 TOM -4 aphid -
p→§k7 71K
pivot -
d apple.no'M 1821
'
A- [from . . -
i]
pho :)ONO • sina.li 8 → K -201.2
.
-
man ☒I . - ✓
☒20h # N → K G so * Hh - K f. 02
) ,
•
Doth 101110.3
→ JINN ibis MOD SKI *Krak X '
Ako Kia * yÑ ⑥ 307 yyx -4
'
-
l )/ D
'
I'll Go ☒ ☒
jed find TOM 70113 ① Cnlogn) :D Apna
-
1- Cnt 2T (E) +
① ( n)
N-1 Glad 06 Go sit ☒a µN pom ⑦ (n ) '
TlM=T(n 1) -
Partition ①a
-
① (n) 150
a' 3
'
1-8 , in-place /IN
?⃝
MM @Agg@ $88# =
men anon He →3ha 03am A " 'M 11W
→#
/l't
'
a Ifk 7 711C
082 Go xD →
'
Ii --k3H CH *me a ON
a @ Go .li#oo-0Cnlogn):a3Txs--Ma'0
as
835
'
assist • WOOD ON -
log n
1- ( n )=2T( E) +
⑦ (n) :
yoga
'
01J
23
'
p.in Place / I
A 20 A alma ad ON ki '
om n dark
-
G :C So - hp -
a ca
'
Hk -7 Gi Jama M
'
at -7 Ge 1-17 :
0*1*7 I ☒7-
AS got Ma CHI Gye HO
'
ONA MICH +828 hah -
p→yÑ 71115
ON → K a) HI *7 YON ) A TON → K
T -01.2
'
.
C [ i l] -
WIT - k f '
1) < [ i] GO 082ND -
'
ON -41 Also ) .
3
TONS as ☒ska
-
-
C[ Aci]] ☒ B Ina
Yona idk ☒N Aci] K G nwo 8 Road A K Tho ) 4
A
TON
'
☒ → ☒ →
-
1- I C[ Aci]] @
KEANU 1st -0--11 RT )
is
MN ☒ Jk →OH B 5
Town µ ,
.
- match
'
ON -
N ,
② ( n -1kt IT INS -10150
(CAN 812 '
3
'
/It
in place ko
Pha @☒ =§②rr# NAMI so
www.ym-xoom.K
flap 10 0107 48
'
OMG { '
3D -1-207 '
ON Xp
→ He 000 GO.pj.tk D
xk.MN :*
'
,
ONS 720 H) -
ON
IN @ f- a' 3
'
-
Ma
①N -
N ⑦ Cdcnik) ) :# is -
'
0
-
gate
'
0^00
-
07
Iiiii
•
I
-
11W a A ① NO
• ^
I n NIG K=2 DID 0 . - -
K 7 'T
'
t.tt •
"
② (dlhtk) ) 1- 17 IT INS § k o
-
ODD → DO d • if e. ,
'
ON n -8 ok :(Ot
,D'3 IN
'
ewers ymoey.ua + C- -
in place
B3eke*=§•r*
→I
'
ON - k no 7
- K YN )
pxiyflinlkx.info#-kc5G-MGpN-1NhGBns0yngNDlwxh
.tn
.
G.cn
GIN MC
⇐ Nfa
( NA [i ] G y# ☒ ☒☒8) Bcn
☒ Aci] ] :-# Ni Eso =p
.oysN Aci]
- "
note G-
G fix him µ £0 #k oy.int/By0M AND 6
- of Dinoto
•
C. ☒3) → Hi
'
-kÑ ⑦( n)
:# i is -10150
☒ * MM ② (na )
53 '
p ,
in place Kor
- -
-
Best
Keys Average Worst Case Extra Space In-Place Stable
Runtime Runtime
✓ Insertion Sort Any
Skip-List
B-Tree
Hash Table
(Chaining)
AVL
Hash-Table
(Open
Addressing)
- -
Heap
-
Make-Set(x) Find(x) Union(x,y) total actions
Make-set,
Linked List
Tree
using Path-
Compression
סיכום חומר לקראת מבחן – מבנה נתונים
.1טבלת מיונים:
הערות חשובות ווריאציות של המיון זמן ריצה +הסבר מיון יציב? ?In place הסבר המיון שם המיון
מיון יעיל במקרה של מערכים קצרים או מיון השוואה פשוט.
) O(n^2במקרה הגרוע ובמקרה לולאה חיצונית עוברת על כל תא במערך מתחילתו עד סופו .בלולאה פנימית,
במקרה שרוב המערך כבר ממוין. מיון הכנסה
הממוצע. כל תא נכנס במקומו בין כל האיברים עד אליו ע"י השוואות והחלפות.
לאלגוריתם רקורסיבי ניתן לחשב את מיון השוואות.
זמן הריצה באמצעות זמן נסיגה .במקרה מיון רקורסיבי .בכל שלב מפצלים את המערך לשניים ,ממשיכים לפצל עד
) O(n) – O(nlognפעולת המיזוג
זה: קבלת תאים בודדים ,ובונים את המערך חזרה כלפי מעלה כאשר ממזגים
בכל שלב – logn .מספר הפעמים X בכל שלב כל שני חלקים עד קבלת המערך בשלמותו .פעולת המיזוג מתבצעת מיון מיזוג
)T(n) = 2*T(n/2)+O(n שמיזוג זה מתבצע. ע"י השוואת שני האיברים הראשונים בשני המערכים שרוצים למזג והוצאת
)T(1)=O(1
הקטן ביותר בכל פעם.
)פירוט מטה( עץ חיפוש בינארי
מיון המתבסס על ערימת מקסימום/מינימום.
) O(nlognבמקרה הגרוע.
בונים ערימה מהמערך הנתון )ללא צריכת זיכרון נוסף( .אח"כ עוברים
הסבר :בניית ערימת-מקסימום –
X בלולאה מ) n-מס' האיברים( עד :1מושכים כל פעם את איבר המקסימום, Heap-sort
) ,O(nתיקון הערימה אחרי כל
מציבים במקום האחרון הפנוי במערך ומתקנים את הערימה )פחות האיבר
הוצאת מקסימום – ).O(logn שכבר במקומו(.
מיון השוואה .מממש אסטרטגיה של הפרד ומשול.
בהינתן סדרת מפתחות:
.1בוחרים איבר-ציר ,pivot ,לרוב באופן אקראי.
.2מסדרים את המערך כך שכל הקטנים מהציר יופיעו לפניו וכל
לבחירת ה pivot-חשיבות מכרעת
הגדולים יופיעו אחריו) .איך עושים זאת? פונקציית עזר –
בקביעת זמן הריצה .אם הציר יהיה
תמיד החציון ,נקבל זמן ריצה אידיאלי, :partitionעוברים על המערך מתחילתו .עבור איבר קטן מהציר
) O(n^2במקרה הגרוע ו )O(nlogn
אם הציר יבחר להיות האיבר הקטן או ממשיכים הלאה .עבור איבר גדול מהציר מחפשים את האיבר הבא Quick-Sort
במקרה הממוצע .זמן הריצה תלוי X הקטן מהציר ומחליפים ביניהם .שומרים "חוצצים" במערך
הגדול ביותר ,נקבל ).O(n^2 בבחירת הציר. מיון מהיר
המסמלים :כל האיברים שכבר התגלו כקטנים מהציר ,כל
שיטות לבחירת הציר :בחירת 3איברים הגדולים מהציר ,ואלו שטרם נבדקו .את הציר עצמו נשים בינתיים
באקראיות ולקיחת האמצעי מתוכם.
בסוף המערך הנבדק( .זמן ריצה.O(n) :
.3קוראים באופן רקורסיבי לגבי כל צד של הציר.
.4תנאי עצירה :כאשר המערך עליו השיטה מופעלת מכיל איבר אחד
בלבד.
1
הערות חשובות ווריאציות של המיון זמן ריצה +הסבר מיון יציב? ?In place הסבר המיון שם המיון
כל איברי הקלט הם מספרים שלמים בתחום .1-k
רעיון :מחשבים עבור כל איבר כמה איברים קטנים ממנו או שווים לו .אם
יש yאיברים קטנים מאיבר ,xהרי ש xיהיה במקום ה y-במערך הממוין.
האלגוריתם משתמש ב 2-מערכי עזר :מערך Cבאורך kלשמירת המנייה לכל
איבר ,ומערך פלט Bבאורך מערך הקלט .A
פירוט האלגוריתם:
זמן הריצה הוא ) O(n+kכאשר אם מיון מנייה –
מאתחלים את מערך Cבאפסים.
) k=O(nאז זמן הריצה הוא לינארי X counting
עוברים פעם ראשונה על מערך .Cאם ] ,i=A[iכלומר מצאנו איבר במערך
– ).O(n sort
הקלט השווה לאינדקס הנוכחי ,נגדיל באחד את ערך התא ].C[i
עוברים פעם שנייה על ,Cהפעם סוכמים לכל איבר את עצמו וכל אלה שלפניו
)כלומר המספר בתא ] C[iמייצג עתה את מס' האיברים הקטנים/שווים ל.(i -
כעת עוברים על מערך הקלט מהסוף להתחלה ,כל איבר עליו עוברים מועבר
למקום המתאים ב B-לפי המספר השמור ב ,C -וערך Cמתעדכן ע"י הפחתת
.1
יש לנו גמישות בבחירת הבסיס.
משפט :נתונים nמספרים בעלי b
מיון לפי ספרות.
ביטים ,ונתון מס' שלם חיובי rהקטן מ- )) – O(d(n+kמכיוון שמבוצע מיון תלוי במיון מסתמך על כך שמספר הספרות בייצוג המספר חסום ע"י .d
.bמיון בסיס ממיין את המספרים הנ"ל מנייה ,כפול מס' הספרות .dאם d שבחרנו האלגוריתם מבצע מיון של המערך לפי ספרת האחדות של המספר )כשהייצוג מיון בסיס –
b קבוע ו k=O(n)-נקבל זמן ריצה להשתמש הוא בבסיס ,(10לאחר מכן מיון לפי ספרת העשרות ,וכן הלאה – עד מיון radix sort
בזמן. O( (n 2r )) : בו.
r לינארי ).O(n הספרה ה.d-
כל אחד מהמיונים יתבצע ע"י מיון יציב כלשהו .לצורך העניין – מיון מנייה.
כלומר ,עבור nו bנתונים נרצה לבחור r
כך שזמן הריצה יצא מינימלי.
הנחה :המספרים הם ממשיים בתחום 0,1ומתפלגים באופן יחיד בתחום
זה.
)ניתן להשתמש גם על כל טווח מספרים סופי אחר(.
נשתמש במערך עזר Bשל רשימות מקושרות שייצג את ה"דליים" .כל דלי
ללא הנחת ההתפלגות האחידה ,זמן מייצג טווח בגודל .1/n
הריצה עולה אך האלגוריתם עדיין נשאר ) ,O(nבהנחת התפלגות אחידה. מיון דלי –
X עוברים על מערך הקלט ) Aבאורך .(nכל איבר ]" A[iמכניסים" לדלי
נכון. ) O(n^2במקרה הגרוע. bucket sort
המתאים) B[n A[i ]] :לוקחים את הערך התחתון של ].(nA[i
לאחר מכן עוברים על כל רשימה במערך Bוממיינים אותה ע"י מיון השוואות
רגיל כלשהו.
כעת מעבר על מערך Bייתן את המערך כולו ממוין.
הערה :מיוני השוואות חסומים ע"י ) .O(nlognהמיונים בזמן ריצה לינארי אינם מיוני השוואות.
2
.2גרפים
2דרכים לייצוג גרפים:
רשימת שכנויות: ב.
מטריצת שכנויות. א.
זהו מערך שגודלו כמספר הקודקודים בגרף ||V זוהי מטריצה בגודל |.|V|X|V
מכל איבר במערך יוצאת רשימה מקושרת של שכני קודקוד זה .הרשימה תא ai , jיכיל 1אם (i, j ) Eו0-
של קודקוד vלמשל תכיל את כל קודקודי uהמקיימים . (v, u ) E אחרת.
עובד גם על גרפים מכוונים וגל על לא-מכוונים. מקום בזיכרון.O(V^2) :
מקום בזיכרון.O(V+E) : זמן ריצה למציאת כל שכני קודקוד :u
זמן ריצה למציאת כל שכני קודקוד .O(deg(u)) :u ).O(V
זמן ריצה לבדיקת קיום הצלע ).O(deg(u)) :(u,v זמן ריצה לבדיקת קיום הצלע ).O(1) :(u,v
הערה כללית לגבי שאלות על גרפים :ישנן שתי גישות לפתרון בעיות גרפים – האחת ,התייחסות לאלגוריתמים מטה כאל "קופסאות שחורות" וביצוע מניפולציות על הקלט כדי שיתאים לאלגוריתם .גישה שנייה –
התאמת האלגוריתם לבעיה הספציפית ע"י ביצוע שינויים באלגוריתם עצמו.
= MSTעץ פורש מינימלי .יכול להיות יותר מאחד כזה בגרף .יהיו בו |V|-1צלעות .עבור גרף ממושקל – מינימאליות העץ תתבטא בסכום משקלי צלעות העץ.
3
זמן ריצה +הסבר הסבר שם האלגוריתם
סריקה לעומק :יוצאים מנקודה מסוימת ומנסים להגיע הכי "עמוק" שניתן.
האלגוריתם מתחיל את החיפוש מצומת שרירותי בגרף ומתקדם לאורך הגרף )עפ"י סדר השכנים ברשימת
השכנויות( עד שנתקע .לאחר מכן חוזר על עקבותיו ) (backtrackingעד שהוא יכול לבחור דרך אלטרנטיבית
להתקדמות .כאשר עבר על כל הדרכים האפשריות ברכיב קשירות זה ,מגריל קודקוד חדש שטרם עברו בו.
אלגוריתם זה ,בניגוד לקודם ,עובר על כל קודקודי .G
האלגוריתם מגלה מעגלים ,מצייר את הגרף כיער עצים ,מאפשר מיון טופולוגי )בהמשך(.
שדות שמעודכנים במהלך ריצת האלגוריתם בכל אחד מהקודקודים:
]" – d[vחותמת זמן" – הגעה לקודקוד.
]" – f[vחותמת זמן" – סיום טיפול בקודקוד.
) .O(V+Eהסבר :הלולאה החיצונית ביותר עוברת על כל קודקוד, )מתקיים( 1 d [v] f [v] 2 | V | :
למקרה שכל קודקוד נמצא ברכיב קשירות אחר .מכל קודקוד
] - [vשומר את הקודקוד ממנו הגענו ל .v -ה.predecessor- DFS
סורקים את כל המסלולים האפשריים ,סה"כ |.2|E
החישוב הוא בהנחה שייצוג הגרף נעשה ע"י רשימת שכנויות. לכל קודקוד יש גם צבע :לבן = קודקוד שטרם גילינו ,אפור = קודקוד שגילינו אבל לא סיימנו לבדוק את כל
הדרכים היוצאות ממנו ,שחור = גילינו וסיימנו לעבור על שכניו.
מיון צלעות:
– Tree edgeקשת המרכיבה את אחד העצים ביער ,כלומר קשת שבה "גילינו" קודקוד חדש.
קשת אחורה – – back edgeקשת שמגלה מעגל ,כלומר קשת מצאצא לאחד מאבותיו הקדמונים.
צלעות נוספות ,מופיעות רק בגרפים מכוונים:
קשת קדימה – - forward edgeקשת מאב קדמון לצאצא שכבר גילינו קודם לכן.
קשת חוצה – – cross edgeכל צלע אחרת ,לרוב מחברת בין שני עצים ביער.
הבדל בין קשת חוצה לקשת קדימה :בקשת חוצה ,לקודקוד אליו הגענו תהיה חותמת זמן סגירה קטנה מחותמת
זמן הפתיחה של הקודקוד ממנו יצאנו.
משפט :קשת אחורה מורה על מעגל והפוך.
זהו מיון המבוסס על DFSכאשר הגרף שניתן כקלט הוא גרף מכוון ללא מעגלים – .DAG
מיון זה יוצר סידור ליניארי של הקודקודים כך שאם גרף מכיל קשת ) (u,vאזי uנמצא בסידור לפני .v
כמו DFS לכל גרף יש יותר מסדר טופולוגי יחיד ,הדבר תלוי בקודקוד ממנו התחלנו ב.DFS -
מיון טופולוגי
הסבר האלגוריתם :מפעילים את ,DFSאך בכל השחרה של קודקוד ,מצרפים קודקוד זה בראש רשימה מקושרת
נפרדת .הרשימה שתתקבל בסוף היא רשימת הקודקודים הממוינת .או :לאחר הפעלת DFSמסדרים את כל
הקודקודים בשורה לפי השדה ] f[vבסדר יורד.
בהינתן גרף ,האלגוריתם הבסיסי למציאת MSTיבנה סדרה ריקה Aשל צלעות ה MST-ויוסיף בכל שלב צלע לסדרה אם"ם צלע זו היא "צלע בטוחה"" .צלע בטוחה" היא כזו שלא סוגרת מעגל עם שאר
הצלעות בסדרה ,כלומר גם אחרי הוספתה ,הצלעות ב A-מהוות תת-גרף של .MST GenericMST
זמן ריצה: נועד לגרף ממושקל לא מכוון וקשיר .מוצא עץ פורש מינימלי.
בניית הקבוצות הזרות – ) .O(Vמיון הצלעות.O(ElogE) : זהו אלגוריתם חמדן ,כלומר כזה המבצע בכל שלב את מה שנראה "טוב ביותר" עבורו בטווח הקצר.
בניית העץ – עוברים פעם אחת על כל צלע ,כלומר ,Eועל כל צלע באלגוריתם זה ,בכל שלב מוכלים ב A -כל צלעות תת-הגרף של ה ,MST -כלומר יער של עצים .בהתחלה Aריקה –
שאנו רוצים להוסיף לעץ עלינו לחבר בין שתי קבוצות זרות דרך כל קודקוד מהווה "עץ" בפני עצמו .בכל שלב בלולאה מוצאים "צלע בטוחה" ומצרפים ל ,Aעד ש Aהופכת ל.MST
,union-findכלומר בזמן ריצה ממוצע של O(ElogV) – .logv מימוש האלגוריתם נעשה ע"י שימוש בקבוצות זרות – ,union findכל קבוצה מכילה קודקוד. האלגוריתם של
סה"כO((V E log E E log V ) : מציאת צלע בטוחה :ממיינים את הצלעות לפי משקלן ,זה סדר סריקתן בלולאה .לגבי כל צלע בודקים אם קרוסקל
|E|>|V|-1ובנוסף )) O(loge)=O(logVמשיקולים מתמטיים( ולכן קודקודיה נמצאים בקבוצות זרות .אם כן – מצרפים אותה .אם לא – ממשיכים הלאה .מפסיקים כאשר סיימנו
ניתן לרשום סה"כ: לסרוק את הצלעות.
) O( E log V
4
אלגוריתם חמדן גם כן .מוצא עץ פורש מינימלי בגרף ממושקל קשיר )לא מכוון(.
זמן ריצה: Aמהווה עץ בכל שלב .נתייחס לכל הקודקודים המופיעים ב A -כחלק מ"ענן" אחד.
אתחול והכנסה לתור עדיפות) .O(V) :רק כי אנחנו כבר יודעים מתחילים בקודקוד רנדומאלי כלשהו ומצרפים ל Aבכל שלב את הצלע הקלה ביותר שמחברת בין הענן לבין שאר
שכל המפתחות שוות אינסוף(. הגרף מחוצה לו.
עידכון מפתח השורש.O(logV) : מימוש:
נשתמש בתור עדיפויות עבור הקודקודים מחוץ לענן.
בניית – MST
=] key[vכאשר אין צלע לכל קודקוד יהיה שדה keyובו המשקל המינימלי של צלע המחברת בינו לבין הענן.
הוצאת קודקוד מינימלי בכל פעם – Vקודקודים logV ,עלות האלגוריתם של
ישירה מ vלענן .אם המפתח אינו ,0סימן שיש צלע כלשהי שמחברת ישירות בין הענן לקודקוד הזה.
עידכון .O(VlogV) - פרים
תחילה – נאתחל את כל ערכי keyבאינסוף ,מלבד קודקוד השורש שהוגרל ,ונכניסם לתור עדיפויות )נניח שימוש
עידכון שדות השכנים – על כל צלע עוברים פעם אחת )סה"כ (E בערימה בינארית(.
ועדכון המפתח שלו בערימה לוקח O(ElogV) .logV כל עוד יש קודקודים בתור – נוציא את הקודקוד שמפתחו מינימלי ) (extractMinונצרף ל .Aנעבור על כל שכניו
סה"כ )משיקולים דומים לשיקולים בפרים(:
של קודקוד זה ונעדכן את ערכי המפתח keyשלהם ,רק בהנחה שמשקל הצלע הנבדקת קטן מהמפתח שהיה שם
) O( E log V קודם.
בסוף התהליך נקבל עץ פורש מינימלי.
***אלגוריתם זה כמעט זהה לאלגוריתם דייקסטרה***
אלגוריתם למציאת המסלול הקצר ביותר מקודקוד מקור כלשהו לשאר הקודקודים.
האלגוריתם עובד על גרפים מכוונים או לא מכוונים בעלי משקולות אי-שליליות w(u,f) .היא פונקצית המשקל
של הגרף.
רעיון:
נשמור בכל רגע קבוצת קודקודים מהגרף ,S ,נתייחס אליהם כאל "ענן" קודקודים שבכולם כבר חישבנו את
המסלול הקצר ביותר.
מימוש:
נשתמש בתור עדיפויות עבור הקודקודים מחוץ לענן.
לכל קודקוד vיהיה שדה ] d[vובו המשקל המינימלי של מסלול בינו לבין קודקוד המקור d[v]= .sכאשר אין
האלגוריתם של
חישוב זהה לאלגוריתם פרים מסלול מ vל sאו שמסלול זה טרם נתגלה .בנוסף יהיה שדה ] π[vובו נשמור את ה"אבא" של כל קודקוד )כלומר דייקסטרה
הקודקוד ממנו הגענו ל v -השייך למסלול הקל ביותר(. )לא למבחן(
=] ,d[vמלבד קודקוד השורש שהוגרל ) ] d[sמאותחל ב ,(0-ונכניסם לתור תחילה – נאתחל את כל ערכי
עדיפויות )נניח שימוש בערימה בינארית(.
כל עוד יש קודקודים בתור – נוציא את הקודקוד שמפתחו מינימלי ) (extractMinונצרף לענן .Sנעבור על כל
שכניו של קודקוד זה ונעדכן את ערכיהם באופן הבא .if(d[u]>d[v]+w(u,v)) then d[u] d[v]+ w(u,v) :כלומר,
אם המסלול שמצאנו עכשיו טוב יותר מכל מסלול שמצאנו עד כה ,נעדכן את השדה למשקל המסלול החדש,
ונעדכן את האבא ,π[u] ,גם כן.
בסופו של התהליך יכיל כל קודקוד בגרף שדה ובו המסלול ה"קל" ביותר מ s -עד אליו ומצביע לקודקוד הקודם
לו במסלול זה.
5
.3מבנים ושונות:
הערות חשובות ווריאציות של המבנה תיאור פעולות עיקריות /מבנה אלגוריתם ומשתניו /זמני ריצה ייצוג גרפי +הערות הסבר כללי שם מבנה
6
הערות חשובות ווריאציות של המבנה תיאור פעולות עיקריות /מבנה אלגוריתם ומשתניו ייצוג גרפי +הערות הסבר כללי שם מבנה
נסמן ב h-את גובה העץ .במקרה הטוב ,ובמקרה הממוצע )) h=O(lognלפי משפט(.
במקרה הגרוע ).h=O(n עץ = מבנה היררכי בו לקודקודים יש
יחסי אב-בן.
) – Search(T,kחיפוש מפתח kבעץ .O(h) .Tניתן לממש רקורסיבית או
איטרטיבית. מושגים )חלק( :עומק = מס' קשתות
משורש לקודקוד מסוים .דרגה של
) – Minimum/maximum(xחיפוש מפתח מקסימלי/מינימלי בתת העץ המושרש צומת = מספר הבנים .גובה = מס'
קיימות 3סריקות של איברי עץ חיפוש ב .x-זמן ריצה.O(h) : קשתות מקודקוד מסוים לעלה שהוא
בינארי: הצאצא הכי רחוק ממנו .גובה עץ ריק
) – Insert(T,xהכנסת איבר xלעץ .זמן ריצה.O(h) : מוגדר ) .(-1עץ בינארי = עץ בו לכל
– Inorderבן שמאלי ,אני ,בן ימני. עץ צומת יש לכל היותר 2בנים .עץ בינארי עצי חיפוש
) – Delete(T,xמחיקת איבר xלעץ .זמן ריצה .O(h) :תיאור אלגוריתם :תחילה מלא = עץ בו לכל צומת יש 2או 0בנים. בינאריים
– Preorderאני ,בן שמאלי ,בן ימני. מוצאים את xבעזרת .searchאם xהוא עלה – פשוט מוחקים .אם ל xבן יחיד – עץ בינארי מושלם = לכל העלים אותו
פשוט מעבירים את המצביע מאביו של xאל אותו בן יחיד .אם ל x -שני בנים :נמצא עומק.
– Postorderבן שמאלי ,בן ימני ,אני.
את הקודקוד המינימלי בתת העץ הימני של xונחליף ביניהם ,ואז נמחק את x עץ חיפוש בינארי מקיים תנאי נוסף:
)בוודאות לא יהיו לו שני בנים ולכן המחיקה תהיה פשוטה(. לכל קודקוד ,המפתח של בנו הימני גדול
משלו והמפתח של בנו השמאלי קטן
) – Successor/predecessor(T,xמציאת האיבר העוקב/קודם לקודקוד .xתיאור משלו.
אלגוריתם :אם הבן הימני קיים ,קוראים לפונקציית מציאת מינימום על תת העץ
המושרש בבן הימני .אם לא – מחפשים את האב הקדמון הקרוב ביותר כך שx - עץ זה משמש למימוש מילון דינאמי.
נמצא בתת העץ המושרש משמאלו .סה"כ – ).O(h
– Insertהכנסה מתבצעת כמו בעץ חיפוש בינארי רגיל ,עם תוספת :לאחר
שהקודקוד החדש מוכנס ,עולים חזרה למעלה עד השורש ובמידה ומוצאים קודקוד
לא מאוזן מבצעים רוטציה יחידה .הרוטציות יכולות להיות מ 4 -צורותright, :
,left, right-left, left-rightלפי המצב בעץ.
זהו עץ חיפוש בינארי בעל תכונה נוספת:
זמן ריצה)הכנסה( :חיפוש רגיל – ) ,O(lognטיפוס חזרה עד השורש – ),O(logn לכל קודקוד בצומת מתקיים שגובה הבן
תיקון במידה ונדרש – ) .O(1סה"כ.O(logn) : כל צומת בעץ מחזיק הימני וגובה הבן השמאלי נבדלים ב 1
שדה נוסף – לכל היותר.
– Deleteמתבצע כמו בעץ חיפוש בינארי רגיל רק שגם הפעם נצטרך לעלות חזרה AVL-tree
עד השורש ולבצע רוטציות מתקנות בכל צומת בו התגלה חוסר איזון .בניגוד גובה תת העץ המושרש משפט :גובה של AVLבעל nצמתים
להכנסה ,במחיקה ייתכן ונצטרך לבצע יותר מרוטציה אחת בדרך חזרה לשורש. בצומת זו. הוא ).O(logn
במקרה הגרוע ביותר נצטרך לתקן כל שלב ושלב בדרך לשורש.
זמן ריצה)מחיקה( :מחיקה רגילה – ) ,O(lognטיפוס חזרה עד השורש – )O(logn
ותיקון בכל שלב אם נחוץ – ) .O(1סה"כ.O(logn) :
– Searchכמו בעץ חיפוש רגיל.O(logn) .
7
הערות חשובות תיאור פעולות עיקריות /מבנה אלגוריתם ומשתניו ייצוג גרפי +הערות הסבר כללי שם מבנה
) – Search(T,kנחפש את מפתח kברשימה טבלאות גיבוב נועדו לאפשר מערך דינאמי בעל הפעולות :הכנסה ,חיפוש ומחיקה,
המקושרת שב .T[h(k)]-חיפוש לא מוצלח יצרוך כאשר טווח ערכי המפתחות גדול בהרבה ממספר המפתחות הנתונים .נתייחס
הערה – בחירת פונקציית – hash למפתחות כאל מספרים טבעיים .הנחה מקדימה :כל המפתחות שונים זה מזה.
זמן ריצה של ) .O(1+αחיפוש מוצלח יצרוך
יש שתי שיטות עיקריות: פונקציית ה ,hash -נסמנה ב ,h -תיקח כל מספר טבעי ותצמיד לו ערך בטווח
בממוצע ) ,O(1+α/2כלומר ) O(1+αגם כן) .מכאן Chaining
המערך ,כלומר מ 0-עד m-1שהגדרנו .זאת ב .O(1) -הבעיה :מפתחות שונים עלולים
שיטת החילוק – שאם ) n=O(mאזי זמן הריצה הוא קבוע ).O(1
מערך באורך mשכל (chainingוopen - לקבל אותו ערך ) hאיננה חח"ע( .שני פתרונות :שירשור )
h(k ) k mod m ) – Insert(T,kמכניס את איבר xבראש הרשימה תא בו הוא רשימה .addressing
שבתא ]) .T[h(x.keyזמן ריצה.O(1) : מקושרת.
מבנה זה נותן זמני ריצה טובים ב ממוצע ,כאשר מתקיימת הנחת הגיבוב האחיד
)יעבוד טוב עבור mראשוני )ההסתברות ליפול בתא כלשהו במערך שווה ל.(1/m -
שרחוק ככל הניתן מחזקה של .(2 ) – Delete(T,kמחיקת האיבר xמהרשימה שבתא
]) .T[h(x.keyזהה לזמני חיפוש. חישוב זמני הריצה נעזר ב"מקדם העומס" .מקדם העומס זהו ממוצע באיברים לכל
שיטת הכפל –
. תא ,כלומרn :
) h(k ])floor[m (kA mod1 m
:Chainingמכניס לתא iבמערך את כל המפתחות שקיבלו את הערך iבפונקציה
כאשר Aבין 0ל) .1-שיטה זו ושומר אותם כרשימה מקושרת.
איטית יותר אך ערך mכאן אינו :Open addressingהרעיון הוא שאם התא אליו איבר מסוים נשלח ע"י hתפוס
קריטי ואף יעיל כאשר .(m=2^p כבר ,האיבר יוכוון לתא אחר .במילים אחרות הפונקציה תקבל גם את המפתח וגם
בחירת פונקציית הצעד :צריך את מספר הבדיקה ותיתן כל פעם אינדקס אחר במערך ,באחת משלושת דרכים Hash-
)– Search(T,k אלו:
שלא תהיה בעלת מחלק משותף tables
עם .mבפרט ,אם mזוגי עליה 1 – linear probingהתקדמות ליניארית לתא הבא במערך עד שמגיעים לתא .1
להיות אי-זוגית. O חיפוש לא מוצלח ייקח בממוצע ריק .שיטה פשוטה אך יוצרת גושים .פרמוטציות אפשריות להצעות
1 למיקומים.O(m) :
---- וחיפוש מוצלח ייקח בממוצע – quadratic probingהתקדמות בקפיצה קבועה ,למשל: .2
יתרונו הגדול של מבנה זה הוא אך 1 1 Open addressing 2
ורק במקרה הממוצע ,תחת הנחת .O 1 ln . h(k , i) (h '(k ) c1i c2i ) mod mכאשר iמייצג את מספר
הגיבוב האחיד) .בשרשור למשל, 1 מערך באורך m הקפיצות שביצענו )כלומר מספר הפעמים שהגענו לתא שהיה כבר מלא( ו-
במקרה הגרוע ביותר החיפוש c1,c2קבועים .פועל מעט טוב יותר מהקודם .אותו סדר גודל של פרמוטציות
יעלה לנו .(O(n אפשריות.
---- – double hashingמשלבים בין שתי פונקציות :hash .3
1
O ) – Insert(T,kזמן ריצה בממוצע: . h(k , i) (h1 (k ) i h2 (k )) mod mאת הפונקציה השנייה נכנה
וריאציה לצורך הקטנת 1
ההסתברות ליפול באותו התא: "פונקציית הצעד" .כך ,שני מפתחות שקיבלו אותו ערך ,יוכלו לקבל צעדים
עבודה עם מס' טבלאות זהות שונים במידה ומיקום זה במערך כבר תפוס .פרמוטציות ,O(m^2) :כלומר
בגודלן במקביל ,לכל טבלה הסיכוי להיווצרות גושים קטן.
פונקציה משלה .איבר קיים אך
ורק אם הוא נמצא בכל אחת זוהי שיטה עדיפה כאשר אין צורך במחיקה .זמן הריצה של מחיקה בשיטה זו לא
מהטבלאות. יהיה תלוי במקדם העומס .αאם נרצה להוסיף אפשרות מחיקה נוסיף "דגל" בשם
" "deletedשיסמן לנו מאיפה מחקנו בעבר איבר .בנוסף המקום בזיכרון מנוצל
באופן "חסכוני" יותר.
8
הערות חשובות תיאור פעולות עיקריות /מבנה אלגוריתם ומשתניו ייצוג גרפי +הערות הסבר כללי שם מבנה
באמצעות קוד הופמן ניתן לחסוך 20- - = Cסדרה של nתווים. עץ בינארי .כל קודקוד קוד הופמן הוא שיטה לדחיסת נתונים
90%מקום בזיכרון. מכיל את סך ע"י הצגת סימנים נפוצים באמצעות
טענה :כאשר הקוד הוא אופטימלי, - ) = f(cהשכיחות של התו .c השכיחויות של העלים מספר סיביות קטן לעומת סימנים
העץ יהיה עץ מלא .כלומר ,לכל צומת תחתיו )ומייצג 0או .(1 נדירים במספר סיביות גדול יותר.
שאינו עלה יהיו בדיוק שני בנים. ) = d(cעומק העלה cבעץ = .אורך קידוד התו. כל עלה מייצג תו
לדוגמה ,נניח כי בקוד כלשהו לשורש ומכיל את שכיחות תו הקוד הוא "קוד תחיליות"prefix- -
האלגוריתם של הופמן בונה "עץ" המייצג את הקידוד: זה בטקסט/קלט Huffman
של העץ יש רק בן אחד ,שאליו ,codeכלומר כל מחרוזת ביטים
מובילה הקשת .0פירוש הדבר הוא הנתון. code
מתחילים מתחתית העץ ,כל עלה הוא תו .מכניסים לערימת מינימום את כל סדרת שמייצגת אות ,איננה יכולה להיות
שבקוד לא יהיו כלל אותיות שקידודן התווים ושכיחויותיהם .מושכים מהערימה את שתי השכיחויות המינימליות. ה"דרך" לתו מסוים תחילית של מחרוזת ביטים אחרת.
מתחיל ב ,1-וזהו כמובן בזבוז של יוצרים קודקוד חדש שהוא סכום שני הקודקודים שהוצאנו ומכניסים אותו הוא הקידוד שלו.
מקום )כי אפשר היה ,לכל הפחות, לערימה .מבצעים את הלולאה עד שנשאר איבר אחד בערימה – הוא שורש העץ. משמעות :פענוח הקוד הוא חד-ערכי.
לתת לאות כלשהי את הקידוד " ,"1 ניתן לממש בעזרת
ובכך לחסוך במקום (. זמן ריצת האלגוריתםO(nlogn) : מערך.
] – Leaf[xשיטה החזירה ערך בוליאני .אמת – אם הצומת הוא עלה ,שקר – אחרת.
) – Search(x,kהחיפוש יתחיל מקודקוד ) ,xאו מהשורש( ויסרוק את המפתחות זהו מבנה המבוסס על עץ ונועד לצמצם
עץ. את מספר הפניות לדיסק החיצוני כאשר
שבקודקוד עד מציאת kאו עד הגעה לערך הגדול מ .k -לפי הסריקה – או בסיס הנתונים גדול מדי) .כלומר לקרוא
שמחזירים את המיקום הרלוונטי ,או שקוראים לשיטה רקורסיבית על הקודקוד ] – n[xמס' המפתחות כמה שיותר מהדיסק בבת אחת במקום
אליו יש הצבעה לפני המפתח שגדול מ ,kאו שמחזירים nullאם kלא נמצא .זמן שבכל צומת של העץ. לגשת אל הדיסק כמה פעמים(.
-משפט :גובה העץ ,h ,חסום ע"י המפתחות עצמם
ריצה .O(t*h) = O(tlogn) :מס' גישות לדיסק.O(h) = O(logn) :
n 1 ממוינים מקטן לגדול הדבר נעשה ע"י דחיסת כמה שיותר
. hכאשר nמספר logt ומצביעים מוחזקים מפתחות ומצביעים בקודקוד יחיד.
2 – Createיוצר עץ ריק ב O(1) -זמן ריצה וגישות לדיסק.
לפני ואחרי כל מפתח.
המפתחות סה"כ בעץ. לכל עץ קיים קבוע t>=2שלפיו נקבעים B-tree
) – splitChild(x,I,yפונקציית עזר שמפצלת את הקודקוד yהמלא ,שהוא בנו של .x
-שורש העץ תמיד ישמר בזיכרון הראשי בעץ בעל ] n[xמפתחות החסמים העליונים והתחתונים למספר
iהוא אינדקס הבן .זמן ריצה.O(t) :
כדי שקריאתו לא תצריך .disk-read מוחזקים )(n[x]+1 המפתחות בצומת :כל איבר מלבד
) – Insert(t,kמתחילים מהשורש ויורדים למטה .כל קודקוד שמכיל מקסימום מצביעיםc1[x], : השורש יכיל לפחות ) (t-1מפתחות ולכל
מפתחות ) (2t-1מפוצל לשניים על ידי העברת המפתח האמצעי לאביו )לשם כך יש ….c2[x], היותר ) (2t-1מפתחות.
לשמור הצבעה( .רק כאשר נגיע לקודקוד שהוא עלה ואינו מלא – נכניס את המפתח
כל העלים תמיד באותו
במקום המתאים .זמן ריצה .O(tlogn) :מס' גישות לדיסק.O(logn) : גובה.
– Deleteחלוקה למקרים לפי המצאות המפתח בעלה או בצומת פנימית ולפי מס'
המפתחות בצומת )יש רף תחתון( .פירוט – בתירגול .זמן ריצה – כמו הכנסה.
9
הערות חשובות תיאור פעולות עיקריות /מבנה אלגוריתם ומשתניו ייצוג גרפי +הערות הסבר כללי שם מבנה
ברמה העליונה וכל פעם שנתקל באיבר הגדול מ kנרד רמה אחת מטה חיפוש – נתחיל באיבר
דרך למימוש מילון דינאמי.
ונמשיך להתקדם בחיפוש.אם אין יותר לאן לרדת – החיפוש הסתיים לא מציאת המפתח .kזמן ריצה
עובדות הסתברותיות:
במקרה הגרוע ,O(n) :במקרה הממוצע.O(logn) : זהו אלגוריתם רנדומאלי.
ההסתברות שאיבר יעלה - הכנסה – תחילה מוצאים את המיקום המתאים )משתמשים בחיפוש( .מכניסים את המפתח לרמה רשימת דילוגים עבוד קבוצת מפתחות
לרמה הבאה היא .1/2 התחתונה ומגרילים האם יעלה לרמה שמעליו .אם יצא שכן – מגרילים שוב לרמה הבאה שמעליה ,כך רשימות מקושרות זרים היא סדרה של רשימות מקושרות
ההסתברות שאיבר מסוים - עד הרמה העליונה** .יש לקבוע מדיניות לגבי הגעה לרמה העליונה בעת הכנסה .גישה :1נגביל את זו מעל זו .מימוש המקיימת (1) :כל רשימה מתחילה ב-
i
יכנס לרמה iהיא .1/2 מספר הרמות למספר מסוים )אולי כתלות ב .(nגישה :2לא נעצור את התהליך ונסתמך על כך בעזרת קודקודים ומסתיימת ב (2) . -הרשימה Skip-list
שההסתברות לכך תהיה נמוכה .זמן ריצה במקרה הגרוע ,O(n) :במקרה הממוצע.O(logn) : עם 4מצביעים הראשונה S0מכילה את כל המפתחות.
ההסתברות שרשימה i -
תהיה בעלת איבר אחד )אחד לכל כיוון(. ) (3כל רשימה היא תת רשימה של
מחיקה – נמצא את האיבר ונמחק אותו ואת המגדל מעליו .זמן ריצה – כמו של חיפוש/הכנסה.
i
לפחות.n/2 : הקודמת לה (4) .הרשימה האחרונה
פעולות ב :O(1)-מציאת מינימום ,מציאת מקסימום ,עוקב ומקדים. בסדרה תכיל רק את שני המפתחות
(5) . ,לכל איבר יש המיוחדים
סיבוכיות מקום :תלויה בתהליך הרנדומאלי של ההכנסות .לפי חישובי הסתברות ,סיבוכיות המקום סיכוי של 50%להופיע ברשימה מעליו.
הממוצעת היא ).O(n
10
פעולות Insert(S,x) :מקבל מערך Sומכניס אליו את האיבר עם מפתח ) O(logn) .xאו:
(enqueue ADT
) – Maximum(Sמחזיר את האיבר בעל המפתח הגדול ביותר במערךO(1) . תור בו לכל איבר יש עדיפות מסוימת תור
וניתן להכניס איבר חדש עם עדיפות עדיפות –
) – extractMax(Sמוציא ומחזיר את האיבר המקסימלי) O(logn) .או.(dequeue : ספציפית ,כלומר הסדר לא מבוסס רק
על סדר הכניסה. Priority
) – increaseKey(S,x,kמגדיל את ערך המפתח xלO(logn) .k-
queue
)באופן מקביל פועל תור מינימום(.
11
.4אלגוריתמים נוספים:
12
.5טבלת זמני ריצה מקוצרת:
זמן ריצה :הוצאת זמן ריצה :חיפוש זמן ריצה :מציאת זמן ריצה :חיפוש איבר
סיבוכיות מקום זמן ריצה :מחיקה מינימלי /מקסימלי successor/
מינימלי /מקסימלי ספציפי זמן ריצה :הכנסה מבנה הנתונים
predecessor
)O(h )O(h )O(h )O(h )O(h )O(h
במקרה הגרוע: במקרה הגרוע: במקרה הגרוע: במקרה הגרוע: במקרה הגרוע: במקרה הגרוע:
)O(n )O(h) O(n )O(h) O(n )O(h) O(n )O(h) O(n )O(h) O(n )O(h) O(n עץ חיפוש בינארי
במקרה הממוצע: במקרה הממוצע: במקרה הממוצע: במקרה הממוצע: במקרה הממוצע: במקרה הממוצע:
)O(h) O(log n )O(h) O(log n )O(h) O(log n )O(h) O(log n )O(h) O(log n )O(h) O(log n
)O(n )O(log n )O(log n )O(log n )O(log n )O(log n )O(log n AVL
- )O(t log n - - - )O(t log n )O(t log n B-tree
חיפוש כושל ,בממוצע:
1 במקרה הממוצע )תחת
O Hash-table
- - - - - 1 הנחת גיבוב אחיד(:
חיפוש מוצלח ,בממוצע: 1 Open-addressing
1 1
O
O 1 ln 1
1
מקרה ממוצע: מקרה ממוצע: Hash-table
-
) O(1 - - -
) O(1 )O(1
chaining
מקרה ממוצע: )O(n )O(n )O(n
)O(n מקרה ממוצע: - )O(1 )O(1 מקרה ממוצע: מקרה ממוצע: Skip-list
)O(log n )O(log n )O(log n
ערימת
)O(n )O(log n )O(log n - )O(1 )O(n )O(log n מינימום/מקסימום
)O(n - )O(log n - )O(1 - )O(log n תור עדיפות
** אלא אם מצוין אחרת ,זמן הריצה הוא .worst-case
13