Você está na página 1de 240

󰁁 󰁤 󰁩 󰁴 󰁹 󰁡 󰀠 󰁙 󰀮 󰀠 󰁂 󰁨 󰁡 󰁲 󰁧 󰁡 󰁶 󰁡

󰁎 󰁯 󰁶 󰁡 󰁴 󰁥 󰁣
O r i g i n a l  E n g l i s h  l a n g u a g e  e d i t i o n  p u b l i s h e d  b y  M a n n i n g  P u b l i c a t i o n s  C o . ,  C o p y r i g h t  ©  2 0 1 5  b y

M a n n i n g  P u b l i c a t i o n s .  P o r t u g u e s e - l a n g u a g e  e d i t i o n  f o r  B r a z i l  c o p y r i g h t  ©  2 0 1 7  b y  N o v a t e c

E d i t o r a .  A l l  r i g h t s  r e s e r v e d .
E d i ç ã o  o r i g i n a l  e m  I n g l ê s  p u b l i c a d a  p e l a  M a n n i n g  P u b l i c a t i o n s  C o . ,  C o p y r i g h t  ©  2 0 1 5  p e l a

M a n n i n g  P u b l i c a t i o n s .  E d i ç ã o  e m  P o r t u g u ê s  p a r a  o  B r a s i l  c o p y r i g h t  ©  2 0 1 7  p e l a  N o v a t e c  E d i t o r a .

T o d o s  o s  d i r e i t o s  r e s e r v a d o s .

©  N o v a t e c  E d i t o r a  L t d a .  2 0 1 7 .

T o d o s  o s  d i r e i t o s  r e s e r v a d o s  e  p r o t e g i d o s  p e l a  L e i  9 . 6 1 0  d e  1 9 / 0 2 / 1 9 9 8 .  É  p r o i b i d a  a  r e p r o d u ç ã o

d e s t a  o b r a ,  m e s m o  p a r c i a l ,  p o r  q u a l q u e r  p r o c e s s o ,  s e m  p r é v i a  a u t o r i z a ç ã o ,  p o r  e s c r i t o ,  d o  a u t o r  e

d a  E d i t o r a .

E d i t o r :  R u b e n s  P r a t e s

T r a d u ç ã o :  B r o d T e c

R e v i s ã o  t é c n i c a :  N i l o  M e n e z e s

R e v i s ã o  g r a m a t i c a l :  M a r t a  A l m e i d a  d e  S á

A s s i s t e n t e  e d i t o r i a l :  P r i s c i l a  A .  Y o s h i m a t s u

E d i t o r a ç ã o  e l e t r ô n i c a :  C a r o l i n a  K u w a b a t a
I S B N :  9 7 8 - 8 5 - 7 5 2 2 - 6 6 2 - 9

H i s t ó r i c o  d e  e d i ç õ e s  i m p r e s s a s :

A b r i l / 2 0 1 7  P r i m e i r a  e d i ç ã o

N o v a t e c  E d i t o r a  L t d a .

R u a  L u í s  A n t ô n i o  d o s  S a n t o s  1 1 0

0 2 4 6 0 - 0 0 0  󲀓  S ã o  P a u l o ,  S P  󲀓  B r a s i l

T e l . :  + 5 5  1 1  2 9 5 9 - 6 5 2 9

E m a i l :  n o v a t e c @ n o v a t e c . c o m . b r

S i t e :  w w w . n o v a t e c . c o m . b r

T w i t t e r :  t w i t t e r . c o m / n o v a t e c e d i t o r a

F a c e b o o k :  f a c e b o o k . c o m / n o v a t e c

L i n k e d I n :  l i n k e d i n . c o m / i n / n o v a t e c
󰁐 󰁡 󰁲 󰁡  󰁯 󰁳  󰁭 󰁥 󰁵 󰁳  󰁰 󰁡 󰁩 󰁳 ,  󰁓 󰁡 󰁮 󰁧 󰁥 󰁥 󰁴 󰁡  󰁥  󰁙 󰁯 󰁧 󰁥 󰁳 󰁨
S 󰁵 󰁭 á 󰁲 󰁩 󰁯

P r e f á c i o

A g r a d e c i m e n t o s

S o b r e  e s t e  l i v r o

1  I 󰁮 󰁴 󰁲 󰁯 󰁤 󰁵 ç ã 󰁯  󰁡  󰁡 󰁬 󰁧 󰁯 󰁲 󰁩 󰁴 󰁭 󰁯 󰁳

I n t r o d u ç ã o

O  󰁱 󰁵 󰁥  󰁶 󰁯 󰁣 ê  󰁡 󰁰 󰁲 󰁥 󰁮 󰁤 󰁥 󰁲 á  󰁳 󰁯 󰁢 󰁲 󰁥  󰁤 󰁥 󰁳 󰁥 󰁭 󰁰 󰁥 󰁮 󰁨 󰁯

O  󰁱 󰁵 󰁥  󰁶 󰁯 󰁣 ê  󰁡 󰁰 󰁲 󰁥 󰁮 󰁤 󰁥 󰁲 á  󰁳 󰁯 󰁢 󰁲 󰁥  󰁡  󰁳 󰁯 󰁬 󰁵 ç ã 󰁯  󰁤 󰁥  󰁰 󰁲 󰁯 󰁢 󰁬 󰁥 󰁭 󰁡 󰁳

P e s q u i s a  b i n á r i a

U 󰁭 󰁡  󰁭 󰁡 󰁮 󰁥 󰁩 󰁲 󰁡  󰁭 󰁥 󰁬 󰁨 󰁯 󰁲  󰁤 󰁥  󰁢 󰁵 󰁳 󰁣 󰁡 󰁲

T 󰁥 󰁭 󰁰 󰁯 󰁤 󰁥 󰁥 󰁸 󰁥 󰁣 󰁵 ç ã 󰁯

N o t a ç ã o  B i g  O

T 󰁥 󰁭 󰁰 󰁯 󰁤 󰁥 󰁥 󰁸 󰁥 󰁣 󰁵 ç ã 󰁯 󰁤 󰁯 󰁳 󰁡 󰁬 󰁧 󰁯 󰁲 󰁩 󰁴 󰁭 󰁯 󰁳 󰁣 󰁲 󰁥 󰁳 󰁣 󰁥 󰁡 󰁴 󰁡 󰁸 󰁡 󰁳 󰁤 󰁩 󰁦 󰁥 󰁲 󰁥 󰁮 󰁴 󰁥 󰁳

V 󰁥 󰁮 󰁤 󰁯  󰁤 󰁩 󰁦 󰁥 󰁲 󰁥 󰁮 󰁴 󰁥 󰁳  󰁴 󰁥 󰁭 󰁰 󰁯 󰁳  󰁤 󰁥  󰁥 󰁸 󰁥 󰁣 󰁵 ç ã 󰁯  B 󰁩 󰁧  O

A  󰁮 󰁯 󰁴 󰁡 ç ã 󰁯  B 󰁩 󰁧  O  󰁥 󰁳 󰁴 󰁡 󰁢 󰁥 󰁬 󰁥 󰁣 󰁥  󰁯  󰁴 󰁥 󰁭 󰁰 󰁯  󰁤 󰁥  󰁥 󰁸 󰁥 󰁣 󰁵 ç ã 󰁯  󰁰 󰁡 󰁲 󰁡  󰁡  󰁰 󰁩 󰁯 󰁲  󰁨 󰁩 󰁰 ó 󰁴 󰁥 󰁳 󰁥

A 󰁬 󰁧 󰁵 󰁮 󰁳  󰁥 󰁸 󰁥 󰁭 󰁰 󰁬 󰁯 󰁳  󰁣 󰁯 󰁭 󰁵 󰁮 󰁳  󰁤 󰁥  󰁴 󰁥 󰁭 󰁰 󰁯  󰁤 󰁥  󰁥 󰁸 󰁥 󰁣 󰁵 ç ã 󰁯  B 󰁩 󰁧  O

O  󰁣 󰁡 󰁩 󰁸 󰁥 󰁩 󰁲 󰁯 - 󰁶 󰁩 󰁡 󰁪 󰁡 󰁮 󰁴 󰁥

R e c a p i t u l a n d o

2  O 󰁲 󰁤 󰁥 󰁮 󰁡 ç ã 󰁯  󰁰 󰁯 󰁲  󰁳 󰁥 󰁬 󰁥 ç ã 󰁯

C o m o  f u n c i o n a  a  m e m ó r i a

A r r a y s  e  l i s t a s  e n c a d e a d a s

L 󰁩 󰁳 󰁴 󰁡 󰁳  󰁥 󰁮 󰁣 󰁡 󰁤 󰁥 󰁡 󰁤 󰁡 󰁳

A 󰁲 󰁲 󰁡 󰁹 󰁳

T 󰁥 󰁲 󰁭 󰁩 󰁮 󰁯 󰁬 󰁯 󰁧 󰁩 󰁡

I 󰁮 󰁳 󰁥 󰁲 󰁩 󰁮 󰁤 󰁯  󰁡 󰁬 󰁧 󰁯  󰁮 󰁯  󰁭 󰁥 󰁩 󰁯  󰁤 󰁡  󰁬 󰁩 󰁳 󰁴 󰁡

D 󰁥 󰁬 󰁥 ç õ 󰁥 󰁳

O r d e n a ç ã o  p o r  s e l e ç ã o

R e c a p i t u l a n d o

3  R 󰁥 󰁣 󰁵 󰁲 󰁳 ã 󰁯

R e c u r s ã o
C a s o - b a s e  e  c a s o  r e c u r s i v o

A  p i l h a

A  󰁰 󰁩 󰁬 󰁨 󰁡  󰁤 󰁥  󰁣 󰁨 󰁡 󰁭 󰁡 󰁤 󰁡

A  󰁰 󰁩 󰁬 󰁨 󰁡  󰁤 󰁥  󰁣 󰁨 󰁡 󰁭 󰁡 󰁤 󰁡  󰁣 󰁯 󰁭  󰁲 󰁥 󰁣 󰁵 󰁲 󰁳 ã 󰁯

R e c a p i t u l a n d o

4  Q 󰁵 󰁩 󰁣 󰁫 󰁳 󰁯 󰁲 󰁴

D i v i d i r  p a r a  c o n q u i s t a r

Q u i c k s o r t

N o t a ç ã o  B i g  O  r e v i s a d a

M 󰁥 󰁲 󰁧 󰁥  󰁳 󰁯 󰁲 󰁴  󰁶 󰁥 󰁲 󰁳 󰁵 󰁳  󰁱 󰁵 󰁩 󰁣 󰁫 󰁳 󰁯 󰁲 󰁴

C 󰁡 󰁳 󰁯  󰁭 é 󰁤 󰁩 󰁯  󰁶 󰁥 󰁲 󰁳 󰁵 󰁳  󰁰 󰁩 󰁯 󰁲  󰁣 󰁡 󰁳 󰁯

R e c a p i t u l a n d o

5  T 󰁡 󰁢 󰁥 󰁬 󰁡 󰁳  󰁨 󰁡 󰁳 󰁨

F u n ç õ e s  h a s h

U t i l i z a ç ã o

U 󰁳 󰁡 󰁮 󰁤 󰁯  󰁴 󰁡 󰁢 󰁥 󰁬 󰁡 󰁳  󰁨 󰁡 󰁳 󰁨  󰁰 󰁡 󰁲 󰁡  󰁰 󰁥 󰁳 󰁱 󰁵 󰁩 󰁳 󰁡 󰁳

E 󰁶 󰁩 󰁴 󰁡 󰁮 󰁤 󰁯  󰁥 󰁮 󰁴 󰁲 󰁡 󰁤 󰁡 󰁳  󰁤 󰁵 󰁰 󰁬 󰁩 󰁣 󰁡 󰁤 󰁡 󰁳

U 󰁴 󰁩 󰁬 󰁩 󰁺 󰁡 󰁮 󰁤 󰁯  󰁴 󰁡 󰁢 󰁥 󰁬 󰁡 󰁳  󰁨 󰁡 󰁳 󰁨  󰁣 󰁯 󰁭 󰁯  󰁣 󰁡 󰁣 󰁨 󰁥

R 󰁥 󰁣 󰁡 󰁰 󰁩 󰁴 󰁵 󰁬 󰁡 󰁮 󰁤 󰁯

C o l i s õ e s

D e s e m p e n h o

F 󰁡 󰁴 󰁯 󰁲  󰁤 󰁥  󰁣 󰁡 󰁲 󰁧 󰁡

U 󰁭 󰁡  󰁢 󰁯 󰁡  󰁦 󰁵 󰁮 ç ã 󰁯  󰁨 󰁡 󰁳 󰁨

R e c a p i t u l a n d o

6  P 󰁥 󰁳 󰁱 󰁵 󰁩 󰁳 󰁡  󰁥 󰁭  󰁬 󰁡 󰁲 󰁧 󰁵 󰁲 󰁡

I n t r o d u ç ã o  a  g r a f o s

O  q u e  é  u m  g r a f o ?

P e s q u i s a  e m  l a r g u r a

E 󰁮 󰁣 󰁯 󰁮 󰁴 󰁲 󰁡 󰁮 󰁤 󰁯  󰁯  󰁣 󰁡 󰁭 󰁩 󰁮 󰁨 󰁯  󰁭 í 󰁮 󰁩 󰁭 󰁯

F 󰁩 󰁬 󰁡 󰁳

I m p l e m e n t a n d o  o  g r a f o
I m p l e m e n t a n d o  o  a l g o r i t m o

T 󰁥 󰁭 󰁰 󰁯 󰁤 󰁥 󰁥 󰁸 󰁥 󰁣 󰁵 ç ã 󰁯

R e c a p i t u l a n d o

7  A 󰁬 󰁧 󰁯 󰁲 󰁩 󰁴 󰁭 󰁯  󰁤 󰁥  D 󰁩 󰁪 󰁫 󰁳 󰁴 󰁲 󰁡

T r a b a l h a n d o  c o m  o  a l g o r i t m o  d e  D i j k s t r a

T e r m i n o l o g i a

A d q u i r i n d o  u m  p i a n o

A r e s t a s  c o m  p e s o s  n e g a t i v o s

I m p l e m e n t a ç ã o

R e c a p i t u l a n d o

8  A 󰁬 󰁧 󰁯 󰁲 󰁩 󰁴 󰁭 󰁯 󰁳  󰁧 󰁵 󰁬 󰁯 󰁳 󰁯 󰁳

O  p r o b l e m a  d o  c r o n o g r a m a  d a  s a l a  d e  a u l a

O  p r o b l e m a  d a  m o c h i l a

O  p r o b l e m a  d a  c o b e r t u r a  d e  c o n j u n t o s

A 󰁬 󰁧 󰁯 󰁲 󰁩 󰁴 󰁭 󰁯 󰁳  󰁤 󰁥  󰁡 󰁰 󰁲 󰁯 󰁸 󰁩 󰁭 󰁡 ç ã 󰁯

P r o b l e m a s  N P - c o m p l e t o s

C 󰁡 󰁩 󰁸 󰁥 󰁩 󰁲 󰁯 - 󰁶 󰁩 󰁡 󰁪 󰁡 󰁮 󰁴 󰁥 ,  󰁰 󰁡 󰁳 󰁳 󰁯  󰁡  󰁰 󰁡 󰁳 󰁳 󰁯

C 󰁯 󰁭 󰁯  󰁦 󰁡 ç 󰁯  󰁰 󰁡 󰁲 󰁡  󰁳 󰁡 󰁢 󰁥 󰁲  󰁳 󰁥  󰁵 󰁭  󰁰 󰁲 󰁯 󰁢 󰁬 󰁥 󰁭 󰁡  é  N P - 󰁣 󰁯 󰁭 󰁰 󰁬 󰁥 󰁴 󰁯 ?

R e c a p i t u l a n d o

9  P 󰁲 󰁯 󰁧 󰁲 󰁡 󰁭 󰁡 ç ã 󰁯  󰁤 󰁩 󰁮 â 󰁭 󰁩 󰁣 󰁡

O  p r o b l e m a  d a  m o c h i l a

A  󰁳 󰁯 󰁬 󰁵 ç ã 󰁯  󰁳 󰁩 󰁭 󰁰 󰁬 󰁥 󰁳

P 󰁲 󰁯 󰁧 󰁲 󰁡 󰁭 󰁡 ç ã 󰁯  󰁤 󰁩 󰁮 â 󰁭 󰁩 󰁣 󰁡

P e r g u n t a s  f r e q u e n t e s  s o b r e  o  p r o b l e m a  d a  m o c h i l a

O  󰁱 󰁵 󰁥  󰁡 󰁣 󰁯 󰁮 󰁴 󰁥 󰁣 󰁥  󰁳 󰁥  󰁶 󰁯 󰁣 ê  󰁡 󰁤 󰁩 󰁣 󰁩 󰁯 󰁮 󰁡 󰁲  󰁵 󰁭  󰁩 󰁴 󰁥 󰁭 ?

O  󰁱 󰁵 󰁥  󰁡 󰁣 󰁯 󰁮 󰁴 󰁥 󰁣 󰁥  󰁳 󰁥  󰁶 󰁯 󰁣 ê  󰁭 󰁯 󰁤 󰁩  󰁣 󰁡 󰁲  󰁡  󰁯 󰁲 󰁤 󰁥 󰁭  󰁤 󰁡 󰁳  󰁬 󰁩 󰁮 󰁨 󰁡 󰁳 ?

É  󰁰 󰁯 󰁳 󰁳 í 󰁶 󰁥 󰁬  󰁰 󰁲 󰁥 󰁥 󰁮 󰁣 󰁨 󰁥 󰁲  󰁡  󰁴 󰁡 󰁢 󰁥 󰁬 󰁡  󰁡  󰁰 󰁡 󰁲 󰁴 󰁩 󰁲  󰁤 󰁡 󰁳  󰁣 󰁯 󰁬 󰁵 󰁮 󰁡 󰁳 ,  󰁥 󰁭  󰁶 󰁥 󰁺  󰁤 󰁥  󰁡  󰁰 󰁡 󰁲 󰁴 󰁩 󰁲  󰁤 󰁡 󰁳

󰁬 󰁩 󰁮 󰁨 󰁡 󰁳 ?

O  󰁱 󰁵 󰁥  󰁡 󰁣 󰁯 󰁮 󰁴 󰁥 󰁣 󰁥  󰁳 󰁥  󰁶 󰁯 󰁣 ê  󰁡 󰁤 󰁩 󰁣 󰁩 󰁯 󰁮 󰁡 󰁲  󰁵 󰁭  󰁩 󰁴 󰁥 󰁭  󰁭 󰁥 󰁮 󰁯 󰁲 ?

V 󰁯 󰁣 ê  󰁣 󰁯 󰁮 󰁳 󰁥 󰁧 󰁵 󰁥  󰁲 󰁯 󰁵 󰁢 󰁡 󰁲  󰁦 󰁲 󰁡 ç õ 󰁥 󰁳  󰁤 󰁥  󰁵 󰁭  󰁩 󰁴 󰁥 󰁭 ?

O 󰁴 󰁩 󰁭 󰁩 󰁺 󰁡 󰁮 󰁤 󰁯  󰁯  󰁳 󰁥 󰁵  󰁩 󰁴 󰁩 󰁮 󰁥 󰁲 á 󰁲 󰁩 󰁯  󰁤 󰁥  󰁶 󰁩 󰁡 󰁧 󰁥 󰁭
L 󰁩 󰁤 󰁡 󰁮 󰁤 󰁯  󰁣 󰁯 󰁭  󰁩 󰁴 󰁥 󰁮 󰁳  󰁣 󰁯 󰁭  󰁩 󰁮 󰁴 󰁥 󰁲 󰁤 󰁥 󰁰 󰁥 󰁮 󰁤 ê 󰁮 󰁣 󰁩 󰁡

É  󰁰 󰁯 󰁳 󰁳 í 󰁶 󰁥 󰁬  󰁱 󰁵 󰁥  󰁡  󰁳 󰁯 󰁬 󰁵 ç ã 󰁯  󰁲 󰁥 󰁱 󰁵 󰁥 󰁩 󰁲 󰁡  󰁭 󰁡 󰁩 󰁳  󰁤 󰁥  󰁤 󰁯 󰁩 󰁳  󰁳 󰁵 󰁢 󰁰 󰁲 󰁯 󰁢 󰁬 󰁥 󰁭 󰁡 󰁳 ?

É  󰁰 󰁯 󰁳 󰁳 í 󰁶 󰁥 󰁬  󰁱 󰁵 󰁥  󰁡  󰁭 󰁥 󰁬 󰁨 󰁯 󰁲  󰁳 󰁯 󰁬 󰁵 ç ã 󰁯  󰁮 ã 󰁯  󰁵 󰁴 󰁩 󰁬 󰁩 󰁺 󰁥  󰁡  󰁣 󰁡 󰁰 󰁡 󰁣 󰁩 󰁤 󰁡 󰁤 󰁥  󰁴 󰁯 󰁴 󰁡 󰁬  󰁤 󰁡  󰁭 󰁯 󰁣 󰁨 󰁩 󰁬 󰁡 ?

M a i o r  s u b s t r i n g  c o m u m

C 󰁲 󰁩 󰁡 󰁮 󰁤 󰁯  󰁡  󰁴 󰁡 󰁢 󰁥 󰁬 󰁡

P 󰁲 󰁥 󰁥 󰁮 󰁣 󰁨 󰁥 󰁮 󰁤 󰁯  󰁡  󰁴 󰁡 󰁢 󰁥 󰁬 󰁡

A  󰁳 󰁯 󰁬 󰁵 ç ã 󰁯

M 󰁡 󰁩 󰁯 󰁲  󰁳 󰁵 󰁢 󰁳 󰁥 󰁱 󰁵 ê 󰁮 󰁣 󰁩 󰁡  󰁣 󰁯 󰁭 󰁵 󰁭

M 󰁡 󰁩 󰁯 󰁲  󰁳 󰁵 󰁢 󰁳 󰁥 󰁱 󰁵 ê 󰁮 󰁣 󰁩 󰁡  󰁣 󰁯 󰁭 󰁵 󰁭  󲀓  󰁳 󰁯 󰁬 󰁵 ç ã 󰁯

R e c a p i t u l a n d o

1 0  K - 󰁶 󰁩 󰁺 󰁩 󰁮 󰁨 󰁯 󰁳  󰁭 󰁡 󰁩 󰁳  󰁰 󰁲 ó 󰁸 󰁩 󰁭 󰁯 󰁳

C l a s s i  c a n d o  l a r a n j a  v e r s u s  t o r a n j a s

C r i a n d o  u m  s i s t e m a  d e  r e c o m e n d a ç õ e s

E 󰁸 󰁴 󰁲 󰁡 ç ã 󰁯  󰁤 󰁥  󰁣 󰁡 󰁲 󰁡 󰁣 󰁴 󰁥 󰁲 í 󰁳 󰁴 󰁩 󰁣 󰁡 󰁳

R 󰁥 󰁧 󰁲 󰁥 󰁳 󰁳 ã 󰁯

E 󰁳 󰁣 󰁯 󰁬 󰁨 󰁥 󰁮 󰁤 󰁯  󰁢 󰁯 󰁡 󰁳  󰁣 󰁡 󰁲 󰁡 󰁣 󰁴 󰁥 󰁲 í 󰁳 󰁴 󰁩 󰁣 󰁡 󰁳

I n t r o d u ç ã o  a o  a p r e n d i z a d o  d e  m á q u i n a

O C R

C 󰁲 󰁩 󰁡 󰁮 󰁤 󰁯  󰁵 󰁭   󰁬 󰁴 󰁲 󰁯  󰁤 󰁥  󰁳 󰁰 󰁡 󰁭

P 󰁲 󰁥 󰁶 󰁥 󰁮 󰁤 󰁯  󰁡  󰁢 󰁯 󰁬 󰁳 󰁡  󰁤 󰁥  󰁶 󰁡 󰁬 󰁯 󰁲 󰁥 󰁳

R e c a p i t u l a n d o

1 1  P 󰁲 ó 󰁸 󰁩 󰁭 󰁯 󰁳  󰁰 󰁡 󰁳 󰁳 󰁯 󰁳

Á r v o r e s

Í n d i c e s  i n v e r t i d o s

A  t r a n s f o r m a d a  d e  F o u r i e r

A l g o r i t m o s  p a r a l e l o s

M a p R e d u c e

P 󰁯 󰁲  󰁱 󰁵 󰁥  󰁯 󰁳  󰁡 󰁬 󰁧 󰁯 󰁲 󰁩 󰁴 󰁭 󰁯 󰁳  󰁤 󰁩 󰁳 󰁴 󰁲 󰁩 󰁢 󰁵 í 󰁤 󰁯 󰁳  󰁳 ã 󰁯  ú 󰁴 󰁥 󰁩 󰁳 ?

F 󰁵 󰁮 ç ã 󰁯  󰁭 󰁡 󰁰

F 󰁵 󰁮 ç ã 󰁯  󰁲 󰁥 󰁤 󰁵 󰁣 󰁥

F i l t r o  d e  B l o o m  e  H y p e r L o g L o g

F 󰁩 󰁬 󰁴 󰁲 󰁯 󰁳  󰁤 󰁥  B 󰁬 󰁯 󰁯 󰁭
H 󰁹 󰁰 󰁥 󰁲 L 󰁯 󰁧 L 󰁯 󰁧

A l g o r i t m o s  S H A

C 󰁯 󰁭 󰁰 󰁡 󰁲 󰁡 󰁮 󰁤 󰁯  󰁡 󰁲 󰁱 󰁵 󰁩 󰁶 󰁯 󰁳

V 󰁥 󰁲 󰁩  󰁣 󰁡 󰁮 󰁤 󰁯  󰁳 󰁥 󰁮 󰁨 󰁡 󰁳

H a s h  s e n s i t i v o  l o c a l

T r o c a  d e  c h a v e s  d e  D i  e - H e l l m a n

P r o g r a m a ç ã o  l i n e a r

E p í l o g o

R e s p o s t a s  d o s  e x e r c í c i o s
P 󰁲 󰁥 󰁦 á 󰁣 󰁩 󰁯

C o m e c e i  a  p r o g r a m a r  c o m o  u m  h o b b y .  O  l i v r o  󰁖 󰁩 󰁳 󰁵 󰁡 󰁬  󰁂 󰁡 󰁳 󰁩 󰁣  6  󰁦 󰁯 󰁲  󰁄 󰁵 󰁭 󰁭 󰁩 󰁥 󰁳

m e  e n s i n o u  o  b á s i c o ,  e  c o n t i n u e i  a  l e r  o u t r o s  l i v r o s  p a r a  a p r e n d e r  m a i s .

P o r é m  o  t e m a  a l g o r i t m o s  e r a  i n c o m p r e e n s í v e l  p a r a  m i m .  E u  m e  l e m b r o  d e

l e r  o s  s u m á r i o s  d o s  m e u s  p r i m e i r o s  l i v r o s  d e  a l g o r i t m o s  e  p e n s a r

“  n a l m e n t e  v o u  e n t e n d e r  e s t e  a s s u n t o ! 󲀝 .  N o  e n t a n t o ,  e r a  u m  c o n t e ú d o  m u i t o

d e n s o ,  e  d e s i s t i  d e p o i s  d e  a l g u m a s  s e m a n a s .  F o i  q u a n d o  t i v e  o  m e u  p r i m e i r o

p r o f e s s o r  b o m  d e  a l g o r i t m o s  q u e  e u  p e r c e b i  o  q u ã o  s i m p l e s  e  e l e g a n t e s  e l e s

e r a m .

A l g u n s  a n o s  a t r á s ,  e s c r e v i  a  m i n h a  p r i m e i r a  p o s t a g e m  i l u s t r a d a  e m  u m  b l o g .

E u  a p r e n d o  m e l h o r  c o m  i m a g e n s ,  e  g o s t e i  m u i t o  d o  e s t i l o  i l u s t r a d o .  D e s d e

e n t ã o ,  t e n h o  f e i t o  a l g u m a s  p o s t a g e n s  i l u s t r a d a s  s o b r e  p r o g r a m a ç ã o

f u n c i o n a l ,  G i t ,  a p r e n d i z a d o  d e  m á q u i n a  e  c o n c o r r ê n c i a .  A  p r o p ó s i t o ,  e u  e r a

u m  e s c r i t o r  m e d í o c r e  q u a n d o  c o m e c e i .  E x p l i c a r  c o n c e i t o s  t é c n i c o s  é  d i f í c i l .
C r i a r  b o n s  e x e m p l o s  e  d e s c r e v e r  c o n c e i t o s  c o m p l i c a d o s  s ã o  a t i v i d a d e s  q u e

l e v a m  t e m p o .  S e n d o  a s s i m ,  é  m a i s  f á c i l  p a s s a r  p o r  c i m a  d a  p a r t e

c o m p l i c a d a .  A c h a v a  q u e  e s t a v a  f a z e n d o  u m  t r a b a l h o  m u i t o  b o m  a t é  q u e  u m

d i a ,  d e p o i s  d e  u m a  d e  m i n h a s  p o s t a g e n s  t e r   c a d o  f a m o s a ,  u m  c o l e g a  d e

t r a b a l h o  m e  d i s s e  “ E u  l i  o  s e u  t e x t o  e  a i n d a  n ã o  e n t e n d i  i s s o 󲀝 .  F o i  q u a n d o

p e r c e b i  q u e  e u  a i n d a  t i n h a  m u i t o  a  a p r e n d e r  p a r a  m e  a p r i m o r a r .

E m  a l g u m  m o m e n t o  e n q u a n t o  e s c r e v i a  e s s a s  p o s t a g e n s  p a r a  o  b l o g ,  a

M a n n i n g  e n t r o u  e m  c o n t a t o  c o m i g o  e  p e r g u n t o u  s e  e u  q u e r i a  p r o d u z i r  u m

l i v r o  i l u s t r a d o .  B e m ,  a c o n t e c e  q u e  o s  e d i t o r e s  d a  M a n n i n g  s a b e m  m u i t o  b e m

c o m o  e x p l i c a r  c o n c e i t o s  t é c n i c o s ,  e  e l e s  m e  e n s i n a r a m  c o m o  e n s i n a r .  E s c r e v i

e s t e  l i v r o  p a r a  s a n a r  u m  p r o b l e m a  p e s s o a l :  q u e r i a  u m  l i v r o  q u e  e x p l i c a s s e

b e m  o s  c o n c e i t o s  t é c n i c o s  d i f í c e i s ,  a l é m  d e  a p r e s e n t a r  a l g o r i t m o s  f á c e i s  d e

s e r  c o m p r e e n d i d o s .  M e l h o r e i  m u i t o  a  m i n h a  e s c r i t a  d e s d e  a q u e l a  p r i m e i r a

p o s t a g e m ,  e  e s p e r o  q u e  v o c ê  a c h e  e s t e  l i v r o  d e  l e i t u r a  f á c i l  e  i n f o r m a t i v a .
󰁁 󰁧 󰁲 󰁡 󰁤 󰁥 󰁣 󰁩 󰁭 󰁥 󰁮 󰁴 󰁯 󰁳

A g r a d e ç o  à  M a n n i n g  p o r  t e r  m e  d a d o  a  o p o r t u n i d a d e  d e  e s c r e v e r  e s t e  l i v r o

e  p o r  m e  p r o p o r c i o n a r  m u i t a  l i b e r d a d e  c r i a t i v a .  A g r a d e ç o  a o s  m e u s  e d i t o r e s

M a r j a n  B a c e  e  M i k e  S t e p h e n s  p o r  m e  m a n t e r e m  n a  l i n h a ,  a o  B e r t  B a t e s  p o r

m e  e n s i n a r  a  e s c r e v e r  e  à  J e n n i f e r  S o u t  p o r  s e r  u m a  e d i t o r a  i n c r í v e l ,

r e s p o n s á v e l  e  p r e s t a t i v a .  A g r a d e ç o  t a m b é m  a  t o d o  o  t i m e  d e  p r o d u ç ã o  d a

M a n n i n g :  K e v i n  S u l l i v a n ,  M a r y  P i e r g i e s ,  T i  a n y  T a y l o r ,  L e s l i e  H a i m e s  e  a o s

o u t r o s  n o s  b a s t i d o r e s .  A l é m  d i s s o ,  q u e r o  d i z e r  o b r i g a d o  a  t o d o s  o s  q u e

l e r a m  o  m a n u s c r i t o  e  d e r a m  s u g e s t õ e s :  K a r e n  B e n s d o n ,  R o b  G r e e n ,  M i c h a e l

H a m r a h ,  O z r e n  H a r l o v i c ,  C o l i n  H a s t i e ,  C h r i s t o p h e r  H a u p t ,  C h u c k

H e n d e r s o n ,  P a w e l  K o z l o w s k i ,  A m i t  L a m b a ,  J e a n - F r a n ç o i s  M o r i n ,  R o b e r t

M o r r i s o n ,  S a n k a r  R a m a n a t h a n ,  S a n d e r  R o s s e l ,  D o u g  S p a r l i n g  e  D a m i e n

W h i t e .

O b r i g a d o  a  t o d o s  q u e  m e  a j u d a r a m  a  c h e g a r  a t é  a q u i :  a o s  m e u s  a m i g o s  d a

F l a s k h i t  g a m e  b o a r d ,  p o r  m e  e n s i n a r e m  a  p r o g r a m a r ,  a o s  v á r i o s  a m i g o s  q u e

m e  a j u d a r a m  a  r e v i s a r  o s  c a p í t u l o s ,  m e  d a n d o  c o n s e l h o s  e  m e  p e r m i t i n d o

t e s t a r  d i f e r e n t e s  f o r m a s  d e  e x p l i c a r  u m  a s s u n t o ,  i n c l u i n d o  B e n  V i n e g a r ,  K a r l

P u z o n ,  A l e x  M a n n i n g ,  E s t h e r  C h a n ,  A n i s h  B h a t t ,  M i c h a e l  G l a s s ,  N i k r a d

M a h d i ,  C h a r l e s  L e e ,  J a r e d  F r i e d m a n ,  H e m a  M a n i c k a v a s a g a m ,  H a r i  R a j a ,

M u r a l i  G u d i p a t i ,  S r i n i v a s  V a r a d a n  e  o u t r o s .  O b r i g a d o ,  G e r r y  B r a d y ,  p o r  m e

e n s i n a r  a l g o r i t m o s .  O u t r o  g r a n d e  o b r i g a d o  p a r a  a s  e s c o l a s  d e  a l g o r i t m o s

c o m o  a  C L R S ,  a  K n u t h  e  a  S t r a n g .  E u  e s t o u  r e a l m e n t e  e m  p é  s o b r e  o s

o m b r o s  d o s  g i g a n t e s .

P a i ,  m ã e ,  P r i y a n k a  e  o  r e s t o  d a  f a m í l i a :  o b r i g a d o  p e l o  a p o i o  c o n s t a n t e .  E

m u i t o  o b r i g a d o  à  m i n h a  e s p o s a  M a g g i e .  H á  m u i t a s  a v e n t u r a s  p e l a  f r e n t e ,  e

a l g u m a s  d e l a s  n ã o  e n v o l v e m   c a r  e m  c a s a  e m  u m a  s e x t a - f e i r a  à  n o i t e

r e e s c r e v e n d o  p a r á g r a f o s .

F i n a l m e n t e ,  u m  g r a n d e  o b r i g a d o  a  t o d o s  o s  l e i t o r e s  q u e  d e r a m  u m a  c h a n c e

a  e s t e  l i v r o  e  a o s  l e i t o r e s  q u e  m e  d e r a m  u m  f e e d b a c k  n o  f ó r u m .  V o c ê s

r e a l m e n t e  m e  a j u d a r a m  a  t o r n a r  e s t e  l i v r o  m e l h o r .
S 󰁯 󰁢 󰁲 󰁥  󰁥 󰁳 󰁴 󰁥  󰁬 󰁩 󰁶 󰁲 󰁯

E s t e  l i v r o  f o i  c r i a d o  p a r a  s e r  d e  f á c i l  l e i t u r a .  E u  e v i t o  g r a n d e s   u x o s  d e

p e n s a m e n t o .  T o d a  v e z  q u e  u m  c o n c e i t o  é  i n t r o d u z i d o ,  e u  o  e x p l i c o  d e  f o r m a

d i r e t a  o u  a v i s o  q u a n d o  v o u  e x p l i c á - l o .  O s  c o n c e i t o s  m a i s  i m p o r t a n t e s  s ã o

r e f o r ç a d o s  p o r  m e i o  d e  e x e r c í c i o s  e  d i v e r s a s  e x p l a n a ç õ e s  p a r a  q u e  v o c ê

p o s s a  c h e c a r  s u a s  i d e i a s  e  t e r  c e r t e z a  d e  q u e  e s t á  n o  c a m i n h o  c e r t o .

E u  e n s i n o  c o m  e x e m p l o s .  E m  v e z  d e  e s c r e v e r  u m  m o n t e  d e  s í m b o l o s ,  m e u

o b j e t i v o  é  f a z e r  c o m  q u e  v o c ê  v i s u a l i z e  o s  c o n c e i t o s .  T a m b é m  a c r e d i t o  q u e

a p r e n d e m o s  m e l h o r  q u a n d o  c o n s e g u i m o s  f a z e r  u m a  r e l a ç ã o  c o m  a l g o  q u e  j á

c o n h e c e m o s ,  e  c o m  o s  e x e m p l o s   c a  m a i s  f á c i l  f a z e r  e s s a  r e l a ç ã o .  L o g o ,

q u a n d o  e s t i v e r  t e n t a n d o  l e m b r a r - s e  d a  d i f e r e n ç a  e n t r e  a r r a y s  e  l i s t a s

e n c a d e a d a s  ( e x p l i c a d o  n o  C a p í t u l o  2 ) ,  v o c ê  p o d e r á  f a z e r  i s s o  s e n t a d o ,  v e n d o

u m   l m e .  A l é m  d o  m a i s ,  c o r r o  o  r i s c o  d e  c a i r  n o  ó b v i o ,  m a s  g o s t o  d e

a p r e n d e r  c o m  i m a g e n s .  E s t e  l i v r o  é  c h e i o  d e l a s .

O  c o n t e ú d o  d e s t e  l i v r o  f o i  c u i d a d o s a m e n t e  e s c o l h i d o .  N ã o  h á  n e c e s s i d a d e

d e  e s c r e v e r  u m  l i v r o  q u e  a b o r d a  t o d o s  o s  t i p o s  d e  a l g o r i t m o s  –  p a r a  i s s o

t e m o s  a  W i k i p é d i a  e  a  K h a n  A c a d e m y .  T o d o s  o s  a l g o r i t m o s  q u e  i n c l u í  n e s t e

l i v r o  s ã o  e x e q u í v e i s .  E u  o s  a c h o  ú t e i s  n o  m e u  t r a b a l h o  c o m o  u m  e n g e n h e i r o

d e  s o  w a r e  e  e l e s  f o r n e c e m  u m a  b o a  b a s e  p a r a  t ó p i c o s  m a i s  c o m p l e x o s .  B o a

l e i t u r a !

R 󰁯 󰁴 󰁥 󰁩 󰁲 󰁯

O s  p r i m e i r o s  t r ê s  c a p í t u l o s  d e s t e  l i v r o  c o n s t i t u e m - s e  n o  s e g u i n t e :

󲀢 C 󰁡 󰁰 í 󰁴 󰁵 󰁬 󰁯  1
 –  V o c ê  a p r e n d e r á  s e u  p r i m e i r o  a l g o r i t m o  p r á t i c o :  a  p e s q u i s a

b i n á r i a .  T a m b é m  a p r e n d e r á  a  a n a l i s a r  a  v e l o c i d a d e  d e  u m  a l g o r i t m o

u t i l i z a n d o  a  n o t a ç ã o  B i g  O ,  q u e  é  u t i l i z a d a  d u r a n t e  t o d o  o  l i v r o  p a r a

a v a l i a r  o  q u ã o  r á p i d o  o u  l e n t o  u m  a l g o r i t m o  é .

󲀢 C 󰁡 󰁰 í 󰁴 󰁵 󰁬 󰁯  2  –  V o c ê  a p r e n d e r á  d u a s  e s t r u t u r a s  d e  d a d o s  f u n d a m e n t a i s :

a r r a y s  e  l i s t a s  e n c a d e a d a s .  E s s a s  e s t r u t u r a s  s ã o  u t i l i z a d a s  n o  l i v r o  e

t a m b é m  s ã o  u s a d a s  p a r a  c r i a r  e s t r u t u r a s  d e  d a d o s  m a i s  a v a n ç a d a s ,  c o m o

a s  t a b e l a s  h a s h  ( C a p í t u l o  5 ) .

󲀢 C 󰁡 󰁰 í 󰁴 󰁵 󰁬 󰁯  3  –  V o c ê  a p r e n d e r á  r e c u r s ã o ,  u m a  t é c n i c a  ú t i l  u s a d a  e m  m u i t o s

a l g o r i t m o s  ( c o m o  o  q u i c k s o r t ,  a b o r d a d o  n o  C a p í t u l o  4 ) .
D o  m e u  p o n t o  d e  v i s t a ,  a  n o t a ç ã o  B i g  O  e  a  r e c u r s ã o  s ã o  t ó p i c o s

d e s a  a d o r e s  p a r a  i n i c i a n t e s .  E n t ã o  d e c i d i  d i m i n u i r  o  r i t m o  e  d e d i c a r  u m

t e m p o  e x t r a  a  e s t a s  s e ç õ e s .

O  r e s t a n t e  d o  l i v r o  a p r e s e n t a  a l g o r i t m o s  d e  a p l i c a ç ã o  m a i s  a m p l a :

󲀢 T é 󰁣 󰁮 󰁩 󰁣 󰁡 󰁳  󰁰 󰁡 󰁲 󰁡  󰁲 󰁥 󰁳 󰁯 󰁬 󰁵 ç ã 󰁯  󰁤 󰁥  󰁰 󰁲 󰁯 󰁢 󰁬 󰁥 󰁭 󰁡 󰁳  –  A b o r d a d a s  n o s  C a p í t u l o s  4 ,  8  e  9 .

S e  d e p a r a r  c o m  u m  p r o b l e m a  e  n ã o  t i v e r  c e r t e z a  s o b r e  c o m o  r e s o l v ê - l o  d e

m a n e i r a  e  c i e n t e ,  t e n t e  a  d i v i s ã o  e  a  c o n q u i s t a  ( C a p í t u l o  4 )  o u  a

p r o g r a m a ç ã o  d i n â m i c a  ( C a p í t u l o  9 ) .  O u  v o c ê  p o d e  p e r c e b e r  q u e  n ã o

e x i s t e  u m a  s o l u ç ã o  e  c i e n t e  e  o b t e r  u m a  r e s p o s t a  a p r o x i m a d a  u t i l i z a n d o  o

a l g o r i t m o  g u l o s o  n o  l u g a r  ( C a p í t u l o  8 ) .

󲀢 T 󰁡 󰁢 󰁥 󰁬 󰁡 󰁳  󰁨 󰁡 󰁳 󰁨  –  A b o r d a d a s  n o  C a p í t u l o  5 .  U m a  t a b e l a  h a s h  é  u m a  e s t r u t u r a

d e  d a d o s  m u i t o  ú t i l .  E l a  c o n t é m  c o n j u n t o s  d e  c h a v e s  e  v a l o r e s  a s s o c i a d o s ,

c o m o  o  n o m e  e  o  e n d e r e ç o  d e  e m a i l  d e  u m a  p e s s o a ,  o u  u m  u s u á r i o

a s s o c i a d o  a  u m a  s e n h a .  É  d i f í c i l  d e s c r e v e r  a  u t i l i d a d e  d a s  t a b e l a s  h a s h .

Q u a n d o  q u e r o  r e s o l v e r  u m  p r o b l e m a ,  c o m e ç o  c o m  d o i s  p l a n o s  d e  a t a q u e :

“ P o s s o  u s a r  t a b e l a  h a s h ? 󲀝  e  “ P o s s o  m o d e l a r  i s s o  c o m o  u m  g r a f o ? 󲀝 .

󲀢 A 󰁬 󰁧 󰁯 󰁲 󰁩 󰁴 󰁭 󰁯 󰁳  󰁤 󰁥  󰁧 󰁲 󰁡 󰁦 󰁯 󰁳
 –  A b o r d a d o s  n o s  C a p í t u l o s  6  e  7 .  G r a f o s  s ã o  u m a

m a n e i r a  d e  m o d e l a r  u m a  r e d e :  u m a  r e d e  s o c i a l ,  u m a  r e d e  d e  e s t r a d a s ,

u m a  r e d e  d e  n e u r ô n i o s  o u  q u a l q u e r  o u t r o  c o n j u n t o  d e  c o n e x õ e s .  A

p e s q u i s a  e m  l a r g u r a  ( C a p í t u l o  6 )  e  o  a l g o r i t m o  d e  D i j k s t r a  ( C a p í t u l o  7 )

s ã o  m a n e i r a s  d e  d i m i n u i r  a  d i s t â n c i a  e n t r e  d o i s  p o n t o s  e m  u m a  r e d e .  V o c ê

p o d e  u s a r  e s s a  a b o r d a g e m  p a r a  c a l c u l a r  o s  g r a u s  d e  s e p a r a ç ã o  e n t r e  d u a s

p e s s o a s  o u  o  c a m i n h o  m a i s  c u r t o  d e  u m  p o n t o  a  o u t r o  e m  u m a  r o t a .

󲀢 K - 󰁶 󰁩 󰁺 󰁩 󰁮 󰁨 󰁯 󰁳  󰁭 󰁡 󰁩 󰁳  󰁰 󰁲 ó 󰁸 󰁩 󰁭 󰁯 󰁳  ( K N N ,  󰁋 - 󰁮 󰁥 󰁡 󰁲 󰁥 󰁳 󰁴  󰁮 󰁥 󰁩 󰁧 󰁨 󰁢 󰁯 󰁲 󰁳 )  –  A b o r d a d o  n o

C a p í t u l o  7 .  E s s a  é  u m a  t é c n i c a  s i m p l e s  d e  a p r e n d i z a d o  d e  m á q u i n a .  V o c ê

p o d e  u s a r  a  t é c n i c a  K N N  p a r a  c r i a r  r e c o m e n d a ç õ e s  d e  s i s t e m a ,  u m

m e c a n i s m o  O C R  o u  u m  s i s t e m a  p a r a  p r e v e r  o s  v a l o r e s  d a  b o l s a  d e  v a l o r e s

–  n a  v e r d a d e ,  t u d o  q u e  e n v o l v e  p r e v e r  u m  v a l o r ,  p o r  e x e m p l o ,  “ n ó s

a c h a m o s  q u e  a  c r í t i c a  d a r á  4  e s t r e l a s  p a r a  e s t e   l m e 󲀝 .  V o c ê  p o d e  u t i l i z á - l a ,

a i n d a ,  p a r a  c l a s s i  c a r  u m  o b j e t o ,  p o r  e x e m p l o ,  “ e s t a  é  a  l e t r a  Q 󲀝 .

󲀢 P 󰁲 ó 󰁸 󰁩 󰁭 󰁯 󰁳  󰁰 󰁡 󰁳 󰁳 󰁯 󰁳  –  O  C a p í t u l o  1 1  d i s c o r r e  s o b r e  d e z  a l g o r i t m o s  q u e  v a l e m

a  p e n a  p a r a  u m a  l e i t u r a  p o s t e r i o r .

C 󰁯 󰁭 󰁯  󰁵 󰁳 a 󰁲  󰁥 󰁳 󰁴 󰁥  󰁬 󰁩 󰁶 󰁲 󰁯
A  o r d e m  d o s  c o n t e ú d o s  d e s t e  l i v r o  f o i  c u i d a d o s a m e n t e  p r o j e t a d a .  S e  v o c ê

t e m  i n t e r e s s e  e m  u m  t ó p i c o  e s p e c í  c o ,  s i n t a - s e  l i v r e  p a r a  p u l a r  p a r a  e l e .

C a s o  c o n t r á r i o ,  l e i a  o s  c a p í t u l o s  n a  o r d e m  –  e l e s  s e  b a s e i a m  u m  n o  o u t r o .

R e c o m e n d o  f o r t e m e n t e  q u e  v o c ê  e x e c u t e  o s  c ó d i g o s  d o s  e x e m p l o s .  N ã o

c o n s i g o  r e f o r ç a r  i s s o  o  s u  c i e n t e .  A p e n a s  r e d i g i t e  o s  c ó d i g o s  o u  b a i x e - o s  e m

󰁧 󰁩 󰁴 󰁨 󰁵 󰁢 . 󰁣 󰁯 󰁭 / 󰁥 󰁧 󰁯 󰁮 󰁳 󰁣 󰁨 󰁩 󰁥 󰁬 󰁥 / 󰁧 󰁲 󰁯 󰁫 󰁫 󰁩 󰁮 󰁧 󰁟 󰁡 󰁬 󰁧 󰁯 󰁲 󰁩 󰁴 󰁨 󰁭 󰁳  e  o s  e x e c u t e .  V o c ê  r e t e r á

m e l h o r  o  c o n t e ú d o  s e  o   z e r .

T a m b é m  r e c o m e n d o  q u e  v o c ê  f a ç a  o s  e x e r c í c i o s  d e s t e  l i v r o .  O s  e x e r c í c i o s

s ã o  c u r t o s  –  g e r a l m e n t e  l e v a m  d e  u m  a  d o i s  m i n u t o s ,  a l g u m a s  v e z e s  d e

c i n c o  a  d e z  m i n u t o s .  E l e s  o  a j u d a r ã o  a  c o n f e r i r  o  s e u  p e n s a m e n t o ,  a s s i m

v o c ê s a b e r á s e e s t á f o r a d a l i n h a d e p e n s a m e n t o a n t e s d e s e g u i r a d i a n t e .

Q 󰁵 󰁥 󰁭  󰁤 󰁥 󰁶 󰁥  󰁬 󰁥 󰁲  󰁥 󰁳 󰁴 󰁥  󰁬 󰁩 󰁶 󰁲 󰁯

E s t e  l i v r o  é  p a r a  q u a l q u e r  u m  q u e  q u e i r a  e n t e n d e r  o  b á s i c o  d e  p r o g r a m a ç ã o

e  s e  f a m i l i a r i z a r  c o m  a l g o r i t m o s .  T a l v e z  v o c ê  j á  t e n h a  u m  p r o b l e m a  d e

p r o g r a m a ç ã o  e  e s t e j a  t e n t a n d o  d e s c o b r i r  a  s o l u ç ã o  a l g o r í t m i c a .  O u  t a l v e z

q u e i r a  e n t e n d e r  p a r a  q u e  o s  a l g o r i t m o s  s ã o  ú t e i s .  A q u i  e s t á  u m a  l i s t a  c u r t a  e

i n c o m p l e t a  d e  p e s s o a s  q u e  p r o v a v e l m e n t e  a c h a r ã o  e s t e  l i v r o  ú t i l .

󲀢  p r o g r a m a d o r e s  h o b i s t a s

󲀢  e s t u d a n t e s  d e  c u r s o s  d e  p r o g r a m a ç ã o

󲀢  g r a d u a d o s  e m  c i ê n c i a s  d a  c o m p u t a ç ã o  q u e  q u e i r a m  r e f r e s c a r  a  m e m ó r i a

󲀢  f í s i c o s / m a t e m á t i c o s / o u t r o s  p r o  s s i o n a i s  q u e  t e n h a m  i n t e r e s s e  e m

p r o g r a m a ç ã o

C 󰁯 󰁮 󰁶 󰁥 󰁮 ç õ 󰁥 󰁳  󰁤 󰁥  󰁰 󰁲 󰁯 󰁧 󰁲 a 󰁭 a ç ã 󰁯  󰁥  󰁤 󰁯 󰁷 󰁮 󰁬 󰁯 a 󰁤 󰁳

T o d o s  o s  e x e m p l o s  d e s t e  l i v r o  u t i l i z a m  o  P y t h o n  2 . 7 .  T o d o s  o s  c ó d i g o s  d e s t e

l i v r o  s ã o  a p r e s e n t a d o s  em uma fonte monoespaçada como esta p a r a  s e

d i f e r e n c i a r  d o  t e x t o  c o m u m .  A l g u m a s  a n o t a ç õ e s  a c o m p a n h a m  o s  c ó d i g o s ,

d e s t a c a n d o  c o n c e i t o s  i m p o r t a n t e s .

V o c ê  p o d e  b a i x a r  o s  c ó d i g o s  d o s  e x e m p l o s  d e s t e  l i v r o  n o  s i t e  d a  e d i t o r a

e m 󰁭 󰁡 󰁮 󰁮 󰁩 󰁮 󰁧 . 󰁣 󰁯 󰁭 / 󰁢 󰁯 󰁯 󰁫 󰁳 / 󰁧 󰁲 󰁯 󰁫 󰁫 󰁩 󰁮 󰁧 - 󰁡 󰁬 󰁧 󰁯 󰁲 󰁩 󰁴 󰁨 󰁭 󰁳  o u  e m

󰁧 󰁩 󰁴 󰁨 󰁵 󰁢 . 󰁣 󰁯 󰁭 / 󰁥 󰁧 󰁯 󰁮 󰁳 󰁣 󰁨 󰁩 󰁥 󰁬 󰁥 / 󰁧 󰁲 󰁯 󰁫 󰁫 󰁩 󰁮 󰁧 󰁟 󰁡 󰁬 󰁧 󰁯 󰁲 󰁩 󰁴 󰁨 󰁭 󰁳 .

A c r e d i t o  q u e  v o c ê  a p r e n d e  m e l h o r  q u a n d o  r e a l m e n t e  g o s t a  d e  a p r e n d e r  –
e n t ã o  d i v i r t a - s e  e  e x e c u t e  o s  c ó d i g o s !

S 󰁯 b 󰁲 󰁥  󰁯  a 󰁵 󰁴 󰁯 󰁲

A 󰁤 󰁩 󰁴 󰁹 󰁡  B 󰁨 󰁡 󰁲 󰁧 󰁡 󰁶 󰁡  é  u m  e n g e n h e i r o  d e  s o  w a r e  n a  E t s y ,  u m  m e r c a d o  o n l i n e

d e  p r o d u t o s  a r t e s a n a i s .  E l e  é  f o r m a d o  e m  C i ê n c i a s  d a  C o m p u t a ç ã o  p e l a

U n i v e r s i t y  o f  C h i c a g o .  B h a r g a v a  t a m b é m  é  a u t o r  d e  u m  b l o g  i l u s t r a d o  d e

t e c n o l o g i a  e m  a d i t . i o .

C 󰁯 󰁭 󰁯  󰁥 󰁮 󰁴 󰁲 a 󰁲  󰁥 󰁭  󰁣 󰁯 󰁮 󰁴 a 󰁴 󰁯  󰁣 󰁯 󰁮 󰁯 󰁳 󰁣 󰁯

E n v i e  s e u s  c o m e n t á r i o s  e  s u a s  d ú v i d a s  s o b r e  e s t e  l i v r o  à  e d i t o r a  e s c r e v e n d o

p a r a :  󰁮 󰁯 󰁶 󰁡 󰁴 󰁥 󰁣 @ 󰁮 󰁯 󰁶 󰁡 󰁴 󰁥 󰁣 . 󰁣 󰁯 󰁭 . 󰁢 󰁲 .

T e m o s  u m a  p á g i n a  w e b  p a r a  e s t e  l i v r o  n a  q u a l  i n c l u í m o s  e r r a t a s ,  e x e m p l o s  e

q u a i s q u e r  o u t r a s  i n f o r m a ç õ e s  a d i c i o n a i s .

󲀢  P á g i n a  d a  e d i ç ã o  e m  p o r t u g u ê s :

󰁨 󰁴 󰁴 󰁰 󰁳 : / / 󰁮 󰁯 󰁶 󰁡 󰁴 󰁥 󰁣 . 󰁣 󰁯 󰁭 . 󰁢 󰁲 / 󰁬 󰁩 󰁶 󰁲 󰁯 󰁳 / 󰁥 󰁮 󰁴 󰁥 󰁮 󰁤 󰁥 󰁮 󰁤 󰁯 - 󰁡 󰁬 󰁧 󰁯 󰁲 󰁩 󰁴 󰁭 󰁯 󰁳

󲀢  P á g i n a  d a  e d i ç ã o  o r i g i n a l  e m  i n g l ê s :

󰁷 󰁷 󰁷 . 󰁭 󰁡 󰁮 󰁮 󰁩 󰁮 󰁧 . 󰁣 󰁯 󰁭 / 󰁢 󰁯 󰁯 󰁫 󰁳 / 󰁧 󰁲 󰁯 󰁫 󰁫 󰁩 󰁮 󰁧 - 󰁡 󰁬 󰁧 󰁯 󰁲 󰁩 󰁴 󰁨 󰁭 󰁳

P a r a  o b t e r  m a i s  i n f o r m a ç õ e s  s o b r e  o s  l i v r o s  d a  N o v a t e c ,  a c e s s e  n o s s o  s i t e :

󰁨 󰁴 󰁴 󰁰 󰁳 : / / 󰁮 󰁯 󰁶 󰁡 󰁴 󰁥 󰁣 . 󰁣 󰁯 󰁭 . 󰁢 󰁲 .

1  O  a u t o r  d o  l i v r o  d i s p o n i b i l i z o u  n o  G i t H u b  o  c ó d i g o - f o n t e  e m  v á r i a s  l i n g u a g e n s  d e

p r o g r a m a ç ã o :  C # ,  P y t h o n ,  R u b y ,  J a v a ,  J a v a s c r i p t  e  S w i  ,  e m  s e u  f o r m a t o  o r i g i n a l  ( e m

i n g l ê s ) .  O  c ó d i g o - f o n t e  n o  l i v r o  f o i  t r a d u z i d o  p a r a  o  p o r t u g u ê s ,  a s s i m  c o m o  t o d a s  a s

i m a g e n s  e  i l u s t r a ç õ e s  v i s a n d o  f a c i l i t a r  o  e n t e n d i m e n t o  p e l o  l e i t o r .
1

I 󰁮 󰁴 󰁲 󰁯 󰁤 󰁵 ç ã 󰁯  󰁡  󰁡 󰁬 󰁧 󰁯 󰁲 󰁩 󰁴 󰁭 󰁯 󰁳

N 󰁥 󰁳 󰁴 󰁥  󰁣 󰁡 󰁰 í 󰁴 󰁵 󰁬 󰁯

󲀢  V o c ê  t e r á  a c e s s o  a o  f u n d a m e n t a l  p a r a  c o m p r e e n d e r  o  r e s t a n t e  d o

l i v r o .

󲀢  E s c r e v e r á  s e u  p r i m e i r o  a l g o r i t m o  d e  b u s c a  ( p e s q u i s a  b i n á r i a ) .

󲀢  A p r e n d e r á  c o m o  f a l a r  s o b r e  o  t e m p o  d e  e x e c u ç ã o  d e  u m  a l g o r i t m o

( n a  n o t a ç ã o  B i g  O ) .
󲀢  S e r á  a p r e s e n t a d o  a  u m a  p r á t i c a  c o m u m  p a r a  p r o j e t a r  a l g o r i t m o s

( r e c u r s ã o ) .

I 󰁮 󰁴 󰁲 󰁯 󰁤 󰁵 ç ã 󰁯

U m a 󰁬 g 󰁯 󰁲 i 󰁴 󰁭 󰁯  é  u m  c o n j u n t o  d e  i n s t r u ç õ e s  q u e  r e a l i z a m  u m a  t a r e f a .  C a d a

t r e c h o  d e  c ó d i g o  p o d e r i a  s e r  c h a m a d o  d e  u m  a l g o r i t m o ,  m a s  e s t e  l i v r o  t r a t a

d o s  t r e c h o s  m a i s  i n t e r e s s a n t e s .  E s c o l h i  o s  a l g o r i t m o s  a p r e s e n t a d o s  n e s t e

l i v r o  p o r q u e  e l e s  s ã o  r á p i d o s  o u  p o r q u e  r e s o l v e m  p r o b l e m a s  i n t e r e s s a n t e s ,

o u  p o r  a m b o s  o s  m o t i v o s .  A  s e g u i r  e s t ã o  d e s c r i t o s  a l g u n s  p o n t o s

i m p o r t a n t e s  q u e  s e r ã o  d e m o n s t r a d o s .

󲀢  O  C a p í t u l o  1  a b o r d a  p e s q u i s a  b i n á r i a  e  m o s t r a  c o m o  u m  a l g o r i t m o  p o d e

a c e l e r a r  o  s e u  c ó d i g o .  E m  u m  d o s  e x e m p l o s ,  o  n ú m e r o  d e  e t a p a s

n e c e s s á r i a s  p a s s a  d e  4  b i l h õ e s  p a r a  3 2  e t a p a s !

󲀢  U m  d i s p o s i t i v o  d e  G P S  u t i l i z a  a l g o r i t m o s  d e  g r a f o s  ( q u e  v o c ê  a p r e n d e r á

n o s  C a p í t u l o s  6 ,  7  e  8 )  p a r a  c a l c u l a r  a  r o t a  m a i s  c u r t a  a t é  o  s e u  d e s t i n o .

󲀢  V o c ê  p o d e  u s a r  a  p r o g r a m a ç ã o  d i n â m i c a  ( v e r  C a p í t u l o  9 )  p a r a  e s c r e v e r

u m  a l g o r i t m o  d e  I A  ( i n t e l i g ê n c i a  a r t i  c i a l )  q u e  j o g a  d a m a s .

E m  c a d a  c a s o ,  d e s c r e v e r e i  o  a l g o r i t m o  e  a p r e s e n t a r e i  u m  e x e m p l o .  E m

s e g u i d a ,  f a l a r e i  s o b r e  o  t e m p o  d e  e x e c u ç ã o  d o  a l g o r i t m o  e m  n o t a ç ã o  B i g  O .

P o r   m ,  s e r ã o  e x p l o r a d o s  o s  d e m a i s  t i p o s  d e  p r o b l e m a s  q u e  p o d e r i a m  s e r

s o l u c i o n a d o s  c o m  o  m e s m o  a l g o r i t m o .

O  󰁱 󰁵 󰁥  󰁶 󰁯 󰁣 ê  󰁡 󰁰 󰁲 󰁥 󰁮 󰁤 󰁥 󰁲 á  󰁳 󰁯 󰁢 󰁲 󰁥  󰁤 󰁥 󰁳 󰁥 󰁭 󰁰 󰁥 󰁮 󰁨 󰁯

T e n h o  u m a  b o a  n o t í c i a :  u m a  i m p l e m e n t a ç ã o  d e  c a d a  a l g o r i t m o  a p r e s e n t a d o

n e s t e  l i v r o  p r o v a v e l m e n t e  e s t a r á  d i s p o n í v e l  e m  s u a  l i n g u a g e m  f a v o r i t a ,

p o r t a n t o  v o c ê  n ã o  t e r á  q u e  e s c r e v e r  c a d a  a l g o r i t m o !  P o r é m  e s s a s

i m p l e m e n t a ç õ e s  s e r ã o  i n ú t e i s  c a s o  v o c ê  n ã o  e n t e n d a  o  d e s e m p e n h o  d o s

a l g o r i t m o s .  N e s t e  l i v r o ,  v o c ê  a p r e n d e r á  c o m o  c o m p a r a r  o  d e s e m p e n h o  d e

d i f e r e n t e s  a l g o r i t m o s :  V o c ê  d e v e  u t i l i z a r  m e r g e  s o r t  ( o r d e n a ç ã o  p o r  m i s t u r a )

o u  q u i c k s o r t  ( o r d e n a ç ã o  r á p i d a ) ?  V o c ê  d e v e  u t i l i z a r  u m  a r r a y  o u  u m a  l i s t a ?

A  e s c o l h a  d a  e s t r u t u r a  d e  d a d o s  p o d e  f a z e r  u m a  g r a n d e  d i f e r e n ç a .

O  󰁱 󰁵 󰁥  󰁶 󰁯 󰁣 ê  󰁡 󰁰 󰁲 󰁥 󰁮 󰁤 󰁥 󰁲 á  󰁳 󰁯 󰁢 󰁲 󰁥  󰁡  󰁳 󰁯 󰁬 󰁵 ç ã 󰁯  󰁤 󰁥  󰁰 󰁲 󰁯 󰁢 󰁬 󰁥 󰁭 󰁡 󰁳
V o c ê  a p r e n d e r á  t é c n i c a s  p a r a  r e s o l u ç ã o  d e  p r o b l e m a s  q u e  p o d e r i a m  e s t a r

f o r a  d a  s u a  g a m a  d e  h a b i l i d a d e s  a t é  a g o r a ,  c o m o  p o r  e x e m p l o :

󲀢  S e  v o c ê  g o s t a  d e  c r i a r  j o g o s ,  p o d e r á  d e s e n v o l v e r  u m  s i s t e m a  d e

i n t e l i g ê n c i a  a r t i  c i a l  ( I A )  q u e  s e g u e  o  u s u á r i o  u t i l i z a n d o  a l g o r i t m o s

g r á  c o s .

󲀢  V o c ê  a p r e n d e r á  a  c r i a r  u m  s i s t e m a  d e  r e c o m e n d a ç õ e s  u t i l i z a n d o  o s  K -

v i z i n h o s m a i s p r ó x i m o s .

󲀢  A l g u n s  p r o b l e m a s  n ã o  p o d e m  s e r  r e s o l v i d o s  e m  u m  t e m p o  h á b i l !  A  p a r t e

d e s t e  l i v r o  q u e  t r a t a  d e  p r o b l e m a s  N P - c o m p l e t o s  d e m o n s t r a  c o m o

i d e n t i  c a r  e s t e s  p r o b l e m a s  e  c o m o  c r i a r  u m  a l g o r i t m o  q u e  f o r n e ç a  u m a

r e s p o s t a  a p r o x i m a d a .

A o  t e r m i n a r  d e  l e r  e s t e  l i v r o ,  p r o v a v e l m e n t e ,  v o c ê  c o n h e c e r á  a l g u n s  d o s

a l g o r i t m o s  d e  m a i o r  a p l i c a b i l i d a d e .  A s s i m ,  p o d e r á  u s a r  o s  s e u s

c o n h e c i m e n t o s  p a r a  a p r e n d e r  s o b r e  a l g o r i t m o s  m a i s  e s p e c í  c o s  p a r a  I A ,

b a n c o s  d e  d a d o s  e t c .  A l é m  d i s s o ,  p o d e r á  e n c a r a r  g r a n d e s  d e s a  o s  e m  s e u

t r a b a l h o .

O  󰁱 󰁵 󰁥  󰁶 󰁯 󰁣 ê  󰁰 󰁲 󰁥 󰁣 󰁩 󰁳 󰁡  󰁳 󰁡 󰁢 󰁥 󰁲

V o c ê  d e v e r á  c o n h e c e r  á l g e b r a  b á s i c a  a n t e s  d e  i n i c i a r  a  l e i t u r a  d e s t e  l i v r o .  E m  p a r t i c u l a r ,

p a r t i n d o  d a  f u n ç ã o  f ( 󰁸 )  =  󰁸  ×  2 ,  q u a l  s e r á  o  v a l o r  d e  f ( 5 ) ?  S e  r e s p o n d e u  1 0 ,  v o c ê  e s t á  p r o n t o .

A l é m  d e  t u d o ,  e s t e  c a p í t u l o  ( e  e s t e  l i v r o )  s e r á  c o m p r e e n d i d o  m a i s  f a c i l m e n t e  s e  v o c ê

c o n h e c e r  a l g u m a  l i n g u a g e m  d e  p r o g r a m a ç ã o .  T o d o s  o s  e x e m p l o s  d e s t e  l i v r o  f o r a m  e s c r i t o s

e m  P y t h o n ,  a s s i m ,  c a s o  v o c ê  n ã o  c o n h e ç a  n e n h u m a  l i n g u a g e m  d e  p r o g r a m a ç ã o  e  q u e i r a

a p r e n d e r  u m a ,  e s c o l h a  P y t h o n ,  p o i s  e l a  é  ó t i m a  p a r a  i n i c i a n t e s .  S e  v o c ê  c o n h e c e  a l g u m a

o u t r a  l i n g u a g e m ,  c o m o  a  R u b y ,  s e  s a i r á  b e m .

P 󰁥 󰁳 󰁱 󰁵 󰁩 󰁳 󰁡  󰁢 󰁩 󰁮 á 󰁲 󰁩 󰁡
V a m o s  s u p o r  q u e  v o c ê  e s t e j a  p r o c u r a n d o  o  n o m e  d e  u m a  p e s s o a  e m  u m a

a g e n d a  t e l e f ô n i c a  ( q u e  f r a s e  a n t i q u a d a ! ) .  O  n o m e  c o m e ç a  c o m  K .  V o c ê  p o d e

c o m e ç a r  n a  p r i m e i r a  p á g i n a  d a  a g e n d a  e  i r  f o l h e a n d o  a t é  c h e g a r  a o s  K s .

P o r é m  v o c ê  p r o v a v e l m e n t e  v a i  c o m e ç a r  p e l a  m e t a d e ,  p o i s  s a b e  q u e  o s  K s

e s t a r ã o  m a i s  p e r t o  d a l i .

O u  s u p o n h a  q u e  e s t e j a  p r o c u r a n d o  u m a  p a l a v r a  q u e  c o m e ç a  c o m  O  e m  u m

d i c i o n á r i o .  N o v a m e n t e ,  v o c ê  c o m e ç a  a  b u s c a  p e l o  m e i o .

A g o r a ,  i m a g i n e  q u e  v o c ê  e n t r e  n o  F a c e b o o k .  Q u a n d o  f a z  i s s o ,  o  F a c e b o o k

p r e c i s a  v e r i  c a r  q u e  v o c ê  t e m  u m a  c o n t a  n o  s i t e .  L o g o ,  e l e  p r o c u r a  s e u

n o m e  d e  u s u á r i o  e m  u m  b a n c o  d e  d a d o s .  D i g a m o s  q u e  s e u  u s u á r i o  s e j a

k a r l m a g e d d o n .  O  F a c e b o o k  p o d e r i a  c o m e ç a r  p e l o s  A s  e  p r o c u r a r  s e u  n o m e

󲀓  m a s  f a z  m a i s  s e n t i d o  q u e  e l e  c o m e c e  a  b u s c a  p e l o  m e i o .
I s t o  é  u m  p r o b l e m a  d e  b u s c a .  E  t o d o s  e s t e s  c a s o s  u s a m  u m  a l g o r i t m o  p a r a

r e s o l v ê - l o :  󰁰 e 󰁳 󰁱 󰁵 i 󰁳 a b i 󰁮 á 󰁲 i a .

A  p e s q u i s a  b i n á r i a  é  u m  a l g o r i t m o .  S u a  e n t r a d a  é  u m a  l i s t a  o r d e n a d a  d e

e l e m e n t o s  ( e x p l i c a r e i  m a i s  t a r d e  p o r  q u e  m o t i v o  a  l i s t a  p r e c i s a  s e r

o r d e n a d a ) .  S e  o  e l e m e n t o  q u e  v o c ê  e s t á  b u s c a n d o  e s t á  n a  l i s t a ,  a  p e s q u i s a

b i n á r i a  r e t o r n a  a  s u a  l o c a l i z a ç ã o .  C a s o  c o n t r á r i o ,  a  p e s q u i s a  b i n á r i a  r e t o r n a

None .

P o r  e x e m p l o :
Procurando empresas em uma agenda com a pesquisa binária.
E i s  u m  e x e m p l o  d e  c o m o  a  p e s q u i s a  b i n á r i a  f u n c i o n a .  E s t o u  p e n s a n d o  e m

u m  n ú m e r o  e n t r e  1  e  1 0 0 .

V o c ê  d e v e  p r o c u r a r  a d i v i n h a r  o  m e u  n ú m e r o  c o m  o  m e n o r  n ú m e r o  d e

t e n t a t i v a s  p o s s í v e l .  A  c a d a  t e n t a t i v a ,  d i g o  s e  v o c ê  c h u t o u  m u i t o  p a r a  c i m a ,

m u i t o  p a r a  b a i x o  o u  c o r r e t a m e n t e .

D i g a m o s  q u e  c o m e ç o u  t e n t a n d o  a s s i m :  1 ,  2 ,  3 ,  4 󲀦  V e j a  c o m o   c a r i a .
Uma tentativa ruim de acertar o número.
I s s o  s e  c h a m a  󰁰 e 󰁳 󰁱 󰁵 i 󰁳 a 󰁳 i 󰁭 󰁰 󰁬 e 󰁳  ( t a l v e z  󰁰 e 󰁳 󰁱 󰁵 i 󰁳 a e 󰁳 󰁴 ú 󰁰 i d a  s e j a  u m  t e r m o

m e l h o r ) .  A  c a d a  t e n t a t i v a ,  v o c ê  e s t á  e l i m i n a n d o  a p e n a s  u m  n ú m e r o .  S e  o

m e u  n ú m e r o  f o s s e  o  9 9 ,  v o c ê  p r e c i s a r i a  d e  9 9  c h a n c e s  p a r a  a c e r t á - l o !

U 󰁭 󰁡  󰁭 󰁡 󰁮 󰁥 󰁩 󰁲 󰁡  󰁭 󰁥 󰁬 󰁨 󰁯 󰁲  󰁤 󰁥  󰁢 󰁵 󰁳 󰁣 󰁡 󰁲

A q u i  e s t á  u m a  t é c n i c a  m e l h o r .  C o m e c e  c o m  5 0 .

M u i t o  b a i x o ,  m a s  v o c ê  e l i m i n o u  󰁭 e 󰁴 a d e  d o s  n ú m e r o s !  A g o r a ,  v o c ê  s a b e  q u e

o s  n ú m e r o s  d e  1  a  5 0  s ã o  m u i t o  b a i x o s .  P r ó x i m o  c h u t e :  7 5 .
M u i t o  a l t o ,  m a s  n o v a m e n t e  v o c ê  p o d e  c o r t a r  m e t a d e  d o s  n ú m e r o s  r e s t a n t e s !

C 󰁯 󰁭  a  󰁰 e 󰁳 󰁱 󰁵 i 󰁳 a  b i 󰁮 á 󰁲 i a ,  󰁶 󰁯 c ê  c h 󰁵 󰁴 a  󰁵 󰁭  󰁮 ú 󰁭 e 󰁲 󰁯  i 󰁮 󰁴 e 󰁲 󰁭 e d i á 󰁲 i 󰁯  e  e 󰁬 i 󰁭 i 󰁮 a  a

󰁭 e 󰁴 a d e  d 󰁯 󰁳  󰁮 ú 󰁭 e 󰁲 󰁯 󰁳  󰁲 e 󰁳 󰁴 a 󰁮 󰁴 e 󰁳  a  c a d a  󰁶 e 󰁺 .  O  p r ó x i m o  n ú m e r o  é  o  6 3  ( e n t r e  5 0

e  7 5 ) .

I s s o  é  a  p e s q u i s a  b i n á r i a .  V o c ê  a c a b a  d e  a p r e n d e r  u m  a l g o r i t m o !  A q u i  e s t á  a

q u a n t i d a d e  d e  n ú m e r o s  q u e  v o c ê  p o d e  e l i m i n a r  a  c a d a  t e n t a t i v a .

Elimine metade dos números a cada tentativa com a pesquisa binária.


S e j a  q u a l  f o r  o  n ú m e r o  q u e  e u  e s t i v e r  p e n s a n d o ,  v o c ê  p o d e  a d i v i n h á - l o  e m

u m  m á x i m o  d e  s e t e  t e n t a t i v a s  󲀓  p o r q u e  a  p e s q u i s a  b i n á r i a  e l i m i n a  m u i t a s

p o s s i b i l i d a d e s !

S u p o n h a  q u e  v o c ê  e s t e j a  p r o c u r a n d o  u m a  p a l a v r a  e m  u m  d i c i o n á r i o .  O

d i c i o n á r i o  t e m  2 4 0 . 0 0 0  p a l a v r a s .  N a  󰁰 i 󰁯 󰁲  d a 󰁳  h i 󰁰 ó 󰁴 e 󰁳 e 󰁳 ,  d e  q u a n t a s  e t a p a s

v o c ê a c h a q u e a p e s q u i s a p r e c i s a r i a ?
A  p e s q u i s a  s i m p l e s  p o d e r i a  l e v a r  2 4 0 . 0 0 0  e t a p a s  s e  a  p a l a v r a  q u e  v o c ê

e s t i v e s s e  p r o c u r a n d o  f o s s e  a  ú l t i m a  d o  d i c i o n á r i o .  A  c a d a  e t a p a  d a  p e s q u i s a

b i n á r i a ,  v o c ê  e l i m i n a  o  n ú m e r o  d e  p a l a v r a s  p e l a  m e t a d e  a t é  q u e  s ó  r e s t e  u m a

p a l a v r a .

L o g o ,  a  p e s q u i s a  b i n á r i a  l e v a r i a  a p e n a s  1 8  e t a p a s  󲀓  u m a  g r a n d e  d i f e r e n ç a !

D e  m a n e i r a  g e r a l ,  p a r a  u m a  l i s t a  d e  󰁮  n ú m e r o s ,  a  p e s q u i s a  b i n á r i a  p r e c i s a  d e

l o g 󰁮  p a r a  r e t o r n a r  o  v a l o r  c o r r e t o ,  e n q u a n t o  a  p e s q u i s a  s i m p l e s  p r e c i s a  d e  󰁮

e t a p a s .

L 󰁯 󰁧 󰁡 󰁲 󰁩 󰁴 󰁭 󰁯 󰁳

V o c ê  p o d e  n ã o  s e  l e m b r a r  d e  l o g a r i t m o s ,  m a s  p r o v a v e l m e n t e  l e m b r a - s e  d e  c o m o  c a l c u l a r

e x p o n e n c i a i s .  A  e x p r e s s ã o  l o g 1 0 0  b a s i c a m e n t e  d i z :  “ Q u a n t o s  1 0 s  c o n s e g u i m o s  m u l t i p l i c a r

1 0

p a r a  c h e g a r  a  1 0 0 ? 󲀝 .  A  r e s p o s t a  é  2 :  1 0  ×  1 0 .  E n t ã o ,  l o g 1 0 0  =  2 .  L o g a r i t m o s  s ã o  o  o p o s t o  d e

1 0

e x p o n e n c i a i s .

Logaritmos são o oposto de exponenciais.


N e s t e  l i v r o ,  q u a n d o  f a l a m o s  s o b r e  a  n o t a ç ã o  B i g  O  ( e x p l i c a d a  d a q u i  a  p o u c o ) ,  l e v a m o s  e m

c o n t a  q u e  l o g  s e m p r e  s i g n i  c a  l o g .  Q u a n d o  v o c ê  p r o c u r a  u m  e l e m e n t o  u s a n d o  a  p e s q u i s a

2
s i m p l e s ,  n o  p i o r  d o s  c a s o s ,  t e r á  d e  a n a l i s a r  e l e m e n t o  p o r  e l e m e n t o ,  p a s s a n d o  p o r  t o d o s .  S e  f o r

u m a  l i s t a  d e  o i t o  e l e m e n t o s ,  p r e c i s a r i a  c h e c a r  n o  m á x i m o  o i t o  n ú m e r o s .  N a  p e s q u i s a  b i n á r i a ,

p r e c i s a  v e r i  c a r  l o g  󰁮  e l e m e n t o s  p a r a  o  p i o r  d o s  c a s o s .  P a r a  u m a  l i s t a  d e  o i t o  e l e m e n t o s ,  l o g  8

= =  3 ,  p o r q u e  2 = =  8 .  E n t ã o ,  p a r a  u m a  l i s t a  d e  o i t o  n ú m e r o s ,  p r e c i s a r i a  p a s s a r  p o r ,  n o

m á x i m o ,  t r ê s  t e n t a t i v a s .  P a r a  u m a  l i s t a  d e  1 . 0 2 4  e l e m e n t o s ,  l o g  1 . 0 2 4  = =  1 0 ,  p o r q u e  2 = =

1 . 0 2 4 .  L o g o ,  p a r a  u m a  l i s t a  d e  1 . 0 2 4  n ú m e r o s ,  p r e c i s a r i a  v e r i  c a r  n o  m á x i m o  d e z  d e l e s .

󰁎 󰁯 󰁴 󰁡

F a l a r e i  m u i t o  s o b r e  l o g a r i t m o s  n e s t e  l i v r o .  P o r t a n t o  v o c ê  d e v e  e n t e n d e r  o  c o n c e i t o .  S e  n ã o

e n t e n d e r ,  a  K h a n  A c a d e m y  ( 󰁫 󰁨 󰁡 󰁮 󰁡 󰁣 󰁡 󰁤 󰁥 󰁭 󰁹 . 󰁯 󰁲 󰁧 )  t e m  u m  v í d e o  l e g a l  q u e  e s c l a r e c e  m u i t a

c o i s a .

󰁎 󰁯 󰁴 󰁡

A  p e s q u i s a  b i n á r i a  s ó  f u n c i o n a  q u a n d o  a  s u a  l i s t a  e s t á  o r d e n a d a .  P o r  e x e m p l o ,  o s  n o m e s

e m  u m a  a g e n d a  t e l e f ô n i c a  e s t ã o  e m  o r d e m  a l f a b é t i c a ,  e n t ã o  v o c ê  p o d e  u t i l i z a r  a  p e s q u i s a

b i n á r i a  p a r a  p r o c u r a r  u m  n o m e .  O  q u e  a c o n t e c e r i a  s e  a  l i s t a  n ã o  e s t i v e s s e  o r d e n a d a ?

V a m o s  v e r  c o m o  e s c r e v e r  a  p e s q u i s a  b i n á r i a  e m  P y t h o n .  O  e x e m p l o  d e

c ó d i g o  q u e  u t i l i z a m o s  a q u i  u s a  a r r a y s .  S e  n ã o  s a b e  c o m o  e l e s  f u n c i o n a m ,

n ã o  s e  p r e o c u p e ;  a b o r d a r e m o s  i s s o  n o  p r ó x i m o  c a p í t u l o .  V o c ê  s ó  p r e c i s a

s a b e r  q u e  p o d e  a r m a z e n a r  u m a  s e q u ê n c i a  d e  e l e m e n t o s  e m  u m a  l i n h a  d e

b u c k e t s  c o n s e c u t i v o s  q u e  s e  c h a m a  a r r a y .  O s  b u c k e t s  s ã o  n u m e r a d o s  a  p a r t i r

d o  0 :  o  p r i m e i r o  b u c k e t  e s t á  n a  p o s i ç ã o  # 0 ;  o  s e g u n d o ,  e m  # 1 ;  o  t e r c e i r o ,  e m

# 2 ,  e  a s s i m  p o r  d i a n t e .

A  f u n ç ã o  pesquisa_binaria  p e g a  u m  a r r a y  o r d e n a d o  e  u m  i t e m .  S e  o  i t e m

e s t á  n o  a r r a y ,  a  f u n ç ã o  r e t o r n a  a  s u a  p o s i ç ã o .  D e s s a  m a n e i r a ,  v o c ê  é  c a p a z  d e

s a b e r  p o r  q u a l  p o n t o  d o  a r r a y  d e v e  c o n t i n u a r  p r o c u r a n d o .  N o  c o m e ç o ,  o

c ó d i g o  d o  a r r a y  s e g u e  a s s i m :

baixo = 0
alto = len(lista) - 1
A  c a d a  t e n t a t i v a ,  v o c ê  t e s t a  p a r a  o  e l e m e n t o  c e n t r a l .

meio = (baixo + alto) / 2 ❶


chute = lista[meio]
❶ meio  s e r á  a r r e d o n d a d o  p a r a  b a i x o  a u t o m a t i c a m e n t e  p e l o  P y t h o n  s e 
(baixo +
alto)  n ã o  f o r  u m  n ú m e r o  p a r .

baixo
S e  o  c h u t e  f o r  m u i t o  b a i x o ,  v o c ê  a t u a l i z a r á  a  v a r i á v e l 

p r o p o r c i o n a l m e n t e :

ifchute < item:


baixo = meio + 1

E  s e  o  c h u t e  f o r  m u i t o  a l t o ,  v o c ê  a t u a l i z a r á  a  v a r i á v e l 

alto .  A q u i  e s t á  o

c ó d i g o  c o m p l e t o :

def pesquisa_binaria(lista, item):


baixo = 0 ❶
alto = len(lista) - 1 ❶

while baixo <= alto: ❷


meio = (baixo + alto) / 2 ❸
chute = lista[meio]
ifchute == item: ❹

return meio
ifchute > item: ❺
alto = meio - 1
else: ❻
baixo = meio + 1
return None ❼

minha_lista = [1, 3, 5, 7, 9] ❽

print pesquisa_binaria(minha_lista, 3) # => 1 ❾


print pesquisa_binaria(minha_lista, -1) # => None ❿
❶ baixo e
alto  a c o m p a n h a m  a  p a r t e  d a  l i s t a  q u e  v o c ê  e s t á  p r o c u r a n d o .

❷  E n q u a n t o  a i n d a  n ã o  c o n s e g u i u  c h e g a r  a  u m  ú n i c o  e l e m e n t o . . .

❸  󲀦  v e r i  c a  o  e l e m e n t o  c e n t r a l .

❹  A c h a  o  i t e m .

❺  O  c h u t e  f o i  m u i t o  a l t o .

❻  O  c h u t e  f o i  m u i t o  b a i x o .

❼  O  i t e m  n ã o  e x i s t e .

❽  V a m o s  t e s t á - l o !

❾  L e m b r e - s e ,  a s  l i s t a s  c o m e ç a m  n o  0 .  O  p r ó x i m o  e n d e r e ç o  t e m  í n d i c e  1 .

❿  󲀜 N o n e 󲀝  s i g n i  c a  n u l o  e m  P y t h o n .  E l e  i n d i c a  q u e  o  i t e m  n ã o  f o i  e n c o n t r a d o .

E 󰁘 E 󰁒 C Í C I 󰁏 󰁓

1 . 1  S u p o n h a  q u e  v o c ê  t e n h a  u m a  l i s t a  c o m  1 2 8  n o m e s  e  e s t e j a  f a z e n d o  u m a

p e s q u i s a  b i n á r i a .  Q u a l  s e r i a  o  n ú m e r o  m á x i m o  d e  e t a p a s  q u e  v o c ê  l e v a r i a

p a r a  e n c o n t r a r  o  n o m e  d e s e j a d o ?

1 . 2  S u p o n h a  q u e  v o c ê  d u p l i q u e  o  t a m a n h o  d a  l i s t a .  Q u a l  s e r i a  o  n ú m e r o

m á x i m o  d e  e t a p a s  a g o r a ?

T 󰁥 󰁭 󰁰 󰁯  󰁤 󰁥  󰁥 󰁸 󰁥 󰁣 󰁵 ç ã 󰁯
S e m p r e  q u e  f a l o  s o b r e  u m  a l g o r i t m o ,  f a l o  s o b r e  o  s e u  t e m p o  d e  e x e c u ç ã o .

G e r a l m e n t e ,  v o c ê  e s c o l h e  o  a l g o r i t m o  m a i s  e  c i e n t e  󲀓  c a s o  e s t e j a  t e n t a n d o

o t i m i z a r  t e m p o  e  e s p a ç o .

V o l t a n d o  à  p e s q u i s a  s i m p l e s ,  q u a n t o  t e m p o  s e  o t i m i z a  u t i l i z a n d o - a ?  B e m ,  a

p r i m e i r a  a b o r d a g e m  s e r i a  v e r i  c a r  n ú m e r o  p o r  n ú m e r o .  S e  f o s s e  u m a  l i s t a

d e  1 0 0  n ú m e r o s ,  p r e c i s a r í a m o s  d e  1 0 0  t e n t a t i v a s .  S e  f o s s e  u m a  l i s t a  d e  4

b i l h õ e s  d e  n ú m e r o s ,  p r e c i s a r í a m o s  d e  4  b i l h õ e s  d e  t e n t a t i v a s .  L o g o ,  o

n ú m e r o  m á x i m o  d e  t e n t a t i v a s  é  i g u a l  a o  t a m a n h o  d a  l i s t a .  I s s o  é  c h a m a d o

d e 󰁴 e 󰁭 󰁰 󰁯  󰁬 i 󰁮 e a 󰁲 .

A  p e s q u i s a  b i n á r i a  é  d i f e r e n t e .  S e  a  l i s t a  t e m  1 0 0  i t e n s ,  p r e c i s a - s e  d e ,  n o

m á x i m o ,  s e t e  t e n t a t i v a s .  S e  t e m  4  b i l h õ e s ,  p r e c i s a - s e  d e ,  n o  m á x i m o ,  3 2

t e n t a t i v a s .  P o d e r o s o ,  n ã o ?  A  p e s q u i s a  b i n á r i a  é  e x e c u t a d a  c o m  󰁴 e 󰁭 󰁰 󰁯

󰁬 󰁯 g a 󰁲 í 󰁴 󰁭 i c 󰁯 .  A  t a b e l a  a  s e g u i r  r e s u m e  a s  n o s s a s  d e s c o b e r t a s  a t é  a g o r a .
Tempo de execução para algoritmos de pesquisa.

N 󰁯 󰁴 󰁡 ç ã 󰁯  B 󰁩 󰁧  O

A  n o t a ç ã o  B i g  O  é  u m a  n o t a ç ã o  e s p e c i a l  q u e  d i z  o  q u ã o  r á p i d o  é  u m

a l g o r i t m o .  M a s  q u e m  l i g a  p a r a  i s s o ?  B e m ,  a c o n t e c e  q u e  v o c ê

f r e q u e n t e m e n t e  u t i l i z a r á  o  a l g o r i t m o  q u e  o u t r a  p e s s o a  f e z  󲀓  e  q u a n d o  f a z

i s s o ,  é  b o m  e n t e n d e r  o  q u ã o  r á p i d o  o u  l e n t o  o  a l g o r i t m o  é .  N e s t a  s e ç ã o ,

e x p l i c a r e i  c o m o  a  n o t a ç ã o  B i g  O  f u n c i o n a  e  f o r n e c e r e i  u m a  l i s t a  c o m  o s

t e m p o s  d e  e x e c u ç ã o  m a i s  c o m u n s  p a r a  o s  a l g o r i t m o s .
T 󰁥 󰁭 󰁰 󰁯  󰁤 󰁥  󰁥 󰁸 󰁥 󰁣 󰁵 ç ã 󰁯  󰁤 󰁯 󰁳  󰁡 󰁬 󰁧 󰁯 󰁲 󰁩 󰁴 󰁭 󰁯 󰁳  󰁣 󰁲 󰁥 󰁳 󰁣 󰁥  󰁡  󰁴 󰁡 󰁸 󰁡 󰁳  󰁤 󰁩 󰁦 󰁥 󰁲 󰁥 󰁮 󰁴 󰁥 󰁳

B o b  e s t á  e s c r e v e n d o  u m  a l g o r i t m o  p a r a  a  N A S A .  O  a l g o r i t m o  d e l e  e n t r a r á

e m  a ç ã o  q u a n d o  o  f o g u e t e  e s t i v e r  p r e s t e s  a  p o u s a r  n a  l u a ,  e  e l e  o  a j u d a r á  a

c a l c u l a r  o  l o c a l  d e  p o u s o .

E s t e  é  u m  e x e m p l o  d e  c o m o  o  t e m p o  d e  e x e c u ç ã o  d e  d o i s  a l g o r i t m o s  p o d e

c r e s c e r  a  t a x a s  d i f e r e n t e s .  B o b  e s t á  t e n t a n d o  d e c i d i r  e n t r e  a  p e s q u i s a  s i m p l e s

e  a  p e s q u i s a  b i n á r i a .  O  a l g o r i t m o  p r e c i s a  s e r  t ã o  r á p i d o  q u a n t o  c o r r e t o .  P o r

u m  l a d o ,  a  p e s q u i s a  b i n á r i a  é  m a i s  r á p i d a ,  o  q u e  é  b o m ,  p o i s  B o b  t e m  a p e n a s

1 0  󰁳 e g 󰁵 󰁮 d 󰁯 󰁳  p a r a  d e s c o b r i r  o n d e  p o u s a r ,  o u  o  f o g u e t e  s a i r á  d e  s e u  c u r s o .  P o r

o u t r o  l a d o ,  é  m a i s  f á c i l  e s c r e v e r  a  p e s q u i s a  s i m p l e s ,  o  q u e  g e r a  u m  r i s c o

m e n o r  d e  e r r o s .  B o b  n ã o  q u e r  󰁭 e 󰁳 󰁭 󰁯  e r r o s  n o  s e u  c ó d i g o !  P a r a  s e r  a i n d a

m a i s  c u i d a d o s o ,  B o b  d e c i d e  c r o n o m e t r a r  a m b o s  o s  a l g o r i t m o s  c o m  u m a

l i s t a  d e  1 0 0  e l e m e n t o s .

V a m o s  p r e s u m i r  q u e  l e v a - s e  1  m i l i s s e g u n d o  p a r a  v e r i  c a r  u m  e l e m e n t o .
C o m  a  p e s q u i s a  s i m p l e s ,  B o b  p r e c i s a  v e r i  c a r  1 0 0  e l e m e n t o s ,  e n t ã o  a  b u s c a

l e v a  1 0  m s  p a r a  r o d a r .  E m  c o n t r a p a r t i d a ,  e l e  p r e c i s a  v e r i  c a r  a p e n a s  s e t e

e l e m e n t o s  n a  p e s q u i s a  b i n á r i a  ( l o g  1 0 0  é  a p r o x i m a d a m e n t e  7 ) ,  l o g o ,  a

p e s q u i s a  b i n á r i a  l e v a  7  m s  p a r a  s e r  e x e c u t a d a .  P o r é m ,  r e a l i s t i c a m e n t e

f a l a n d o ,  a  l i s t a  p r o v a v e l m e n t e  t e r á  e m  t o r n o  d e  1  b i l h ã o  d e  e l e m e n t o s .  S e  a

l i s t a  t i v e r  e s s e  n ú m e r o ,  q u a n t o  t e m p o  a  p e s q u i s a  s i m p l e s  l e v a r á  p a r a  s e r

e x e c u t a d a ?  E  a  p e s q u i s a  b i n á r i a ?  T e n h a  c e r t e z a  d e  q u e  s a b e  a  r e s p o s t a  p a r a

e s s a  p e r g u n t a  a n t e s  d e  c o n t i n u a r  l e n d o .

Tempo de execução para pesquisa simples vs. pesquisa binária para


uma lista de 100 elementos.
B o b  e x e c u t a  a  p e s q u i s a  b i n á r i a  c o m  1  b i l h ã o  d e  e l e m e n t o s  e  l e v a  3 0  m s  ( l o g

1 . 0 0 0 . 0 0 0 . 0 0 0  é  a p r o x i m a d a m e n t e  3 0 ) .  “ 3 0  m s ! 󲀝  󲀓  e l e  p e n s a .  “ A  p e s q u i s a

b i n á r i a  é  q u a s e  1 5  v e z e s  m a i s  r á p i d a  d o  q u e  a  p e s q u i s a  s i m p l e s ,  p o r q u e  a

p e s q u i s a  s i m p l e s  l e v o u  1 0 0  m s  p a r a  u m a  l i s t a  d e  1 0 0  e l e m e n t o s  e  a  p e s q u i s a

b i n á r i a  l e v o u  s ó  7  m s .  L o g o ,  a  p e s q u i s a  s i m p l e s  l e v a r á  3 0  ×  1 5  =  4 5 0  m s ,

c e r t o ?  B e m  a b a i x o  d o  m e u  l i m i t e  d e  1 0  s e g u n d o s . 󲀝  B o b  d e c i d e  u t i l i z a r  a

p e s q u i s a  s i m p l e s .  E l e  f e z  a  e s c o l h a  c e r t a ?

N ã o .  B o b  e s t á  e r r a d o .  M u i t o  e r r a d o .  O  t e m p o  d e  e x e c u ç ã o  p a r a  a  p e s q u i s a

s i m p l e s  p a r a  1  b i l h ã o  d e  i t e n s  é  1  b i l h ã o  m s ,  o u  s e j a ,  1 1  d i a s !  O  p r o b l e m a  é

q u e  o  t e m p o  d e  e x e c u ç ã o  d a  p e s q u i s a  s i m p l e s  e  d a  p e s q u i s a  b i n á r i a  c 󰁲 e 󰁳 c e

c 󰁯 󰁭  󰁴 a 󰁸 a 󰁳  d i f e 󰁲 e 󰁮 󰁴 e 󰁳 .
Tempos de execução crescem com velocidades diferentes!
S e n d o  a s s i m ,  c o n f o r m e  o  n ú m e r o  d e  i t e n s  c r e s c e ,  a  p e s q u i s a  b i n á r i a

a u m e n t a  s ó  u m  p o u c o  o  s e u  t e m p o  d e  e x e c u ç ã o .  J á  a  p e s q u i s a  s i m p l e s  l e v a

󰁭 󰁵 i 󰁴 󰁯  t e m p o  a  m a i s .  L o g o ,  c o n f o r m e  a  l i s t a  d e  n ú m e r o s  c r e s c e ,  a  p e s q u i s a

b i n á r i a  s e  t o r n a  󰁭 󰁵 i 󰁴 󰁯  m a i s  r á p i d a  d o  q u e  a  p e s q u i s a  s i m p l e s .  B o b  p e n s o u

q u e  a  p e s q u i s a  b i n á r i a  f o s s e  1 5  v e z e s  m a i s  r á p i d a  q u e  a  p e s q u i s a  s i m p l e s ,

m a s  i s s o  e s t á  i n c o r r e t o .  S e  a  l i s t a  t e m  1  b i l h ã o  d e  i t e n s ,  o  t e m p o  d e  e x e c u ç ã o

é  a p r o x i m a d a m e n t e  3 3  m i l h õ e s  d e  v e z e s  m a i s  r á p i d o .  P o r  i s s o ,  n ã o  b a s t a

s a b e r  q u a n t o  t e m p o  u m  a l g o r i t m o  l e v a  p a r a  s e r  e x e c u t a d o  󲀓  v o c ê  p r e c i s a

s a b e r  s e  o  t e m p o  d e  e x e c u ç ã o  a u m e n t a  c o n f o r m e  a  l i s t a  a u m e n t a .  É  a í  q u e  a

n o t a ç ã o  B i g  O  e n t r a .

A  n o t a ç ã o  B i g  O  i n f o r m a  o  q u ã o  r á p i d o  é  u m  a l g o r i t m o .  P o r  e x e m p l o ,

i m a g i n e  q u e  v o c ê  t e m  u m a  l i s t a  d e  t a m a n h o  󰁮 .  O  t e m p o  d e  e x e c u ç ã o  n a

n o t a ç ã o  B i g  O  é  O ( 󰁮 ) .  O n d e  e s t ã o  o s  s e g u n d o s ?  E l e s  n ã o  e x i s t e m  󲀓  a

n o t a ç ã o  B i g  O  n ã o  f o r n e c e  o  t e m p o  e m  s e g u n d o s .  A 󰁮 󰁯 󰁴 a ç ã 󰁯 B i g O 󰁰 e 󰁲 󰁭 i 󰁴 e

󰁱 󰁵 e  󰁶 󰁯 c ê  c 󰁯 󰁭 󰁰 a 󰁲 e  󰁯  󰁮 ú 󰁭 e 󰁲 󰁯  d e  󰁯 󰁰 e 󰁲 a ç õ e 󰁳 .  E l a  i n f o r m a  o  q u ã o  r a p i d a m e n t e

u m  a l g o r i t m o  c r e s c e .

T e m o s  o u t r o  e x e m p l o  d i s s o .  A  p e s q u i s a  b i n á r i a  p r e c i s a  d e  l o g  󰁮  o p e r a ç õ e s
p a r a  v e r i  c a r  u m a  l i s t a  d e  t a m a n h o  󰁮 .  Q u a l  é  o  t e m p o  d e  e x e c u ç ã o  n a

n o t a ç ã o  B i g  O ?  É  O ( l o g  󰁮 ) .  D e  m a n e i r a  g e r a l ,  a  n o t a ç ã o  B i g  O  é  e s c r i t a  d a

s e g u i n t e  f o r m a :

O formato da notação Big O.


I s s o  f o r n e c e  o  n ú m e r o  d e  o p e r a ç õ e s  q u e  u m  a l g o r i t m o  r e a l i z a .  É  c h a m a d o

d e  n o t a ç ã o  B i g  O  p o r q u e  c o l o c a - s e  u m  “ g r a n d e  O 󲀝  n a  f r e n t e  d o  n ú m e r o  d e

o p e r a ç õ e s  ( p a r e c e  p i a d a ,  m a s  é  v e r d a d e ! ) .

A g o r a ,  v a m o s  v e r  a l g u n s  e x e m p l o s .  V e j a  s e  c o n s e g u e  d e s c o b r i r  o  t e m p o  d e

e x e c u ç ã o  p a r a  e s s e s  a l g o r i t m o s .

V 󰁥 󰁮 󰁤 󰁯  󰁤 󰁩 󰁦 󰁥 󰁲 󰁥 󰁮 󰁴 󰁥 󰁳  󰁴 󰁥 󰁭 󰁰 󰁯 󰁳  󰁤 󰁥  󰁥 󰁸 󰁥 󰁣 󰁵 ç ã 󰁯  B 󰁩 󰁧  O

A q u i  s e g u e  u m  e x e m p l o  p r á t i c o  q u e  v o c ê  p o d e  r e p r o d u z i r  e m  c a s a  c o m  u m

p e d a ç o  d e  p a p e l  e  u m  l á p i s .  S u p o n h a  q u e  v o c ê  t e n h a  q u e  d e s e n h a r  u m a

g r a d e  c o m  1 6  d i v i s õ e s .

Qual é um bom algoritmo para desenhar essa grade?

A 󰁬 󰁧 󰁯 󰁲 󰁩 󰁴 󰁭 󰁯  1
U m a  f o r m a  d e  d e s e n h a r  e s s a  g r a d e  d e  1 6  d i v i s õ e s  é  d e s e n h a r  u m a  d i v i s ã o  d e

c a d a  v e z .  L e m b r e - s e ,  a  n o t a ç ã o  B i g  O  c o n t a  o  n ú m e r o  d e  o p e r a ç õ e s .  N e s s e

e x e m p l o ,  d e s e n h a r  u m a  d i v i s ã o  é  u m a  o p e r a ç ã o .  V o c ê  p r e c i s a  d e s e n h a r  1 6

d i v i s õ e s .  Q u a n t a s  o p e r a ç õ e s  v o c ê  t e r á  d e  f a z e r  s e  d e s e n h a r  u m a  d i v i s ã o  p o r

v e z ?

Desenhando a grade executando uma divisão por vez.


É  n e c e s s á r i o  p a s s a r  p o r  1 6  e t a p a s  p a r a  d e s e n h a r  1 6  d i v i s õ e s .  Q u a l  é  o  t e m p o

d e  e x e c u ç ã o  d e s s e  a l g o r i t m o ?

A 󰁬 󰁧 󰁯 󰁲 󰁩 󰁴 󰁭 󰁯  2

T e n t e  a g o r a  e s t e  a l g o r i t m o .  D o b r e  o  p a p e l .

N e s t e  e x e m p l o ,  d o b r a r  o  p a p e l  u m a  v e z  é  u m a  o p e r a ç ã o .  V o c ê  f e z  d u a s

d i v i s õ e s  c o m  e s s a  o p e r a ç ã o !

D o b r e  o  p a p e l  d e  n o v o ,  d e  n o v o  e  d e  n o v o .
D e s d o b r e  d e p o i s  d e  q u a t r o  d o b r a s  e  v o c ê  t e r á  u m a  b e l a  g r a d e !  A  c a d a  d o b r a ,

o  n ú m e r o  d e  d i v i s õ e s  d u p l i c a .  V o c ê  f e z  1 6  d i v i s õ e s  c o m  q u a t r o  o p e r a ç õ e s !

Desenhando uma grade com quatro dobras.


V o c ê  p o d e  “ d e s e n h a r 󲀝  d u a s  v e z e s  m a i s  d i v i s õ e s  a  c a d a  d o b r a ,  l o g o ,  v o c ê

p o d e  d e s e n h a r  1 6  d i v i s õ e s  e m  q u a t r o  e t a p a s .  Q u a l  é  o  t e m p o  d e  e x e c u ç ã o

p a r a  e s s e  a l g o r i t m o ?  E n c o n t r e  o  t e m p o  d e  e x e c u ç ã o  d o s  d o i s  a l g o r i t m o s

a n t e s  d e  s e g u i r  a d i a n t e .

R e 󰁳 󰁰 󰁯 󰁳 󰁴 a 󰁳 :  O  A l g o r i t m o  1  t e m  t e m p o  d e  e x e c u ç ã o  O ( 󰁮 )  e  o  a l g o r i t m o  2  t e m

t e m p o  d e  e x e c u ç ã o  O ( l o g  󰁮 ) .

A  󰁮 󰁯 󰁴 󰁡 ç ã 󰁯  B 󰁩 󰁧  O  󰁥 󰁳 󰁴 󰁡 󰁢 󰁥 󰁬 󰁥 󰁣 󰁥  󰁯  󰁴 󰁥 󰁭 󰁰 󰁯  󰁤 󰁥  󰁥 󰁸 󰁥 󰁣 󰁵 ç ã 󰁯  󰁰 󰁡 󰁲 󰁡  󰁡  󰁰 󰁩 󰁯 󰁲

󰁨 󰁩 󰁰 ó 󰁴 󰁥 󰁳 󰁥

S u p o n h a  q u e  v o c ê  u t i l i z a  u m a  p e s q u i s a  s i m p l e s  p a r a  p r o c u r a r  o  n o m e  d e

u m a  p e s s o a  e m  u m a  a g e n d a  t e l e f ô n i c a .  V o c ê  s a b e  q u e  a  p e s q u i s a  s i m p l e s

t e m  t e m p o  d e  e x e c u ç ã o  O ( 󰁮 ) ,  o  q u e  s i g n i  c a  q u e  n a  p i o r  d a s  h i p ó t e s e s  t e r á

v e r i  c a d o c a d a n o m e d a a g e n d a t e l e f ô n i c a . N e s s e c a s o , v o c ê e s t á

p r o c u r a n d o  u m a  p e s s o a  c h a m a d a  A d i t .  E s s a  p e s s o a  é  a  p r i m e i r a  d e  s u a  l i s t a .

L o g o ,  n ã o  t e v e  d e  p a s s a r  p o r  t o d o s  o s  n o m e s  󲀓  v o c ê  a  e n c o n t r o u  n a  p r i m e i r a
t e n t a t i v a .  E s s e  a l g o r i t m o  l e v o u  o  t e m p o  d e  e x e c u ç ã o  O ( 󰁮 ) ?  O u  l e v o u  O ( 1 )

p o r q u e  e n c o n t r o u  o  q u e  q u e r i a  n a  p r i m e i r a  t e n t a t i v a ?

A  p e s q u i s a  s i m p l e s  a i n d a  a s s i m  t e m  t e m p o  d e  e x e c u ç ã o  O ( 󰁮 ) .  N e s s e  c a s o ,

v o c ê e n c o n t r o u o q u e q u e r i a i n s t a n t a n e a m e n t e . E s s a é a m e l h o r d a s

h i p ó t e s e s .  A  n o t a ç ã o  B i g  O  l e v a  e m  c o n t a  a  󰁰 i 󰁯 󰁲 d a 󰁳 h i 󰁰 ó 󰁴 e 󰁳 e 󰁳 .  E n t ã o  p o d e - s e

d i z e r  q u e ,  p a r a  o  󰁰 i 󰁯 󰁲 c a 󰁳 󰁯 ,  v o c ê  a n a l i s o u  c a d a  i t e m  d a  l i s t a .  E s s e  é  o  t e m p o

O ( 󰁮 ) .  É  u m a  g a r a n t i a  󲀓  v o c ê  s a b e ,  c o m  c e r t e z a ,  q u e  a  p e s q u i s a  s i m p l e s

n u n c a  t e r á  t e m p o  d e  e x e c u ç ã o  m a i s  l e n t o  d o  q u e  O ( 󰁮 ) .

󰁎 󰁯 󰁴 󰁡

A l é m  d o  t e m p o  d e  e x e c u ç ã o  p a r a  o  p i o r  d o s  c a s o s ,  é  i m p o r t a n t e  a n a l i s a r  o  t e m p o  d e

e x e c u ç ã o  p a r a  o  󲀜 c a s o  m é d i o 󲀝 .  O  p i o r  c a s o  e  o  c a s o  m é d i o  s e r ã o  d i s c u t i d o s  n o  C a p í t u l o  4 .

A 󰁬 󰁧 󰁵 󰁮 󰁳  󰁥 󰁸 󰁥 󰁭 󰁰 󰁬 󰁯 󰁳  󰁣 󰁯 󰁭 󰁵 󰁮 󰁳  󰁤 󰁥  󰁴 󰁥 󰁭 󰁰 󰁯  󰁤 󰁥  󰁥 󰁸 󰁥 󰁣 󰁵 ç ã 󰁯  B 󰁩 󰁧  O

A q u i  t e m o s  c i n c o  t e m p o s  d e  e x e c u ç ã o  B i g  O  q u e  v o c ê  e n c o n t r a r á  b a s t a n t e ,

o r d e n a d o s  d o  m a i s  r á p i d o  p a r a  o  m a i s  l e n t o .

󲀢  O ( l o g  󰁮 ) ,  t a m b é m  c o n h e c i d o  c o m o  󰁴 e 󰁭 󰁰 󰁯  󰁬 󰁯 g a 󰁲 í 󰁴 󰁭 i c 󰁯 .  E x e m p l o :  p e s q u i s a

b i n á r i a .

󲀢  O ( 󰁮 ) ,  c o n h e c i d o  c o m o  󰁴 e 󰁭 󰁰 󰁯  󰁬 i 󰁮 e a 󰁲 .  E x e m p l o :  p e s q u i s a  s i m p l e s .

󲀢  O ( 󰁮  *  l o g  󰁮 ) .  E x e m p l o :  u m  a l g o r i t m o  r á p i d o  d e  o r d e n a ç ã o ,  c o m o  a

o r d e n a ç ã o  q u i c k s o r t  ( e x p l i c a d a  n o  C a p í t u l o  4 ) .

󲀢  O ( 󰁮 ) .  E x e m p l o :  u m  a l g o r i t m o  l e n t o  d e  o r d e n a ç ã o ,  c o m o  a  o r d e n a ç ã o  p o r

s e l e ç ã o  ( e x p l i c a d a  n o  C a p í t u l o  2 ) .

󲀢  O ( 󰁮 ! ) .  E x e m p l o :  u m  a l g o r i t m o  b a s t a n t e  l e n t o ,  c o m o  o  d o  c a i x e i r o - v i a j a n t e

( e x p l i c a d o  a  s e g u i r ! ) .

S u p o n h a  q u e  v o c ê  e s t e j a  d e s e n h a n d o  n o v a m e n t e  a  g r a d e  d e  1 6  d i v i s õ e s  e

v o c ê p o s s a e s c o l h e r c i n c o a l g o r i t m o s d i f e r e n t e s p a r a f a z e r i s s o . S e e s c o l h e r o

p r i m e i r o  a l g o r i t m o ,  l e v a r á  u m  t e m p o  d e  e x e c u ç ã o  d e  O ( l o g  󰁮 )  p a r a

d e s e n h a r  a  g r a d e .  V o c ê  p o d e  f a z e r  d e z  o p e r a ç õ e s  p o r  s e g u n d o .  C o m  o

t e m p o  d e  e x e c u ç ã o  O ( l o g  󰁮 ) ,  v o c ê  l e v a r á  q u a t r o  o p e r a ç õ e s  p a r a  d e s e n h a r

u m a  g r a d e  c o m  1 6  d i v i s õ e s  ( l o g  1 6  é  4 ) .  L o g o ,  l e v a r á  0 , 4  s e g u n d o s  p a r a

d e s e n h a r  a  g r a d e .  E  s e  t i v e r  q u e  d e s e n h a r  1 . 0 2 4  d i v i s õ e s ?  L e v a r á  1 . 0 2 4  =  1 0

o p e r a ç õ e s ,  o u  u m  s e g u n d o  p a r a  d e s e n h a r  u m a  g r a d e  d e  1 . 0 2 4  d i v i s õ e s .  E s t e s

n ú m e r o s  s ã o  p a r a  o  p r i m e i r o  a l g o r i t m o .
O  s e g u n d o  a l g o r i t m o  é  m a i s  l e n t o :  e l e  t e m  t e m p o  d e  e x e c u ç ã o  O ( 󰁮 ) .  L e v a r á

1 6  o p e r a ç õ e s  p a r a  d e s e n h a r  1 6  d i v i s õ e s  e  l e v a r á  1 . 0 2 4  o p e r a ç õ e s  p a r a

d e s e n h a r  1 . 0 2 4  d i v i s õ e s .  Q u a n t o  t e m p o  i s s o  l e v a  e m  s e g u n d o s ?

A q u i  e s t á  q u a n t o  t e m p o  l e v a r i a  p a r a  d e s e n h a r  a  g r a d e  c o m  o s  a l g o r i t m o s

r e s t a n t e s ,  d o  m a i s  r á p i d o  a o  m a i s  l e n t o :

E x i s t e m  o u t r o s  t e m p o s  d e  e x e c u ç ã o ,  m a s  e s s e s  s ã o  o s  c i n c o  m a i s  c o m u n s .

I s s o  é  u m a  s i m p l i  c a ç ã o .  N a  r e a l i d a d e ,  v o c ê  n ã o  p o d e  c o n v e r t e r  u m  t e m p o

d e  e x e c u ç ã o  n a  n o t a ç ã o  B i g  O  p a r a  u m  n ú m e r o  d e  o p e r a ç õ e s ,  m a s  a

a p r o x i m a ç ã o  é  b o a  o  s u  c i e n t e  p o r  e n q u a n t o .  V o l t a r e m o s  a  f a l a r  d a  n o t a ç ã o

B i g  O  n o  C a p í t u l o  4 ,  d e p o i s  d e  t e r  a p r e n d i d o  u m  p o u c o  m a i s  s o b r e

a l g o r i t m o s .  P o r  e n q u a n t o ,  o s  p r i n c i p a i s  p o n t o s  s ã o  o s  s e g u i n t e s :

󲀢  A  r a p i d e z  d e  u m  a l g o r i t m o  n ã o  é  m e d i d a  e m  s e g u n d o s ,  m a s  p e l o

c r e s c i m e n t o  d o  n ú m e r o  d e  o p e r a ç õ e s .

󲀢  E m  v e z  d i s s o ,  d i s c u t i m o s  s o b r e  o  q u ã o  r a p i d a m e n t e  o  t e m p o  d e  e x e c u ç ã o

d e  u m  a l g o r i t m o  a u m e n t a  c o n f o r m e  o  n ú m e r o  d e  e l e m e n t o s  a u m e n t a .

󲀢  O  t e m p o  d e  e x e c u ç ã o  e m  a l g o r i t m o s  é  e x p r e s s o  n a  n o t a ç ã o  B i g  O .

󲀢  O ( l o g  󰁮 )  é  m a i s  r á p i d o  d o  q u e  O ( 󰁮 ) ,  e  O ( l o g  󰁮 )   c a  a i n d a  m a i s  r á p i d o

c o n f o r m e  a  l i s t a  a u m e n t a .

E 󰁘 E 󰁒 C Í C I 󰁏 󰁓

F o r n e ç a  o  t e m p o  d e  e x e c u ç ã o  p a r a  c a d a  u m  d o s  c a s o s  a  s e g u i r  e m  t e r m o s  d a

n o t a ç ã o  B i g  O .

1 . 3  V o c ê  t e m  u m  n o m e  e  d e s e j a  e n c o n t r a r  o  n ú m e r o  d e  t e l e f o n e  p a r a  e s s e

n o m e  e m  u m a  a g e n d a  t e l e f ô n i c a .

1 . 4  V o c ê  t e m  u m  n ú m e r o  d e  t e l e f o n e  e  d e s e j a  e n c o n t r a r  o  d o n o  d e l e  e m  u m a
a g e n d a  t e l e f ô n i c a .  ( D i c a :  D e v e  p r o c u r a r  p e l a  a g e n d a  i n t e i r a ! )

1 . 5  V o c ê  q u e r  l e r  o  n ú m e r o  d e  c a d a  p e s s o a  d a  a g e n d a  t e l e f ô n i c a .

1 . 6  V o c ê  q u e r  l e r  o s  n ú m e r o s  a p e n a s  d o s  n o m e s  q u e  c o m e ç a m  c o m  A .  ( I s s o

é  c o m p l i c a d o !  E s s e  a l g o r i t m o  e n v o l v e  c o n c e i t o s  q u e  s ã o  a b o r d a d o s  m a i s

p r o f u n d a m e n t e  n o  C a p í t u l o  4 .  L e i a  a  r e s p o s t a  󲀓  v o c ê   c a r á  s u r p r e s o ! )

O  󰁣 󰁡 󰁩 󰁸 󰁥 󰁩 󰁲 󰁯 - 󰁶 󰁩 󰁡 󰁪 󰁡 󰁮 󰁴 󰁥

V o c ê  p o d e  t e r  l i d o  a  ú l t i m a  s e ç ã o  e  p e n s a d o :  “ D e  m a n e i r a  a l g u m a  v o u

e x e c u t a r  u m  a l g o r i t m o  q u e  t e m  t e m p o  d e  e x e c u ç ã o  O ( 󰁮 ! ) . 󲀝  B e m ,  d e i x e - m e

t e n t a r  p r o v a r  o  c o n t r á r i o !  A q u i  e s t á  u m  e x e m p l o  d e  u m  a l g o r i t m o  c o m  u m

t e m p o  d e  e x e c u ç ã o  m u i t o  r u i m .  E l e  é  u m  p r o b l e m a  f a m o s o  d a  c i ê n c i a  d a

c o m p u t a ç ã o ,  p o i s  s e u  c r e s c i m e n t o  é  a p a v o r a n t e  e  a l g u m a s  p e s s o a s  m u i t o

i n t e l i g e n t e s  a c r e d i t a m  q u e  e l e  p o s s a  s e r  m e l h o r a d o .  E s s e  a l g o r i t m o  é

c h a m a d o  d e  “ o  p r o b l e m a  d o  c a i 󰁸 e i 󰁲 󰁯 - 󰁶 i a j a 󰁮 󰁴 e 󲀝 .

V o c ê  t e m  u m  c a i x e i r o - v i a j a n t e .

O  c a i x e i r o  p r e c i s a  i r  a  c i n c o  c i d a d e s .
O  c a i x e i r o ,  o  q u a l  c h a m a r e i  d e  O p u s ,  q u e r  p a s s a r  p o r  t o d a s  a s  c i d a d e s

p e r c o r r e n d o  u m a  d i s t â n c i a  m í n i m a .  P o d e m o s  e n x e r g a r  o  p r o b l e m a  d a

s e g u i n t e  f o r m a :  a n a l i s a r  c a d a  o r d e m  p o s s í v e l  d e  c i d a d e s  p a r a  v i s i t a r .

E l e  s o m a  a  d i s t â n c i a  t o t a l  e  e s c o l h e  o  c a m i n h o  d e  m e n o r  d i s t â n c i a .  E x i s t e m

1 2 0  p e r m u t a ç õ e s  p a r a  c i n c o  c i d a d e s ,  l o g o ,  p r e c i s a - s e  d e  1 2 0  o p e r a ç õ e s  p a r a

r e s o l v e r  o  p r o b l e m a  d e  c i n c o  c i d a d e s .  P a r a  s e i s  c i d a d e s ,  p r e c i s a - s e  d e  7 2 0

o p e r a ç õ e s  ( o u  7 2 0  p e r m u t a ç õ e s ) .  P a r a  s e t e  c i d a d e s  s ã o  n e c e s s á r i a s  5 . 0 5 0

o p e r a ç õ e s !
O número de operações aumenta drasticamente.
D e  m a n e i r a  g e r a l ,  p a r a  󰁮  i t e n s ,  é  n e c e s s á r i o  󰁮 !  ( f a t o r i a l  d e  󰁮 )  o p e r a ç õ e s  p a r a

c h e g a r  a  u m  r e s u l t a d o .  E n t ã o ,  e s t e  é  o  t e m p o  d e  e x e c u ç ã o  O ( 󰁮 ! )  o u  o  󰁴 e 󰁭 󰁰 󰁯

f a 󰁴 󰁯 󰁲 i a 󰁬 .  E s s e  a l g o r i t m o  c o n s o m e  m u i t a s  o p e r a ç õ e s ,  e x c e t o  p a r a  c a s o s

e n v o l v e n d o  n ú m e r o s  p e q u e n o s .  N o  e n t a n t o ,  u m a  v e z  q u e  l i d a m o s  c o m  m a i s

d e  1 0 0  c i d a d e s ,  é  i m p o s s í v e l  c a l c u l a r  a  r e s p o s t a  e m  f u n ç ã o  d o  t e m p o  󲀓  o  s o l

e n t r a r á  e m  c o l a p s o  a n t e s .

E s s e  é  u m  a l g o r i t m o  t e r r í v e l !  O p u s  d e v e r i a  u s a r  o u t r o ,  n ã o ?  M a s  e l e  n ã o

p o d e .  E s s e  é  u m  p r o b l e m a  s e m  s o l u ç ã o .  N ã o  e x i s t e  u m  a l g o r i t m o  m a i s

r á p i d o  p a r a  e s s e  p r o b l e m a ,  e  a s  p e s s o a s  m a i s  i n t e l i g e n t e s  a c r e d i t a m  s e r

i 󰁭 󰁰 󰁯 󰁳 󰁳 í 󰁶 e 󰁬  m e l h o r á - l o .  O  m e l h o r  q u e  s e  p o d e  f a z e r  é  c h e g a r  a  u m a  s o l u ç ã o

a p r o x i m a d a .  V e j a  o  C a p í t u l o  1 0  p a r a  s a b e r  m a i s  s o b r e  i s s o .

U m a  o b s e r v a ç ã o   n a l :  s e  v o c ê  é  u m  l e i t o r  a v a n ç a d o ,  l e i a  s o b r e  á r v o r e s

b i n á r i a s  d e  b u s c a .  N o  c a p í t u l o  s e g u i n t e ,  h á  u m a  b r e v e  d e s c r i ç ã o  d o  a s s u n t o .

R 󰁥 󰁣 󰁡 󰁰 󰁩 󰁴 󰁵 󰁬 󰁡 󰁮 󰁤 󰁯

󲀢  A  p e s q u i s a  b i n á r i a  é  m u i t o  m a i s  r á p i d a  d o  q u e  a  p e s q u i s a  s i m p l e s .

󲀢  O ( l o g  󰁮 )  é  m a i s  r á p i d o  d o  q u e  O ( 󰁮 ) ,  e  O ( l o g  󰁮 )   c a  a i n d a  m a i s  r á p i d o

c o n f o r m e  o s  e l e m e n t o s  d a  l i s t a  a u m e n t a m .

󲀢  A  r a p i d e z  d e  u m  a l g o r i t m o  n ã o  é  m e d i d a  e m  s e g u n d o s .

󲀢  O  t e m p o  d e  e x e c u ç ã o  d e  u m  a l g o r i t m o  é  m e d i d o  p o r  m e i o  d e  s e u

c 󰁲 e 󰁳 c i 󰁭 e 󰁮 󰁴 󰁯 .
󲀢  O  t e m p o  d e  e x e c u ç ã o  d o s  a l g o r i t m o s  é  e x p r e s s o  n a  n o t a ç ã o  B i g  O .
2

O 󰁲 d e 󰁮 a ç ã 󰁯  󰁰 󰁯 󰁲  󰁳 e 󰁬 e ç ã 󰁯

N e 󰁳 󰁴 e  c a 󰁰 í 󰁴 󰁵 󰁬 󰁯

󲀢  V o c ê  c o n h e c e 󰁲 á  a 󰁲 󰁲 a 󰁹 󰁳  e  l i 󰁳 󰁴 a 󰁳  e n c a d e a d a 󰁳  󲀓  d o i 󰁳  󰁴 i p o 󰁳  d e  e 󰁳 󰁴 󰁲 󰁵 󰁴 󰁵 󰁲 a

b á 󰁳 i c a .  E l e 󰁳  e 󰁳 󰁴 ã o  p o 󰁲  󰁴 o d o  l 󰁵 g a 󰁲 .  V o c ê  j á  󰁴 e 󰁶 e  a c e 󰁳 󰁳 o  a o 󰁳  a 󰁲 󰁲 a 󰁹 󰁳  n o

c a p í 󰁴 󰁵 l o  1  e  c o n 󰁴 i n 󰁵 a 󰁲 á  󰁳 e  󰁵 󰁴 i l i 󰁺 a n d o  d e l e 󰁳  p o 󰁲  p 󰁲 a 󰁴 i c a m e n 󰁴 e  󰁴 o d o 󰁳

o 󰁳  c a p í 󰁴 󰁵 l o 󰁳 .  A 󰁲 󰁲 a 󰁹 󰁳  󰁳 ã o  f 󰁵 n d a m e n 󰁴 a i 󰁳 ,  e n 󰁴 ã o  p 󰁲 e 󰁳 󰁴 e  a 󰁴 e n ç ã o !  P o 󰁲 é m

a l g 󰁵 m a 󰁳  󰁶 e 󰁺 e 󰁳  é  m e l h o 󰁲  󰁵 󰁳 a 󰁲  a  l i 󰁳 󰁴 a  e n c a d e a d a  e m  󰁶 e 󰁺  d o  a 󰁲 󰁲 a 󰁹 .  E 󰁳 󰁴 e
c a p í 󰁴 󰁵 l o  e 󰁸 p l a n a  o 󰁳  p 󰁲 ó 󰁳  e  o 󰁳  c o n 󰁴 󰁲 a 󰁳  d e  a m b a 󰁳  a 󰁳  e 󰁳 󰁴 󰁲 󰁵 󰁴 󰁵 󰁲 a 󰁳  p a 󰁲 a

q 󰁵 e  p o 󰁳 󰁳 a  d e c i d i 󰁲  q 󰁵 a l  é  a  i d e a l  p a 󰁲 a  o  󰁳 e 󰁵  a l g o 󰁲 i 󰁴 m o .

󲀢  V o c ê  a p 󰁲 e n d e 󰁲 á  a  f a 󰁺 e 󰁲  o  󰁳 e 󰁵  p 󰁲 i m e i 󰁲 o  a l g o 󰁲 i 󰁴 m o  d e  o 󰁲 d e n a ç ã o .

M 󰁵 i 󰁴 o 󰁳  a l g o 󰁲 i 󰁴 m o 󰁳  󰁳 ó  f 󰁵 n c i o n a m  󰁳 e  o 󰁳  d a d o 󰁳  e 󰁳 󰁴 i 󰁶 e 󰁲 e m  o 󰁲 d e n a d o 󰁳 .

L e m b 󰁲 a - 󰁳 e  d a  p e 󰁳 q 󰁵 i 󰁳 a  b i n á 󰁲 i a ?  V o c ê  󰁳 ó  p o d e  e 󰁸 e c 󰁵 󰁴 á - l a  󰁳 e  o 󰁳

e l e m e n 󰁴 o 󰁳  d e  󰁳 󰁵 a  l i 󰁳 󰁴 a  e 󰁳 󰁴 i 󰁶 e 󰁲 e m  o 󰁲 d e n a d o 󰁳 .  E 󰁳 󰁴 e  c a p í 󰁴 󰁵 l o  l h e

a p 󰁲 e 󰁳 e n 󰁴 a 󰁲 á  a  o 󰁲 d e n a ç ã o  p o 󰁲  󰁳 e l e ç ã o .  A  m a i o 󰁲 i a  d a 󰁳  l i n g 󰁵 a g e n 󰁳  d e

p 󰁲 o g 󰁲 a m a ç ã o  c o n 󰁴 é m  n a 󰁴 i 󰁶 a m e n 󰁴 e  o 󰁳  a l g o 󰁲 i 󰁴 m o 󰁳  d e  󰁳 e l e ç ã o ,  e n 󰁴 ã o

󰁲 a 󰁲 a m e n 󰁴 e  󰁴 e 󰁲 á  d e  e 󰁳 c 󰁲 e 󰁶 e 󰁲  a  󰁳 󰁵 a  p 󰁲 ó p 󰁲 i a  󰁶 e 󰁲 󰁳 ã o  a  p a 󰁲 󰁴 i 󰁲  d o  󰁺 e 󰁲 o .  N o

e n 󰁴 a n 󰁴 o  a  o 󰁲 d e n a ç ã o  p o 󰁲  󰁳 e l e ç ã o  é  󰁵 m  󰁴 󰁲 a m p o l i m  p a 󰁲 a  o  q 󰁵 i c k 󰁳 o 󰁲 󰁴 ,

q 󰁵 e  a b o 󰁲 d a 󰁲 e i  n o  p 󰁲 ó 󰁸 i m o  c a p í 󰁴 󰁵 l o .  O  q 󰁵 i c k 󰁳 o 󰁲 󰁴  é  󰁵 m  a l g o 󰁲 i 󰁴 m o

i m p o 󰁲 󰁴 a n 󰁴 e  e  󰁳 e 󰁲 á  c o m p 󰁲 e e n d i d o  m a i 󰁳  f a c i l m e n 󰁴 e  󰁳 e  󰁶 o c ê  j á

c o n h e c e 󰁲  a l g 󰁵 m  󰁴 i p o  d e  a l g o 󰁲 i 󰁴 m o  d e  o 󰁲 d e n a ç ã o .

O  󰁱 󰁵 e  󰁶 󰁯 c ê  󰁰 󰁲 e c i 󰁳 a  󰁳 a b e 󰁲

P a r a  e n t e n d e r  a  a n á l i s e  d e  d e s e m p e n h o  d e s t e  c a p í t u l o ,  v o c ê  p r e c i s a  c o n h e c e r  a  n o t a ç ã o  B i g  O

e  l o g a r i t m o s .  S e  n ã o  c o n h e c e ,  s u g i r o  q u e  l e i a  o  C a p í t u l o  1 .  A  n o t a ç ã o  B i g  O  é  u t i l i z a d a  e m

t o d o  e s t e  l i v r o .

C 󰁯 󰁭 󰁯  f 󰁵 󰁮 c i 󰁯 󰁮 a  a  󰁭 e 󰁭 ó 󰁲 i a

I m a g i n e  q u e  v o c ê  v a i  a  u m  s h o w  e  p r e c i s a  g u a r d a r  a s  s u a s  c o i s a s  n a

c h a p e l a r i a .  A l g u m a s  g a v e t a s  e s t ã o  d i s p o n í v e i s .
C a d a  g a v e t a  p o d e  g u a r d a r  u m  e l e m e n t o .  V o c ê  d e s e j a  g u a r d a r  d u a s  c o i s a s ,

e n t ã o  p e d e  d u a s  g a v e t a s .

V o c ê  g u a r d o u  a s  s u a s  d u a s  c o i s a s  a q u i .

V o c ê  e s t á  p r o n t o  p a r a  o  s h o w !  É  m a i s  o u  m e n o s  a s s i m  q u e  a  m e m ó r i a  d o

s e u  c o m p u t a d o r  f u n c i o n a .  O  c o m p u t a d o r  s e  p a r e c e  c o m  u m  g r a n d e

c o n j u n t o  d e  g a v e t a s ,  e  c a d a  g a v e t a  t e m  s e u  e n d e r e ç o .
f e 󰃘  e e b  é  o  e n d e r e ç o  d e  u m  s l o t  n a  m e m ó r i a .

C a d a  v e z  q u e  q u e r  a r m a z e n a r  u m  i t e m  n a  m e m ó r i a ,  v o c ê  p e d e  a o

c o m p u t a d o r  u m  p o u c o  d e  e s p a ç o  e  e l e  t e  d á  u m  e n d e r e ç o  n o  q u a l  v o c ê  p o d e

a r m a z e n a r  o  s e u  i t e m .  S e  q u i s e r  a r m a z e n a r  m ú l t i p l o s  i t e n s ,  e x i s t e m  d u a s

m a n e i r a s  p a r a  f a z e r  i s s o :  a r r a y s  e  l i s t a s .  F a l a r e i  s o b r e  a r r a y s  e  l i s t a s  d e p o i s ,

b e m  c o m o  s o b r e  o s  p r ó s  e  c o n t r a s  d e  c a d a  u m .  N ã o  e x i s t e  a p e n a s  u m a

m a n e i r a  c o r r e t a  p a r a  a r m a z e n a r  i t e n s  e m  c a d a  u m  d o s  c a s o s ,  e n t ã o  é

i m p o r t a n t e  s a b e r  a s  d i f e r e n ç a s .

A 󰁲 󰁲 a 󰁹 󰁳  e  󰁬 i 󰁳 󰁴 a 󰁳  e 󰁮 c a d e a d a 󰁳
A l g u m a s  v e z e s ,  v o c ê  p r e c i s a  a r m a z e n a r  u m a  l i s t a  d e  e l e m e n t o s  n a  m e m ó r i a .

S u p o n h a  q u e  v o c ê  e s t e j a  e s c r e v e n d o  u m  a p l i c a t i v o  p a r a  g e r e n c i a r  o s  s e u s

a f a z e r e s .  É  n e c e s s á r i o  a r m a z e n a r  o s  s e u s  a f a z e r e s  c o m o  u m a  l i s t a  n a

m e m ó r i a .

V o c ê  d e v e  u s a r  u m  a r r a y  o u  u m a  l i s t a  e n c a d e a d a ?  V a m o s  a r m a z e n a r  o s

a f a z e r e s  p r i m e i r o  e m  u m  a r r a y ,  p o i s  a s s i m  a  c o m p r e e n s ã o   c a  m a i s  f á c i l .

U s a r  u m  a r r a y  s i g n i  c a  q u e  t o d a s  a s  s u a s  t a r e f a s  e s t ã o  a r m a z e n a d a s

c o n t i g u a m e n t e  ( u m a  a o  l a d o  d a  o u t r a )  n a  m e m ó r i a .
A g o r a ,  s u p o n h a  q u e  v o c ê  q u e i r a  a d i c i o n a r  m a i s  u m a  t a r e f a .  N o  e n t a n t o  a

p r ó x i m a  g a v e t a  e s t á  o c u p a d a  p o r  c o i s a s  d e  o u t r a  p e s s o a !

É  c o m o  s e  v o c ê  e s t i v e s s e  i n d o  a o  c i n e m a  c o m  o s  s e u s  a m i g o s  e  e n c o n t r a s s e

u m  l u g a r  p a r a  s e n t a r ,  m a s  o u t r o  a m i g o  s e  j u n t a s s e  a  v o c ê s  e  n ã o  h o u v e s s e

l u g a r  p a r a  e l e .  V o c ê s  t o d o s  p r e c i s a r i a m  s e  m o v e r  e  e n c o n t r a r  u m  l u g a r  o n d e

t o d o s  c o u b e s s e m .  N e s t e  c a s o ,  v o c ê  p r e c i s a r i a  s o l i c i t a r  a o  c o m p u t a d o r  u m a

á r e a  d e  m e m ó r i a  e m  q u e  c o u b e s s e m  t o d a s  a s  s u a s  t a r e f a s .  E n t ã o  v o c ê  a s

m o v e r i a  p a r a  l á .

S e  o u t r o  a m i g o  a p a r e c e s s e ,  v o c ê s   c a r i a m  s e m  l u g a r  n o v a m e n t e  󲀓  e  t o d o s

p r e c i s a r i a m  s e  m o v e r  u m a  s e g u n d a  v e z !  Q u e  i n c ô m o d o .  D a  m e s m a  f o r m a ,

a d i c i o n a r  n o v o s  i t e n s  a  u m  a r r a y  s e r á  m u i t o  l e n t o .  U m a  m a n e i r a  f á c i l  d e

r e s o l v e r  i s s o  é  “ r e s e r v a n d o  l u g a r e s 󲀝 :  m e s m o  q u e  v o c ê  t e n h a  t r ê s  i t e n s  n a  s u a

l i s t a  d e  t a r e f a s ,  v o c ê  p o d e  s o l i c i t a r  a o  c o m p u t a d o r  d e z  e s p a ç o s ,  s ó  p o r  v i a

d a s  d ú v i d a s .  E n t ã o ,  v o c ê  p o d e  a d i c i o n a r  d e z  i t e n s  a  s u a  l i s t a  s e m  p r e c i s a r

m o v e r  n a d a .  I s t o  é  u m a  b o a  m a n e i r a  d e  c o n t o r n a r  o  p r o b l e m a ,  m a s  v o c ê
p r e c i s a   c a r  a t e n t o  à s  d e s v a n t a g e n s :

󲀢  V o c ê  p o d e  n ã o  p r e c i s a r  d o s  e s p a ç o s  e x t r a s  q u e  r e s e r v o u ;  e n t ã o  a  m e m ó r i a

s e r á  d e s p e r d i ç a d a .  V o c ê  n ã o  e s t á  u t i l i z a n d o  a  m e m ó r i a ,  m a s  n i n g u é m

m a i s  p o d e  u s á - l a  t a m b é m .

󲀢  V o c ê  p o d e  p r e c i s a r  a d i c i o n a r  m a i s  d e  d e z  i t e n s  a  s u a  l i s t a  d e  t a r e f a s ,  e n t ã o

v o c ê t e r á d e m o v e r s e u s i t e n s d e q u a l q u e r m a n e i r a .

E m b o r a  s e j a  u m a  b o a  f o r m a  d e  c o n t o r n a r  o  p r o b l e m a ,  n ã o  é  u m a  s o l u ç ã o

p e r f e i t a .  L i s t a s  e n c a d e a d a s  r e s o l v e m  e s t e  p r o b l e m a  d e  a d i ç ã o  d e  i t e n s .

L i 󰁳 󰁴 a 󰁳  e 󰁮 c a d e a d a 󰁳

C o m  a s  l i s t a s  e n c a d e a d a s ,  s e u s  i t e n s  p o d e m  e s t a r  e m  q u a l q u e r  l u g a r  d a

m e m ó r i a .

C a d a  i t e m  a r m a z e n a  o  e n d e r e ç o  d o  p r ó x i m o  i t e m  d a  l i s t a .  U m  m o n t e  d e

e n d e r e ç o s  a l e a t ó r i o s  d e  m e m ó r i a  e s t ã o  l i g a d o s .
Endereços de memória ligados.
É  c o m o  u m a  c a ç a  a o  t e s o u r o .  V o c ê  v a i  a o  p r i m e i r o  e n d e r e ç o  e  e l e  d i z  “ o

p r ó x i m o  i t e m  p o d e  s e r  e n c o n t r a d o  n o  e n d e r e ç o  1 2 3 󲀝 .  E n t ã o  v a i  a o  e n d e r e ç o

1 2 3  e  e l e  d i z  “ O  p r ó x i m o  i t e m  p o d e  s e r  e n c o n t r a d o  n o  e n d e r e ç o  8 4 7 󲀝 ,  e

a s s i m  p o r  d i a n t e .  A d i c i o n a r  u m  i t e m  a  u m a  l i s t a  e n c a d e a d a  é  f á c i l :  v o c ê  o

c o l o c a  e m  q u a l q u e r  l u g a r  d a  m e m ó r i a  e  a r m a z e n a  o  e n d e r e ç o  d o  i t e m

a n t e r i o r .

C o m  a s  l i s t a s  e n c a d e a d a s  v o c ê  n u n c a  p r e c i s a  m o v e r  o s  s e u s  i t e n s ;  t a m b é m

e v i t a  o u t r o  p r o b l e m a .  D i g a m o s  q u e  v o c ê  v á  a  u m  c i n e m a  f a m o s o  c o m  o s

s e u s  a m i g o s .  V o c ê s  s e i s  e s t ã o  t e n t a n d o  p r o c u r a r  u m  l u g a r  p a r a  s e n t a r ,  m a s  o

c i n e m a  e s t á  c h e i o .  N ã o  h á  s e i s  l u g a r e s  j u n t o s .  B e m ,  a l g u m a s  v e z e s  i s s o

a c o n t e c e  c o m  a r r a y s .  I m a g i n e  q u e  e s t á  t e n t a n d o  e n c o n t r a r  1 0 . 0 0 0  s l o t s  p a r a

u m  a r r a y .  S u a  m e m ó r i a  t e m  1 0 . 0 0 0  s l o t s ,  m a s  e l e s  n ã o  e s t ã o  j u n t o s .  V o c ê

n ã o  c o n s e g u e  a r r u m a r  u m  l u g a r  p a r a  o  s e u  a r r a y !  U s a r  u m a  l i s t a  e n c a d e a d a

s e r i a  c o m o  d i z e r  “ v a m o s  n o s  d i v i d i r  e  a s s i s t i r  a o   l m e 󲀝 .  S e  e x i s t i r  e s p a ç o  n a

m e m ó r i a ,  v o c ê  t e r á  e s p a ç o  p a r a  a  s u a  l i s t a  e n c a d e a d a .

S e  a s  l i s t a s  e n c a d e a d a s  s ã o  m u i t o  m e l h o r e s  p a r a  i n s e r ç õ e s ,  p a r a  q u e  s e r v e m

o s  a r r a y s ?

A 󰁲 󰁲 a 󰁹 󰁳
O s  w e b s i t e s  q u e  a p r e s e n t a m  l i s t a s  “ t o p  1 0 󲀝  u s a m  u m a  t á t i c a  t r a p a c e i r a  p a r a

c o n s e g u i r  m a i s  v i s u a l i z a ç õ e s .  E m  v e z  d e  m o s t r a r e m  a  l i s t a  e m  u m a  ú n i c a

p á g i n a ,  e l e s  c o l o c a m  u m  i t e m  e m  c a d a  p á g i n a  e  f a z e m  v o c ê  c l i c a r  e m

“ p r ó x i m o 󲀝  p a r a  l e r  o  i t e m  s e g u i n t e .  P o r  e x e m p l o ,  “ O s  1 0  m e l h o r e s  v i l õ e s  d a

T V 󲀝  n ã o  e s t a r ã o  l i s t a d o s  e m  u m a  ú n i c a  p á g i n a ,  e m  v e z  d i s s o ,  v o c ê  c o m e ç a r á

p e l o  # 1 0  ( N e w m a n )  e  s e g u i r á  c l i c a n d o  e m  “ p r ó x i m o 󲀝  a t é  c h e g a r  e m  # 1

( G u s t a v o  F r i n g ) .  E s t a  t é c n i c a  f o r n e c e  a o s  s i t e s  d e z  p á g i n a s  i n t e i r a s  p a r a

i n c l u i r  a n ú n c i o s ,  m a s   c a  c h a t o   c a r  c l i c a n d o  e m  “ p r ó x i m o 󲀝  n o v e  v e z e s  a t é

c h e g a r  a o  n ú m e r o  1 .  S e r i a  m u i t o  m e l h o r  s e  a  l i s t a  e s t i v e s s e  e m  u m a  ú n i c a

p á g i n a  e  v o c ê  p u d e s s e  c l i c a r  n o  n o m e  d e  c a d a  v i l ã o  p a r a  s a b e r  m a i s .

L i s t a s  e n c a d e a d a s  t ê m  u m  p r o b l e m a  s i m i l a r .  S u p o n h a  q u e  v o c ê  q u e i r a  l e r  o

ú l t i m o  i t e m  d e  u m a  l i s t a  e n c a d e a d a .  V o c ê  n ã o  p o d e  f a z e r  i s s o  p o r q u e  n ã o

s a b e  o  e n d e r e ç o  d e l e .  E m  v e z  d i s s o ,  p r e c i s a  i r  a o  i t e m  # 1  p a r a  p e g a r  o

e n d e r e ç o  d o  i t e m  # 2 .  E n t ã o ,  é  n e c e s s á r i o  i r  a o  i t e m  # 2  p a r a  e n c o n t r a r  o

e n d e r e ç o  d o  i t e m  # 3 ,  e  a s s i m  p o r  d i a n t e ,  a t é  c o n s e g u i r  o  e n d e r e ç o  d o  ú l t i m o
i t e m .  L i s t a s  e n c a d e a d a s  s ã o  ó t i m a s  s e  v o c ê  q u i s e r  l e r  t o d o s  o s  i t e n s ,  u m  d e

c a d a  v e z :  v o c ê  p o d e  l e r  u m  i t e m ,  s e g u i r  p a r a  o  e n d e r e ç o  d o  p r ó x i m o  i t e m  e

f a z e r  i s s o  a t é  o   m  d a  l i s t a .  M a s  s e  v o c ê  q u i s e r  p u l a r  d e  u m  i t e m  p a r a  o u t r o ,

a s  l i s t a s  e n c a d e a d a s  s ã o  t e r r í v e i s .

C o m  a r r a y s  é  d i f e r e n t e .  V o c ê  s a b e  o  e n d e r e ç o  d e  c a d a  i t e m .  P o r  e x e m p l o ,

s u p o n h a  q u e  s e u  a r r a y  t e n h a  c i n c o  i t e n s  e  q u e  v o c ê  s a i b a  q u e  o  p r i m e i r o  e s t á

n o  e n d e r e ç o  0 0 .  Q u a l  é  o  e n d e r e ç o  d o  i t e m  # 5 ?

A  m a t e m á t i c a  l h e  d á  a  r e s p o s t a :  e s t á  n o  e n d e r e ç o  0 4 .  A r r a y s  s ã o  ó t i m o s  s e

v o c ê d e s e j a l e r e l e m e n t o s a l e a t ó r i o s , p o i s p o d e e n c o n t r a r q u a l q u e r e l e m e n t o

i n s t a n t a n e a m e n t e  e m  u m  a r r a y .  N a  l i s t a  e n c a d e a d a ,  o s  e l e m e n t o s  n ã o  e s t ã o

p r ó x i m o s  u n s  d o s  o u t r o s ,  e n t ã o  v o c ê  n ã o  p o d e  c a l c u l a r  i n s t a n t a n e a m e n t e  a

p o s i ç ã o  d e  u m  e l e m e n t o  n a  m e m ó r i a  󲀓  p r e c i s a  i r  a o  p r i m e i r o  e l e m e n t o  p a r a

e n c o n t r a r  o  e n d e r e ç o  d o  s e g u n d o ,  e n t ã o  i r  a o  s e g u n d o  e l e m e n t o  p a r a

e n c o n t r a r  o  e n d e r e ç o  d o  t e r c e i r o  e  s e g u i r  f a z e n d o  i s s o  a t é  c h e g a r  a o

e l e m e n t o  q u e  d e s e j a .

T e 󰁲 󰁭 i 󰁮 󰁯 󰁬 󰁯 g i a

O s  e l e m e n t o s  e m  u m  a r r a y  s ã o  n u m e r a d o s .  E s s a  n u m e r a ç ã o  c o m e ç a  n o  0 ,

n ã o  n o  1 .  N e s t e  a r r a y ,  p o r  e x e m p l o ,  o  n ú m e r o  2 0  e s t á  n a  p o s i ç ã o  1 .

O  n ú m e r o  1 0  e s t á  n a  p o s i ç ã o  0 .  I s s o  g e r a l m e n t e  c o n f u n d e  n o v o s

p r o g r a m a d o r e s .  C o m e ç a r  n o  0  s i m p l i  c a  t o d o s  o s  t i p o s  d e  a r r a y  n a

p r o g r a m a ç ã o ,  l o g o ,  o s  p r o g r a m a d o r e s  n ã o  p o d e m  f u g i r  d i s s o .  Q u a s e  t o d a s

a s  l i n g u a g e n s  d e  p r o g r a m a ç ã o  c o m e ç a r ã o  o s  a r r a y s  n u m e r a n d o  o  p r i m e i r o

e l e m e n t o  c o m o  0 .  L o g o  v o c ê  s e  a c o s t u m a !

A  p o s i ç ã o  d e  u m  e l e m e n t o  é  c h a m a d a  d e  í 󰁮 d 󰁩 c e .  P o r t a n t o ,  e m  v e z  d e  d i z e r  “ o
n ú m e r o  2 0  e s t á  n a  󰁰 󰁯 󰁳 󰁩 ç ã 󰁯  1 󲀝 ,  a  t e r m i n o l o g i a  c o r r e t a  s e r i a  d i z e r  “ o  n ú m e r o

2 0  e s t á  n o  í 󰁮 d 󰁩 c e  1 󲀝 .  U s a r e i  í n d i c e  p a r a  f a l a r  d e  󰁰 󰁯 󰁳 󰁩 ç ã 󰁯  n e s t e  l i v r o .

A q u i  e s t á  o  t e m p o  d e  e x e c u ç ã o  p a r a  o p e r a ç õ e s  c o m u n s  d e  a r r a y s  e  l i s t a s .

P e r g u n t a :  P o r  q u e  é  n e c e s s á r i o  t e m p o  d e  e x e c u ç ã o  O ( 󰁮 )  p a r a  i n s e r i r  u m

e l e m e n t o  e m  u m  a r r a y ?  S u p o n h a  q u e  v o c ê  q u e i r a  i n s e r i r  u m  e l e m e n t o  n o

c o m e ç o  d e  u m  a r r a y .  C o m o  f a r i a  i s s o ?  Q u a n t o  t e m p o  l e v a r i a ?  E n c o n t r e  a s

r e s p o s t a s  n o   n a l  d e s t a  s e ç ã o !

E 󰁘 E 󰁒 C Í C I O 󰁓

2 . 1  S u p o n h a  q u e  v o c ê  e s t e j a  c r i a n d o  u m  a p l i c a t i v o  p a r a  a c o m p a n h a r  a s  s u a s

 n a n ç a s .

T o d o s  o s  d i a s  v o c ê  a n o t a r á  t u d o  o  q u e  g a s t o u  e  o n d e  g a s t o u .  N o   n a l  d o

m ê s ,  v o c ê  d e v e r á  r e v i s a r  o s  s e u s  g a s t o s  e  r e s u m i r  o  q u a n t o  g a s t o u .  L o g o ,

v o c ê t e r á u m m o n t e d e i n s e r ç õ e s e p o u c a s l e i t u r a s . V o c ê d e v e r á u s a r u m

a r r a y  o u  u m a  l i s t a  p a r a  i m p l e m e n t a r  e s t e  a p l i c a t i v o ?

I 󰁮 󰁳 e 󰁲 i 󰁮 d 󰁯  a 󰁬 g 󰁯  󰁮 󰁯  󰁭 e i 󰁯  d a  󰁬 i 󰁳 󰁴 a

I m a g i n e  q u e  v o c ê  q u e i r a  q u e  a  s u a  l i s t a  d e  t a r e f a s  s e  p a r e ç a  m a i s  c o m  u m

c a l e n d á r i o .  A n t e s ,  v o c ê  a d i c i o n a v a  o s  i t e n s  a o   n a l  d a  l i s t a .  A g o r a ,  q u e r
a d i c i o n a r  s u a s  t a r e f a s  n a  o r d e m  e m  q u e  e l a s  d e v e m  s e r  r e a l i z a d a s .

Lista desordenada.
O  q u e  s e r i a  m e l h o r  s e  v o c ê  q u i s e s s e  i n s e r i r  e l e m e n t o s  n o  m e i o  d e  u m a  l i s t a :

a r r a y s  o u  l i s t a s  e n c a d e a d a s ?  U s a n d o  l i s t a s  e n c a d e a d a s ,  b a s t a  m u d a r  o

e n d e r e ç o  p a r a  o  q u a l  o  e l e m e n t o  a n t e r i o r  e s t á  a p o n t a n d o .

J á  p a r a  a r r a y s ,  v o c ê  d e v e  m o v e r  t o d o s  o s  i t e n s  q u e  e s t ã o  a b a i x o  d o  e n d e r e ç o

d e  i n s e r ç ã o .
S e  n ã o  h o u v e r  e s p a ç o ,  p o d e  s e r  n e c e s s á r i o  m o v e r  t u d o  p a r a  u m  n o v o  l o c a l !

P o r  i s s o ,  l i s t a s  e n c a d e a d a s  s ã o  m e l h o r e s  c a s o  v o c ê  q u e i r a  i n s e r i r  u m

e l e m e n t o  n o  m e i o  d e  u m a  l i s t a .

D e 󰁬 e ç õ e 󰁳

E  s e  v o c ê  q u i s e r  d e l e t a r  u m  e l e m e n t o ?  N o v a m e n t e ,  é  m a i s  f á c i l  f a z e r  i s s o

u s a n d o  l i s t a s  e n c a d e a d a s ,  p o i s  é  n e c e s s á r i o  m u d a r  a p e n a s  o  e n d e r e ç o  p a r a  o

q u a l  o  e l e m e n t o  a n t e r i o r  e s t á  a p o n t a n d o .  C o m  a r r a y s ,  t u d o  p r e c i s a  s e r

m o v i d o  q u a n d o  u m  e l e m e n t o  é  e l i m i n a d o .

A o  c o n t r á r i o  d o  q u e  o c o r r e  c o m  a s  i n s e r ç õ e s ,  a  e l i m i n a ç ã o  d e  e l e m e n t o s

s e m p r e  f u n c i o n a r á .  A  i n s e r ç ã o  p o d e r á  f a l h a r  q u a n d o  n ã o  h o u v e r  e s p a ç o

s u  c i e n t e  n a  m e m ó r i a .

A q u i  e s t ã o  o s  t e m p o s  d e  e x e c u ç ã o  p a r a  a s  o p e r a ç õ e s  m a i s  c o m u n s  e m  a r r a y s

e  l i s t a s  e n c a d e a d a s .

V a l e  a  p e n a  m e n c i o n a r  q u e  i n s e r ç õ e s  e  e l i m i n a ç õ e s  t e r ã o  t e m p o  d e  e x e c u ç ã o

O ( 1 )  s o m e n t e  s e  v o c ê  p u d e r  a c e s s a r  i n s t a n t a n e a m e n t e  o  e l e m e n t o  a  s e r
d e l e t a d o .  É  u m a  p r á t i c a  c o m u m  a c o m p a n h a r  o  p r i m e i r o  e  o  ú l t i m o  i t e m  d e

u m a  l i s t a  e n c a d e a d a  p a r a  q u e  o  t e m p o  d e  e x e c u ç ã o  p a r a  d e l e t á - l o s  s e j a  O ( 1 ) .

O  q u e  é  m a i s  u s a d o :  a r r a y s  o u  l i s t a s ?  O b v i a m e n t e ,  i s s o  d e p e n d e  d o  c a s o  e m

q u e  s e  a p l i c a m .  E n t r e t a n t o  o s  a r r a y s  s ã o  m a i s  c o m u n s  p o r q u e  p e r m i t e m

a c e s s o  a l e a t ó r i o .  E x i s t e m  d o i s  t i p o s  d e  a c e s s o :  o  a 󰁬 e a 󰁴 ó 󰁲 󰁩 󰁯  e  o  󰁳 e 󰁱 󰁵 e 󰁮 c 󰁩 a 󰁬 . O

s e q u e n c i a l  s i g n i  c a  l e r  o s  e l e m e n t o s ,  u m  p o r  u m ,  c o m e ç a n d o  p e l o  p r i m e i r o .

L i s t a s  e n c a d e a d a s  󰁳 ó  p o d e m  l i d a r  c o m  a c e s s o  s e q u e n c i a l .  S e  v o c ê  q u i s e r  l e r  o

d é c i m o  e l e m e n t o  d e  u m a  l i s t a  e n c a d e a d a ,  p r i m e i r o  p r e c i s a r á  l e r  o s  n o v e

e l e m e n t o s  a n t e r i o r e s  p a r a  c h e g a r  a o  e n d e r e ç o  d o  d é c i m o  e l e m e n t o .  O

a l e a t ó r i o  p e r m i t e  q u e  v o c ê  p u l e  d i r e t o  p a r a  o  d é c i m o  e l e m e n t o .  M u i t o s

c a s o s  r e q u e r e m  o  a c e s s o  a l e a t ó r i o ,  o  q u e  f a z  o s  a r r a y s  s e r e m  m a i s  u t i l i z a d o s .

A r r a y s  e  l i s t a s  s ã o  u s a d o s  p a r a  i m p l e m e n t a r  o u t r a s  e s t r u t u r a s  d e  d a d o s  ( i s s o

s e r á  e x p l i c a d o  m a i s  a d i a n t e ) .

E 󰁘 E 󰁒 C Í C I O 󰁓

2 . 2  S u p o n h a  q u e  v o c ê  e s t e j a  c r i a n d o  u m  a p l i c a t i v o  p a r a  a n o t a r  o s  p e d i d o s

d o s  c l i e n t e s  e m  u m  r e s t a u r a n t e .  S e u  a p l i c a t i v o  p r e c i s a  d e  u m a  l i s t a  d e

p e d i d o s .  O s  g a r ç o n s  a d i c i o n a m  o s  p e d i d o s  a  e s s a  l i s t a  e  o s  c h e f e s  r e t i r a m

o s  p e d i d o s  d a  l i s t a .  F u n c i o n a  c o m o  u m a   l a .  O s  g a r ç o n s  c o l o c a m  o s

p e d i d o s  n o   n a l  d a   l a  e  o s  c h e f e s  r e t i r a m  o s  p e d i d o s  d o  c o m e ç o  d e l a

p a r a  c o z i n h á - l o s .

V o c ê  u s a r i a  u m  a r r a y  o u  u m a  l i s t a  e n c a d e a d a  p a r a  i m p l e m e n t a r  e s s a  l i s t a ?

( D i c a :  l i s t a s  e n c a d e a d a s  s ã o  b o a s  p a r a  i n s e r ç õ e s / e l i m i n a ç õ e s  e  a r r a y s  s ã o

b o n s  p a r a  a c e s s o  a l e a t ó r i o .  O  q u e  f a z e r  n e s t e  c a s o ? )

2 . 3  V a m o s  a n a l i s a r  u m  e x p e r i m e n t o .  I m a g i n e  q u e  o  F a c e b o o k  g u a r d a  u m a
l i s t a  d e  u s u á r i o s .  Q u a n d o  a l g u é m  t e n t a  a c e s s a r  o  F a c e b o o k ,  u m a  b u s c a  é

f e i t a  p e l o  n o m e  d e  u s u á r i o .  S e  o  n o m e  d a  p e s s o a  e s t á  n a  l i s t a ,  e l a  p o d e

c o n t i n u a r  o  a c e s s o .  A s  p e s s o a s  a c e s s a m  o  F a c e b o o k  c o m  m u i t a

f r e q u ê n c i a ,  e n t ã o  e x i s t e m  m u i t a s  b u s c a s  n e s s a  l i s t a .  P r e s u m a  q u e  o

F a c e b o o k  u s a  a  p e s q u i s a  b i n á r i a  p a r a  p r o c u r a r  u m  n o m e  n a  l i s t a .  A

p e s q u i s a  b i n á r i a  r e q u e r  a c e s s o  a l e a t ó r i o  󲀓  v o c ê  p r e c i s a  s e r  c a p a z  d e

a c e s s a r  o  m e i o  d a  l i s t a  d e  n o m e s  i n s t a n t a n e a m e n t e .  S a b e n d o  d i s s o ,  v o c ê

i m p l e m e n t a r i a  e s s a  l i s t a  c o m o  u m  a r r a y  o u  u m a  l i s t a  e n c a d e a d a ?

2 . 4  A s  p e s s o a s  s e  i n s c r e v e m  n o  F a c e b o o k  c o m  m u i t a  f r e q u ê n c i a  t a m b é m .

S u p o n h a  q u e  v o c ê  d e c i d a  u s a r  u m  a r r a y  p a r a  a r m a z e n a r  a  l i s t a  d e

u s u á r i o s .  Q u a i s  a s  d e s v a n t a g e n s  d e  u m  a r r a y  e m  r e l a ç ã o  à s  i n s e r ç õ e s ?  E m

p a r t i c u l a r ,  i m a g i n e  q u e  v o c ê  e s t á  u s a n d o  a  p e s q u i s a  b i n á r i a  p a r a  b u s c a r

o s  l o g i n s .  O  q u e  a c o n t e c e  q u a n d o  v o c ê  a d i c i o n a  n o v o s  u s u á r i o s  e m  u m

a r r a y ?

2 . 5  N a  v e r d a d e ,  o  F a c e b o o k  n ã o  u s a  n e m  a r r a y s  n e m  l i s t a s  e n c a d e a d a s  p a r a

a r m a z e n a r  i n f o r m a ç õ e s .  V a m o s  c o n s i d e r a r  u m a  e s t r u t u r a  d e  d a d o s

h í b r i d a :  u m  a r r a y  d e  l i s t a s  e n c a d e a d a s .  V o c ê  t e m  u m  a r r a y  c o m  2 6  s l o t s .

C a d a  s l o t  a p o n t a  p a r a  u m a  l i s t a  e n c a d e a d a .  P o r  e x e m p l o ,  o  p r i m e i r o  s l o t

d o  a r r a y  a p o n t a  p a r a  u m a  l i s t a  e n c a d e a d a  q u e  c o n t é m  o s  u s u á r i o s  q u e

c o m e ç a m  c o m  a  l e t r a  A .  O  s e g u n d o  s l o t  a p o n t a  p a r a  a  l i s t a  e n c a d e a d a

q u e  c o n t é m  o s  u s u á r i o s  q u e  c o m e ç a m  c o m  a  l e t r a  B ,  e  a s s i m  p o r  d i a n t e .

S u p o n h a  q u e  o  A d i t  B  s e  i n s c r e v a  n o  F a c e b o o k  e  v o c ê  q u e i r a  a d i c i o n á - l o  à

l i s t a .  V o c ê  v a i  a o  s l o t  1  d o  a r r a y ,  a  s e g u i r  p a r a  a  l i s t a  e n c a d e a d a  d o  s l o t  1 ,  e

a d i c i o n a  A d i t  B  n o   n a l .  A g o r a ,  s u p o n h a  q u e  v o c ê  q u e i r a  p r o c u r a r  o

Z a k h i r  H .  V o c ê  v a i  a o  s l o t  2 6 ,  q u e  a p o n t a  p a r a  a  l i s t a  e n c a d e a d a  d e  t o d o s
o s  n o m e s  c o m e ç a d o s  e m  Z .  E n t ã o ,  p r o c u r a  p e l a  l i s t a  a t é  e n c o n t r a r  o

Z a k h i r  H .

C o m p a r e  e s t a  e s t r u t u r a  h í b r i d a  c o m  a r r a y s  e  l i s t a s  e n c a d e a d a s .  É  m a i s  l e n t o

o u  m a i s  r á p i d o  f a z e r  i n s e r ç õ e s  e  e l i m i n a ç õ e s  n e s s e  c a s o ?  V o c ê  n ã o  p r e c i s a

r e s p o n d e r  d a n d o  o  t e m p o  d e  e x e c u ç ã o  B i g ( O ) ,  a p e n a s  d i g a  s e  a  n o v a

e s t r u t u r a  d e  d a d o s  é  m a i s  r á p i d a  o u  m a i s  l e n t a  d o  q u e  o s  a r r a y s  e  a s  l i s t a s

e n c a d e a d a s .

O 󰁲 d e 󰁮 a ç ã 󰁯  󰁰 󰁯 󰁲  󰁳 e 󰁬 e ç ã 󰁯

V a m o s  j u n t a r  t u d o  a p r e n d i d o  a t é  a q u i  p a r a  v o c ê  c o n h e c e r  o  s e u  s e g u n d o

a l g o r i t m o :  a  o r d e n a ç ã o  p o r  s e l e ç ã o .  P a r a  s e g u i r  n e s t a  s e ç ã o ,  v o c ê  p r e c i s a  t e r

c o m p r e e n d i d o  a r r a y s  e  l i s t a s ,  b e m  c o m  a  n o t a ç ã o  B i g  O .

S u p o n h a  q u e  v o c ê  t e n h a  u m  m o n t e  d e  m ú s i c a s  n o  s e u  c o m p u t a d o r .  P a r a

c a d a  a r t i s t a ,  v o c ê  t e m  u m  c o n t a d o r  d e  p l a y s .
V o c ê  q u e r  o r d e n a r  u m a  l i s t a  d e  a r t i s t a s ,  d o  a r t i s t a  m a i s  t o c a d o  p a r a  o  m e n o s

t o c a d o ,  p a r a  q u e  p o s s a  c a t e g o r i z a r  o s  s e u s  a r t i s t a s  f a v o r i t o s .  C o m o  p o d e

f a z e r  i s s o ?  U m a  m a n e i r a  s e r i a  p e g a r  o  a r t i s t a  m a i s  t o c a d o  d a  l i s t a  d e  m ú s i c a s

e  a d i c i o n á - l o  a  u m a  n o v a  l i s t a .

F a ç a  i s s o  d e  n o v o  p a r a  e n c o n t r a r  o  p r ó x i m o  a r t i s t a  m a i s  t o c a d o .
C o n t i n u e  f a z e n d o  i s s o  e  e n t ã o  v o c ê  t e r m i n a r á  c o m  u m a  l i s t a  o r d e n a d a .

V a m o s  p e n s a r  c o m o  e n g e n h e i r o s  d a  c o m p u t a ç ã o  e  a v a l i a r  q u a n t o  t e m p o

i s s o  d e m o r a r i a  a  s e r  e x e c u t a d o .  L e m b r e - s e  d e  q u e  o  t e m p o  d e  e x e c u ç ã o  O ( 󰁮 )

s i g n i  c a  q u e  v o c ê  p r e c i s a  p a s s a r  p o r  t o d o s  o s  e l e m e n t o s  d a  l i s t a  u m a  v e z .

P o r  e x e m p l o ,  e x e c u t a r  u m a  p e s q u i s a  s i m p l e s  n a  l i s t a  d e  a r t i s t a s  s i g n i  c a

o l h a r  p a r a  c a d a  a r t i s t a  u m a  v e z .
P a r a  e n c o n t r a r  o  a r t i s t a  c o m  o  m a i o r  n ú m e r o  d e  p l a y s  v o c ê  p r e c i s a  v e r i  c a r

c a d a  i t e m  d a  l i s t a .  I s s o  t e m  t e m p o  d e  e x e c u ç ã o  O ( 󰁮 ) ,  c o m o  v o c ê  a c a b o u  d e

v e r . E n t ã o v o c ê t e m u m a o p e r a ç ã o c o m t e m p o d e e x e c u ç ã o O ( 󰁮 )  e  p r e c i s a

r e p e t i r  e s s a  o p e r a ç ã o  󰁮  v e z e s :

I s s o  t e m  t e m p o  d e  e x e c u ç ã o  O ( 󰁮 × 󰁮 )  o u  O ( 󰁮 ) .

A l g o r i t m o s  d e  o r d e n a ç ã o  s ã o  m u i t o  ú t e i s .  A g o r a  v o c ê  p o d e  o r d e n a r :

󲀢  n o m e s  e m  u m a  a g e n d a  t e l e f ô n i c a

󲀢  d a t a s  d e  v i a g e m

󲀢  e m a i l s  ( d o  m a i s  n o v o  a o  m a i s  a n t i g o )

V e 󰁲 i  c a 󰁮 d 󰁯  󰁭 e 󰁮 󰁯 󰁳  e 󰁬 e 󰁭 e 󰁮 󰁴 󰁯 󰁳  a  c a d a  󰁶 e 󰁺

T a l v e z  v o c ê  e s t e j a  p e n s a n d o :  c o n f o r m e  p a s s a  p e l a s  o p e r a ç õ e s ,  o  n ú m e r o  d e  e l e m e n t o s  q u e

p r e c i s a  a n a l i s a r  d i m i n u i .  E v e n t u a l m e n t e ,  v o c ê  a c a b a  t e n d o  d e  c h e c a r  a p e n a s  u m  e l e m e n t o .

E n t ã o  c o m o  o  t e m p o  d e  e x e c u ç ã o  p e r m a n e c e  s e n d o  O ( 󰁮 ) ?  I s t o  é  u m a  b o a  p e r g u n t a ,  e  a

r e s p o s t a  t e m  a  v e r  c o m  a  n o t a ç ã o  B i g  O .  F a l a r e i  m a i s  s o b r e  i s s o  n o  c a p í t u l o  4 ,  m a s  a q u i  v a i  o
p o n t o  p r i n c i p a l .

V o c ê  e s t a v a  c e r t o  s o b r e  n ã o  p r e c i s a r  v e r i  c a r  󰁮  e l e m e n t o s  a  c a d a  v e z .

V o c ê  v e r i  c a  󰁮  e l e m e n t o s ,  e n t ã o  󰁮  󲀓  1 ,  󰁮  -  2  󲀦  2 ,  1 .  N a  m é d i a ,  v o c ê  v e r i  c a  u m a  l i s t a  q u e  t e m

󰁮 󰁮 󰁮
½  ×   e l e m e n t o s .  O  t e m p o  d e  e x e c u ç ã o  é  O (  ×  ½  ×  ) .  M a s  c o n s t a n t e s  c o m o  ½  s ã o

i g n o r a d a s  n a  n o t a ç ã o  B i g  O  ( n o v a m e n t e ,  l e i a  o  C a p í t u l o  4  p a r a  t e r  a c e s s o  à  d i s c u s s ã o

󰁮 󰁮 󰁮
c o m p l e t a ) ,  e n t ã o  v o c ê  e s c r e v e  a p e n a s  O ( × )  o u  O ( ) .

A  o r d e n a ç ã o  p o r  s e l e ç ã o  é  u m  a l g o r i t m o  b o m ,  m a s  n ã o  é  m u i t o  r á p i d o .  O

Q u i c k s o r t  é  u m  a l g o r i t m o  d e  o r d e n a ç ã o  m a i s  r á p i d o ,  q u e  t e m  t e m p o  d e

e x e c u ç ã o  d e  a p e n a s  O ( 󰁮  l o g  󰁮 ) .  F a l a r e i  d e l e  n o  c a p í t u l o  4 !

E 󰁘 E M P L O  D E  C Ó D I G O

N ó s  n ã o  l h e  m o s t r a m o s  o  c ó d i g o  p a r a  o r d e n a r  a  l i s t a  d e  m ú s i c a s ,  m a s  a

s e g u i r  e s t ã o  a l g u n s  c ó d i g o s  q u e  f a r ã o  a l g o  b e m  s i m i l a r :  o r d e n a r  u m  a r r a y  d o

m e n o r  p a r a  o  m a i o r .  V a m o s  e s c r e v e r  u m a  f u n ç ã o  p a r a  e n c o n t r a r  o  m e n o r

e l e m e n t o  e m  u m  a r r a y :

def buscaMenor(arr):
menor = arr[0] ❶
menor_indice = 0 ❷
fori in range(1, len(arr)):
ifarr[i] < menor:
menor = arr[i]
menor_indice = i
return menor_indice

❶  A 󰁲 m a 󰁺 e n a  o  m e n o 󰁲  󰁶 a l o 󰁲 .

❷  A 󰁲 m a 󰁺 e n a  o  í n d i c e  d o  m e n o 󰁲  󰁶 a l o 󰁲 .

A g o r a ,  v o c ê  p o d e  u s a r  e s t a  f u n ç ã o  p a r a  e s c r e v e r  a  o r d e n a ç ã o  p o r  s e l e ç ã o :

def ordenacaoporSelecao(arr): ❶
novoArr = []
fori in range(len(arr)):
menor = buscaMenor(arr) ❷
novoArr.append(arr.pop(menor))
return novoArr

print ordenacaoporSelecao([5, 3, 6, 2, 10])


❶  O 󰁲 d e n a ç õ e 󰁳  e m  󰁵 m  a 󰁲 󰁲 a 󰁹 .

❷  E n c o n 󰁴 󰁲 a  o  m e n o 󰁲  e l e m e n 󰁴 o  d o  a 󰁲 󰁲 a 󰁹  e  a d i c i o n a  a o  n o 󰁶 o  a 󰁲 󰁲 a 󰁹 .
R e c a 󰁰 i 󰁴 󰁵 󰁬 a 󰁮 d 󰁯

󲀢  A  m e m ó r i a  d o  s e u  c o m p u t a d o r  é  c o m o  u m  c o n j u n t o  g i g a n t e  d e  g a v e t a s .

󲀢  Q u a n d o  s e  q u e r  a r m a z e n a r  m ú l t i p l o s  e l e m e n t o s ,  u s a - s e  u m  a r r a y  o u  u m a

l i s t a .

󲀢  N o  a r r a y ,  t o d o s  o s  e l e m e n t o s  s ã o  a r m a z e n a d o s  u m  a o  l a d o  d o  o u t r o .

󲀢  N a  l i s t a ,  o s  e l e m e n t o s  e s t ã o  e s p a l h a d o s  e  u m  e l e m e n t o  a r m a z e n a  o

e n d e r e ç o  d o  p r ó x i m o  e l e m e n t o .

󲀢  A r r a y s  p e r m i t e m  l e i t u r a s  r á p i d a s .

󲀢  L i s t a s  e n c a d e a d a s  p e r m i t e m  r á p i d a s  i n s e r ç õ e s  e  e l i m i n a ç õ e s .

󲀢  T o d o s  o s  e l e m e n t o s  d e  u m  a r r a y  d e v e m  s e r  d o  m e s m o  t i p o  ( t o d o s  i n t s ,

t o d o s  d o u b l e s ,  e  a s s i m  p o r  d i a n t e ) .
3

R 󰁥 󰁣 󰁵 󰁲 󰁳 ã 󰁯

N 󰁥 󰁳 󰁴 󰁥  󰁣 󰁡 󰁰 í 󰁴 󰁵 󰁬 󰁯

󲀢  V o c ê  a p r e n d e r á  r e c u r s ã o .  A  r e c u r s ã o  é  u m a  t é c n i c a  d e  p r o g r a m a ç ã o

u t i l i z a d a  e m  m u i t o s  a l g o r i t m o s .  É  u m  a s s u n t o  i m p o r t a n t e  p a r a  a

c o m p r e e n s ã o  d o s  c a p í t u l o s  s e g u i n t e s .

󲀢  V o c ê  a p r e n d e r á  c o m o  s e p a r a r  u m  p r o b l e m a  e m  c a s o - b a s e  e  c a s o

r e c u r s i v o .  A  e s t r a t é g i a  d i v i d i r  p a r a  c o n q u i s t a r  ( C a p í t u l o  4 )  u s a  e s t e
c o n c e i t o  s i m p l e s  p a r a  r e s o l v e r  p r o b l e m a s  c o m p l i c a d o s .

E s t o u  a n i m a d o  c o m  e s t e  c a p í t u l o  p o r q u e  t r a t a  d e  r e c u r s ã o ,  u m a  m a n e i r a

e l e g a n t e  d e  s o l u c i o n a r  p r o b l e m a s .  A  r e c u r s ã o  é  u m  d o s  m e u s  t ó p i c o s

f a v o r i t o s ,  m a s  e l a  é  p o l ê m i c a .  A s  p e s s o a s  o u  a  a m a m  o u  a  o d e i a m ,  o u  e l a s  a

o d e i a m  a t é  q u e  a p r e n d a m  a  a m á - l a  a l g u n s  a n o s  d e p o i s .  E u  e s t a v a  n e s s a

t e r c e i r a  s i t u a ç ã o .  P a r a  f a c i l i t a r  a s  c o i s a s ,  t e n h o  u m  c o n s e l h o :

󲀢  E s t e  c a p í t u l o  a p r e s e n t a  v á r i o s  e x e m p l o s  d e  c ó d i g o s .  E x e c u t e - o s  p a r a  v e r

c o m o  e l e s  f u n c i o n a m .

󲀢  F a l a r e i  s o b r e  f u n ç õ e s  r e c u r s i v a s .  P e l o  m e n o s  u m a  v e z ,  a n a l i s e  u m a  f u n ç ã o

r e c u r s i v a  c o m  u m  p a p e l  e  u m a  c a n e t a ,  a l g o  d o  t i p o  “ v a m o s  v e r ,  p a s s o  o

n ú m e r o  5  p a r a  a  f fatorial u n ç ã o  ,  e  e n t ã o  r e t o r n o  c i n c o  v e z e s  p a s s a n d o

o  n ú m e r o  4  p a r a  fatorial ,  o  q u e  m e  d á 󲀦 󲀝 ,  e  a s s i m  p o r  d i a n t e .  A n a l i s a r

u m a  f u n ç ã o  d e s s a  f o r m a  l h e  a j u d a r á  a  e n t e n d e r  c o m o  f u n c i o n a m  a s

f u n ç õ e s  r e c u r s i v a s .

E s t e  c a p í t u l o  i n c l u i  m u i t o s  p s e u d o c ó d i g o s .  P s e u d o c ó d i g o s  s ã o  u m a  d e s c r i ç ã o

d e  a l t o  n í v e l  d e  u m  p r o b l e m a  e m  f o r m a t o  d e  c ó d i g o .  É  e s c r i t o  c o m o  u m

c ó d i g o ,  m a s  u t i l i z a  l i n g u a g e m  m a i s  p r ó x i m a  d a  h u m a n a .

R 󰁥 󰁣 󰁵 󰁲 󰁳 ã 󰁯

S u p o n h a  q u e  v o c ê  e s t e j a  v a s c u l h a n d o  o  p o r ã o  d e  s u a  a v ó  e  e n c o n t r e  u m a

m i s t e r i o s a  m a l a  t r a n c a d a .

A  s u a  a v ó  d i z  q u e  a  c h a v e  p a r a  a  m a l a  p r o v a v e l m e n t e  e s t á  e m  u m a  c a i x a .
E s t a  c a i x a  c o n t é m  m a i s  c a i x a s  c o m  m a i s  c a i x a s  d e n t r o  d e l a s .  A  c h a v e  e s t á

e m  a l g u m a  d e s t a s  c a i x a s .  Q u a l  é  o  s e u  a l g o r i t m o  p a r a  p r o c u r á - l a ?  P e n s e

n i s s o  a n t e s  d e  c o n t i n u a r  a  l e i t u r a .

A q u i  e s t á  u m a  a b o r d a g e m .
1 . M o n t e  u m a  p i l h a  c o m  a s  c a i x a s  q u e  s e r ã o  a n a l i s a d a s .

2 . P e g u e  u m a  c a i x a  e  o l h e  o  q u e  t e m  d e n t r o  d e l a .

3 . S e  v o c ê  e n c o n t r a r  o u t r a  c a i x a  d e n t r o  d e l a ,  a d i c i o n e - a  a  u m  n o v o  m o n t e

p a r a  s e r  v e r i  c a d a  m a i s  t a r d e .

4 .
S e  v o c ê  e n c o n t r a r  u m a  c h a v e ,  t e r m i n o u !

5 .
R e p i t a .

A q u i  e s t á  o u t r a  a b o r d a g e m .

1 . O l h e  o  q u e  t e m  d e n t r o  d a  c a i x a .
2 .
S e  e n c o n t r a r  o u t r a  c a i x a ,  v o l t e  a o  p a s s o  1 .

3 . S e  e n c o n t r a r  a  c h a v e ,  t e r m i n o u !

Q u a l  a b o r d a g e m  l h e  p a r e c e  m a i s  f á c i l ?  A  p r i m e i r a  a b o r d a g e m  u t i l i z a  u m

l o o p  while  ( e n q u a n t o ,  e m  p o r t u g u ê s ) .  E n q u a n t o  o  m o n t e  e x i s t i r ,  p e g u e  u m a

c a i x a  e  o l h e  o  q u e  t e m  d e n t r o  d e l a :

def procure_pela_chave(caixa_principal):
pilha = main_box.crie_uma_pilha_para_busca
main_box.crie_uma _pilha_para_busca()
()
whilepilha is not vazia:
caixa = pilha.pegue_caixa()
pilha.pegue_caix a()
foritem in caixa:
if item.e_uma_caixa():
pilha.append(item)
elif item.e_uma_chave():
print "achei a chave!"
A  s e g u n d a  m a n e i r a  u t i l i z a  a  r e c u r s ã o .  R e c u r s ã o  é  q u a n d o  u m a  f u n ç ã o

c h a m a  a  s i  m e s m a .  V e j a  o  p s e u d o c ó d i g o  d e  c o m o  i s s o  f u n c i o n a .

def procure_pela_chave(caixa):
foritem in caixa:
if item.e_uma_caixa():
procure_pela_chave(item) ❶
elif item.e_uma_chave():
print "achei a chave!"
❶  R e c u r s ã o !

A m b a s  a s  a b o r d a g e n s  c u m p r e m  c o m  a  m e s m a  p r o p o s t a ,  m a s  a  s e g u n d a  m e

p a r e c e  m a i s  o b j e t i v a .  A  r e c u r s ã o  é  u s a d a  p a r a  t o r n a r  a  r e s p o s t a  m a i s  c l a r a .

N ã o  h á  n e n h u m  b e n e f í c i o  q u a n t o  a o  d e s e m p e n h o  a o  u t i l i z a r  a  r e c u r s ã o .  N a

v e r d a d e , o s l o o p s a l g u m a s v e z e s s ã o m e l h o r p a r a o d e s e m p e n h o d e u m

p r o g r a m a .  G o s t o  d e s t a  f r a s e  d e  L e i g h  C a l d w e l l ,  d o  S t a c k  O v e r  o w :  “ O s

l o o p s  p o d e m  m e l h o r a r  o  d e s e m p e n h o  d o  s e u  p r o g r a m a .  A  r e c u r s ã o  m e l h o r a

o  d e s e m p e n h o  d o  s e u  p r o g r a m a d o r .  E s c o l h a  o  q u e  f o r  m a i s  i m p o r t a n t e  p a r a

a  s u a  s i t u a ç ã o . 󲀝

M u i t o s  a l g o r i t m o s  i m p o r t a n t e s  u s a m  a  r e c u r s ã o ,  e n t ã o  é  f u n d a m e n t a l

e n t e n d e r  e s t e  c o n c e i t o .
C 󰁡 󰁳 󰁯 - 󰁢 󰁡 󰁳 󰁥  󰁥  󰁣 󰁡 󰁳 󰁯  󰁲 󰁥 󰁣 󰁵 󰁲 󰁳 󰁩 󰁶 󰁯

D e v i d o  a o  f a t o  d e  a  f u n ç ã o  r e c u r s i v a  c h a m a r  a  s i  m e s m a ,  é  m a i s  f á c i l

e s c r e v ê - l a  e r r o n e a m e n t e  e  a c a b a r  e m  u m  l o o p  i n  n i t o .  P o r  e x e m p l o ,

s u p o n h a  q u e  v o c ê  e s c r e v a  u m a  f u n ç ã o  q u e  i m p r i m a  u m a  c o n t a g e m

r e g r e s s i v a ,  c o m o  e s t a :

> 3...2...1
V o c ê  p o d e  e s c r e v e r  i s s o  d e  m a n e i r a  r e c u r s i v a  f a z e n d o  o  s e g u i n t e :

def regressiva(i):
print i
regressiva(i-1)
E s c r e v a  e s t e  c ó d i g o  e  e x e c u t e - o .  V o c ê  p e r c e b e r á  u m  p r o b l e m a :  e s s a  f u n ç ã o

 c a r á  e x e c u t a n d o  p a r a  s e m p r e !
Loop infinito.
> 3...2...1...0...-1...-2...
( P r e s s i o n e  C t r l - C  p a r a  i n t e r r o m p e r  o  s e u  s c r i p t . )

Q u a n d o  v o c ê  e s c r e v e  u m a  f u n ç ã o  r e c u r s i v a ,  d e v e  i n f o r m a r  q u a n d o  a

r e c u r s ã o  d e v e  p a r a r .  É  p o r  i s s o  q u e  t o d a  f u n ç ã o  r e c u r s i v a  t e m  d u a s  p a r t e s :  o

c a s o - b a s e  e  o  c a s o  r e c u r s i v o .  O  c a s o  r e c u r s i v o  é  q u a n d o  a  f u n ç ã o  c h a m a  a  s i

m e s m a .  O  c a s o - b a s e  é  q u a n d o  a  f u n ç ã o  n ã o  c h a m a  a  s i  m e s m a  n o v a m e n t e ,

d e  f o r m a  q u e  o  p r o g r a m a  n ã o  s e  t o r n a  u m  l o o p  i n  n i t o .

V a m o s  a d i c i o n a r  o  c a s o - b a s e  à  f u n ç ã o  d e  c o n t a g e m  r e g r e s s i v a :

def regressiva(i):
print i
ifi <= 1: ❶
return
else: ❷
regressiva(i-1)
❶  C a s o - b a s e .

❷  C a s o  r e c u r s i v o .

A g o r a ,  a  f u n ç ã o  f u n c i o n a  c o m o  e s p e r a d o .  E l a   c a  m a i s  o u  m e n o s  a s s i m :

A  󰁰 󰁩 󰁬 󰁨 󰁡
E s t a  s e ç ã o  a b o r d a  a  p i l h a d e c h a m a d a  ( c a l l  s t a c k ) .  I s t o  é  u m  c o n c e i t o

i m p o r t a n t e  e m  p r o g r a m a ç ã o  e  i n d i s p e n s á v e l  p a r a  e n t e n d e r  a  r e c u r s ã o .

S u p o n h a  q u e  v o c ê  e s t e j a  f a z e n d o  u m  c h u r r a s c o  p a r a  o s  s e u s  a m i g o s .  V o c ê

t e m  u m a  l i s t a  d e  a f a z e r e s  e m  f o r m a  d e  u m a  p i l h a  d e  n o t a s  a d e s i v a s .
V o c ê  s e  l e m b r a  d e  q u e ,  q u a n d o  f a l a m o s  d e  a r r a y s  e  l i s t a s ,  t a m b é m  h a v i a

u m a  l i s t a  d e  a f a z e r e s ?  P o d i a  a d i c i o n a r  i t e n s  e m  q u a l q u e r  l u g a r  d a  l i s t a  o u

r e m o v e r  i t e n s  a l e a t ó r i o s .  A  p i l h a  d e  n o t a s  a d e s i v a s  é  b e m  m a i s  s i m p l e s .

Q u a n d o  v o c ê  i n s e r e  u m  i t e m ,  e l e  é  c o l o c a d o  n o  t o p o  d a  p i l h a .  Q u a n d o  v o c ê

l ê  u m  i t e m ,  l ê  a p e n a s  o  i t e m  d o  t o p o  d a  p i l h a  e  e l e  é  r e t i r a d o  d a  l i s t a .  L o g o ,

s u a  l i s t a  d e  a f a z e r e s  c o n t é m  a p e n a s  d u a s  a ç õ e s :  p u s h  ( i n s e r i r )  e  p o p  ( r e m o v e r

e  l e r ) .
V a m o s  v e r  c o m o  i s s o  f u n c i o n a  n a  p r á t i c a .

E s t a  e s t r u t u r a  d e  d a d o s  é  c h a m a d a  d e  p i l h a .  A  p i l h a  é  u m a  e s t r u t u r a  d e

d a d o s  s i m p l e s .  V o c ê  a  t e m  u s a d o  e s s e  t e m p o  t o d o  s e m  p e r c e b e r !

A  󰁰 󰁩 󰁬 󰁨 󰁡  󰁤 󰁥  󰁣 󰁨 󰁡 󰁭 󰁡 󰁤 󰁡

S e u  c o m p u t a d o r  u s a  u m a  p i l h a  i n t e r n a  d e n o m i n a d a  p i l h a d e c h a m a d a .

V a m o s  v e r  i s t o  n a  p r á t i c a .  A q u i  e s t á  u m  e x e m p l o  s i m p l e s :

def sauda(nome):
print "Olá, " + nome + "!"
sauda2(nome)
print "preparando para dizer tchau..."
tchau()
E s t a  f u n ç ã o  t e  c u m p r i m e n t a  e  c h a m a  o u t r a s  d u a s  f u n ç õ e s :

def sauda2(nome):
print "Como vai " + nome + "?"
deftchau():
print "ok, tchau!"
V a m o s  a n a l i s a r  o  q u e  a c o n t e c e  q u a n d o  v o c ê  c h a m a  u m a  f u n ç ã o .

󰁎 󰁯 󰁴 󰁡

print é  u m a  f u n ç ã o  e m  P y t h o n ,  m a s ,  p a r a  f a c i l i t a r  a s  c o i s a s ,  v a m o s   n g i r  q u e  n ã o  é .  E n t r e

n a  b r i n c a d e i r a .

N . R . T . :  t e c n i c a m e n t e 
print  n ã o  é  u m a  f u n ç ã o  e m  P y t h o n  2 ,  m a s  u m a  i n s t r u ç ã o  o u

s t a t e m e n t .

S u p o n h a  q u e  v o c ê  c h a m e  sauda("maggie") .  P r i m e i r o ,  s e u  c o m p u t a d o r

a l o c a  u m a  c a i x a  d e  m e m ó r i a  p a r a  e s s a  c h a m a d a .

A g o r a ,  v a m o s  u s a r  a  m e m ó r i a .  A  v a r i á v e l  nome  é  s e t a d a  p a r a  “ m a g g i e 󲀝 .  I s s o

p r e c i s a  s e r  s a l v o .
C a d a  v e z  q u e  v o c ê  f a z  u m a  c h a m a d a  d e  f u n ç ã o ,  s e u  c o m p u t a d o r  s a l v a  n a

m e m ó r i a  o s  v a l o r e s  p a r a  t o d a s  a s  v a r i á v e i s .  D e p o i s  d i s s o ,  i m p r i m e  olá,
maggie! .  E n t ã o ,  c h a m a  sauda2("maggie").
N o v a m e n t e ,  s e u  c o m p u t a d o r  a l o c a  u m a  c a i x a  d e  m e m ó r i a  p a r a  e s s a

c h a m a d a  d e  f u n ç ã o .

S e u  c o m p u t a d o r  e s t á  u s a n d o  u m a  p i l h a  p a r a  e s t a s  c a i x a s .  A  s e g u n d a  c a i x a  é

a d i c i o n a d a  e m  c i m a  d a  p r i m e i r a .  V o c ê  i m p r i m e  " " .

E n t ã o ,  r e t o r n a  d a  c h a m a d a  d e  f u n ç ã o .  Q u a n d o  i s s
como vai maggie?
o  a c o n t e c e ,  a  c a i x a  d o

t o p o  d a  p i l h a  é  r e t i r a d a .
A g o r a ,  a  c a i x a  d o  t o p o  d a  p i l h a  a l o c a  o s  v a l o r e s  d a  f u n ç ã o  sauda ,  o  q u e

s i g n i  c a  q u e  v o c ê  r e t o r n o u  à  f u n ç ã o  sauda .  Q u a n d o  v o c ê  c h a m o u  a  f u n ç ã o

sauda2 ,  a  f u n ç ã o  sauda  c o u  p a r c i a l m e n t e c o m p l e t a .  E s t a  é  a  g r a n d e  i d e i a

p o r  t r á s  d e s t a  s e ç ã o :  q u a n d o  v o c ê  c h a m a  u m a  f u n ç ã o  a  p a r t i r  d e  o u t r a ,  a

c h a m a d a  d e  f u n ç ã o   c a  p a u s a d a  e m  u m  e s t a d o  p a r c i a l m e n t e  c o m p l e t o .  T o d o s

o s  v a l o r e s  d a s  v a r i á v e i s  p a r a  a q u e l a  f u n ç ã o  a i n d a  e s t ã o  a r m a z e n a d o s  n a

m e m ó r i a .  A g o r a  q u e  v o c ê  j á  u t i l i z o u  a  f u n ç ã o  sauda2 ,  v o c ê  e s t á  d e  v o l t a  n a

f u sauda n ç ã o  e  p o d e  c o n t i n u a r  d e  o n d e  p a r o u .  P r i m e i r o ,  i m p r i m e

" preparando para dizer tchau... "  e  e n t ã o  c h a m a  a  f u n ç ã o  tchau .


U m a  c a i x a  p a r a  e s t a  f u n ç ã o  é  a d i c i o n a d a  a o  t o p o  d a  p i l h a .  Q u a n d o  v o c ê

i m p r i m i r  ok, tchau! ,  r e t o r n a r á  d a  c h a m a d a  d e  f u n ç ã o .
A g o r a ,  v o c ê  e s t á  d e  v o l t a  à  f u n ç ã o  sauda .  N ã o  h á  n a d a  m a i s  a  s e r  f e i t o ,  e

v o c ê p o d e s a i r d a f u n ç ã o sauda  t a m b é m .  E s s a  p i l h a  u s a d a  p a r a  g u a r d a r  a s

v a r i á v e i s d e m ú l t i p l a s f u n ç õ e s é d e n o m i n a d a p i l h a d e c h a m a d a .

E 󰁘 E 󰁒 C Í C I 󰁏 󰁓

3 . 1  S u p o n h a  q u e  e u  f o r n e ç a  u m a  p i l h a  d e  c h a m a d a  c o m o  e s t a :

Q u a i s  i n f o r m a ç õ e s  v o c ê  p o d e  r e t i r a r  b a s e a n d o - s e  a p e n a s  n e s t a  p i l h a  d e

c h a m a d a ?
A g o r a ,  v a m o s  v e r  e s t a  p i l h a  d e  c h a m a d a  s e n d o  e x e c u t a d a  c o m  u m a  f u n ç ã o

r e c u r s i v a .

A  󰁰 󰁩 󰁬 󰁨 󰁡  󰁤 󰁥  󰁣 󰁨 󰁡 󰁭 󰁡 󰁤 󰁡  󰁣 󰁯 󰁭  󰁲 󰁥 󰁣 󰁵 󰁲 󰁳 ã 󰁯

A s  f u n ç õ e s  r e c u r s i v a s  t a m b é m  u t i l i z a m  a  p i l h a  d e  c h a m a d a !  V a m o s  a n a l i s a r

i s t o  n a  p r á t i c a  c o m  a  f u n ç ã o  fat  ( f a t o r i a l ) .  fat(5) é  e s c r i t a  c o m o  5 !  e  é

d e  n i d a  d a  s e g u i n t e  f o r m a :  5 !  =  5  *  4  *  3  *  2  *  1 .  D e  f o r m a  s e m e l h a n t e ,

fat(3) é  3  *  2  *  1 .  A q u i  e s t á  u m a  f u n ç ã o  r e c u r s i v a  p a r a  c a l c u l a r  a  f a t o r i a l

d e  u m  n ú m e r o :

deffat(x):
ifx == 1:
return 1
else:
return x * fat(x-1)

A g o r a ,  v o c ê  c h a m a  a  f u n ç ã o 

fat(3) .  V a m o s  a n a l i s a r  e s t a  p i l h a  d e  c h a m a d a

l i n h a  p o r  l i n h a  e  v e r  c o m o  e l a  s e  a l t e r a .  L e m b r e - s e ,  a  c a i x a  m a i s  p r ó x i m a  a o

t o p o  l h e  d i z  e m  q u a l  c h a m a d a  a  f u n ç ã o  fat s e  e n c o n t r a  a t u a l m e n t e .
R e p a r e  q u e  c a d a  c h a m a d a  p a r a  a  f u n ç ã o  fat t e m  s e u  p r ó p r i o  v a l o r  d e  x .

V o c ê  n ã o  c o n s e g u e  a c e s s a r  a  m e s m a  f u n ç ã o  c o m  o u t r o  v a l o r  d e  x .

A  p i l h a  t e m  u m  p a p e l  i m p o r t a n t e  n a  r e c u r s ã o .  N o  p r i m e i r o  e x e m p l o ,

m o s t r e i  d u a s  a b o r d a g e n s  p a r a  e n c o n t r a r  a  c h a v e .  A q u i  e s t á  a  p r i m e i r a .

D e s t a  f o r m a ,  v o c ê  f e z  u m  m o n t e  c o m  c a i x a s  p a r a  a n a l i s a r ,  e n t ã o  s a b e  q u a i s

c a i x a s  v o c ê  a i n d a  p r e c i s a  a b r i r .
M a s  n a  a b o r d a g e m  r e c u r s i v a  n ã o  e x i s t e m  m o n t e s .

S e  n ã o  e x i s t e m  m o n t e s ,  c o m o  u m  a l g o r i t m o  r e c o n h e c e  q u a i s  c a i x a s  e l e  d e v e

p r o c u r a r ?  A q u i  e s t á  u m  e x e m p l o .
N e s t e  p o n t o ,  a  p i l h a  d e  c h a m a d a  s e  p a r e c e  c o m  i s t o :

O  “ m o n t e  d e  c a i x a s 󲀝  é  s a l v o  n a  p i l h a !  E s t a  é  u m a  p i l h a  c o m  a s  f u n ç õ e s  d e

c h a m a d a  c o m p l e t a d a s  a t é  a  m e t a d e ,  c a d a  u m a  c o m  a  s u a  l i s t a  d e  c a i x a s ,

t a m b é m  c o m p l e t a d a s  a t é  a  m e t a d e ,  p a r a  s e r  a n a l i s a d a s .  U t i l i z a r  a  p i l h a  é

c o n v e n i e n t e  p o r q u e  v o c ê  n ã o  p r e c i s a  a c o m p a n h a r  o  m o n t e  d e  c a i x a s  –  a

p i l h a  f a z  i s s o  p a r a  v o c ê .  U s a r  a  p i l h a  é  b o m ,  p o r é m ,  e x i s t e  u m  c u s t o :  s a l v a r

t o d a  e s s a  i n f o r m a ç ã o  p o d e  o c u p a r  m u i t a  m e m ó r i a .  C a d a  u m a  d e s t a s

f u n ç õ e s  d e  c h a m a d a  o c u p a  u m  p o u c o  d e  m e m ó r i a ,  e  q u a n d o  a  s u a  p i l h a  e s t á
m u i t o  c h e i a  é  s i n a l  d e  q u e  s e u  c o m p u t a d o r  e s t á  s a l v a n d o  i n f o r m a ç ã o  p a r a

m u i t a s  c h a m a d a s  d e  f u n ç õ e s .  P a r a  e s t a  s i t u a ç ã o ,  v o c ê  t e m  d u a s  o p ç õ e s :

󲀢  R e e s c r e v e r  s e u  c ó d i g o  u t i l i z a n d o  l o o p s .

󲀢  U t i l i z a r  o  q u e  c h a m a m o s  d e  t a i l  r e c u r s i o n  ( r e c u r s ã o  d e  c a u d a ) .  I s t o  é  u m

t ó p i c o  a v a n ç a d o  e m  r e c u r s ã o  e  e s t á  f o r a  d o  e s c o p o  d e s t e  l i v r o .  E s t a  t é c n i c a

t a m b é m  n ã o  é  s u p o r t a d a  p o r  t o d a s  a s  l i n g u a g e n s  d e  p r o g r a m a ç ã o .

E 󰁘 E 󰁒 C Í C I 󰁏

3 . 2  S u p o n h a  q u e  v o c ê  a c i d e n t a l m e n t e  e s c r e v a  u m a  f u n ç ã o  r e c u r s i v a  q u e

 q u e  e x e c u t a n d o  i n  n i t a m e n t e .  C o m o  v o c ê  v i u ,  s e u  c o m p u t a d o r  a l o c a

m e m ó r i a  n a  p i l h a  p a r a  c a d a  c h a m a d a  d e  f u n ç ã o .  O  q u e  a c o n t e c e  c o m  a

p i l h a  q u a n d o  a  f u n ç ã o  r e c u r s i v a   c a  e x e c u t a n d o  i n  n i t a m e n t e ?

R 󰁥 󰁣 󰁡 󰁰 󰁩 󰁴 󰁵 󰁬 󰁡 󰁮 󰁤 󰁯

󲀢  R e c u r s ã o  é  q u a n d o  u m a  f u n ç ã o  c h a m a  a  s i  m e s m a .
󲀢  T o d a  f u n ç ã o  r e c u r s i v a  t e m  d o i s  c a s o s :  o  c a s o - b a s e  e  o  c a s o  r e c u r s i v o .

󲀢  U m a  p i l h a  t e m  d u a s  o p e r a ç õ e s :  p u s h  e  p o p .

󲀢  T o d a s  a s  c h a m a d a s  d e  f u n ç ã o  v ã o  p a r a  a  p i l h a  d e  c h a m a d a .

󲀢  A  p i l h a  d e  c h a m a d a  p o d e   c a r  m u i t o  g r a n d e  e  o c u p a r  m u i t a  m e m ó r i a .

.
1 󰁨 󰁴 󰁴 󰁰 : / / 󰁳 󰁴 a c 󰁫 󰁯 󰁶 e 󰁲  󰁯 󰁷 . c 󰁯 󰁭 / a / 7 2 6 9 4 / 1 3 9 1 1 7
4

Q 󰁵 󰁩 󰁣 󰁫 󰁳 󰁯 󰁲 󰁴

N 󰁥 󰁳 󰁴 󰁥  󰁣 󰁡 󰁰 í 󰁴 󰁵 󰁬 󰁯

󲀢  V o c ê  i 󰁲 á  󰁳 e  d e 󰁰 a 󰁲 a 󰁲 ,  o c a 󰁳 i o n a l m e n 󰁴 e ,  c o m  󰁰 󰁲 o b l e m a 󰁳  󰁱 󰁵 e  n ã o

󰁰 o d e m  󰁳 e 󰁲  󰁲 e 󰁳 o l 󰁶 i d o 󰁳  c o m  a l g 󰁵 m  a l g o 󰁲 i 󰁴 m o  d e  󰁳 e 󰁵  c o n h e c i m e n 󰁴 o .

P o 󰁲 é m  󰁱 󰁵 a n d o  󰁵 m  b o m  d e 󰁳 e n 󰁶 o l 󰁶 e d o 󰁲  d e  a l g o 󰁲 i 󰁴 m o 󰁳  e n c o n 󰁴 󰁲 a  󰁵 m

d e 󰁳 󰁴 e 󰁳  󰁰 󰁲 o b l e m a 󰁳 ,  e l e  n ã o  d e 󰁳 i 󰁳 󰁴 e .  P e l o  c o n 󰁴 󰁲 á 󰁲 i o ,  e l e  󰁵 󰁴 i l i 󰁺 a  󰁵 m a

a m 󰁰 l a  g a m a  d e  󰁴 é c n i c a 󰁳  󰁰 a 󰁲 a  e n c o n 󰁴 󰁲 a 󰁲  󰁵 m a  󰁳 o l 󰁵 ç ã o ,  󰁳 e n d o  a
󰁴 é c n i c a  d e  d i 󰁶 i d i 󰁲  󰁰 a 󰁲 a  c o n 󰁱 󰁵 i 󰁳 󰁴 a 󰁲  a  󰁰 󰁲 i m e i 󰁲 a  󰁱 󰁵 e  󰁶 o c ê  a 󰁰 󰁲 e n d e 󰁲 á .

󲀢  V o c ê  c o n h e c e 󰁲 á  󰁴 a m b é m  o  󰁱 󰁵 i c k 󰁳 o 󰁲 󰁴 ,  󰁵 m  a l g o 󰁲 i 󰁴 m o  d e  o 󰁲 d e n a ç ã o

e l e g a n 󰁴 e  󰁱 󰁵 e  é  󰁵 󰁴 i l i 󰁺 a d o  c o m  f 󰁲 e 󰁱 󰁵 ê n c i a .  E 󰁳 󰁴 e  a l g o 󰁲 i 󰁴 m o  󰁵 󰁴 i l i 󰁺 a  a

󰁴 é c n i c a  d e  d i 󰁶 i d i 󰁲  󰁰 a 󰁲 a  c o n 󰁱 󰁵 i 󰁳 󰁴 a 󰁲 .

N o  ú l t i m o  c a p í t u l o  v o c ê  a p r e n d e u  t u d o  s o b r e  r e c u r s ã o .  E s t e  c a p í t u l o  f o c a r á

n a  u t i l i z a ç ã o  d e s t a s  s u a s  n o v a s  h a b i l i d a d e s  a p l i c a d a s  n a  r e s o l u ç ã o  d e

p r o b l e m a s .  P a r a  i s t o ,  v a m o s  e x p l o r a r  a  t é c n i c a  d i 󰁶 i d i 󰁲  󰁰 a 󰁲 a  c 󰁯 󰁮 󰁱 󰁵 i 󰁳 󰁴 a 󰁲  ( D C ) ,

u m a  t é c n i c a  r e c u r s i v a  m u i t o  c o n h e c i d a  p a r a  r e s o l u ç ã o  d e  p r o b l e m a s .

E s t e  c a p í t u l o  t r a t a  d o  p o n t o  p r i n c i p a l  d o s  a l g o r i t m o s ,  p o i s  u m  a l g o r i t m o

q u e  c o n s e g u e  r e s o l v e r  a p e n a s  u m  t i p o  d e  p r o b l e m a  n ã o  é  m u i t o  ú t i l .  A s s i m ,

a  t é c n i c a  D C  o f e r e c e  u m a  n o v a  m a n e i r a  d e  p e n s a r  s o b r e  a  r e s o l u ç ã o  d e

p r o b l e m a s ,  t o r n a n d o - s e  m a i s  u m a  a l t e r n a t i v a  e m  s u a  c a i x a  d e  f e r r a m e n t a s .

Q u a n d o  v o c ê  s e  d e p a r a r  c o m  u m  p r o b l e m a  n o v o ,  n ã o  t e r á  m o t i v o s  p a r a

 c a r  d e s n o r t e a d o .  E m  v e z  d i s s o ,  p o d e r á  s e  p e r g u n t a r  “ S e r á  q u e  p o s s o

r e s o l v e r  e s t e  p r o b l e m a  u s a n d o  a  t é c n i c a  d e  d i v i d i r  p a r a  c o n q u i s t a r ? 󲀝 .

A o   n a l  d e s t e  c a p í t u l o  v o c ê  t e r á  a p r e n d i d o  o  s e u  p r i m e i r o  a l g o r i t m o  q u e

u t i l i z a  a  t é c n i c a  D C :  o  󰁱 󰁵 i c 󰁫 󰁳 󰁯 󰁲 󰁴 .  O  a l g o r i t m o  q u i c k s o r t  é  u m  a l g o r i t m o  d e

o r d e n a ç ã o  m u i t o  m a i s  r á p i d o  d o  q u e  o  a l g o r i t m o  d e  o r d e n a ç ã o  p o r  s e l e ç ã o

( q u e  v o c ê  a p r e n d e u  n o  C a p í t u l o  2 ) ,  e  é  t a m b é m  u m  b o m  e x e m p l o  d e

p r o g r a m a ç ã o  e l e g a n t e .
D 󰁩 󰁶 󰁩 󰁤 󰁩 󰁲  󰁰 󰁡 󰁲 󰁡  󰁣 󰁯 󰁮 󰁱 󰁵 󰁩 󰁳 󰁴 󰁡 󰁲

A  t é c n i c a  D C  p o d e  l e v a r  a l g u m  t e m p o  p a r a  s e r  c o m p r e e n d i d a .  P o r  i s s o ,

v e r e m o s t r ê s e x e m p l o s . P r i m e i r o , m o s t r a r e i u m e x e m p l o v i s u a l . D e p o i s ,

m o s t r a r e i  u m  c ó d i g o  d e  e x e m p l o  s i m p l e s ,  m a s  n ã o  t ã o  e l e g a n t e .  P o r   m ,  n o s

a p r o f u n d a r e m o s  n o  q u i c k s o r t ,  u m  a l g o r i t m o  d e  o r d e n a ç ã o  q u e  u t i l i z a  D C .

S u p o n h a  q u e  v o c ê  s e j a  u m  f a z e n d e i r o  q u e  t e n h a  u m a  á r e a  d e  t e r r a .
V o c ê  q u e r  d i v i d i r  s u a  f a z e n d a  e m  p o r ç õ e s  󰁱 󰁵 a d 󰁲 a d a 󰁳  i g u a i s ,  s e n d o  q u e  e s t a s

p o r ç õ e s  d e v e m  t e r  o  m a i o r  t a m a n h o  p o s s í v e l .  A s s i m ,  n e n h u m a  d e s t a s

a l t e r n a t i v a s  f u n c i o n a r á .

C o m o  e n c o n t r a r á  o  m a i o r  t a m a n h o  p o s s í v e l  p a r a  e s t e s  q u a d r a d o s ?  U s a n d o  a

e s t r a t é g i a  D C !  O s  a l g o r i t m o s  D C  s ã o  r e c u r s i v o s .  A s s i m ,  p a r a  r e s o l v e r  u m

p r o b l e m a  u t i l i z a n d o  D C ,  v o c ê  d e v e  s e g u i r  d o i s  p a s s o s :

1 . D e s c u b r a  o  c a s o - b a s e ,  q u e  d e v e  s e r  o  c a s o  m a i s  s i m p l e s  p o s s í v e l .

2 . D i v i d a  o u  d i m i n u a  o  s e u  p r o b l e m a  a t é  q u e  e l e  s e  t o r n e  o  c a s o - b a s e .

V a m o s  u s a r  D C  p a r a  e n c o n t r a r  a  s o l u ç ã o  d e s t e  p r o b l e m a .  Q u a l  é  a  m a i o r

l a r g u r a  q u e  v o c ê  p o d e  u s a r ?

P r i m e i r o ,  d e s c u b r a  o  c a s o - b a s e .  S e r i a  m a i s  f á c i l  s o l u c i o n a r  e s t e  p r o b l e m a  s e

u m  d o s  l a d o s  f o s s e  m ú l t i p l o  d o  o u t r o .
S u p o n h a  q u e  u m  d o s  l a d o s  t e n h a  2 5  m e t r o s  ( m )  e  o  o u t r o  t e n h a  5 0 .  A s s i m ,

o  m a i o r  q u a d r a d o  q u e  v o c ê  p o d e  t e r  m e d e  2 5  m  x  2 5  m .  V o c ê  p r e c i s a  d e

d o i s  d e s t e s  q u a d r a d o s  p a r a  d i v i d i r  a  p o r ç ã o  d e  t e r r a .

A g o r a  v o c ê  p r e c i s a  d e s c o b r i r  o  c a s o  r e c u r s i v o ,  e  é  a q u i  q u e  a  e s t r a t é g i a  D C

e n t r a  e m  a ç ã o .  S e g u i n d o  a  e s t r a t é g i a  D C ,  a  c a d a  r e c u r s ã o  v o c ê  d e v e  r e d u z i r

o  s e u  p r o b l e m a .  E n t ã o ,  c o m o  r e d u z i r  e s t e  p r o b l e m a ?  V a m o s  c o m e ç a r

i d e n t i  c a n d o  o s  m a i o r e s  q u a d r a d o s  q u e  v o c ê  p o d e  u t i l i z a r .

V o c ê  p o d e  p o s i c i o n a r  d o i s  q u a d r a d o s  d e  6 4 0  ×  6 4 0  n a  f a z e n d a  e  a i n d a

c o n t i n u a r á  c o m  u m a  p o r ç ã o  d e  t e r r a  p a r a  s e r  d i v i d i d a .  E s t e  é  o  m o m e n t o

“ A h a ! 󲀝 .  V o c ê  a i n d a  t e m  u m  s e g m e n t o  d a  f a z e n d a  q u e  d e v e  s e r  d i v i d i d o .  P 󰁯 󰁲

󰁱 󰁵 e  󰁮 ã 󰁯  a 󰁰 󰁬 i c a  e 󰁳 󰁴 e  󰁭 e 󰁳 󰁭 󰁯  a 󰁬 g 󰁯 󰁲 i 󰁴 󰁭 󰁯  󰁮 e 󰁳 󰁴 e  󰁳 e g 󰁭 e 󰁮 󰁴 󰁯 ?
V o c ê  i n i c i o u  c o m  u m a  p o r ç ã o  d e  t e r r a  m e d i n d o  1 . 6 8 0  ×  6 4 0  q u e  d e v e r i a  s e r

d i v i d i d a .  P o r é m  a g o r a  v o c ê  p r e c i s a  d i v i d i r  u m  s e g m e n t o  m e n o r ,  q u e  m e d e

6 4 0  ×  4 0 0 .  C a s o  e 󰁮 c 󰁯 󰁮 󰁴 󰁲 e  󰁯  󰁭 a i 󰁯 󰁲  󰁱 󰁵 a d 󰁲 a d 󰁯  󰁱 󰁵 e  d i 󰁶 i d e  e 󰁳 󰁴 e  󰁳 e g 󰁭 e 󰁮 󰁴 󰁯 ,  e 󰁬 e  󰁳 e 󰁲 á

󰁯  󰁭 a i 󰁯 󰁲  󰁱 󰁵 a d 󰁲 a d 󰁯  󰁱 󰁵 e  d i 󰁶 i d i 󰁲 á  󰁴 󰁯 d a  a  f a 󰁺 e 󰁮 d a .  V o c ê  a c a b o u  d e  r e d u z i r  u m

p r o b l e m a  d e  d i v i s ã o  d e  u m a  f a z e n d a  m e d i n d o  1 . 6 8 0  ×  6 4 0  p a r a  u m

p r o b l e m a  d e  d i v i s ã o  d e  u m a  á r e a  m e d i n d o  6 4 0  ×  4 0 0 !

A 󰁬 󰁧 󰁯 󰁲 󰁩 󰁴 󰁭 󰁯  󰁤 󰁥  E 󰁵 󰁣 󰁬 󰁩 󰁤 󰁥 󰁳

“ C a s o  v o c ê  e n c o n t r e  o  m a i o r  q u a d r a d o  q u e  d i v i d e  e s t e  s e g m e n t o ,  e l e  s e r á  o  m a i o r  q u a d r a d o

q u e  i r á  d i v i d i r  t o d a  a  f a z e n d a . 󲀝  S e  n ã o  p a r e c e  ó b v i o  o  m o t i v o  d e  e s t a  a  r m a ç ã o  s e r

v e r d a d e i r a , n ã o s e p r e o c u p e , e l a r e a l m e n t e n ã o é t r i v i a l . I n f e l i z m e n t e , a p r o v a d e s t a a  r m a ç ã o

é  u m  p o u c o  l o n g a  p a r a  s e r  i n c l u í d a  n e s t e  l i v r o ,  e n t ã o  v o c ê  t e r á  d e  c o n  a r  e m  m i m .  C a s o  v o c ê

q u e i r a  e n t e n d e r  a  p r o v a ,  p r o c u r e  o  A l g o r i t m o  d e  E u c l i d e s .  A  K h a n  A c a d e m y  d e u  u m a  b o a

e x p l i c a ç ã o ,  d i s p o n í v e l  a q u i :  󰁨 󰁴 󰁴 󰁰 󰁳 : / / 󰁷 󰁷 󰁷 . 󰁫 󰁨 󰁡 󰁮 󰁡 󰁣 󰁡 󰁤 󰁥 󰁭 󰁹 . 󰁯 󰁲 󰁧 / 󰁣 󰁯 󰁭 󰁰 󰁵 󰁴 󰁩 󰁮 󰁧 / 󰁣 󰁯 󰁭 󰁰 󰁵 󰁴 󰁥 󰁲 -

󰁳 󰁣 󰁩 󰁥 󰁮 󰁣 󰁥 / 󰁣 󰁲 󰁹 󰁰 󰁴 󰁯 󰁧 󰁲 󰁡 󰁰 󰁨 󰁹 / 󰁭 󰁯 󰁤 󰁡 󰁲 󰁩 󰁴 󰁨 󰁭 󰁥 󰁴 󰁩 󰁣 / 󰁡 / 󰁴 󰁨 󰁥 - 󰁥 󰁵 󰁣 󰁬 󰁩 󰁤 󰁥 󰁡 󰁮 - 󰁡 󰁬 󰁧 󰁯 󰁲 󰁩 󰁴 󰁨 󰁭 .
V a m o s  a p l i c a r  o  m e s m o  a l g o r i t m o  n o v a m e n t e .  C o m e ç a n d o  c o m  u m a

f a z e n d a  m e d i n d o  6 4 0  ×  4 0 0  m ,  o  m a i o r  q u a d r a d o  q u e  v o c ê  p o d e  t e r  m e d e

4 0 0  ×  4 0 0  m .

E  i s s o  d e i x a  v o c ê  c o m  u m  s e g m e n t o  m e n o r  d o  q u e  4 0 0  ×  2 4 0  m .

V o c ê  p o d e  d e s e n h a r  u m  q u a d r a d o  n e s t e  s e g m e n t o  q u e  l h e  d e i x a  c o m  u m

s e g m e n t o  a i n d a  m e n o r ,  d e  2 4 0  ×  1 6 0  m .
E n t ã o ,  v o c ê  d e s e n h a  u m  q u a d r a d o  n e s t e  s e g m e n t o  p a r a  t e r  u m  s e g m e n t o

a i n d a  m e n o r .

E i ,  v o c ê  a c a b o u  d e  d e s c o b r i r  o  c a s o - b a s e ,  p o i s  8 0  é  u m  m ú l t i p l o  d e  1 6 0 .  S e

d i v i d i r  e s t e  s e g m e n t o  e m  q u a d r a d o s ,  n ã o  h a v e r á  s e g m e n t o s  s o b r a n d o !

A s s i m ,  p a r a  a  f a z e n d a  o r i g i n a l ,  o  m a i o r  q u a d r a d o  q u e  v o c ê  p o d e  u t i l i z a r  é

8 0  ×  8 0  m .
P a r a  r e c a p i t u l a r ,  e s t e s  s ã o  o s  p a s s o s  p a r a  a p l i c a ç ã o  d a  e s t r a t é g i a  D C :

1 . D e s c u b r a  o  c a s o - b a s e ,  q u e  d e v e  s e r  o  c a s o  m a i s  s i m p l e s  p o s s í v e l .

2 . D e s c u b r a  c o m o  r e d u z i r  o  s e u  p r o b l e m a  p a r a  q u e  e l e  s e  t o r n e  o  c a s o - b a s e .

O  a l g o r i t m o  D C  n ã o  é  u m  s i m p l e s  a l g o r i t m o  q u e  v o c ê  a p l i c a  e m  u m

p r o b l e m a ,  m a s  s i m  u m a  m a n e i r a  d e  p e n s a r  s o b r e  o  p r o b l e m a .  V a m o s  v e r

m a i s  u m  e x e m p l o .

 V o c ê  t e m  u m  a r r a y  d e  n ú m e r o s .

V o c ê  d e v e  s o m a r  t o d o s  o s  n ú m e r o s  e  r e t o r n a r  o  v a l o r  t o t a l .  I s t o  é  s i m p l e s  d e

s e r  f e i t o  c o m  u m  l o o p :

def soma(lista):
total = 0
for
x in lista:
total += x
return
total
print soma([1, 2, 3, 4])
M a s  c o m o  i s s o  p o d e r i a  s e r  f e i t o  c o m  u m a  f u n ç ã o  r e c u r s i v a ?

󰁐 󰁡 󰁳 󰁳 󰁯  1 :
 D e s c u b r a  o  c a s o - b a s e .  Q u a l  é  o  a r r a y  m a i s  s i m p l e s  q u e  v o c ê  p o d e

o b t e r ?  P e n s e  s o b r e  o  c a s o  m a i s  s i m p l e s :  s e  v o c ê  t i v e r  u m  a r r a y  c o m  0  o u

c o m  1  e l e m e n t o ,  s e r á  m u i t o  s i m p l e s  c a l c u l a r  a  s o m a .
L o g o ,  e s s e  é  o  c a s o - b a s e .

󰁐 󰁡 󰁳 󰁳 󰁯  2 :  V o c ê  d e v e  c h e g a r  m a i s  p e r t o  d e  u m  a r r a y  v a z i o  a  c a d a  r e c u r s ã o .

C o m o  p o d e  r e d u z i r  o  t a m a n h o  d o  s e u  p r o b l e m a ?  E s t a  é  u m a  a l t e r n a t i v a :

A  s o m a  d e s t e  a r r a y  é  i g u a l  a  i s t o :

E m  a m b o s  o s  c a s o s  o  r e s u l t a d o  é  1 2 .  P o r é m ,  n a  s e g u n d a  v e r s ã o ,  v o c ê  e s t á

u s a n d o  u m  a r r a y  m e n o r  n a  f u n ç ã o  soma .  O u  s e j a ,  󰁶 󰁯 c ê  e 󰁳 󰁴 á  d i 󰁭 i 󰁮 󰁵 i 󰁮 d 󰁯  󰁯

󰁴 a 󰁭 a 󰁮 h 󰁯  d 󰁯  󰁰 󰁲 󰁯 b 󰁬 e 󰁭 a !

A  s u a  f u n ç ã o  soma  p o d e r i a  f u n c i o n a r  a s s i m :

A q u i  e s t á  u m  e x e m p l o  d a  f u n ç ã o  n a  p r á t i c a :
L e m b r e - s e  d e  q u e  a  r e c u r s ã o  t e m  m e m ó r i a  d o s  e s t a d o s  a n t e r i o r e s .

D 󰁩 󰁣 󰁡

Q u a n d o  e s t i v e r  e s c r e v e n d o  u m a  f u n ç ã o  d e  r e c u r s ã o  q u e  e n v o l v a  u m  a r r a y ,  o
c a s o - b a s e  s e r á ,  m u i t a s  v e z e s ,  u m  a r r a y  v a z i o  o u  u m  a r r a y  c o m  a p e n a s  u m

e l e m e n t o .  S e  e s t i v e r  c o m  p r o b l e m a s ,  u s e  e s t e  c a s o  c o m o  b a s e .

U 󰁭 󰁡  󰁥 󰁳 󰁰 󰁩 󰁡 󰁤 󰁡  󰁥 󰁭  󰁰 󰁲 󰁯 󰁧 󰁲 󰁡 󰁭 󰁡 ç ã 󰁯  󰁦 󰁵 󰁮 󰁣 󰁩 󰁯 󰁮 󰁡 󰁬

“ P o r  q u e  e u  f a r i a  i s t o  r e c u r s i v a m e n t e  q u a n d o  é  m a i s  s i m p l e s  f a z e r  a t r a v é s  d e  u m  l o o p ? 󲀝  é  o

q u e  v o c ê  p o d e  e s t a r  p e n s a n d o .  B e m ,  e s t a m o s  d a n d o  u m a  e s p i a d a  e m  p r o g r a m a ç ã o  f u n c i o n a l !

L i n g u a g e n s  d e  p r o g r a m a ç ã o  f u n c i o n a l ,  c o m o  H a s k e l l ,  n ã o  c o n t ê m  l o o p s ,  e  i s s o  f a z  c o m  q u e

v o c ê t e n h a d e u s a r f u n ç õ e s c o m o e s s a . S e v o c ê c o m p r e e n d e b e m o q u e é r e c u r s ã o , l i n g u a g e n s

f u n c i o n a i s  s e r ã o  s i m p l e s  d e  e n t e n d e r .  P o r  e x e m p l o ,  v o c ê  e s c r e v e r i a  u m a  f u n ç ã o  s o m a t ó r i a  e m

H a s k e l l  a s s i m :

soma [] = 0 ❶
soma (x:xs) = x + (soma xs) ❷
❶  C a 󰁳 o - b a 󰁳 e .

❷  C a 󰁳 o  󰁲 e c 󰁵 󰁲 󰁳 i 󰁶 o .

P e r c e b a  q u e  p a r e c e  q u e  v o c ê  t e m  d u a s  d e  n i ç õ e s  p a r a  a  f u n ç ã o .  A  p r i m e i r a  d e  n i ç ã o  é

e x e c u t a d a  q u a n d o  v o c ê  a l c a n ç a  o  c a s o - b a s e ,  e  a  s e g u n d a  é  e x e c u t a d a  n o  c a s o  r e c u r s i v o .  V o c ê

t a m b é m  p o d e  e s c r e v e r  e s s a  f u n ç ã o  e m  H a s k e l l  u s a n d o  u m  o p e r a d o r  c o n d i c i o n a l  i f  ( s e ,  e m

p o r t u g u ê s ) :

soma arr = if arr == []


then 0
else (head arr) + (soma (tail arr))
P o r é m  a  p r i m e i r a  d e  n i ç ã o  é  m a i s  s i m p l e s  d e  l e r .  C o m o  H a s k e l l  s e  b a s e i a  f o r t e m e n t e  e m

r e c u r s ã o ,  e s s a  l i n g u a g e m  i n c l u i  v á r i o s  d e t a l h e s  c o m o  e s t e  p a r a  t o r n a r  a  r e c u r s ã o  m a i s

s i m p l e s .  S e  v o c ê  g o s t a  d e  r e c u r s ã o  o u  c a s o  v o c ê  e s t e j a  i n t e r e s s a d o  e m  a p r e n d e r  u m a  n o v a

l i n g u a g e m  d e  p r o g r a m a ç ã o ,  d ê  u m a  o l h a d a  e m  H a s k e l l .

E 󰁘 E 󰁒 C Í C I 󰁏 󰁓
4 . 1  E s c r e v a  o  c ó d i g o  p a r a  a  f u n ç ã o  soma ,  v i s t a  a n t e r i o r m e n t e .

4 . 2
 E s c r e v a  u m a  f u n ç ã o  r e c u r s i v a  q u e  c o n t e  o  n ú m e r o  d e  i t e n s  e m  u m a  l i s t a .

4 . 3  E n c o n t r e  o  v a l o r  m a i s  a l t o  e m  u m a  l i s t a .

4 . 4  V o c ê  s e  l e m b r a  d a  p e s q u i s a  b i n á r i a  d o  C a p í t u l o  1 ?  E l a  t a m b é m  é  u m

a l g o r i t m o  d o  t i p o  d i v i d i r  p a r a  c o n q u i s t a r .  V o c ê  c o n s e g u e  d e t e r m i n a r  o

c a s o - b a s e  e  o  c a s o  r e c u r s i v o  p a r a  a  p e s q u i s a  b i n á r i a ?

Q 󰁵 󰁩 󰁣 󰁫 󰁳 󰁯 󰁲 󰁴
O  q u i c k s o r t  é  u m  a l g o r i t m o  d e  o r d e n a ç ã o .  E s t e  a l g o r i t m o  é  m u i t o  m a i s

r á p i d o  d o  q u e  a  o r d e n a ç ã o  p o r  s e l e ç ã o  e  é  m u i t o  u t i l i z a d o  n a  p r á t i c a .  P o r

e x e m p l o ,  a  b i b l i o t e c a - p a d r ã o  d a  l i n g u a g e m  C  t e m  u m a  f u n ç ã o  c h a m a d a

qsort ,  q u e  é  u m a  i m p l e m e n t a ç ã o  d o  q u i c k s o r t .  O  a l g o r i t m o  q u i c k s o r t

t a m b é m  u t i l i z a  a  e s t r a t é g i a  D C .

V a m o s  u s a r  o  q u i c k s o r t  p a r a  o r d e n a r  u m  a r r a y .  Q u a l  é  o  a r r a y  m a i s  s i m p l e s

q u e  u m  a l g o r i t m o  d e  o r d e n a ç ã o  p o d e  o r d e n a r  ( l e m b r e - s e  d a  m i n h a  d i c a  n a

s e ç ã o  a n t e r i o r ) ?  B e m ,  a l g u n s  a r r a y s  n ã o  p r e c i s a m  n e m  s e r  o r d e n a d o s .
A r r a y s  v a z i o s  o u  a r r a y s  c o m  a p e n a s  u m  e l e m e n t o  s e r ã o  o  c a s o - b a s e .  V o c ê

p o d e  a p e n a s  r e t o r n a r  e s s e s  a r r a y s  c o m o  e l e s  e s t ã o ,  v i s t o  q u e  n ã o  h á  n a d a

p a r a  o r d e n a r :

def quicksort(array):
len(array)
if < 2:
array
return

V a m o s  d a r  u m a  o l h a d a  e m  a r r a y s  m a i o r e s .  U m  a r r a y  c o m  d o i s  e l e m e n t o s

t a m b é m  é  m u i t o  s i m p l e s  d e  o r d e n a r .

E  u m  a r r a y  c o m  t r ê s  e l e m e n t o s ?

L e m b r e - s e ,  v o c ê  e s t á  u s a n d o  D C .  S e n d o  a s s i m ,  q u e r  q u e b r a r  e s t e  a r r a y  a t é

q u e  v o c ê  c h e g u e  a o  c a s o - b a s e .  P o r t a n t o  o  f u n c i o n a m e n t o  d o  q u i c k s o r t  s e g u e

e s t a  l ó g i c a :  p r i m e i r o ,  e s c o l h a  u m  e l e m e n t o  d o  a r r a y .  E s s e  e l e m e n t o  s e r á

c h a m a d o  d e  󰁰 i 󰁶 ô .
F a l a r e m o s  s o b r e  c o m o  e s c o l h e r  u m  b o m  p i v ô  m a i s  t a r d e .  N e s t e  m o m e n t o ,

v a m o s u t i l i z a r o p r i m e i r o i t e m d o a r r a y c o m o p i v ô .

A s s i m ,  e n c o n t r e  o s  e l e m e n t o s  q u e  s ã o  m e n o r e s  d o  q u e  o  p i v ô  e  t a m b é m  o s

e l e m e n t o s  q u e  s ã o  m a i o r e s .

I s s o  é  c h a m a d o  d e  󰁰 a 󰁲 󰁴 i c i 󰁯 󰁮 a 󰁭 e 󰁮 󰁴 󰁯 .  D e s s e  m o d o ,  v o c ê  t e m :
󲀢  U m  s u b a r r a y  c o n t e n d o  t o d o s  o s  n ú m e r o s  m e n o r e s  d o  q u e  o  p i v ô

󲀢  O  p i v ô

󲀢  U m  s u b a r r a y  c o n t e n d o  t o d o s  o s  n ú m e r o s  m a i o r e s  d o  q u e  o  p i v ô

O s  d o i s  s u b a r r a y s  n ã o  e s t ã o  o r d e n a d o s ,  a p e n a s  p a r t i c i o n a d o s .  P o r é m ,  s e  e l e s

e s t i v e s s e m  o r d e n a d o s ,  a  o r d e n a ç ã o  d o  a r r a y  c o n t e n d o  t o d o s  o s  e l e m e n t o s

s e r i a  s i m p l e s .

C a s o  o s  s u b a r r a y s  e s t e j a m  o r d e n a d o s ,  p o d e r á  c o m b i n á - l o s  d e s t a  f o r m a :

array esquerdo + pivô + array direito .  C o n s e q u e n t e m e n t e ,  t e r á  u m

a r [10, 15] + [33] + [] = [10, 15, r a y  o r d e n a d o .  N e s t e  c a s o ,  t e m o s 

33] ,  q u e  é  u m  a r r a y  o r d e n a d o .

C o m o  v o c ê  p o d e  o r d e n a r  o s  s u b a r r a y s ?  B e m ,  o  c a s o - b a s e  d o  q u i c k s o r t

c o n s e g u e  o r d e n a r  a r r a y s  d e  d o i s  e l e m e n t o s  ( o  s u b a r r a y  e s q u e r d o )  e  t a m b é m

a r r a y s  v a z i o s  ( o  s u b a r r a y  d i r e i t o ) .  A s s i m ,  s e  u t i l i z a r  o  q u i c k s o r t  e m  a m b o s

o s  s u b a r r a y s  e  e n t ã o  c o m b i n a r  o s  r e s u l t a d o s ,  t e r á  u m  a r r a y  o r d e n a d o !

quicksort([15, 10]) + [33] + quicksort([])


> [10, 15, 33] ❶
❶  U m  a 󰁲 󰁲 a 󰁹  o 󰁲 d e n a d o

I s t o  f u n c i o n a r á  c o m  q u a l q u e r  p i v ô .  S u p o n h a  q u e  v o c ê  t e n h a  e s c o l h i d o  o

n ú m e r o  1 5  c o m o  p i v ô .

A m b o s  o s  s u b a r r a y s  c o n t ê m  a p e n a s  u m  e l e m e n t o ,  e  v o c ê  j á  s a b e  c o m o

o r d e n a r  e s t e  t i p o  d e  a r r a y .  L o g o ,  j á  s a b e  c o m o  o r d e n a r  u m  a r r a y  d e  t r ê s

e l e m e n t o s .  E s t e s  s ã o  o s  p a s s o s :

1 . E s c o l h a  u m  p i v ô .

2 .
P a r t i c i o n e  o  a r r a y  e m  d o i s  s u b a r r a y s ,  s e p a r a n d o - o s  e n t r e  e l e m e n t o s

m e n o r e s  d o  q u e  o  p i v ô  e  e l e m e n t o s  m a i o r e s  d o  q u e  o  p i v ô .
3 . E x e c u t e  o  q u i c k s o r t  r e c u r s i v a m e n t e  e m  a m b o s  o s  s u b a r r a y s .

E  q u a n t o  a  u m  a r r a y  d e  q u a t r o  e l e m e n t o s ?

S u p o n h a  q u e ,  d e s t a  v e z ,  v o c ê  e s c o l h e u  o  n ú m e r o  3 3  c o m o  p i v ô .

O  a r r a y  d a  e s q u e r d a  c o n t é m  t r ê s  e l e m e n t o s ,  e  v o c ê  j á  s a b e  c o m o  o r d e n a r

a r r a y s  d e  t r ê s  e l e m e n t o s :  e x e c u t a n d o  o  q u i c k s o r t  r e c u r s i v a m e n t e .

A g o r a  p o d e  o r d e n a r  a r r a y s  d e  q u a t r o  e l e m e n t o s .  S a b e n d o  o r d e n a r  a r r a y s

c o m  q u a t r o  e l e m e n t o s ,  v o c ê  c o n s e g u e  o r d e n a r  a r r a y s  c o m  c i n c o  e l e m e n t o s .

C o m o ?  S u p o n h a  q u e  t e n h a  u m  a r r a y  c o m  c i n c o  e l e m e n t o s .

E s t a s  s ã o  t o d a s  a s  m a n e i r a s  p e l a s  q u a i s  v o c ê  p o d e  p a r t i c i o n a r  e s t e  a r r a y ,

d e p e n d e n d o  d o  p i v ô  q u e  e s c o l h e r .
P e r c e b a  q u e  t o d o s  e s t e s  s u b a r r a y s  t ê m  e n t r e  0  a  4  e l e m e n t o s ,  e  v o c ê  j á  s a b e

c o m o  o r d e n a r  a r r a y s  d e  0  a  4  e l e m e n t o s  u s a n d o  o  q u i c k s o r t !  L o g o ,  n ã o

i m p o r t a  o  p i v ô  q u e  v o c ê  e s c o l h e r ,  p o i s  v o c ê  p o d e r á  e x e c u t a r  o  q u i c k s o r t

r e c u r s i v a m e n t e  e m  a m b o s  o s  s u b a r r a y s .

P o r  e x e m p l o ,  i m a g i n e  q u e  v o c ê  e s c o l h e u  o  n ú m e r o  3  c o m o  p i v ô .  V o c ê

e x e c u t a  o  q u i c k s o r t  n o s  s u b a r r a y s .

O s  s u b a r r a y s  s ã o  o r d e n a d o s  e  e n t ã o  v o c ê  o s  c o m b i n a ,  o b t e n d o  u m  a r r a y

o r d e n a d o .  I s t o  f u n c i o n a r á  m e s m o  q u e  e s c o l h a  o  n ú m e r o  5  c o m o  p i v ô .
I s s o  f u n c i o n a r á ,  n a  v e r d a d e ,  c o m  q u a l q u e r  e l e m e n t o  c o m o  p i v ô .  A g o r a  v o c ê

j á c o n s e g u e o r d e n a r u m a r r a y d e c i n c o e l e m e n t o s . U s a n d o a m e s m a l ó g i c a ,

c o n s e g u i r á  o r d e n a r  u m  a r r a y  d e  s e i s  e l e m e n t o s  o u  m a i s .

P 󰁲 󰁯 󰁶 󰁡 󰁳  󰁰 󰁯 󰁲  󰁩 󰁮 󰁤 󰁵 ç ã 󰁯

V o c ê  a c a b o u  d e  o b s e r v a r  a l g u n s  e x e m p l o s  d e  󰁰 󰁲 󰁯 󰁶 󰁡 󰁳 󰁰 󰁯 󰁲 󰁩 󰁮 󰁤 󰁵 ç ã 󰁯 .  E s t a s  p r o v a s  r e p r e s e n t a m

u m a  m a n e i r a  d e  m o s t r a r  q u e  o  s e u  a l g o r i t m o  f u n c i o n a .  C a d a  p r o v a  p o r  i n d u ç ã o  s e g u e  d o i s

p a s s o s :  o  c a s o - b a s e  e  o  c a s o  i n d u t i v o .  I s s o  n ã o  s o a  f a m i l i a r ?  I m a g i n e  q u e  e u  q u e i r a  p r o v a r  q u e

s o u  c a p a z  d e  s u b i r  a t é  o  t o p o  d e  u m a  e s c a d a .  N o  c a s o  i n d u t i v o ,  s e  m i n h a s  p e r n a s  e s t i v e r e m

e m  u m  d e g r a u ,  p o d e r e i  c o l o c á - l a s  n o  p r ó x i m o  d e g r a u .  A s s i m ,  s e  e s t i v e r  n o  d e g r a u  2 ,  p o d e r e i

s u b i r  p a r a  o  d e g r a u  3 .  E s t e  é  o  c a s o  i n d u t i v o .  J á  p a r a  o  c a s o - b a s e ,  f a l a r e i  q u e  m i n h a s  p e r n a s

e s t ã o  n o  d e g r a u  1  e  q u e ,  p o r t a n t o ,  s o u  c a p a z  d e  s u b i r  a  e s c a d a  i n t e i r a ,  u m  d e g r a u  d e  c a d a  v e z .

V o c ê  u s a  u m a  l ó g i c a  s e m e l h a n t e  p a r a  o  q u i c k s o r t .  N o  c a s o - b a s e ,  m o s t r e i  q u e  o  a l g o r i t m o

f u n c i o n a  p a r a  o  c a s o - b a s e :  a r r a y s  d e  t a m a n h o  0  e  1 .  N o  c a s o  i n d u t i v o ,  m o s t r e i  q u e ,  d a  m e s m a

f o r m a  q u e  o  q u i c k s o r t  f u n c i o n a  p a r a  u m  a r r a y  d e  t a m a n h o  1 ,  e l e  t a m b é m  f u n c i o n a r á  p a r a

a r r a y s  d e  t a m a n h o  2 .  A s s i m  c o m o  e l e  f u n c i o n a  p a r a  a r r a y s  d e  d o i s  e l e m e n t o s ,  t a m b é m

f u n c i o n a r á  p a r a  a r r a y s  d e  t r ê s  e l e m e n t o s ,  e  a s s i m  p o r  d i a n t e .  D e s s a  f o r m a ,  p o d e m o s  d i z e r

q u e  o  q u i c k s o r t  f u n c i o n a  p a r a  t o d o s  o s  t a m a n h o s  d e  a r r a y .  N ã o  m e  a p r o f u n d a r e i  e m  p r o v a s

p o r  i n d u ç ã o ,  m a s  e l a s  s ã o  d i v e r t i d a s  e  a n d a m  l a d o  a  l a d o  c o m  a  e s t r a t é g i a  D C .
A q u i  e s t á  o  c ó d i g o  p a r a  o  q u i c k s o r t :

def quicksort(array):
len(array)
if < 2:
returnarray ❶
:
else
pivo = array[0] ❷
menores = [i for i in array[1:] if i <= pivo] ❸
maiores = [i for i in array[1:] if i > pivo] ❹
returnquicksort(menores) + [pivo] + quicksort(maiores)

print quicksort([10, 5, 2, 3])


❶  B a 󰁳 e :  a 󰁲 󰁲 a 󰁹 󰁳  c o m  0  o 󰁵  1  e l e m e n 󰁴 o  j á  e 󰁳 󰁴 ã o  󲀜 o 󰁲 d e n a d o 󰁳 󲀝 .

❷  C a 󰁳 o  󰁲 e c 󰁵 󰁲 󰁳 i 󰁶 o .

❸  S 󰁵 b a 󰁲 󰁲 a 󰁹  d e  󰁴 o d o 󰁳  o 󰁳  e l e m e n 󰁴 o 󰁳  m e n o 󰁲 e 󰁳  d o  󰁱 󰁵 e  o  󰁰 i 󰁶 ô .

❹  S 󰁵 b a 󰁲 󰁲 a 󰁹  d e  󰁴 o d o 󰁳  o 󰁳  e l e m e n 󰁴 o 󰁳  m a i o 󰁲 e 󰁳  d o  󰁱 󰁵 e  o  󰁰 i 󰁶 ô .

N 󰁯 󰁴 󰁡 ç ã 󰁯  B 󰁩 󰁧  O  󰁲 󰁥 󰁶 󰁩 󰁳 󰁡 󰁤 󰁡

O  a l g o r i t m o  q u i c k s o r t  é  ú n i c o ,  p o i s  s u a  v e l o c i d a d e  d e p e n d e  d o  p i v ô

e s c o l h i d o .  A n t e s  d e  f a l a r m o s  s o b r e  q u i c k s o r t ,  v a m o s  a n a l i s a r  n o v a m e n t e  o s

t e m p o s  d e  e x e c u ç ã o  B i g  O  m a i s  c o m u n s .
Estimativas baseadas em um computador lento que realiza dez
operações por segundo.
O s  e x e m p l o s  d e  t e m p o s  d e  e x e c u ç ã o  c o n t i d o s  n e s t e s  g r á  c o s  s ã o  e s t i m a t i v a s

p a r a  u m  c a s o  e m  q u e  v o c ê  e x e c u t a  d e z  o p e r a ç õ e s  p o r  s e g u n d o .  E s t e s

g r á  c o s  n ã o  s ã o  p r e c i s o s ,  m a s  s e r v e m  a p e n a s  p a r a  f o r n e c e r  u m  e x e m p l o  d o

q u ã o  d i f e r e n t e  s ã o  o s  t e m p o s  d e  e x e c u ç ã o .  N a  r e a l i d a d e ,  o  s e u  c o m p u t a d o r  é

c a p a z  d e  e x e c u t a r  m u i t o  m a i s  d o  q u e  d e z  o p e r a ç õ e s  p o r  s e g u n d o .

C a d a  t e m p o  d e  e x e c u ç ã o  c o n t é m  u m  a l g o r i t m o  d e  e x e m p l o  a n e x o .  D ê  u m a

o l h a d a  n o  a l g o r i t m o  d e  o r d e n a ç ã o  p o r  s e l e ç ã o ,  q u e  a p r e n d e u  n o  C a p í t u l o  2 .

O  s e u  t e m p o  d e  e x e c u ç ã o  é  O ( 󰁮 ) ;  é  b a s t a n t e  l e n t o .

H á  o u t r o  a l g o r i t m o  d e  o r d e n a ç ã o  c h a m a d o  󰁭 e 󰁲 g e  󰁳 󰁯 󰁲 󰁴 ,  q u e  t e m  t e m p o  d e

e x e c u ç ã o  O ( 󰁮  l o g  󰁮 ) ,  o  q u e  é  m u i t o  m a i s  r á p i d o !  O  a l g o r i t m o  q u i c k s o r t  é

u m  c a s o  c o m p l i c a d o .  N a  p i o r  s i t u a ç ã o ,  o  q u i c k s o r t  t e m  t e m p o  d e  e x e c u ç ã o

O ( 󰁮 ) .

E l e  é  t ã o  l e n t o  q u a n t o  a  o r d e n a ç ã o  p o r  s e l e ç ã o !  P o r é m  e s t e  é  o  p i o r  c a s o

p o s s í v e l .  N o  c a s o  m é d i o ,  o  q u i c k s o r t  t e m  t e m p o  d e  e x e c u ç ã o  O ( 󰁮  l o g  󰁮 ) .  E

a g o r a  v o c ê  p o d e  e s t a r  s e  p e r g u n t a n d o :

󲀢  O  q u e  s i g n i  c a  󰁰 i 󰁯 󰁲 c a 󰁳 󰁯 e c a 󰁳 󰁯  󰁭 é d i 󰁯 ?

󲀢  S e  o  q u i c k s o r t  t e m  t e m p o  d e  e x e c u ç ã o  m é d i o  O ( 󰁮  l o g  󰁮 ) ,  e  o  m e r g e  s o r t

t e m  t e m p o  d e  e x e c u ç ã o  O ( 󰁮  l o g  󰁮 )  s e m p r e ,  p o r  q u e  n ã o  u t i l i z a r  o  m e r g e

s o r t ?  N ã o  s e r i a  m a i s  r á p i d o ?

M 󰁥 󰁲 󰁧 󰁥  󰁳 󰁯 󰁲 󰁴  󰁶 󰁥 󰁲 󰁳 󰁵 󰁳  󰁱 󰁵 󰁩 󰁣 󰁫 󰁳 󰁯 󰁲 󰁴
S u p o n h a  q u e  v o c ê  t e n h a  e s t a  s i m p l e s  f u n ç ã o  q u e  i m p r i m e  n a  t e l a  t o d o s  o s

i t e n s  d e  u m a  l i s t a :

def imprime_itens(lista):
item
for in lista:

print item
E s t a  f u n ç ã o  a n a l i s a  c a d a  i t e m  d a  l i s t a  e  o  i m p r i m e .  C o m o  e s t a  f u n ç ã o  p a s s a

p o r  t o d a  a  l i s t a  u m a  v e z ,  e l a  t e m  t e m p o  d e  e x e c u ç ã o  O ( 󰁮 ) .  A g o r a ,  i m a g i n e

q u e  v o c ê  m o d i  c o u  e s t a  f u n ç ã o  p a r a  q u e  e l a  a g u a r d e  u m  s e g u n d o  a n t e s  d e

i m p r i m i r  u m  i t e m :

from time import sleep


def imprime_itens2(lista):
foritem in lista:
sleep(1)
print item
A n t e s  d e  i m p r i m i r  u m  i t e m ,  e l a  e s p e r a  p o r  u m  s e g u n d o .  S u p o n h a  q u e  v o c ê

i m p r i m a  u m a  l i s t a  c o n t e n d o  c i n c o  i t e n s  u t i l i z a n d o  a m b a s  a s  f u n ç õ e s .

A m b a s  a s  f u n ç õ e s  p a s s a m  p o r  t o d a  a  l i s t a  u m a  v e z ,  p o r t a n t o  e l a s  t ê m  t e m p o

d e  e x e c u ç ã o  O ( n ) .  Q u a l  d a s  d u a s  v o c ê  a c h a  q u e  s e r á  m a i s  r á p i d a  n a  p r á t i c a ?

A c h o  q u e  a  f u n ç ã o  imprime_itens  s e r á  m u i t o  m a i s  r á p i d a ,  v i s t o  q u e  e l a

n ã o  a g u a r d a  u m  s e g u n d o  a n t e s  d e  i m p r i m i r  c a d a  i t e m .  A s s i m ,  m e s m o  q u e

a m b a s  a s  f u n ç õ e s  t e n h a m  o  m e s m o  t e m p o  d e  e x e c u ç ã o  n a  n o t a ç ã o  B i g  O ,  a

f u n ç ã o  imprime_itens  a c a b a  s e n d o  m a i s  r á p i d a  n a  p r á t i c a .  Q u a n d o  v o c ê

e s c r e v e  a l g o  n a  n o t a ç ã o  B i g  O ,  c o m o  O ( 󰁮 ) ,  p o r  e x e m p l o ,  e s t á  q u e r e n d o  d i z e r

i s s o .
A  l e t r a  c é  u m a  q u a n t i d a d e  d e t e r m i n a d a  d e  t e m p o  q u e  o  s e u  a l g o r i t m o  l e v a

p a r a  s e r  e x e c u t a d o .  E l a  é  c h a m a d a  d e  c 󰁯 󰁮 󰁳 󰁴 a 󰁮 󰁴 e .  P o d e  s e r ,  p o r  10 e x e m p l o , 

milissegundos * n p a r a  a  f u n ç ã o  imprime_itens c o n t r a  1 segundo *


n imprime_itens2 p a r a  a  f u n ç ã o  .

N o r m a l m e n t e  v o c ê  i g n o r a  a  c o n s t a n t e ,  p o i s ,  c a s o  d o i s  a l g o r i t m o s  t e n h a m

t e m p o s  d e  e x e c u ç ã o  B i g  O  d i f e r e n t e s ,  a  c o n s t a n t e  n ã o  i m p o r t a r á .  V a m o s

u s a r  a  p e s q u i s a  b i n á r i a  e  a  p e s q u i s a  s i m p l e s  c o m o  e x e m p l o s  d e s t e  f a t o .

I m a g i n e  q u e  a m b o s  o s  a l g o r i t m o s  c o n t e n h a m  e s t a s  c o n s t a n t e s .

V o c ê  p o d e  p e n s a r  “ N o s s a !  A  p e s q u i s a  s i m p l e s  c o n t é m  u m a  c o n s t a n t e  d e  1 0

m i l i s s e g u n d o s ,  e n q u a n t o  a  p e s q u i s a  b i n á r i a  c o n t é m  u m a  c o n s t a n t e  d e  u m

s e g u n d o .  A  p e s q u i s a  s i m p l e s  é  m u i t o  m a i s  r á p i d a ! 󲀝 .  A g o r a ,  s u p o n h a  q u e

e s t e j a  r e a l i z a n d o  u m a  b u s c a  e m  u m a  l i s t a  c o m  4  b i l h õ e s  d e  e l e m e n t o s .  A

s e g u i r ,  p o d e  v i s u a l i z a r  o s  t e m p o s  d e  e x e c u ç ã o  d e s t a  b u s c a .

C o m o  v o c ê  p o d e  v e r ,  a  p e s q u i s a  b i n á r i a  c o n t i n u a  s e n d o  m u i t o  m a i s  r á p i d a .

A  c o n s t a n t e  n ã o  c a u s o u  d i f e r e n ç a  a l g u m a  n o   n a l  d a s  c o n t a s .

P o r é m ,  à s  v e z e s ,  a  c o n s t a n t e  󰁰 󰁯 d e  f a z e r  d i f e r e n ç a .  O  q u i c k s o r t ,  c o m p a r a d o

a o  m e r g e  s o r t ,  é  u m  e x e m p l o  d i s s o .  O  q u i c k s o r t  t e m  u m a  c o n s t a n t e  m e n o r

d o  q u e  o  m e r g e  s o r t .  A s s i m ,  c o m o  a m b o s  t ê m  t e m p o  d e  e x e c u ç ã o  O ( 󰁮  l o g

󰁮 ) ,  o  q u i c k s o r t  a c a b a  s e n d o  m a i s  r á p i d o .  A l é m  d i s s o ,  o  q u i c k s o r t  é  m a i s

r á p i d o ,  n a  p r á t i c a ,  p o i s  e l e  f u n c i o n a  m a i s  v e z e s  n o  c a s o  m é d i o  d o  q u e  n o
p i o r  c a s o .

E  a g o r a  v o c ê  p o d e  e s t a r  s e  p e r g u n t a n d o :  o  q u e  é  o  c a s o  m é d i o  e  o  q u e  é  o

p i o r  c a s o ?

C 󰁡 󰁳 󰁯  󰁭 é 󰁤 󰁩 󰁯  󰁶 󰁥 󰁲 󰁳 󰁵 󰁳  󰁰 󰁩 󰁯 󰁲  󰁣 󰁡 󰁳 󰁯

O  d e s e m p e n h o  d o  q u i c k s o r t  d e p e n d e  b a s t a n t e  d a  e s c o l h a  d o  p i v ô .  I m a g i n e

q u e  v o c ê  s e m p r e  e s c o l h a  o  p r i m e i r o  e l e m e n t o  c o m o  p i v ô  e  q u e  v o c ê  e x e c u t e

o  q u i c k s o r t  e m  u m  a r r a y  q u e  󰁪 á e 󰁳 󰁴 e 󰁪 a 󰁯 󰁲 d e 󰁮 a d 󰁯 .  O  q u i c k s o r t  n ã o  f a z  u m a

c h e c a g e m  p a r a  c o n f e r i r  s e  o  a r r a y  j á  e s t á  o r d e n a d o .  L o g o ,  e l e  t e n t a r á

o r d e n a r  o  a r r a y  m e s m o  a s s i m .

P e r c e b a  c o m o  v o c ê  n ã o  e s t á  d i v i d i n d o  o  a r r a y  e m  d u a s  m e t a d e s .  E m  v e z
d i s s o ,  u m  d o s  s u b a r r a y s  e s t á  s e m p r e  v a z i o ,  o  q u e  f a z  c o m  q u e  a  p i l h a  d e

c h a m a d a  s e j a  s e m p r e  m u i t o  l o n g a .  A g o r a ,  i m a g i n e  q u e  v o c ê  s e m p r e  e s c o l h a

o  e l e m e n t o  c e n t r a l  d o  a r r a y  c o m o  p i v ô .  P e r c e b a  c o m o  a  p i l h a  d e  c h a m a d a  é

m e n o r .

A  p i l h a  d e  c h a m a d a  é  m u i t o  m e n o r !  I s s o  a c o n t e c e  p o r q u e  v o c ê  d i v i d e  o

a r r a y  n a  m e t a d e ,  o  q u e  f a z  c o m  q u e  v o c ê  n ã o  p r e c i s e  f a z e r  t a n t a s  e x e c u ç õ e s

r e c u r s i v a s .  A s s i m ,  v o c ê  c h e g a  a o  c a s o - b a s e  e  a  p i l h a  d e  c h a m a d a  é

c o n s i d e r a v e l m e n t e  m e n o r .

O  p r i m e i r o  e x e m p l o  q u e  v o c ê  v i u  r e p r e s e n t a  o  p i o r  c a s o ,  e n q u a n t o  o

s e g u n d o  e x e m p l o  r e p r e s e n t a  o  m e l h o r  c a s o .  N o  p i o r  c a s o ,  o  t a m a n h o  d a

p i l h a  é  O ( 󰁮 ) .  N o  m e l h o r  c a s o ,  o  t a m a n h o  d a  p i l h a  é  O ( l o g  󰁮 ) .

A g o r a ,  o b s e r v e  o  p r i m e i r o  n í v e l  d a  p i l h a .  V o c ê  e s c o l h e  u m  e l e m e n t o  c o m o  o

p i v ô  e  o s  d e m a i s  e l e m e n t o s  s ã o  d i v i d i d o s  e m  d o i s  s u b a r r a y s .  A s s i m ,  v o c ê

t e m  d e  p a s s a r  p o r  t o d o s  o s  e l e m e n t o s  n o  a r r a y .  L o g o ,  e s t a  p r i m e i r a  e x e c u ç ã o

t e m  t e m p o  d e  e x e c u ç ã o  O ( 󰁮 ) .  N e s t e  n í v e l  d a  p i l h a  v o c ê  p a s s a  p o r  t o d o s  o s

e l e m e n t o s  d o  a r r a y .  P o r é m  e m  t o d o s  o s  n í v e i s  d a  p i l h a  d e  c h a m a d a  v o c ê

p a s s a r á  p o r  O ( 󰁮 )  e l e m e n t o s .
M e s m o  q u e  v o c ê  p a r t i c i o n e  o  a r r a y  d e  f o r m a  d i f e r e n t e ,  c o n t i n u a r á  p a s s a n d o

p o r  O ( 󰁮 )  e l e m e n t o s  a  c a d a  e x e c u ç ã o .
D e s s a  f o r m a ,  c a d a  n í v e l  t e m  t e m p o  d e  e x e c u ç ã o  O ( 󰁮 ) .

N e s t e  e x e m p l o ,  e x i s t e m  O ( l o g  󰁮 )  n í v e i s  ( a  m a n e i r a  m a i s  t é c n i c a  d e  d i z e r  i s s o

é  “ O  p e s o  d a  p i l h a  d e  c h a m a d a  [ o u  p i l h a  d e  e x e c u ç ã o ]  é  O ( l o g  󰁮 ) ) .  C a d a

n í v e l  t e m  t e m p o  d e  e x e c u ç ã o  O ( 󰁮 ) .  A l é m  d i s s o ,  o  a l g o r i t m o  c o m o  u m  t o d o

t e m  t e m p o  d e  e x e c u ç ã o  O ( 󰁮 )  *  O ( l o g  󰁮 )  =  O ( 󰁮  l o g  󰁮 ) .  E s t e  é  o  m e l h o r  c a s o .

N o  p i o r  c a s o ,  e x i s t e m  O ( 󰁮 )  n í v e i s .  P o r t a n t o  o  a l g o r i t m o  t e m  t e m p o  d e

e x e c u ç ã o  O ( 󰁮 )  *  O ( 󰁮 )  =  O ( 󰁮 ) .

A d i v i n h e ?  O  m e l h o r  c a s o  t a m b é m  é  o  c a s o  m é d i o .  S e  󰁶 󰁯 c ê  󰁳 e 󰁭 󰁰 󰁲 e  e 󰁳 c 󰁯 󰁬 h e 󰁲

󰁵 󰁭  e 󰁬 e 󰁭 e 󰁮 󰁴 󰁯  a 󰁬 e a 󰁴 ó 󰁲 i 󰁯  d 󰁯  a 󰁲 󰁲 a 󰁹  c 󰁯 󰁭 󰁯  󰁰 i 󰁶 ô ,  o  q u i c k s o r t  s e r á  c o m p l e t a d o  c o m

t e m p o  d e  e x e c u ç ã o  m é d i o  O ( 󰁮  l o g  󰁮 ) .  O  a l g o r i t m o  q u i c k s o r t  é  u m  d o s  m a i s

r á p i d o s  a l g o r i t m o s  d e  o r d e n a ç ã o  q u e  e x i s t e m ,  s e n d o  u m  ó t i m o  e x e m p l o  d e

D C .
E 󰁘 E 󰁒 C Í C I 󰁏 󰁓

Q u a n t o  t e m p o  l e v a r i a ,  e m  n o t a ç ã o  B i g  O ,  p a r a  c o m p l e t a r  c a d a  u m a  d e s t a s

o p e r a ç õ e s ?

4 . 5  I m p r i m i r  o  v a l o r  d e  c a d a  e l e m e n t o  e m  u m  a r r a y .

4 . 6  D u p l i c a r  o  v a l o r  d e  c a d a  e l e m e n t o  e m  u m  a r r a y .

4 . 7  D u p l i c a r  o  v a l o r  a p e n a s  d o  p r i m e i r o  e l e m e n t o  d o  a r r a y .

4 . 8  C r i a r  u m a  t a b e l a  d e  m u l t i p l i c a ç ã o  c o m  t o d o s  o s  e l e m e n t o s  d o  a r r a y .

A s s i m ,  c a s o  o  s e u  a r r a y  s e j a  [ 2 ,  3 ,  7 ,  8 ,  1 0 ] ,  v o c ê  p r i m e i r o  m u l t i p l i c a r á

c a d a  e l e m e n t o  p o r  2 .  D e p o i s ,  m u l t i p l i c a r á  c a d a  e l e m e n t o  p o r  3  e  e n t ã o

p o r  7 ,  e  a s s i m  p o r  d i a n t e .

R 󰁥 󰁣 󰁡 󰁰 󰁩 󰁴 󰁵 󰁬 󰁡 󰁮 󰁤 󰁯

󲀢  A  e s t r a t é g i a  D C  f u n c i o n a  p o r  m e i o  d a  d i v i s ã o  d o  p r o b l e m a  e m  p r o b l e m a s

m e n o r e s .  S e  v o c ê  e s t i v e r  u t i l i z a n d o  D C  e m  u m a  l i s t a ,  o  c a s o - b a s e

p r o v a v e l m e n t e  s e r á  u m  a r r a y  v a z i o  o u  u m  a r r a y  c o m  a p e n a s  u m  e l e m e n t o .

󲀢  S e  v o c ê  e s t i v e r  i m p l e m e n t a n d o  o  q u i c k s o r t ,  e s c o l h a  u m  e l e m e n t o

a l e a t ó r i o  c o m o  o  p i v ô .  O  t e m p o  d e  e x e c u ç ã o  m é d i o  d o  q u i c k s o r t  é  O ( 󰁮

l o g  󰁮 ) !

󲀢  A  c o n s t a n t e ,  n a  n o t a ç ã o  B i g  O ,  p o d e  s e r  r e l e v a n t e  e m  a l g u n s  c a s o s .  E s t a  é

a  r a z ã o  p e l a  q u a l  o  q u i c k s o r t  é  m a i s  r á p i d o  d o  q u e  o  m e r g e  s o r t .

󲀢  A  c o n s t a n t e  d i  c i l m e n t e  s e r á  r e l e v a n t e  n a  c o m p a r a ç ã o  e n t r e  p e s q u i s a

s i m p l e s  e  p e s q u i s a  b i n á r i a ,  p o i s  O ( l o g  󰁮 )  é  m u i t o  m a i s  r á p i d o  d o  q u e  O ( 󰁮 )

q u a n d o  s u a  l i s t a  é  g r a n d e .
5

T a b 󰁥 󰁬 a 󰁳  󰁨 a 󰁳 󰁨

N 󰁥 󰁳 󰁴 󰁥  󰁣 a 󰁰 í 󰁴 󰁵 󰁬 󰁯

󲀢  V o c ê  c o n h e c e r á  a 󰁳  󰁴 a b e l a 󰁳  h a 󰁳 h ,  󰁵 m a  e 󰁳 󰁴 r 󰁵 󰁴 󰁵 r a  d e  d a d o 󰁳  b á 󰁳 i c a

m 󰁵 i 󰁴 o  ú 󰁴 i l .

󲀢  V o c ê  󰁴 a m b é m  c o n h e c e r á  o 󰁳  d e 󰁴 a l h e 󰁳  󰁳 o b r e  a 󰁳  󰁴 a b e l a 󰁳  h a 󰁳 h :

i m p l e m e n 󰁴 a ç ã o ,  c o l i 󰁳 õ e 󰁳  e  f 󰁵 n ç õ e 󰁳  h a 󰁳 h .
I m a g i n e  q u e  v o c ê  t r a b a l h a  e m  u m  m e r c a d o .  Q u a n d o  u m  c l i e n t e  c o m p r a  u m

p r o d u t o ,  é  p r e c i s o  c o n f e r i r  o  p r e ç o  d e s t e  p r o d u t o  e m  u m  c a d e r n o .  P o r é m ,  s e

o  c a d e r n o  n ã o  e s t i v e r  o r g a n i z a d o  a l f a b e t i c a m e n t e ,  v o c ê  l e v a r á  m u i t o  t e m p o

a n a l i s a n d o  c a d a  l i n h a  a t é  e n c o n t r a r  o  p r e ç o  d a  󰁭 a ç ã ,  p o r  e x e m p l o .

P r o c u r a n d o  d e s t a  f o r m a  v o c ê  r e a l i z a r i a  u m a  p e s q u i s a  s i m p l e s ,  v i s t a  n o

C a p í t u l o  1 ,  e  p o r  m e i o  d e l a  t e r i a  d e  a n a l i s a r  t o d a s  a s  l i n h a s .  V o c ê  l e m b r a

q u a l  e r a  o  t e m p o  d e  e x e c u ç ã o  d a  p e s q u i s a  s i m p l e s ?  O ( 󰁮 ) .  N o  e n t a n t o ,  s e  o

c a d e r n o  e s t i v e s s e  o r d e n a d o  a l f a b e t i c a m e n t e ,  p o d e r i a  e x e c u t a r  u m a  p e s q u i s a

b i n á r i a  p a r a  e n c o n t r a r  o  p r e ç o  d a  m a ç ã  c o m  u m  t e m p o  d e  e x e c u ç ã o  O ( l o g

󰁮 ) .
V a l e  l e m b r a r  q u e  e x i s t e  u m a  g r a n d e  d i f e r e n ç a  e n t r e  u m  t e m p o  d e  e x e c u ç ã o

O ( 󰁮 )  e  O ( l o g  󰁮 ) !  S u p o n h a  q u e  v o c ê  c o n s e g u i s s e  l e r  d e z  l i n h a s  d o  c a d e r n o

p o r  s e g u n d o .  N a   g u r a  a  s e g u i r  v o c ê  p o d e  v e r  q u a n t o  t e m p o  l e v a r i a  u s a n d o

a  p e s q u i s a  b i n á r i a  e  a  p e s q u i s a  s i m p l e s .

V o c ê  j á  s a b e  q u e  a  p e s q u i s a  b i n á r i a  é  m u i t o  m a i s  r á p i d a .  P o r é m ,  c o m o  u m

c a i x a  d e  m e r c a d o ,  v o c ê  j á  s a b e  q u e  p r o c u r a r  o  p r e ç o  d e  m e r c a d o r i a s  e m  u m

c a d e r n o  é  u m a  t a r e f a  c h a t a ,  m e s m o  q u e  e s t e  c a d e r n o  e s t e j a  o r d e n a d o ,  p o i s  o

c l i e n t e  e s t á   c a  i m p a c i e n t e  e n q u a n t o  a  p r o c u r a  p e l o  p r e ç o  d o s  i t e n s  é

r e a l i z a d a .  A s s i m ,  o  q u e  v o c ê  p r e c i s a  é  d e  u m  a m i g o  q u e  c o n h e ç a  t o d a s  a s

m e r c a d o r i a s  e  o s  s e u s  p r e ç o s ,  p o i s ,  d e s s a  f o r m a ,  n ã o  é  n e c e s s á r i o  p r o c u r a r

n a d a :  v o c ê  p e d e  p a r a  e s t e  s e u  a m i g o  e  e l e  i n f o r m a  o  p r e ç o  i m e d i a t a m e n t e .
A  s u a  a m i g a  M a g g i e  p o d e  d i z e r  o  p r e ç o  c o m  t e m p o  d e  e x e c u ç ã o  O ( 1 )  p a r a

t o d o s  o s  i t e n s ,  n ã o  i m p o r t a n d o  a  q u a n t i d a d e  d e  i t e n s  q u e  c o m p õ e m  o

c a d e r n o  d e  p r e ç o s .  D e s s a  f o r m a ,  e l a  é  a i n d a  m a i s  r á p i d a  d o  q u e  a  p e s q u i s a

b i n á r i a .

Q u e  a m i g a  m a r a v i l h o s a !  M a s ,  e n t ã o ,  c o m o  v o c ê  a r r a n j a  u m a  “ M a g g i e 󲀝 ?

A g o r a ,  v a m o s  v o l t a r  a  f a l a r  d e  e s t r u t u r a s  d e  d a d o s .  V o c ê  j á  c o n h e c e  d u a s

e s t r u t u r a s  a t é  a g o r a :  a r r a y s  e  l i s t a s  ( n ã o  v o u  f a l a r  s o b r e  a s  p i l h a s ,  p o i s  n ã o  é

p o s s í v e l  “ p r o c u r a r 󲀝  a l g o  n e l a s ) .  S e r i a  p o s s í v e l  i m p l e m e n t a r  e s t e  s e u  c a d e r n o

d e  p r e ç o s  c o m o  u m  a r r a y .
C a d a  i t e m  n e s t e  a r r a y  é ,  n a  r e a l i d a d e ,  u m a  d u p l a  d e  i t e n s :  u m  é  o  n o m e  e  o

t i p o  d o  p r o d u t o  e  o  o u t r o  é  o  p r e ç o .  S e  o r d e n a r  e s t e  a r r a y  p o r  n o m e ,  s e r á

p o s s í v e l  e x e c u t a r  u m a  p e s q u i s a  b i n á r i a  p a r a  p r o c u r a r  o  p r e ç o  d e  u m  i t e m .

L o g o ,  é  p o s s í v e l  p e s q u i s a r  i t e n s  c o m  t e m p o  d e  e x e c u ç ã o  O ( l o g  󰁮 ) .

E n t r e t a n t o  n ó s  q u e r e m o s  e n c o n t r a r  i t e n s  c o m  t e m p o  d e  e x e c u ç ã o  O ( 1 ) ,  o u

s e j a ,  q u e r e m o s  u m a  “ M a g g i e 󲀝 ,  e  é  a í  q u e  e n t r a m  a s  f u n ç õ e s  h a s h .

F 󰁵 󰁮 ç õ 󰁥 󰁳  󰁨 a 󰁳 󰁨

U m a  f u n ç ã o  h a s h  é  u m a  f u n ç ã o  n a  q u a l  v o c ê  i n s e r e  u m a  s t r i n g  e ,  d e p o i s

d i s s o ,  a  f u n ç ã o  r e t o r n a  u m  n ú m e r o .

E m  u m a  t e r m i n o l o g i a  m a i s  t é c n i c a ,  d i r í a m o s  q u e  u m a  f u n ç ã o  h a s h  “ m a p e i a

s t r i n g s  e  n ú m e r o s 󲀝 .  V o c ê  p o d e  p e n s a r  q u e  n ã o  e x i s t e  u m  p a d r ã o  i n d i c a n d o

q u a l  n ú m e r o  s e r á  r e t o r n a d o  a p ó s  a  i n s e r ç ã o  d e  u m a  s t r i n g ,  m a s  e x i s t e m

a l g u n s  r e q u i s i t o s  p a r a  u m a  f u n ç ã o  h a s h :

󲀢  E l a  d e v e  s e r  c o n s i s t e n t e .  I m a g i n e  q u e  v o c ê  i n s e r e  a  s t r i n g  “ m a ç ã 󲀝  e  r e c e b e

o  n ú m e r o  4 .  T o d a s  a s  v e z e s  q u e  v o c ê  i n s e r i r  “ m a ç ã 󲀝 ,  a  f u n ç ã o  d e v e r á

r e t o r n a r  o  n ú m e r o  “ 4 󲀝 ;  c a s o  c o n t r á r i o ,  s u a  t a b e l a  h a s h  n ã o  f u n c i o n a r á

c o r r e t a m e n t e .
󲀢  A  f u n ç ã o  d e v e  m a p e a r  d i f e r e n t e s  p a l a v r a s  p a r a  d i f e r e n t e s  n ú m e r o s .  D e s t a

f o r m a ,  u m a  f u n ç ã o  h a s h  n ã o  s e r á  ú t i l  s e  e l a  s e m p r e  r e t o r n a r  “ 1 󲀝 ,

i n d e p e n d e n t e m e n t e  d a  p a l a v r a  i n s e r i d a .  N o  m e l h o r  c a s o ,  c a d a  p a l a v r a

d i f e r e n t e  d e v e r i a  s e r  m a p e a d a  e  l i g a d a  a  u m  n ú m e r o  d i f e r e n t e .

E n t ã o ,  u m a  f u n ç ã o  h a s h  m a p e i a  s t r i n g s  e  a s  r e l a c i o n a  a  n ú m e r o s .  M a s  q u a l  é

a  u t i l i d a d e  d i s s o ?  B e m ,  v o c ê  p o d e  u s a r  e s t a  f u n c i o n a l i d a d e  p a r a  c r i a r  a  s u a

“ M a g g i e 󲀝 !

C o m e c e  c o m  u m  a r r a y  v a z i o :

V o c ê  a r m a z e n a r á  o s  p r e ç o s  d a s  m e r c a d o r i a s  n e s t e  a r r a y .  V a m o s  a d i c i o n a r  o

p r e ç o  d e  u m a  m a ç ã .  I n s i r a  “ m a ç ã 󲀝  n a  f u n ç ã o  h a s h .

E l a  r e t o r n a r á  o  v a l o r  “ 3 󲀝 .  A g o r a ,  v a m o s  a r m a z e n a r  o  p r e ç o  d a  m a ç ã  n o

í n d i c e  3  d o  a r r a y .

V a m o s  a d i c i o n a r  o  l e i t e  a g o r a .  I n s i r a  “ l e i t e 󲀝  n a  f u n ç ã o  h a s h .

A  f u n ç ã o  h a s h  r e t o r n o u  “ 0 󲀝 .  A g o r a ,  a r m a z e n e  o  p r e ç o  d o  l e i t e  n o  í n d i c e  0 .
C o n t i n u e  e ,  e v e n t u a l m e n t e ,  t o d o  o  a r r a y  e s t a r á  r e p l e t o  d e  p r e ç o s .

A g o r a ,  v o c ê  p o d e r á  p e r g u n t a r  “ E i ,  q u a l  é  o  p r e ç o  d e  u m  a b a c a t e ? 󲀝  e  n ã o  s e r á

n e c e s s á r i o  p r o c u r a r  o  p r e ç o  d e s t e  p r o d u t o  n o  a r r a y .  E m  v e z  d i s s o ,  i n s i r a

“ a b a c a t e 󲀝  n a  f u n ç ã o  h a s h .

E l a  i n f o r m a r á  o  p r e ç o  a r m a z e n a d o  n o  í n d i c e  4 .

A  f u n ç ã o  h a s h  i n f o r m a r á  a  p o s i ç ã o  e x a t a  e m  q u e  o  p r e ç o  e s t á  a r m a z e n a d o .

A s s i m ,  n ã o  p r e c i s a r á  p r o c u r á - l o !  I s t o  f u n c i o n a  p o r q u e

󲀢  A  f u n ç ã o  h a s h  m a p e i a  c o n s i s t e n t e m e n t e  u m  n o m e  p a r a  o  m e s m o  í n d i c e .

T o d a s  a s  v e z e s  q u e  v o c ê  i n s e r i r  “ a b a c a t e 󲀝 ,  e l a  r e t o r n a r á  o  m e s m o  n ú m e r o .

A s s i m ,  a  p r i m e i r a  e x e c u ç ã o  d a  f u n ç ã o  h a s h  s e r v i r á  p a r a  i d e n t i  c a r  o n d e  é

p o s s í v e l  a r m a z e n a r  o  p r e ç o  d o  a b a c a t e ,  e  d e p o i s  d i s s o  e l a  s e r á  u t i l i z a d a

p a r a  e n c o n t r a r  e s t e  v a l o r  a r m a z e n a d o .

󲀢  A  f u n ç ã o  h a s h  m a p e i a  d i f e r e n t e s  s t r i n g s  p a r a  d i f e r e n t e s  í n d i c e s .  A  s t r i n g

“ a b a c a t e 󲀝  é  m a p e a d a  p a r a  o  í n d i c e  4 .  A  s t r i n g  “ l e i t e 󲀝  é  m a p e a d a  p a r a  o

í n d i c e  0 .  T o d a s  a s  d i f e r e n t e s  s t r i n g s  s ã o  m a p e a d a s  p a r a  d i f e r e n t e s  l u g a r e s

d o  a r r a y  o n d e  v o c ê  e s t á  a r m a z e n a n d o  o s  p r e ç o s .
󲀢  A  f u n ç ã o  h a s h  t e m  c o n h e c i m e n t o  s o b r e  o  t a m a n h o  d o  s e u  a r r a y  e

r e t o r n a r á  a p e n a s  í n d i c e s  v á l i d o s .  P o r t a n t o ,  c a s o  o  s e u  a r r a y  t e n h a  c i n c o

i t e n s ,  a  f u n ç ã o  h a s h  n ã o  r e t o r n a r á  1 0 0 ,  p o i s  e s t e  v a l o r  n ã o  s e r i a  u m  í n d i c e

v á l i d o d o a r r a y .

V o c ê  a c a b o u  d e  c r i a r  u m a  “ M a g g i e 󲀝 !  C o l o q u e  u m a  f u n ç ã o  h a s h  e m  c o n j u n t o

c o m  u m  a r r a y  e  v o c ê  t e r á  u m a  e s t r u t u r a  d e  d a d o s  c h a m a d a  󰁴 a b 󰁥 󰁬 a  󰁨 a 󰁳 󰁨 .

U m a  t a b e l a  h a s h  é  a  p r i m e i r a  e s t r u t u r a  d e  d a d o s  q u e  t e m  u m a  l ó g i c a

a d i c i o n a l  a l i a d a  q u e  v o c ê  a p r e n d e r á ,  v i s t o  q u e  a r r a y s  e  l i s t a s  m a p e i a m

d i r e t a m e n t e  p a r a  a  m e m ó r i a ,  p o r é m  a s  t a b e l a s  h a s h  s ã o  m a i s  i n t e l i g e n t e s .

E l a s  u s a m  u m a  f u n ç ã o  h a s h  p a r a  i n d i c a r ,  d e  m a n e i r a  i n t e l i g e n t e ,  o n d e

a r m a z e n a r  o s  e l e m e n t o s .

A s  t a b e l a s  h a s h  s ã o ,  p r o v a v e l m e n t e ,  a s  m a i s  ú t e i s  e  c o m p l e x a s  e s t r u t u r a s  d e

d a d o s  q u e  v o c ê  a p r e n d e r á .  E l a s  t a m b é m  s ã o  c o n h e c i d a s  c o m o  m a p a s  h a s h ,

m a p a s ,  d i c i o n á r i o s  e  t a b e l a s  d e  d i s p e r s ã o .  A l é m  d i s s o ,  a s  t a b e l a s  h a s h  s ã o

m u i t o  r á p i d a s !  V o c ê  s e  l e m b r a  d a  n o s s a  d i s c u s s ã o  s o b r e  a r r a y s  e  l i s t a s

e n c a d e a d a s  n o  C a p í t u l o  2 ?  V o c ê  p o d e  p e g a r  u m  i t e m  d e  u m  a r r a y

i n s t a n t a n e a m e n t e  q u e  a s  t a b e l a s  h a s h  u s a r ã o  a r r a y s  p a r a  a r m a z e n a r  o s

d a d o s  d e s s e  i t e m ;  d e s t a  f o r m a ,  e l a s  s ã o  i g u a l m e n t e  v e l o z e s .
V o c ê  p r o v a v e l m e n t e  n u n c a  t e r á  d e  i m p l e m e n t a r  u m a  t a b e l a  h a s h ,  p o i s

q u a l q u e r  l i n g u a g e m  d e  p r o g r a m a ç ã o  j á  t e r á  u m a  i m p l e m e n t a ç ã o  d e l a .  A

l i n g u a g e m  P y t h o n  c o n t é m  t a b e l a s  h a s h  c h a m a d a s  d e  󰁤 󰁩 c 󰁩 󰁯 󰁮 á 󰁲 󰁩 󰁯 󰁳 .  P a r a  c r i a r

dict
u m a  n o v a  t a b e l a  h a s h  v o c ê  p o d e  u t i l i z a r  a  f u n ç ã o  :

>>> caderno = dict()


Book  ( c a d e r n o )  é  u m a  n o v a  t a b e l a  h a s h .  A g o r a ,  v a m o s  a d i c i o n a r  a l g u n s

p r e ç o s  a  e l a .
>>> caderno["maçã"] = 0.67 ❶
>>> caderno["leite"] = 1.49 ❷
>>> caderno["abacate"] = 1.49
>>> print caderno
{'abacate': 1.49, 'maçã': 0.67, 'leite': 1.49}
❶  U m a  m a ç ã  c 󰁵 󰁳 󰁴 a  6 7  c e n 󰁴 a 󰁶 o 󰁳 .

❷  O  l e i 󰁴 e  c 󰁵 󰁳 󰁴 a  R $  1 , 4 9

F á c i l !  A g o r a ,  v a m o s  p e r g u n t a r  o  p r e ç o  d e  u m  a b a c a t e :

>>> print caderno["abacate"]


1.49 ❶
❶  O  p r e ç o  d e  󰁵 m  a b a c a 󰁴 e .

U m a  t a b e l a  h a s h  c o n t é m  c h a v e s  e  v a l o r e s .  N a  h a s h  caderno ,  o s  n o m e s  d o s

p r o d u t o s  s ã o  a s  c h a v e s  e  o s  p r e ç o s  s ã o  o s  v a l o r e s .  L o g o ,  u m a  t a b e l a  h a s h

m a p e i a  c h a v e s  e  v a l o r e s .
N a  p r ó x i m a  s e ç ã o  v o c ê  v e r á  a l g u n s  e x e m p l o s  e m  q u e  a s  t a b e l a s  h a s h  s ã o

m u i t o  ú t e i s .

E 󰁘 E 󰁒 C Í C I 󰁏 󰁓

É  i m p o r t a n t e  q u e  f u n ç õ e s  h a s h  r e t o r n e m  o  m e s m o  v a l o r  d e  s a í d a  q u a n d o  o

m e s m o  v a l o r  d e  e n t r a d a  f o r  i n s e r i d o .  C a s o  c o n t r á r i o ,  n ã o  s e r á  p o s s í v e l

e n c o n t r a r  o  i t e m  q u e  v o c ê  d e s e j a  n a  t a b e l a  h a s h !

Q u a i s  d e s t a s  f u n ç õ e s  h a s h  s ã o  c o n s i s t e n t e s ?

5 . 1 f(x) = 1 ❶
5 . 2 f(x) = rand() ❷
5 . 3 f(x) = proximo_espaco_vazio() ❸
5 . 4 f(x) = len(x) ❹
❶  R e 󰁴 o r n a  󲀜 1 󲀝  p a r a  q 󰁵 a l q 󰁵 e r  e n 󰁴 r a d a .
❷  R e 󰁴 o r n a  󰁵 m  n ú m e r o  a l e a 󰁴 ó r i o  a  c a d a  e 󰁸 e c 󰁵 ç ã o .

❸  R e 󰁴 o r n a  o  í n d i c e  d o  p r ó 󰁸 i m o  e 󰁳 p a ç o  l i 󰁶 r e  d a  󰁴 a b e l a  h a 󰁳 h .

❹  U 󰁳 a  o  c o m p r i m e n 󰁴 o  d a  󰁳 󰁴 r i n g  c o m o  í n d i c e .

U 󰁴 󰁩 󰁬 󰁩 󰁺 a ç ã 󰁯

T a b e l a s  h a s h  s ã o  a m p l a m e n t e  u t i l i z a d a s .  N e s t a  s e ç ã o ,  v a m o s  a n a l i s a r  a l g u n s

c a s o s .

U 󰁳 a 󰁮 󰁤 󰁯  󰁴 a b 󰁥 󰁬 a 󰁳  󰁨 a 󰁳 󰁨  󰁰 a 󰁲 a  󰁰 󰁥 󰁳 󰁱 󰁵 󰁩 󰁳 a 󰁳

O  s e u  c e l u l a r  t e m  u m a  a g e n d a  t e l e f ô n i c a  i n t e g r a d a .

C a d a  n o m e  e s t á  a s s o c i a d o  a  u m  n ú m e r o  t e l e f ô n i c o .
I m a g i n e  q u e  v o c ê  q u e i r a  c o n s t r u i r  u m a  l i s t a  t e l e f ô n i c a  c o m o  e s t a .  S e r á

n e c e s s á r i o  m a p e a r  o  n o m e  d a s  p e s s o a s  e  a s s o c i á - l o s  a  n ú m e r o s  t e l e f ô n i c o s .

D e s s a  f o r m a ,  a  s u a  l i s t a  t e l e f ô n i c a  d e v e r á  t e r  e s t a s  f u n c i o n a l i d a d e s :

󲀢  A d i c i o n a r  o  n o m e  d e  u m a  p e s s o a  e  o  n ú m e r o  d e  t e l e f o n e  a s s o c i a d o  a  e s t e

n o m e .

󲀢  I n s e r i r  o  n o m e  d e  u m a  p e s s o a  e  r e c e b e r  o  n ú m e r o  t e l e f ô n i c o  a s s o c i a d o  a

e l a .

E s t e  é  u m  e x e m p l o  p e r f e i t o  d e  s i t u a ç õ e s  e m  q u e  t a b e l a s  h a s h  p o d e m  s e r

u s a d a s !  A s  t a b e l a s  h a s h  s ã o  ó t i m a s  o p ç õ e s  q u a n d o

󲀢  V o c ê  d e s e j a  m a p e a r  a l g u m  i t e m  c o m  r e l a ç ã o  a  o u t r o

󲀢  V o c ê  p r e c i s a  p e s q u i s a r  a l g o

C r i a r  u m a  l i s t a  t e l e f ô n i c a  é  u m a  t a r e f a  s i m p l e s .  P r i m e i r o ,  f a ç a  u m a  n o v a

t a b e l a  h a s h  p a r a  lista_telefonica :

>>> lista_telefonica = dict()


A  p r o p ó s i t o ,  a  l i n g u a g e m  P y h t o n  t e m  u m  a t a l h o  p a r a  a  c r i a ç ã o  d e  t a b e l a s

h a s h  u t i l i z a n d o  d u a s  c h a v e s :

>>> lista_telefonica = {} ❶
❶  I g 󰁵 a l  a o  q 󰁵 e  f o i  f e i 󰁴 o  c o m  lista_telefonica = dict() .
E n t ã o  v a m o s  a d i c i o n a r  o  n ú m e r o  d e  a l g u m a s  p e s s o a s  n e s t a  l i s t a :

>>> lista_telefonica["jenny"] = 8675309


>>> lista_telefonica["emergency"] = 911
É  i s s o !  A g o r a ,  d i g a m o s  q u e  q u e i r a  e n c o n t r a r  o  n ú m e r o  d e  t e l e f o n e  d a  J e n n y .

P a r a  i s s o ,  é  n e c e s s á r i o  a p e n a s  i n f o r m a r  a  c h a v e  p a r a  a  h a s h :

>>> print lista_telefonica["jenny"]


8675309 ❶
❶  N ú m e r o  d e  󰁴 e l e f o n e  d a  J e n n 󰁹 .

I m a g i n e  q u e  t i v e s s e  d e  f a z e r  i s t o  u t i l i z a n d o  u m  a r r a y .  C o m o  f a r i a ?  A s  t a b e l a s

h a s h  t o r n a m  s i m p l e s  a  m o d e l a g e m  d e  u m a  r e l a ç ã o  e n t r e  d o i s  i t e n s .

A s  t a b e l a s  h a s h  s ã o  u s a d a s  p a r a  p e s q u i s a s  e m  u m a  e s c a l a  m u i t o  m a i o r .  P o r

e x e m p l o ,  s u p o n h a  q u e  v o c ê  q u e i r a  a c e s s a r  u m  w e b s i t e  c o m o  o  󰁨 󰁴 󰁴 󰁰 : / / a 󰁤 󰁩 󰁴 . 󰁩 󰁯 .

O  s e u  c o m p u t a d o r  d e v e  t r a d u z i r  a d i t . i o  p a r a  a  f o r m a  d e  u m  e n d e r e ç o  d e  I P .
P a r a  c a d a  w e b s i t e  q u e  v o c ê  a c e s s a r ,  o  e n d e r e ç o  d e v e r á  s e r  t r a d u z i d o  p a r a

u m  e n d e r e ç o  d e  I P .

N o s s a ,  m a p e a r  o  e n d e r e ç o  d e  u m  w e b s i t e  p a r a  u m  e n d e r e ç o  I P ?  I s s o  p a r e c e

o  c a s o  p e r f e i t o  p a r a  a  u t i l i z a ç ã o  d e  t a b e l a s  h a s h !  E s t e  p r o c e s s o  é  c h a m a d o  d e

󰁲 󰁥 󰁳 󰁯 󰁬 󰁵 ç ã 󰁯  D N S ,  e  a s  t a b e l a s  h a s h  s ã o  u m a  d a s  m a n e i r a s  p e l a s  q u a i s  e s t a

f u n c i o n a l i d a d e  p o d e  s e r  i m p l e m e n t a d a .

E 󰁶 󰁩 󰁴 a 󰁮 󰁤 󰁯  󰁥 󰁮 󰁴 󰁲 a 󰁤 a 󰁳  󰁤 󰁵 󰁰 󰁬 󰁩 󰁣 a 󰁤 a 󰁳
I m a g i n e  q u e  e s t e j a  o r g a n i z a n d o  u m a  v o t a ç ã o .  O b v i a m e n t e ,  c a d a  p e s s o a

p o d e r á  v o t a r  a p e n a s  u m a  v e z .  C o m o  v o c ê  p o d e  v e r i  c a r  s e  u m a  p e s s o a  j á

n ã o  v o t o u  a n t e s ?  V o c ê  p o d e  p e r g u n t a r  p a r a  a  p e s s o a  q u e  v e i o  v o t a r  q u a l  é  o

s e u  n o m e  c o m p l e t o  e  e n t ã o  c o n f e r i r  e s s e  n o m e  e m  u m a  l i s t a  q u e  c o n t e n h a  o

n o m e  d a s  p e s s o a s  q u e  j á  v o t a r a m .

S e  o  n o m e  d e s s a  p e s s o a  e s t i v e r  n a  l i s t a ,  i s s o  s i g n i  c a  q u e  e l a  j á  v o t o u ,  o u

s e j a ,  v o c ê  d e v e  d i s p e n s á - l a !  C a s o  c o n t r á r i o ,  v o c ê  d e v e r á  a d i c i o n a r  o  n o m e

d e l a  n a  l i s t a  e  p e r m i t i r  q u e  e l a  v o t e .  A g o r a ,  s u p o n h a  q u e  d i v e r s a s  p e s s o a s

c h e g a r a m  p a r a  v o t a r  e  q u e ,  a l é m  d i s s o ,  a  l i s t a  d e  p e s s o a s  q u e  j á  v o t a r a m  s e j a

m u i t o  l o n g a .

A  c a d a  n o v a  p e s s o a  q u e  c h e g a r  p a r a  v o t a r ,  v o c ê  d e v e r á  c o n f e r i r  e s t a  l i s t a

e n o r m e  p a r a  c h e c a r  s e  e s t a  p e s s o a  j á  v o t o u .  N o  e n t a n t o ,  t e m o s  u m a  s o l u ç ã o

m e l h o r :  u s e  u m a  h a s h !

votaram
P r i m e i r o ,  c r i e  u m a  h a s h   p a r a  r e g i s t r a r  a s  p e s s o a s  q u e  j á  v o t a r a m :
>>> votaram = {}

Q u a n d o  a l g u é m  c h e g a r  p a r a  v o t a r ,  c o n  r a  s e  o  n o m e  d e s t a  p e s s o a  j á  e s t á  n a

h a s h :

>>> valor = votaram.get("tom")


A  f u n ç ã o  get  ( p e g a r )  r e t o r n a r á  u m  v a l o r  s e  “ T o m 󲀝  j á  e s t i v e r  n a  t a b e l a  h a s h .

C a s o  c o n t r á r i o ,  e l a  r e t o r n a r á  None ( n a d a ) .  V o c ê  p o d e  u s a r  e s t a

f u n c i o n a l i d a d e  p a r a  c o n f e r i r  s e  a s  p e s s o a s  j á  v o t a r a m !

A q u i  v o c ê  p o d e  c o n f e r i r  o  c ó d i g o  c o m p l e t o :

voted = {}
def verifica_eleitor(nome):
ifvotaram.get(nome):
print "Mande embora!"
:
else

voted[nome] = True
print "Deixe votar!"
V a m o s  f a z e r  a l g u n s  t e s t e s :

>>> verifica_eleitor("tom")
Deixe votar!
>>> verifica_eleitor("mike")

Deixe votar!
>>> verifica_eleitor("mike")
Mande embora!
N a  p r i m e i r a  v e z  q u e  T o m  f o r  i n s e r i d o ,  a p a r e c e r á  a  m e n s a g e m  n a  t e l a  “ D e i x e

v o t a r ! 󲀝 . D e p o i s , o n o m e M i k e s e r á i n s e r i d o e n o v a m e n t e a m e n s a g e m “ D e i x e

v o t a r ! 󲀝 s e r á m o s t r a d a n a t e l a . P o r  m , M i k e s e r á i n s e r i d o m a i s u m a v e z e a

m e n s a g e m  “ M a n d e  e m b o r a ! 󲀝  s u r g i r á  n a  t e l a .

L e m b r e - s e :  s e  v o c ê  e s t i v e s s e  a r m a z e n a n d o  e s t e s  n o m e s  e m  u m a  l i s t a  d e

p e s s o a s  q u e  j á  v o t a r a m ,  e s t a  f u n ç ã o  s e  t o r n a r i a  m u i t o  l e n t a  e v e n t u a l m e n t e ,

p o i s  u m a  p e s q u i s a  s i m p l e s  s e r i a  u t i l i z a d a  p a r a  p e s q u i s a r  e m  t o d a  a  l i s t a .

P o r é m  v o c ê  e s t á  a r m a z e n a n d o  e s t e s  n o m e s  e m  u m a  t a b e l a  h a s h ,  e  a  t a b e l a

h a s h  i n f o r m a  i n s t a n t a n e a m e n t e  s e  o  n o m e  d a  p e s s o a  e s t á  o u  n ã o  n a  l i s t a .

L o g o ,  a  c h e c a g e m  p o r  d u p l i c a t a s  é  r e a l i z a d a  m u i t o  r a p i d a m e n t e  c o m  o  u s o

d e  u m a  t a b e l a  h a s h .
U 󰁴 󰁩 󰁬 󰁩 󰁺 a 󰁮 󰁤 󰁯  󰁴 a b 󰁥 󰁬 a 󰁳  󰁨 a 󰁳 󰁨  󰁣 󰁯 󰁭 󰁯  󰁣 a 󰁣 󰁨 󰁥

A p r e s e n t a r e m o s  u m  ú l t i m o  u s o  p a r a  t a b e l a s  h a s h :  u t i l i z a ç ã o  c o m o  c a c h e .  S e

v o c ê t r a b a l h a c o m w e b s i t e s , t a l v e z j á t e n h a o u v i d o f a l a r s o b r e a u t i l i z a ç ã o d e

c a c h e  c o m o  u m a  b o a  p r á t i c a .  A  i d e i a  é  e s t a :  i m a g i n e  q u e  v o c ê  v i s i t e

󰁦 a c 󰁥 b 󰁯 󰁯 󰁫 . c 󰁯 󰁭 :

1 .
V o c ê  f a z  u m a  s o l i c i t a ç ã o  a o s  s e r v i d o r e s  d o  F a c e b o o k .

2 . O  s e r v i d o r  p e n s a  p o r  u m  s e g u n d o  e  e n t ã o  e n v i a  u m a  p á g i n a  w e b .

3 . V o c ê  r e c e b e  u m a  p á g i n a  d a  w e b .
O  s e r v i d o r  d o  F a c e b o o k  p o d e  e s t a r  c o l e t a n d o  t o d a  a  a t i v i d a d e  d o s  s e u s

a m i g o s  p a r a  e n t ã o  m o s t r a r  a  v o c ê ,  p o r  e x e m p l o .  P a r a  c o l e t a r  t o d o s  e s t e s

d a d o s ,  o  s e r v i d o r  p o d e  l e v a r  a l g u n s  s e g u n d o s .  E n t r e t a n t o  e s t e s  p o u c o s

s e g u n d o s  p o d e m  p a r e c e r  u m a  e t e r n i d a d e ,  e  v o c ê  p o d e  p e n s a r  “ P o r  q u e  o

F a c e b o o k  e s t á  t ã o  l e n t o ? 󲀝 .  P o r  o u t r o  l a d o ,  o  s e r v i d o r  d o  F a c e b o o k  p r e c i s a

r e s p o n d e r  a  s o l i c i t a ç õ e s  d e  m i l h õ e s  d e  p e s s o a s ,  e  e s t e s  p o u c o s  s e g u n d o s  v ã o

s e  a c u m u l a n d o .  O u  s e j a ,  o  s e r v i d o r  d o  F a c e b o o k  e s t á  t r a b a l h a n d o  d u r o  p a r a

r e s p o n d e r  a  t o d a s  a s  s o l i c i t a ç õ e s .  M a s  s e r á  q u e  e x i s t e  a l g u m a  m a n e i r a  d e

t o r n a r  o  F a c e b o o k  m a i s  r á p i d o  e  f a z e r  c o m  q u e  o s  s e u s  s e r v i d o r e s  t r a b a l h e m

m e n o s ?

S u p o n h a  q u e  v o c ê  t e n h a  u m a  s o b r i n h a  q u e  f a ç a  m u i t a s  p e r g u n t a s  s o b r e

p l a n e t a s  d o  t i p o  “ O  q u ã o  d i s t a n t e  M a r t e   c a  d a  T e r r a ? 󲀝 ,  “ Q u a l  a  d i s t â n c i a  a t é

a  L u a ? 󲀝  e  “ Q u a l  a  d i s t â n c i a  a t é  J ú p i t e r ? 󲀝 .  A  c a d a  p e r g u n t a  v o c ê  p r e c i s a

p e s q u i s a r  n o  G o o g l e  a  r e s p o s t a  e  s ó  e n t ã o  v o c ê  c o n s e g u i r á  r e s p o n d e r .  L o g o

v o c ê t e r á m e m o r i z a d o q u e a L u a  c a a 3 8 4 . 4 0 0 k m d e d i s t â n c i a e n ã o

p r e c i s a r á  m a i s  p r o c u r a r  e s t a  r e s p o s t a  n o  G o o g l e .  É  d e s t a  f o r m a  q u e  o  c a c h e

f u n c i o n a :  o s  w e b s i t e s  l e m b r a m  d o s  d a d o s  e m  v e z  d e  r e c a l c u l á - l o s  a  c a d a

s o l i c i t a ç ã o .

C a s o  v o c ê  e s t e j a  c o n e c t a d o  a o  F a c e b o o k ,  s a i b a  q u e  t o d o  o  c o n t e ú d o  q u e

v o c ê v ê f o i f e i t o s o b m e d i d a . A s s i m , t o d a s a s v e z e s q u e v o c ê a c e s s a a p á g i n a

f a c e b o o k . c o m ,  o s  s e r v i d o r e s  p r e c i s a m  p e n s a r  e  s e l e c i o n a r  q u a l  c o n t e ú d o  é

d e  s e u  i n t e r e s s e .  P o r é m ,  s e  v o c ê  n ã o  e s t i v e r  l o g a d o  a o  F a c e b o o k ,  v e r á  a p e n a s

a  p á g i n a  d e  l o g i n ,  s e n d o  q u e  t o d a s  a s  p e s s o a s  v e r ã o  a  m e s m a  p á g i n a  d e

l o g i n .  O u  s e j a ,  o  F a c e b o o k  e n g l o b a  d i v e r s a s  s o l i c i t a ç õ e s  p a r a  a  m e s m a

i n f o r m a ç ã o :  “ M o s t r e - m e  a  p á g i n a  i n i c i a l  q u a n d o  e u  n ã o  e s t i v e r  l o g a d o 󲀝 .  I s s o

e v i t a  q u e  o  s e r v i d o r  t e n h a  d e  p e n s a r  c o m o  a  p á g i n a  i n i c i a l  é ,  p o i s  e l e
m e m o r i z a  c o m o  a  p á g i n a  i n i c i a l  d e v e  s e r  a p r e s e n t a d a  e  e n t ã o  a  e n v i a  a  v o c ê .

I s s o  s e  c h a m a  c a c 󰁨 󰁩 󰁮 󰁧 ,  e  e s t a  p r á t i c a  o f e r e c e  d u a s  v a n t a g e n s :

󲀢  V o c ê  r e c e b e  a  p á g i n a  d a  w e b  m u i t o  m a i s  r a p i d a m e n t e ,  d a  m e s m a  f o r m a

q u e  v o c ê  m e m o r i z o u  a  d i s t â n c i a  e n t r e  a  T e r r a  e  a  L u a .  A s s i m ,  d a  p r ó x i m a

v e z q u e s u a s o b r i n h a p e r g u n t a r s o b r e i s s o , n ã o s e r á n e c e s s á r i o p e s q u i s a r

n o  G o o g l e ,  p o i s  v o c ê  c o n s e g u i r á  r e s p o n d e r  i n s t a n t a n e a m e n t e .

󲀢  O  F a c e b o o k  p r e c i s a  t r a b a l h a r  m e n o s .

E s t a  t é c n i c a  é  u m a  m a n e i r a  c o m u m  d e  a g i l i z a r  a s  c o i s a s .  T o d o s  o s  g r a n d e s

s i t e s  u s a m  c a c h i n g ,  e  o s  d a d o s  d e s t e s  c a c h i n g s  s ã o  a r m a z e n a d o s  e m  u m a

t a b e l a  h a s h !

O  F a c e b o o k  n ã o  e s t á  s ó  a p l i c a n d o  o  c a c h i n g  n a  p á g i n a  d e  e n t r a d a .  E l e  e s t á

f a z e n d o  c a c h e  d a s  p á g i n a s  S o b r e ,  C o n t a t o ,  T e r m o s  e  C o n d i ç õ e s  e  m u i t a s

o u t r a s .  A s s i m ,  e l e  p r e c i s a  m a p e a r  a  U R L  d e  u m a  p á g i n a  e  r e l a c i o n á - l a  a o s

d a d o s  d a  p á g i n a .

Q u a n d o  v o c ê  v i s i t a r  u m a  p á g i n a  n o  F a c e b o o k ,  e s t e  i r á  p r i m e i r o  c h e c a r  s e

e s t a  p á g i n a  e s t á  a r m a z e n a d a  n a  h a s h .
A q u i  v o c ê  p o d e  v e r  i s s o  e m  f o r m a  d e  c ó d i g o :

cache = {}
def pega_pagina(url):
ifcache.get(url):
return cache[url] ❶
:
else
dados = pega_dados_do_servidor(url)
pega_dados_do_ser vidor(url)
cache[url] = dados ❷

return dados
❶  R e 󰁴 o r n a  o 󰁳  d a d o 󰁳  d o  c a c h e .

❷  S a l 󰁶 a  e 󰁳 󰁳 e 󰁳  d a d o 󰁳  p r i m e i r o  n o  󰁳 e 󰁵  c a c h e .

D e s t a  f o r m a ,  v o c ê  f a z  o  s e r v i d o r  t r a b a l h a r  a p e n a s  s e  a  U R L  n ã o  e s t i v e r

a r m a z e n a d a  n o  c a c h e .  A n t e s  d e  v o c ê  r e t o r n a r  o s  d a d o s ,  e l e s  s e r ã o  s a l v o s  n o

c a c h e .  A s s i m ,  a  p r ó x i m a  v e z  q u e  a l g u é m  s o l i c i t a r  e s t a  U R L ,  v o c ê  p o d e r á

e n v i a r  o s  d a d o s  d o  c a c h e  e m  v e z  d e  f a z e r  o  s e r v i d o r  e x e c u t a r  e s t a  t a r e f a .

R 󰁥 󰁣 a 󰁰 󰁩 󰁴 󰁵 󰁬 a 󰁮 󰁤 󰁯

A s  t a b e l a s  h a s h  s ã o  ú t e i s  p a r a
󲀢  M o d e l a r  r e l a ç õ e s  e n t r e  d o i s  i t e n s

󲀢  F i l t r a r  p o r  d u p l i c a t a s

󲀢  C a c h i n g / m e m o r i z a ç ã o  d e  d a d o s ,  e m  v e z  d e  s o l i c i t a r  e s t e s  d a d o s  d o

s e r v i d o r .

C 󰁯 󰁬 󰁩 󰁳 õ 󰁥 󰁳

C o m o  e u  d i s s e  a n t e s ,  a  m a i o r i a  d a s  l i n g u a g e n s  d e  p r o g r a m a ç ã o  c o n t é m

t a b e l a s  h a s h ,  p o r  i s s o  v o c ê  n ã o  p r e c i s a  e s c r e v ê - l a s  d o  z e r o .  S e n d o  a s s i m ,  n ã o

f a l a r e i  m u i t o  s o b r e  a  e s t r u t u r a  d a s  t a b e l a s  h a s h .  N o  e n t a n t o  v o c ê  p r e c i s a

s a b e r  s o b r e  o  d e s e m p e n h o  d e l a s ,  e  p a r a  i s s o  p r e c i s a  p r i m e i r o  e n t e n d e r  o  q u e

s ã o  c o l i s õ e s .  A s  d u a s  p r ó x i m a s  s e ç õ e s  f a l a m  s o b r e  c o l i s õ e s  e  d e s e m p e n h o .

P r i m e i r o ,  p r e c i s o  d i z e r  q u e  e s t i v e  c o n t a n d o  u m a  p e q u e n a  m e n t i r a .  D i s s e

q u e  u m a  f u n ç ã o  h a s h  s e m p r e  m a p e i a  d i f e r e n t e s  c h a v e s  p a r a  d i f e r e n t e s

e s p a ç o s  e m  u m  a r r a y .

N a  r e a l i d a d e ,  é  p r a t i c a m e n t e  i m p o s s í v e l  e s c r e v e r  u m a  f u n ç ã o  h a s h  q u e  f a ç a

i s s o .  V a m o s  a n a l i s a r  e s t e  e x e m p l o  s i m p l e s :  s u p o n h a  q u e  v o c ê  t e n h a  u m

a r r a y  q u e  c o n t e n h a  2 6  e s p a ç o s .

S u a  f u n ç ã o  h a s h  é  b e m  s i m p l e s :  e l a  a p e n a s  i n d i c a  u m  e s p a ç o  d o  a r r a y

a l f a b e t i c a m e n t e .
T a l v e z  v o c ê  j á  c o n s i g a  v e r  o  p r o b l e m a .  V o c ê  q u e r  i n s e r i r  o  p r e ç o  d e  u m a

a m e i x a  n a  s u a  h a s h .  A s s i m ,  o  p r i m e i r o  e s p a ç o  d o  a r r a y  é  i n d i c a d o .

D e p o i s ,  v o c ê  q u e r  i n s e r i r  o  p r e ç o  d a s  b a n a n a s .  E n t ã o ,  o  s e g u n d o  e s p a ç o  d o

a r r a y  é  i n d i c a d o .

T u d o  e s t á  i n d o  t ã o  b e m !  M a s  a g o r a  q u e r  i n s e r i r  o  p r e ç o  d o s  a b a c a t e s  n a  s u a

h a s h .  E n t ã o ,  o  p r i m e i r o  e s p a ç o  d o  a r r a y  é  i n d i c a d o  n o v a m e n t e .

A h ,  n ã o !  A s  a m e i x a s  j á  e s t ã o  n e s t e  e s p a ç o !  O  q u e  v a m o s  f a z e r ?  I s s o  s e

c h a m a  c 󰁯 󰁬 󰁩 󰁳 ã 󰁯 :  d u a s  c h a v e s  s ã o  i n d i c a d a s  p a r a  o  m e s m o  e s p a ç o ,  e  i s t o  é  u m

p r o b l e m a .  A s s i m ,  s e  a r m a z e n a r  o  p r e ç o  d o s  a b a c a t e s  n e s t e  e s p a ç o ,  e l e s  i r ã o

s o b r e s c r e v e r  o  p r e ç o  d a s  a m e i x a s .  D e s t a  f o r m a ,  d a  p r ó x i m a  v e z  q u e  a l g u é m

p e r g u n t a r  o  p r e ç o  d a s  a m e i x a s ,  o  p r e ç o  d o s  a b a c a t e s  s e r á  i n f o r m a d o !

C o l i s õ e s  s ã o  u m  p r o b l e m a ,  e  v o c ê  p r e c i s a  s o l u c i o n á - l o .  P a r a  i s s o  h á  v á r i a s

a l t e r n a t i v a s ,  e  a  m a i s  s i m p l e s  é  e s t a :  s e  d i v e r s a s  c h a v e s  m a p e i a m  p a r a  o

m e s m o  e s p a ç o ,  i n i c i e  u m a  l i s t a  e n c a d e a d a  n e s t e  e s p a ç o .
N e s t e  e x e m p l o ,  t a n t o  a  “ a m e i x a 󲀝  q u a n t o  o  “ a b a c a t e 󲀝  s ã o  m a p e a d o s  p a r a  o

m e s m o  e s p a ç o .  L o g o ,  v o c ê  d e v e  i n i c i a r  u m a  l i s t a  e n c a d e a d a  n e s t e  e s p a ç o .

C a s o  v o c ê  q u e i r a  s a b e r  o  p r e ç o  d a s  b a n a n a s ,  e s t a  i n f o r m a ç ã o  a i n d a  s e r á

a c e s s a d a  d e  m a n e i r a  r á p i d a .  P o r é m ,  s e  v o c ê  q u i s e r  s a b e r  o  p r e ç o  d a s

a m e i x a s ,  e s s a  i n f o r m a ç ã o  s e r á  r e t o r n a d a  d e  f o r m a  m a i s  l e n t a ,  p o i s  v o c ê

p r e c i s a r á  p e s q u i s a r  n a  s u a  l i s t a  e n c a d e a d a  p a r a  e n c o n t r a r  “ a m e i x a s 󲀝 .  S e  a

l i s t a  e n c a d e a d a  f o r  p e q u e n a ,  n ã o  h a v e r á  n e n h u m  p r o b l e m a ,  p o i s  v o c ê

d e v e r á  p e s q u i s a r  e n t r e  t r ê s  o u  q u a t r o  e l e m e n t o s .  M a s  i m a g i n e  q u e  v o c ê

t r a b a l h a  e m  u m  m e r c a d o  o n d e  s ã o  v e n d i d o s  a p e n a s  p r o d u t o s  q u e  i n i c i a m

c o m  a  l e t r a  A .

E i ,  e s p e r e  u m  p o u c o  a í !  Q u a s e  t o d a  a  t a b e l a  h a s h  e s t á  v a z i a ,  e x c e t o  p o r  u m

e s p a ç o ,  e  n e s t e  e s p a ç o  h á  u m a  l i s t a  g i g a n t e  l i n k a d a !  O u  s e j a ,  c a d a  e l e m e n t o

d e s s a  t a b e l a  h a s h  e s t á  c o n t i d o  n e s s a  l i s t a .  I s s o  é  t ã o  i n e  c i e n t e  q u a n t o

c o l o c a r  t o d o s  e s s e s  e l e m e n t o s  a p e n a s  n a  l i s t a  e n c a d e a d a ,  p o i s  e s s a  l i s t a

d i m i n u i r á  o  t e m p o  d e  e x e c u ç ã o  d a  s u a  t a b e l a  h a s h .

A p r e n d e m o s  d u a s  l i ç õ e s  a q u i :

󲀢 A 󰁦 󰁵 󰁮 ç ã 󰁯 󰁨 a 󰁳 󰁨 é 󰁭 󰁵 󰁩 󰁴 󰁯 󰁩 󰁭 󰁰 󰁯 󰁲 󰁴 a 󰁮 󰁴 󰁥 .  E l a  m a p e i a  t o d a s  a s  c h a v e s  p a r a  u m
ú n i c o  e s p a ç o .  I d e a l m e n t e ,  a  s u a  f u n ç ã o  h a s h  m a p e a r i a  c h a v e s  d e  m a n e i r a

s i m é t r i c a  p o r  t o d a  a  h a s h .

󲀢  C a s o  a s  l i s t a s  e n c a d e a d a s  s e  t o r n e m  m u i t o  l o n g a s ,  e l a s  d i m i n u i r ã o  d e m a i s

o  t e m p o  d e  e x e c u ç ã o  d a  t a b e l a  h a s h .  P o r é m  e l a s  n ã o  s e  t o r n a r ã o  m u i t o

l o n g a s  s e  v o c ê  󰁵 󰁴 󰁩 󰁬 󰁩 󰁺 a 󰁲  󰁵 󰁭 a  b 󰁯 a  󰁦 󰁵 󰁮 ç ã 󰁯  󰁨 a 󰁳 󰁨 !

A s  f u n ç õ e s  h a s h  s ã o  i m p o r t a n t e s ,  p o i s  u m a  b o a  f u n ç ã o  h a s h  c r i a  p o u c a s

c o l i s õ e s .  M a s  c o m o  v o c ê  e s c o l h e  u m a  b o a  f u n ç ã o  h a s h ?  É  i s s o  q u e  v e r e m o s

n a  p r ó x i m a  s e ç ã o !

D 󰁥 󰁳 󰁥 󰁭 󰁰 󰁥 󰁮 󰁨 󰁯

V o c ê  i n i c i o u  e s t e  c a p í t u l o  e m  u m  s u p e r m e r c a d o ,  p o i s  e r a  n e c e s s á r i o  c r i a r

a l g o  q u e  f o r n e c e s s e  o s  p r e ç o s  d o s  p r o d u t o s  󰁩 󰁮 󰁳 󰁴 a 󰁮 󰁴 a 󰁮 󰁥 a 󰁭 󰁥 󰁮 󰁴 󰁥 .  B e m ,  a s

t a b e l a s  h a s h  s ã o  m u i t o  r á p i d a s .

N o  c a s o  m é d i o ,  a s  t a b e l a s  h a s h  t ê m  t e m p o  d e  e x e c u ç ã o  O ( 1 )  p a r a  t u d o .

A s s i m ,  O ( 1 )  é  c h a m a d o  d e  󰁴 󰁥 󰁭 󰁰 󰁯  c 󰁯 󰁮 󰁳 󰁴 a 󰁮 󰁴 󰁥 .  V o c ê  a i n d a  n ã o  f o i  a p r e s e n t a d o

a  t e m p o  c o n s t a n t e .  T e m p o  c o n s t a n t e  n ã o  é  a l g o  q u e  a c o n t e c e

i n s t a n t a n e a m e n t e ,  m a s  s i m  u m  t e m p o  q u e  c o n t i n u a r á  s e m p r e  o  m e s m o ,

i n d e p e n d e n t e m e n t e  d e  q u ã o  g r a n d e  a  t a b e l a  h a s h  p o s s a   c a r .  P o r  e x e m p l o ,

v o c ê s a b e q u e a p e s q u i s a s i m p l e s t e m t e m p o d e e x e c u ç ã o l i n e a r .
A  p e s q u i s a  b i n á r i a  é  m a i s  r á p i d a ,  p o i s  t e m  t e m p o  d e  e x e c u ç ã o  l o g :

P r o c u r a r  a l g o  e m  u m a  t a b e l a  h a s h  t e m  t e m p o  d e  e x e c u ç ã o  c o n s t a n t e .

P e r c e b e  c o m o  é  u m a  l i n h a  r e t a ?  I s s o  s i g n i  c a  q u e  n ã o  i m p o r t a  s e  a  s u a

t a b e l a  h a s h  t e m  1  e l e m e n t o  o u  1  b i l h ã o  d e  e l e m e n t o s ,  p o i s  o  r e t o r n o  d a

t a b e l a  h a s h  s e m p r e  l e v a r á  a  m e s m a  q u a n t i d a d e  d e  t e m p o .  N a  v e r d a d e ,  v o c ê
j á v i u t e m p o c o n s t a n t e a n t e s , p o i s r e t o r n a r u m i t e m d e u m a r r a y l e v a u m

t e m p o  c o n s t a n t e .  N o v a m e n t e ,  n ã o  i m p o r t a  o  t a m a n h o  d o  a r r a y ,  p o i s  e l e

s e m p r e  l e v a r á  a  m e s m a  q u a n t i d a d e  d e  t e m p o  p a r a  r e t o r n a r  u m  e l e m e n t o .

N o  c a s o  m é d i o ,  a s  t a b e l a s  h a s h  s ã o  m u i t o  r á p i d a s .

N o  p i o r  c a s o ,  u m a  t a b e l a  h a s h  t e m  t e m p o  d e  e x e c u ç ã o  O ( 󰁮 ) ,  o u  s e j a ,  t e m p o

d e  e x e c u ç ã o  l i n e a r  p a r a  t u d o ,  o  q u e  é  b e m  l e n t o .  V a m o s  c o m p a r a r  a s  t a b e l a s

h a s h  c o m  o s  a r r a y s  e  c o m  a s  l i s t a s .

P r e s t e  a t e n ç ã o  a o  c a s o  m é d i o  p a r a  a s  t a b e l a s  h a s h .  A s  t a b e l a s  h a s h  s ã o  t ã o

v e l o z e s q u a n t o o s a r r a y s n a b u s c a ( p e g a r u m v a l o r e m a l g u m í n d i c e ) , e e l a s

s ã o  t ã o  v e l o z e s  q u a n t o  a s  l i s t a s  n a  i n s e r ç ã o  e  n a  r e m o ç ã o  d e  i t e n s .  O u  s e j a ,

e l a  é  o  m e l h o r  d o s  d o i s  m u n d o s !  P o r é m ,  n o  p i o r  c a s o ,  a s  t a b e l a s  h a s h  s ã o

l e n t a s  e m  a m b o s  o s  c a s o s .  A s s i m ,  é  i m p o r t a n t e  q u e  v o c ê  n ã o  o p e r e  n o  p i o r

c a s o ;  p a r a  i s s o  é  p r e c i s o  e v i t a r  c o l i s õ e s .  P a r a  e v i t a r  c o l i s õ e s  s ã o  n e c e s s á r i o s

󲀢  u m  b a i x o  f a t o r  d e  c a r g a ;

󲀢  u m a  b o a  f u n ç ã o  h a s h .

󰁎 󰁯 󰁴 󰁡

A n 󰁴 e 󰁳  d e  i n i c i a r  e 󰁳 󰁴 a  󰁳 e ç ã o ,  󰁳 a i b a  q 󰁵 e  e l a  n ã o  é  󰁵 m a  l e i 󰁴 󰁵 r a  o b r i g a 󰁴 ó r i a ,  p o i 󰁳  f a l a r e i  󰁳 o b r e

c o m o  i m p l e m e n 󰁴 a r  󰁵 m a  󰁴 a b e l a  h a 󰁳 h .  P o r é m  󰁶 o c ê  p r o 󰁶 a 󰁶 e l m e n 󰁴 e  n 󰁵 n c a  f a r á  i 󰁳 󰁳 o .  N ã o

i m p o r 󰁴 a  a  l i n g 󰁵 a g e m  n a  q 󰁵 a l  󰁶 o c ê  p r o g r a m e ,  e l a  󰁴 e r á  󰁵 m a  i m p l e m e n 󰁴 a ç ã o  d e  󰁴 a b e l a  h a 󰁳 h

j á a g r e g a d a . A 󰁳 󰁳 i m , é p o 󰁳 󰁳 í 󰁶 e l 󰁵 󰁳 a r e 󰁳 󰁴 a 󰁴 a b e l a h a 󰁳 h a g r e g a d a e a d m i 󰁴 i r q 󰁵 e e l a 󰁴 e r á 󰁵 m

b o m  d e 󰁳 e m p e n h o .  A  p r ó 󰁸 i m a  󰁳 e ç ã o  p o d e  󰁳 e r  c o n 󰁳 i d e r a d a  󰁵 m a  e 󰁳 p i a d a  d e n 󰁴 r o  d o  c a p ô

p a r a  a n a l i 󰁳 a r  o  f 󰁵 n c i o n a m e n 󰁴 o  d o  m o 󰁴 o r .

F a 󰁴 󰁯 󰁲  󰁤 󰁥  󰁣 a 󰁲 󰁧 a

O  f a t o r  d e  c a r g a  d e  u m a  t a b e l a  h a s h  é  s i m p l e s  d e  c a l c u l a r .
A s  t a b e l a s  h a s h  u t i l i z a m  u m  a r r a y  p a r a  a r m a z e n a m e n t o ,  e n t ã o  v o c ê  d e v e

c o n t a r  o  n ú m e r o  d e  e s p a ç o s  u s a d o s  n o  a r r a y .  P o r  e x e m p l o ,  e s t a  t a b e l a  h a s h

t e m  f a t o r  d e  c a r g a  d e  2 / 5 ,  o u  0 , 4 .

Q u a l  o  f a t o r  d e  c a r g a  d e s t a  t a b e l a  h a s h ?

S e  v o c ê  d i s s e  u m  t e r ç o ,  a c e r t o u .  O  f a t o r  d e  c a r g a  m e d e  q u a n t o s  e s p a ç o s

c o n t i n u a m  v a z i o s  n a  s u a  t a b e l a  h a s h .

S u p o n h a  q u e  v o c ê  p r e c i s e  a r m a z e n a r  o  p r e ç o  d e  c e m  p r o d u t o s  e m  s u a  t a b e l a

h a s h ,  c o n s i d e r a n d o  q u e  e l a  t e n h a  c e m  e s p a ç o s .  N a  m e l h o r  h i p ó t e s e ,  c a d a

i t e m  t e r á  s e u  p r ó p r i o  e s p a ç o .

E s t a  t a b e l a  h a s h  t e m  u m  f a t o r  d e  c a r g a  d e  1 .  E  s e  a  t a b e l a  h a s h  t i v e s s e  a p e n a s

c i n q u e n t a  e s p a ç o s ?  N e s t e  c a s o ,  e l a  t e r i a  u m  f a t o r  d e  c a r g a  d e  2 ,  s e n d o

i m p o s s í v e l  q u e  c a d a  i t e m  t e n h a  o  s e u  p r ó p r i o  e s p a ç o ,  p o i s  n ã o  e x i s t e m
e s p a ç o s  s u  c i e n t e s !  U m  f a t o r  d e  c a r g a  m a i o r  d o  q u e  1  i n d i c a  q u e  v o c ê  t e m

m a i s  i t e n s  d o  q u e  e s p a ç o s  e m  s e u  a r r a y .  S e  o  f a t o r  d e  c a r g a  c o m e ç a r  a

c r e s c e r ,  s e r á  n e c e s s á r i o  a d i c i o n a r  m a i s  e s p a ç o s  e m  s u a  t a b e l a  h a s h .  I s s o  s e

c h a m a  󰁲 󰁥 󰁤 󰁩 󰁭 󰁥 󰁮 󰁳 󰁩 󰁯 󰁮 a 󰁭 󰁥 󰁮 󰁴 󰁯 .  S u p o n h a ,  p o r  e x e m p l o ,  q u e  v o c ê  t e n h a  e s t a

t a b e l a  h a s h  q u e  e s t á  q u a s e  c h e i a :

É  n e c e s s á r i o  r e d i m e n s i o n a r  e s t a  t a b e l a  h a s h .  P a r a  i s s o ,  p r i m e i r o  v o c ê  d e v e

c r i a r  u m  a r r a y  m a i o r .  E m p i r i c a m e n t e ,  d e  n i u - s e  q u e  e s t e  a r r a y  d e v e  t e r  o

d o b r o  d o  t a m a n h o  d o  a r r a y  o r i g i n a l .

A g o r a  é  n e c e s s á r i o  r e i n s e r i r  t o d o s  o s  i t e n s  n e s t a  n o v a  t a b e l a  h a s h  u t i l i z a n d o

a  f u n ç ã o  hash :

E s t a  n o v a  t a b e l a  t e m  u m  f a t o r  d e  c a r g a  d e  ⅜  ( t r ê s  o i t a v o s ) .  B e m  m e l h o r !

C o m  u m  f a t o r  d e  c a r g a  m e n o r  h a v e r á  m e n o s  c o l i s õ e s  e  s u a  t a b e l a  t e r á

m e l h o r  d e s e m p e n h o .  U m a  b o a  r e g r a  g e r a l  é :  r e d i m e n s i o n e  q u a n d o  o  f a t o r

d e  c a r g a  f o r  m a i o r  d o  q u e  0 , 7 .

V o c ê  p o d e  e s t a r  p e n s a n d o  “ R e d i m e n s i o n a r  l e v a  m u i t o  t e m p o ! 󲀝 ,  e  i s t o  é

v e r d a d e . O r e d i m e n s i o n a m e n t o é c a r o e n ã o d e v e s e r f e i t o c o m f r e q u ê n c i a .

N o  e n t a n t o ,  e m  m é d i a ,  a s  t a b e l a s  h a s h  t ê m  t e m p o  d e  e x e c u ç ã o  O ( 1 ) ,  m e s m o

c o m  o  r e d i m e n s i o n a m e n t o .

U 󰁭 a  b 󰁯 a  󰁦 󰁵 󰁮 ç ã 󰁯  󰁨 a 󰁳 󰁨

U m a  b o a  f u n ç ã o  h a s h  d i s t r i b u i  o s  v a l o r e s  n o  a r r a y  s i m e t r i c a m e n t e .
U m a  f u n ç ã o  h a s h  n ã o  i d e a l  a g r u p a  v a l o r e s  e  p r o d u z  d i v e r s a s  c o l i s õ e s .

M a s  o  q u e  é  u m a  b o a  f u n ç ã o  h a s h ?  I s s o  é  a l g o  c o m  q u e  v o c ê  j a m a i s  d e v e r á

s e  p r e o c u p a r ,  p o i s  h o m e n s  ( e  m u l h e r e s )  v e l h o s  e  b a r b u d o s  s e n t a m  e m

q u a r t o s  e s c u r o s  e  s e  p r e o c u p a m  c o m  i s s o .  S e  v o c ê  é  m u i t o  c u r i o s o ,  d ê  u m a

o l h a d a  n a  f u n ç ã o  S H A  ( h á  u m a  b r e v e  d e s c r i ç ã o  s o b r e  e l a  n o  ú l t i m o

c a p í t u l o ) .  V o c ê  p o d e  u s a r  a q u i l o  c o m o  s u a  f u n ç ã o  h a s h .

E 󰁘 E 󰁒 C Í C I 󰁏 󰁓

É  i m p o r t a n t e  q u e  f u n ç õ e s  h a s h  t e n h a m  u m a  b o a  d i s t r i b u i ç ã o .  D e s s a  f o r m a ,

e l a s   c a m  c o m  o  m a p e a m e n t o  m a i s  a m p l o  p o s s í v e l .  O  p i o r  c a s o  é  u m a

f u n ç ã o  h a s h  q u e  m a p e i a  t o d o s  o s  i t e n s  p a r a  o  m e s m o  e s p a ç o  d a  t a b e l a  h a s h .

S u p o n h a  q u e  v o c ê  t e n h a  e s t a s  q u a t r o  f u n ç õ e s  h a s h  q u e  o p e r a m  c o m  s t r i n g s :

󰁡 . R e t o r n e  “ 1 󲀝  p a r a  q u a l q u e r  e n t r a d a .

󰁢 .
U s e  o  c o m p r i m e n t o  d a  s t r i n g  c o m o  o  í n d i c e .

󰁣 .
U s e  o  p r i m e i r o  c a r a c t e r e  d a  s t r i n g  c o m o  í n d i c e .  A s s i m ,  t o d a s  a s  s t r i n g s

q u e  i n i c i a m  c o m  a  l e t r a  a  s ã o  h a s h e a d a s  j u n t a s  e  a s s i m  p o r  d i a n t e .

M a p e i e  c a d a  l e t r a  p a r a  u m  n ú m e r o  p r i m o :  a  =  2 ,  b  =  3 ,  c  =  5 ,  d  =  7 ,  e  =
󰁤 .

1 1 ,  e  a s s i m  p o r  d i a n t e .  P a r a  u m a  s t r i n g ,  a  f u n ç ã o  h a s h  é  a  s o m a  d e  t o d o s

o s  c a r a c t e r e s - m ó d u l o  c o n f o r m e  o  t a m a n h o  d a  h a s h .  S e  o  t a m a n h o  d e  s u a

h a s h  f o r  1 0 ,  p o r  e x e m p l o ,  e  a  s t r i n g  f o r  “ b a g 󲀝 ,  o  í n d i c e  s e r á  ( 3  +  2  +  1 7 )  %

1 0  =  2 2  %  1 0  =  2 .

P a r a  c a d a  u m  d e s t e s  e x e m p l o s ,  q u a l  f u n ç ã o  h a s h  f o r n e c e r á  u m a  b o a

d i s t r i b u i ç ã o ?  C o n s i d e r e  q u e  o  t a m a n h o  d a  t a b e l a  h a s h  t e n h a  d e z  e s p a ç o s .

5 . 5  U m a  l i s t a  t e l e f ô n i c a  e m  q u e  a s  c h a v e s  s ã o  o s  n o m e s  e  o s  v a l o r e s  s ã o  o s

n ú m e r o s  t e l e f ô n i c o s .  O s  n o m e s  s ã o  o s  s e g u i n t e s :  E s t h e r ,

Você também pode gostar