Simulacao
Transcrição
Simulacao
Simulação • Emulação de sistemas reais • Levantamento de estatísticas – Não envolve pessoas/sistemas reais – Situações extremas podem ser testadas – Intervalos de tempo “irreais” podem ser avaliados Simulação • Problema de Josephus – N pessoas (numeradas de 1 a N) sentadas em um círculo – Começando pela pessoa 1, uma batata quente é passada para a pessoa do lado. – Depois de M passes, a pessoa que está com a batata quente é eliminada do círculo. – A batata recomeça a ser passada pela pessoa ao lado da eliminada 1 Simulação Problema de Josephus • M=0 – Pessoas eliminadas na ordem a partirda pessoa 1. Ganha a última pessoa. • M=1 – A ordem de eliminação de pessoas não é tão intuitiva. – N=5, M=1: • • • • Começa com 1, passa para 2 que é eliminado 3 pega a batata, passa para 4 que é eliminado 5 pega a batata, passa para 1 que é eliminado 3 pega a batata, passa para 5 que é eliiminado. 3 ganha. Simulação Problema de Josephus – Solução 1 • Pessoas: elementos em uma lista ligada • Cada passe da batata é uma operação next em um iterator da lista ligada. 2 Simulação Problema de Josephus - Implementação public static int josephus( int people, int passes) { Collection theList = new LinkedList(); for (int i=1;i<=people;i++) theList.add(new Integer(i)); Iterator its = theList.iterator(); O(MN) while (people -- !=1) { for (int i=0;i<=passes;i++) { if (!itr.hasNext()) itr=theList.iterator(); itr.next(); } itr.remove(); } itr.theList.iterator(); return ((Integer) itr.next()).intValue(); } Simulação Problema de Josephus – Solução 2 • Podemos notar que a pessoa a ser eliminada sempre é dada por: (P+M) mod N Onde N = número de pessoas P = pessoa com a batata M = número de passes • Para o exemplo inicial: N=5, P=1, M=1 – – – – – (1+1) mod 5 = 2 (eliminado) (pessoa 2) (2+1) mod 4 = 3 (eliminado) (pessoa 4) (3+1) mod 3 = 1 (eliminado) (pessoa 1) (1+1) mod 2 = 0 (apontamos para N) eliminamos pessoa 5. Pessoa 3 ganha. 3 Simulação Problema de Josephus – Solução 2 • Encontramos facilmente o elemento que deve ser removido. • Podemos utilizar uma árvore para realizar a busca pelo elemento k do conjunto. • O (N log N) Árvores Binárias – k-ésimo maior elemento • Como obter de forma simples o k-ésimo maior elemento de uma árvore binária? • Colocar em cada nó um contador que indica quantos nós existem sob este nó (inclusive o próprio nó): R 20 15 4 8 6 3 7 5 SL 1 1 3 6 2 2 1 SR 1 1 3 1 1 4 Árvores Binárias – Complexidade de uma busca • O custo é proporcional ao número de nós visitados até atingir o nó procurado. • No pior caso esse número é igual à altura da árvore. • A configuração da árvore interfere no custo: – Situação linear: altura = número de nós (a árvore é uma lista encadeada de nós) – Melhor situação: árvore balanceada, cada nó tem o seu número máximo de filhos. (árvore de altura/profundidade mínima) k −1 N = ∑ 2i = 2 k − 1 k = O(log N ) i =0 Onde k é a altura da árvore 5