A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Busca Sequencial Int pseq(int x, int n, int v[]){ for(i=0; i<n; i++){ if(x==v[i]) return true; } return false; }

Apresentações semelhantes


Apresentação em tema: "Busca Sequencial Int pseq(int x, int n, int v[]){ for(i=0; i<n; i++){ if(x==v[i]) return true; } return false; }"— Transcrição da apresentação:

1 Busca Sequencial Int pseq(int x, int n, int v[]){ for(i=0; i<n; i++){ if(x==v[i]) return true; } return false; }

2 Busca Seqüencial Recursiva int busca2 (int x, int n, int v[]) { if (n == 0) return false; if ( v[n-1]==x) return ; return busca2 (x, n-1, v); }

3 Busca Binária Quanto tempo o algoritmo leva para parar? Na início da primeira iteração, d-e vale aproximadamente n. Na início da segunda, vale aproximadamente n/2. Na início da terceira, n/4. Na início da (k-1)-ésima, n/2k. Quando k passar de log2n, o valor da expressão n/2k fica menor que 1 e o algoritmo pára. Logo, o número de iterações é aproximadamente

4 Busca Binária buscaBinaria (int x, int n, int v[]) { int e, m, d; e = 0; d = n-1; while (e <= d) { m = (e + d)/2; if (v[m] == x) return m; if (v[m] < x) e = m + 1; else d = m - 1; } return -1; }

5 Busca Binária int bb (int x, int e, int d, int v[]) { if (e > d) return -1; else { int m = (e + d)/2; if (v[m] == x) return m; if (v[m] < x) return bb (x, m+1, d, v); else return bb (x, e, m-1, v); } Int buscaBinaria2 (int x, int n, int v[ ]) { return bb (x, 0, n-1, v); }

6 Exercício Suponha que cada elemento do vetor v[0..n-1] é uma struct com dois campos: o nome de um aluno e o número do aluno. Suponha que o vetor está em ordem crescente de números. Escreva uma função de busca binária que receba o número de um aluno e devolva o seu nome. Se o número não está no vetor, a função deve devolver a string vazia.

7 Remoção e inserção em vetor Professor Ivan Pires

8 Remoção e inserção em vetor Suponha que um vetor (= array) v foi declarado como int v[MAX]; sendo MAX uma constante definida por um #define. Digamos que v abriga uma seqüência #define v[0],..., v[n-1]. É óbvio que devemos ter 0 ≤ n ≤ MAX. Se n é igual a 0 então a seqüência está vazia. Se n é igual a MAX, a seqüência está cheia. Suponha que a seqüência v[0],...,v[n-1] sofre inserção de novos elementos e remoção de elementos antigos. Como administrar essas operações?

9 REMOÇÃO int remover (int k, int n, int v[]) { int j; for (j = k+1; j < n; j++) v[j-1] = v[j]; return n - 1; }

10 Remoção int remover2 (int k, int n, int v[]) { if (k == n-1) return n - 1; else { v[k] = v[k+1]; return remover2 (k+1, n, v); }

11 Exercício Refaça todo o problema da remoção sob condições mais gerais: Suponha que a parte relevante do vetor v é v[ini..fim-1]; para remover v[k], puxe v[k+1..fim-1] para a esquerda ou empurre v[ini..k-1] para a direita, dependendo de qual das alternativas seja mais "barata".

12 Inserção Suponha que quero inserir um novo elemento x entre v[k-1] e v[k]. É óbvio que isso faz sentido quando 1 ≤ k ≤ n-1. Também faz sentido quando k é igual a 0 (insere no início) e quando k é igual a n (insere no fim). Em suma, faz sentido quando e somente quando 0 ≤ k ≤ n.

13 Inserção int inserir (int k, int x, int n, int v[]) { int j; for (j = n; j > k; --j) v[j] = v[j-1]; v[k] = x; return n + 1; } n = inserir (51, 999, n, v);

14 Inserção int inserir2 (int k, int x, int n, int v[]) { if (k == n) { v[n] = x; return n + 1; } else { int y; y = v[k]; v[k] = x; return inserir2 (k+1, y, n, v); }

15 Exercício Escreva uma função que insira x entre v[k] e v[k+1]

16 Pequena Aplicação. Escreva um programa para administrar uma coleção de números digitados pelo usuário. A coleção pode conter mais de uma cópia de um mesmo número. O usuário pode inserir novos números na coleção e remover números que já estão lá. A coleção é armazenada em ordem crescente. Se o usuário digitar i 222 (seguido de ENTER) o número 222 é inserido na coleção. Se digitar r 333 o número 333 é removido da coleção (se esse número não estiver na coleção, o comando é ignorado). Depois de cada inserção ou remoção, o programa deve exibir a coleção. Se o usuário digitar qualquer outro caracter que não 'i' ou 'r', a execução do programa termina.


Carregar ppt "Busca Sequencial Int pseq(int x, int n, int v[]){ for(i=0; i<n; i++){ if(x==v[i]) return true; } return false; }"

Apresentações semelhantes


Anúncios Google