Uploaded by Pedro Teodoro

unidade01a2 algoritmosPesquisa

advertisement
Unidade I:
Introdução - Algoritmos de Pesquisa
Instituto de Ciências Exatas e Informática
Departamento de Ciência da Computação
Algoritmos de Pesquisa
Agenda
•
Pesquisa sequencial
•
Pesquisa binária
----------------------------
Algoritmos e Estruturas de Dados II (2)
Algoritmos de Pesquisa
Agenda
•
Pesquisa sequencial
•
Pesquisa binária
----------------------------
Algoritmos e Estruturas de Dados II (3)
Algoritmos de Pesquisa
Pesquisa Sequencial
boolean resp = false;
for (int i = 0; i < n; i++){
if (array[i] == x){
resp = true;
i = n;
}
}
----------------------------
Algoritmos e Estruturas de Dados II (4)
Algoritmos de Pesquisa
Exemplo da Pesquisa Sequencial
•
Exemplo: procurar o 7
boolean resp = false;
for (int i = 0; i < n; i++){
if (array[i] == x){
resp = true;
i = n;
}
}
resp
false
3
13
5
7
9
11
20
1
6
21
30
4
49
8
2
0
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
----------------------------
Algoritmos e Estruturas de Dados II (5)
Algoritmos de Pesquisa
Exemplo da Pesquisa Sequencial
•
Exemplo: procurar o 7
boolean resp = false;
for (int i = 0; i < n; i++){
if (array[i] == x){
resp = true;
i = n;
}
}
resp
false
3
13
5
7
9
11
20
1
6
21
30
4
49
8
2
0
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
----------------------------
Algoritmos e Estruturas de Dados II (6)
Algoritmos de Pesquisa
Exemplo da Pesquisa Sequencial
•
Exemplo: procurar o 7
boolean resp = false;
for (int i = 0; i < n; i++){ // n = 16
if (array[i] == x){
// true
resp = true;
i = n;
}
}
resp
false
3
13
5
7
9
11
20
1
6
21
30
4
49
8
2
0
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
----------------------------
Algoritmos e Estruturas de Dados II (7)
Algoritmos de Pesquisa
Exemplo da Pesquisa Sequencial
•
Exemplo: procurar o 7
boolean resp = false;
for (int i = 0; i < n; i++){
if (array[i] == x){
resp = true;
i = n;
}
}
// false
resp
false
3
13
5
7
9
11
20
1
6
21
30
4
49
8
2
0
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
----------------------------
Algoritmos e Estruturas de Dados II (8)
Algoritmos de Pesquisa
Exemplo da Pesquisa Sequencial
•
Exemplo: procurar o 7
boolean resp = false;
for (int i = 0; i < n; i++){
if (array[i] == x){
resp = true;
i = n;
}
}
resp
false
3
13
5
7
9
11
20
1
6
21
30
4
49
8
2
0
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
----------------------------
Algoritmos e Estruturas de Dados II (9)
Algoritmos de Pesquisa
Exemplo da Pesquisa Sequencial
•
Exemplo: procurar o 7
boolean resp = false;
for (int i = 0; i < n; i++){ // n = 16
if (array[i] == x){
// true
resp = true;
i = n;
}
}
resp
false
3
13
5
7
9
11
20
1
6
21
30
4
49
8
2
0
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
----------------------------
Algoritmos e Estruturas de Dados II (10)
Algoritmos de Pesquisa
Exemplo da Pesquisa Sequencial
•
Exemplo: procurar o 7
boolean resp = false;
for (int i = 0; i < n; i++){
if (array[i] == x){
resp = true;
i = n;
}
}
// false
resp
false
3
13
5
7
9
11
20
1
6
21
30
4
49
8
2
0
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
----------------------------
Algoritmos e Estruturas de Dados II (11)
Algoritmos de Pesquisa
Exemplo da Pesquisa Sequencial
•
Exemplo: procurar o 7
boolean resp = false;
for (int i = 0; i < n; i++){
if (array[i] == x){
resp = true;
i = n;
}
}
resp
false
3
13
5
7
9
11
20
1
6
21
30
4
49
8
2
0
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
----------------------------
Algoritmos e Estruturas de Dados II (12)
Algoritmos de Pesquisa
Exemplo da Pesquisa Sequencial
•
Exemplo: procurar o 7
boolean resp = false;
for (int i = 0; i < n; i++){ // n = 16
if (array[i] == x){
// true
resp = true;
i = n;
}
}
resp
false
3
13
5
7
9
11
20
1
6
21
30
4
49
8
2
0
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
----------------------------
Algoritmos e Estruturas de Dados II (13)
Algoritmos de Pesquisa
Exemplo da Pesquisa Sequencial
•
Exemplo: procurar o 7
boolean resp = false;
for (int i = 0; i < n; i++){
if (array[i] == x){
resp = true;
i = n;
}
}
// false
resp
false
3
13
5
7
9
11
20
1
6
21
30
4
49
8
2
0
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
----------------------------
Algoritmos e Estruturas de Dados II (14)
Algoritmos de Pesquisa
Exemplo da Pesquisa Sequencial
•
Exemplo: procurar o 7
boolean resp = false;
for (int i = 0; i < n; i++){
if (array[i] == x){
resp = true;
i = n;
}
}
resp
false
3
13
5
7
9
11
20
1
6
21
30
4
49
8
2
0
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
----------------------------
Algoritmos e Estruturas de Dados II (15)
Algoritmos de Pesquisa
Exemplo da Pesquisa Sequencial
•
Exemplo: procurar o 7
boolean resp = false;
for (int i = 0; i < n; i++){ // n = 16
if (array[i] == x){
// true
resp = true;
i = n;
}
}
resp
false
3
13
5
7
9
11
20
1
6
21
30
4
49
8
2
0
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
----------------------------
Algoritmos e Estruturas de Dados II (16)
Algoritmos de Pesquisa
Exemplo da Pesquisa Sequencial
•
Exemplo: procurar o 7
boolean resp = false;
for (int i = 0; i < n; i++){
if (array[i] == x){
resp = true;
i = n;
}
}
// true
resp
false
3
13
5
7
9
11
20
1
6
21
30
4
49
8
2
0
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
----------------------------
Algoritmos e Estruturas de Dados II (17)
Algoritmos de Pesquisa
Exemplo da Pesquisa Sequencial
•
Exemplo: procurar o 7
boolean resp = false;
for (int i = 0; i < n; i++){
if (array[i] == x){
resp = true;
i = n;
}
}
// true
resp
true
3
13
5
7
9
11
20
1
6
21
30
4
49
8
2
0
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
----------------------------
Algoritmos e Estruturas de Dados II (18)
Algoritmos de Pesquisa
Exemplo da Pesquisa Sequencial
•
Exemplo: procurar o 7
boolean resp = false;
for (int i = 0; i < n; i++){
if (array[i] == x){
resp = true;
i = n;
}
}
// true
resp
true
3
13
5
7
9
11
20
1
6
21
30
4
49
8
2
0
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
----------------------------
Algoritmos e Estruturas de Dados II (19)
Algoritmos de Pesquisa
Exemplo da Pesquisa Sequencial
•
Exemplo: procurar o 7
boolean resp = false;
for (int i = 0; i < n; i++){
if (array[i] == x){
resp = true;
i = n;
}
}
// true
resp
true
3
13
5
7
9
11
20
1
6
21
30
4
49
8
2
0
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
----------------------------
Algoritmos e Estruturas de Dados II (20)
Algoritmos de Pesquisa
Exemplo da Pesquisa Sequencial
•
Exemplo: procurar o 7
boolean resp = false;
for (int i = 0; i < n; i++){ // n = 16
if (array[i] == x){
// false
resp = true;
i = n;
}
}
resp
true
3
13
5
7
9
11
20
1
6
21
30
4
49
8
2
0
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
----------------------------
Algoritmos e Estruturas de Dados II (21)
Algoritmos de Pesquisa
Análise da Pesquisa Sequencial
boolean resp = false;
for (int i = 0; i < n; i++){
if (array[i] == x){
resp = true;
i = n;
}
}
----------------------------
1º) Qual é a operação relevante?
R: Comparação entre elementos do array
2º) Quantas vezes ela será executada?
Algoritmos e Estruturas de Dados II (22)
Algoritmos de Pesquisa
Análise da Pesquisa Sequencial
boolean resp = false;
for (int i = 0; i < n; i++){
if (array[i] == x){
resp = true;
i = n;
}
}
----------------------------
1º) Qual é a operação relevante?
R: Comparação entre elementos do array
2º) Quantas vezes ela será executada?
R: Em qual dos casos?
Algoritmos e Estruturas de Dados II (23)
Algoritmos de Pesquisa
Análise da Pesquisa Sequencial
boolean resp = false;
for (int i = 0; i < n; i++){
if (array[i] == x){
resp = true;
i = n;
}
}
----------------------------
1º) Qual é a operação relevante?
R: Comparação entre elementos do array
2º) Quantas vezes ela será executada?
R: Melhor caso: f(n) = 1 = Θ(1)
Pior caso: f(n) = n = Θ(n)
Caso médio: f(n) = (n + 1) = Θ(n)
2
Algoritmos e Estruturas de Dados II (24)
Algoritmos de Pesquisa
Exercício
•
Vamos fazer alguns exercícios antes de continuar?
----------------------------
Algoritmos e Estruturas de Dados II (25)
Algoritmos de Pesquisa
Exercício Resolvido (1)
•
Quando acontece o melhor e o pior caso do algoritmo de pesquisa
sequencial?
----------------------------
Algoritmos e Estruturas de Dados II (26)
Algoritmos de Pesquisa
Exercício Resolvido (1)
•
Quando acontece o melhor e o pior caso do algoritmo de pesquisa
sequencial?
Resposta:
Melhor caso: Elemento procurado está na primeira posição
Pior caso: Ele está na última posição OR não está no array
----------------------------
Algoritmos e Estruturas de Dados II (27)
Algoritmos de Pesquisa
Exercício Resolvido (2)
•
Supondo que temos uma informação extra sobre o array: que ele está
ordenado. Conseguimos fazer algo mais eficiente? Como?
----------------------------
Algoritmos e Estruturas de Dados II (28)
Algoritmos de Pesquisa
Exercício Resolvido (2)
•
Supondo que temos uma informação extra sobre o array: que ele está
ordenado. Conseguimos fazer algo mais eficiente? Como?
Resposta: Sim.
Pesquisamos a partir da metade do array.
----------------------------
Algoritmos e Estruturas de Dados II (29)
Algoritmos de Pesquisa
Exercício Resolvido (2)
•
Supondo que temos uma informação extra sobre o array: que ele está
ordenado. Conseguimos fazer algo mais eficiente? Como?
Resposta: Sim.
Pesquisamos a partir da metade do array. Se o elemento procurado for
maior que o da metade, descartamos a primeira metade do array; senão,
a segunda metade. Repetimos o processo com a metade não descartada
----------------------------
Algoritmos e Estruturas de Dados II (30)
Algoritmos de Pesquisa
Exercício Resolvido (2)
•
Supondo que temos uma informação extra sobre o array: que ele está
ordenado. Conseguimos fazer algo mais eficiente? Como?
Resposta: Sim.
Pesquisamos a partir da metade do array. Se o elemento procurado for
maior que o da metade, descartamos a primeira metade do array; senão,
a segunda metade. Repetimos o processo com a metade não descartada
Essa é a pesquisa binária
----------------------------
Algoritmos e Estruturas de Dados II (31)
Algoritmos de Pesquisa
Agenda
•
Pesquisa sequencial
•
Pesquisa binária
----------------------------
Algoritmos e Estruturas de Dados II (32)
Algoritmos de Pesquisa
Pesquisa Binária
boolean resp = false;
int dir = n - 1, esq = 0, meio;
while (esq <= dir) {
meio = (esq + dir) / 2;
if (x == array[meio]){
resp = true;
esq = n;
} else if (x > array[meio]){
esq = meio + 1;
} else {
dir = meio - 1;
}
}
----------------------------
Algoritmos e Estruturas de Dados II (33)
Algoritmos de Pesquisa
Exemplo da Pesquisa Binária
•
Exemplo: procurar o 35
boolean resp = false;
int dir = n - 1, esq = 0, meio;
while (esq <= dir) {
meio = (esq + dir) / 2;
if (x == array[meio]){
resp = true;
esq = n;
} else if (x > array[meio]){
esq = meio + 1;
} else {
dir = meio - 1;
}
}
resp
false
2
3
5
7
9
11
15
17
20
21
30
43
49
70
71
82
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
----------------------------
Algoritmos e Estruturas de Dados II (34)
Algoritmos de Pesquisa
Exemplo da Pesquisa Binária
•
Exemplo: procurar o 35
boolean resp = false;
int dir = n - 1, esq = 0, meio;
while (esq <= dir) {
meio = (esq + dir) / 2;
if (x == array[meio]){
resp = true;
esq = n;
} else if (x > array[meio]){
esq = meio + 1;
} else {
dir = meio - 1;
}
}
resp
false
esq
dir
2
3
5
7
9
11
15
17
20
21
30
43
49
70
71
82
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
----------------------------
Algoritmos e Estruturas de Dados II (35)
Algoritmos de Pesquisa
Exemplo da Pesquisa Binária
•
Exemplo: procurar o 35
boolean resp = false;
int dir = n - 1, esq = 0, meio;
while (esq <= dir) {
meio = (esq + dir) / 2;
if (x == array[meio]){
resp = true;
esq = n;
} else if (x > array[meio]){
esq = meio + 1;
} else {
dir = meio - 1;
}
}
(0 <= 15): true
resp
false
esq
dir
2
3
5
7
9
11
15
17
20
21
30
43
49
70
71
82
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
----------------------------
Algoritmos e Estruturas de Dados II (36)
Algoritmos de Pesquisa
Exemplo da Pesquisa Binária
•
Exemplo: procurar o 35
boolean resp = false;
int dir = n - 1, esq = 0, meio;
while (esq <= dir) {
meio = (esq + dir) / 2;
if (x == array[meio]){
resp = true;
esq = n;
} else if (x > array[meio]){
esq = meio + 1;
} else {
dir = meio - 1;
}
}
(0 + 15) / 2: 7
resp
false
meio
esq
dir
2
3
5
7
9
11
15
17
20
21
30
43
49
70
71
82
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
----------------------------
Algoritmos e Estruturas de Dados II (37)
Algoritmos de Pesquisa
Exemplo da Pesquisa Binária
•
Exemplo: procurar o 35
boolean resp = false;
int dir = n - 1, esq = 0, meio;
while (esq <= dir) {
meio = (esq + dir) / 2;
if (x == array[meio]){
resp = true;
esq = n;
} else if (x > array[meio]){
esq = meio + 1;
} else {
dir = meio - 1;
}
}
(35 == 17): false
resp
false
meio
esq
dir
2
3
5
7
9
11
15
17
20
21
30
43
49
70
71
82
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
----------------------------
Algoritmos e Estruturas de Dados II (38)
Algoritmos de Pesquisa
Exemplo da Pesquisa Binária
•
Exemplo: procurar o 35
boolean resp = false;
int dir = n - 1, esq = 0, meio;
while (esq <= dir) {
meio = (esq + dir) / 2;
if (x == array[meio]){
resp = true;
esq = n;
} else if (x > array[meio]){
esq = meio + 1;
} else {
dir = meio - 1;
}
}
resp
(35 > 17): true
false
meio
esq
dir
2
3
5
7
9
11
15
17
20
21
30
43
49
70
71
82
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
----------------------------
Algoritmos e Estruturas de Dados II (39)
Algoritmos de Pesquisa
Exemplo da Pesquisa Binária
•
Exemplo: procurar o 35
boolean resp = false;
int dir = n - 1, esq = 0, meio;
while (esq <= dir) {
meio = (esq + dir) / 2;
if (x == array[meio]){
resp = true;
esq = n;
} else if (x > array[meio]){
esq = meio + 1;
} else {
dir = meio - 1;
}
}
Com uma comparação, reduzimos
o espaço de busca pela metade
resp
meio
false
esq
dir
2
3
5
7
9
11
15
17
20
21
30
43
49
70
71
82
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
----------------------------
Algoritmos e Estruturas de Dados II (40)
Algoritmos de Pesquisa
Exemplo da Pesquisa Binária
•
Exemplo: procurar o 35
boolean resp = false;
int dir = n - 1, esq = 0, meio;
while (esq <= dir) {
meio = (esq + dir) / 2;
if (x == array[meio]){
resp = true;
esq = n;
} else if (x > array[meio]){
esq = meio + 1;
} else {
dir = meio - 1;
}
}
(8 <= 15): true
resp
false
esq
dir
2
3
5
7
9
11
15
17
20
21
30
43
49
70
71
82
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
----------------------------
Algoritmos e Estruturas de Dados II (41)
Algoritmos de Pesquisa
Exemplo da Pesquisa Binária
•
Exemplo: procurar o 35
boolean resp = false;
int dir = n - 1, esq = 0, meio;
while (esq <= dir) {
meio = (esq + dir) / 2;
if (x == array[meio]){
resp = true;
esq = n;
} else if (x > array[meio]){
esq = meio + 1;
} else {
dir = meio - 1;
}
}
(8 + 15) / 2: 11
resp
false
meio
esq
dir
2
3
5
7
9
11
15
17
20
21
30
43
49
70
71
82
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
----------------------------
Algoritmos e Estruturas de Dados II (42)
Algoritmos de Pesquisa
Exemplo da Pesquisa Binária
•
Exemplo: procurar o 35
boolean resp = false;
int dir = n - 1, esq = 0, meio;
while (esq <= dir) {
meio = (esq + dir) / 2;
if (x == array[meio]){
resp = true;
esq = n;
} else if (x > array[meio]){
esq = meio + 1;
} else {
dir = meio - 1;
}
}
(35 == 43): false
resp
false
meio
esq
dir
2
3
5
7
9
11
15
17
20
21
30
43
49
70
71
82
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
----------------------------
Algoritmos e Estruturas de Dados II (43)
Algoritmos de Pesquisa
Exemplo da Pesquisa Binária
•
Exemplo: procurar o 35
boolean resp = false;
int dir = n - 1, esq = 0, meio;
while (esq <= dir) {
meio = (esq + dir) / 2;
if (x == array[meio]){
resp = true;
esq = n;
} else if (x > array[meio]){
esq = meio + 1;
} else {
dir = meio - 1;
}
}
resp
(35 > 43): false
false
meio
esq
dir
2
3
5
7
9
11
15
17
20
21
30
43
49
70
71
82
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
----------------------------
Algoritmos e Estruturas de Dados II (44)
Algoritmos de Pesquisa
Exemplo da Pesquisa Binária
•
Exemplo: procurar o 35
boolean resp = false;
int dir = n - 1, esq = 0, meio;
while (esq <= dir) {
meio = (esq + dir) / 2;
if (x == array[meio]){
resp = true;
esq = n;
} else if (x > array[meio]){
esq = meio + 1;
} else {
dir = meio - 1;
}
}
resp
false
dir
meio
esq
2
3
5
7
9
11
15
17
20
21
30
43
49
70
71
82
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
----------------------------
Algoritmos e Estruturas de Dados II (45)
Algoritmos de Pesquisa
Exemplo da Pesquisa Binária
•
Exemplo: procurar o 35
boolean resp = false;
int dir = n - 1, esq = 0, meio;
while (esq <= dir) {
meio = (esq + dir) / 2;
if (x == array[meio]){
resp = true;
esq = n;
} else if (x > array[meio]){
esq = meio + 1;
} else {
dir = meio - 1;
}
}
(8 <= 10): true
resp
false
dir
meio
esq
2
3
5
7
9
11
15
17
20
21
30
43
49
70
71
82
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
----------------------------
Algoritmos e Estruturas de Dados II (46)
Algoritmos de Pesquisa
Exemplo da Pesquisa Binária
•
Exemplo: procurar o 35
boolean resp = false;
int dir = n - 1, esq = 0, meio;
while (esq <= dir) {
meio = (esq + dir) / 2;
if (x == array[meio]){
resp = true;
esq = n;
} else if (x > array[meio]){
esq = meio + 1;
} else {
dir = meio - 1;
}
}
(8 + 10) / 2: 9
resp
false
meio
esq
dir
2
3
5
7
9
11
15
17
20
21
30
43
49
70
71
82
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
----------------------------
Algoritmos e Estruturas de Dados II (47)
Algoritmos de Pesquisa
Exemplo da Pesquisa Binária
•
Exemplo: procurar o 35
boolean resp = false;
int dir = n - 1, esq = 0, meio;
while (esq <= dir) {
meio = (esq + dir) / 2;
if (x == array[meio]){
resp = true;
esq = n;
} else if (x > array[meio]){
esq = meio + 1;
} else {
dir = meio - 1;
}
}
(35 == 21): false
resp
false
meio
esq
dir
2
3
5
7
9
11
15
17
20
21
30
43
49
70
71
82
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
----------------------------
Algoritmos e Estruturas de Dados II (48)
Algoritmos de Pesquisa
Exemplo da Pesquisa Binária
•
Exemplo: procurar o 35
boolean resp = false;
int dir = n - 1, esq = 0, meio;
while (esq <= dir) {
meio = (esq + dir) / 2;
if (x == array[meio]){
resp = true;
esq = n;
} else if (x > array[meio]){
esq = meio + 1;
} else {
dir = meio - 1;
}
}
resp
(35 > 21): true
false
meio
esq
dir
2
3
5
7
9
11
15
17
20
21
30
43
49
70
71
82
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
----------------------------
Algoritmos e Estruturas de Dados II (49)
Algoritmos de Pesquisa
Exemplo da Pesquisa Binária
•
Exemplo: procurar o 35
boolean resp = false;
int dir = n - 1, esq = 0, meio;
while (esq <= dir) {
meio = (esq + dir) / 2;
if (x == array[meio]){
resp = true;
esq = n;
} else if (x > array[meio]){
esq = meio + 1;
} else {
dir = meio - 1;
}
}
resp
false
esq
meio
dir
2
3
5
7
9
11
15
17
20
21
30
43
49
70
71
82
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
----------------------------
Algoritmos e Estruturas de Dados II (50)
Algoritmos de Pesquisa
Exemplo da Pesquisa Binária
•
Exemplo: procurar o 35
boolean resp = false;
int dir = n - 1, esq = 0, meio;
while (esq <= dir) {
meio = (esq + dir) / 2;
if (x == array[meio]){
resp = true;
esq = n;
} else if (x > array[meio]){
esq = meio + 1;
} else {
dir = meio - 1;
}
}
(10 <= 10): true
resp
false
esq
dir
2
3
5
7
9
11
15
17
20
21
30
43
49
70
71
82
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
----------------------------
Algoritmos e Estruturas de Dados II (51)
Algoritmos de Pesquisa
Exemplo da Pesquisa Binária
•
Exemplo: procurar o 35
boolean resp = false;
int dir = n - 1, esq = 0, meio;
while (esq <= dir) {
meio = (esq + dir) / 2;
if (x == array[meio]){
resp = true;
esq = n;
} else if (x > array[meio]){
esq = meio + 1;
} else {
dir = meio - 1;
}
}
(10 + 10) / 2: 10
resp
meio
false
esq
dir
2
3
5
7
9
11
15
17
20
21
30
43
49
70
71
82
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
----------------------------
Algoritmos e Estruturas de Dados II (52)
Algoritmos de Pesquisa
Exemplo da Pesquisa Binária
•
Exemplo: procurar o 35
boolean resp = false;
int dir = n - 1, esq = 0, meio;
while (esq <= dir) {
meio = (esq + dir) / 2;
if (x == array[meio]){
resp = true;
esq = n;
} else if (x > array[meio]){
esq = meio + 1;
} else {
dir = meio - 1;
}
}
(35 == 30): false
resp
meio
false
esq
dir
2
3
5
7
9
11
15
17
20
21
30
43
49
70
71
82
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
----------------------------
Algoritmos e Estruturas de Dados II (53)
Algoritmos de Pesquisa
Exemplo da Pesquisa Binária
•
Exemplo: procurar o 35
boolean resp = false;
int dir = n - 1, esq = 0, meio;
while (esq <= dir) {
meio = (esq + dir) / 2;
if (x == array[meio]){
resp = true;
esq = n;
} else if (x > array[meio]){
esq = meio + 1;
} else {
dir = meio - 1;
}
}
resp
(35 > 30): true
meio
false
esq
dir
2
3
5
7
9
11
15
17
20
21
30
43
49
70
71
82
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
----------------------------
Algoritmos e Estruturas de Dados II (54)
Algoritmos de Pesquisa
Exemplo da Pesquisa Binária
•
Exemplo: procurar o 35
boolean resp = false;
int dir = n - 1, esq = 0, meio;
while (esq <= dir) {
meio = (esq + dir) / 2;
if (x == array[meio]){
resp = true;
esq = n;
} else if (x > array[meio]){
esq = meio + 1;
} else {
dir = meio - 1;
}
}
resp
false
meio
dir
esq
2
3
5
7
9
11
15
17
20
21
30
43
49
70
71
82
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
----------------------------
Algoritmos e Estruturas de Dados II (55)
Algoritmos de Pesquisa
Exemplo da Pesquisa Binária
•
Exemplo: procurar o 35
boolean resp = false;
int dir = n - 1, esq = 0, meio;
while (esq <= dir) {
meio = (esq + dir) / 2;
if (x == array[meio]){
resp = true;
esq = n;
} else if (x > array[meio]){
esq = meio + 1;
} else {
dir = meio - 1;
}
}
(11 <= 10): false
resp
dir
false
esq
2
3
5
7
9
11
15
17
20
21
30
43
49
70
71
82
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
----------------------------
Algoritmos e Estruturas de Dados II (56)
Algoritmos de Pesquisa
Análise da Pesquisa Binária
•
Exemplo
boolean resp = false;
int dir = n - 1, esq = 0, meio;
while (esq <= dir) {
meio = (esq + dir) / 2;
if (x == array[meio]){
resp = true;
esq = n;
} else if (x > array[meio]){
esq = meio + 1;
} else {
dir = meio - 1;
}
}
----------------------------
1º) Qual é a operação relevante?
R: Comparação entre elementos
do array.
2º) Quantas vezes ela será executada?
Algoritmos e Estruturas de Dados II (57)
Algoritmos de Pesquisa
Análise da Pesquisa Binária
•
Exemplo
boolean resp = false;
int dir = n - 1, esq = 0, meio;
while (esq <= dir) {
meio = (esq + dir) / 2;
if (x == array[meio]){
resp = true;
esq = n;
} else if (x > array[meio]){
esq = meio + 1;
} else {
dir = meio - 1;
}
}
----------------------------
1º) Qual é a operação relevante?
R: Comparação entre elementos do
array.
2º) Quantas vezes ela será executada?
Algoritmos e Estruturas de Dados II (58)
R:Melhor caso: f(n) = 1 = Θ(1)
Pior caso: f(n) = 2 x lg(n) = Θ(lg n)
Algoritmos de Pesquisa
Exercício Resolvido (3)
•
Quando acontece o melhor e o pior caso do algoritmo de pesquisa binária?
----------------------------
Algoritmos e Estruturas de Dados II (59)
Algoritmos de Pesquisa
Exercício Resolvido (3)
•
Quando acontece o melhor e o pior caso do algoritmo de pesquisa binária?
Resposta:
Melhor caso: Elemento procurado está na metade do array
Pior caso: Está na última posição de procura (lg n) ou não está no array
----------------------------
Algoritmos e Estruturas de Dados II (60)
Algoritmos de Pesquisa
Exercício (1)
•
A solução apresentada para pesquisa binária faz duas comparações entre
elementos do array em cada execução da repetição, modifique o código
para efetuarmos apenas uma
----------------------------
Algoritmos e Estruturas de Dados II (61)
Download