Processamento da Informação Números Aleatórios Matrizes parte 2 Prof. Jesús P. Mena-Chalco CMCC/UFABC Q/2
Algoritmos: Deterministicos Vs Não-deterministicos Um programa determinístico sempre gera a mesma saída para o mesmo conjunto de entrada. Um programa é não-determinístico quando apresenta resultados diferentes com os mesmos conjuntos de entrada. 3
O que faz um algoritmo ser não-deterministico? - Erro em hardware. - Opera de maneira sensível ao tempo. - Usa valores aleatórios. 4
Não-deterministico é ruim? As vezes é dificil criar algoritmos deterministicos que sejam rápidos para responder a uma entrada. Existem algoritmos não-deterministicos que resolvem o problema com uma ligeira margem de erro. 5
Números Aleatórios 6
Números aleatórios Sequência de números aleatórios são importantes em inúmeras aplicações. É muito dificil obter números verdadeiramente aletórios. Geralmente os números são chamados de pseudo-aleatórios (pois são gerados por algoritmos) int x = gerarnumeroaleatorio();
Números aletórios 8
Números aletórios Gerar um número aletório Pronto Math.Randon 9
Números aletórios Semente (seed) Temperatura Hora atual do sistema Número de rotações do HD Material radiativo... Gerar um número aletório Pronto Math.Randon
Números aletórios
Números aletórios 2
Números aletórios Pseudo-random https://boallen.com/random-numbers.html True-random 3
Matrizes 4
Matrizes Matriz unidimensional (vetor/array) Matriz bidimensional (2D) 2 3 4 Matriz tridimensional (3D) 5 2 2 2 3 3 3 M[2] M[2][4] 2 3 4 5 M[2][5][2] 5
Exercício : Bordas de uma matriz Vamos desenvolver um método que permita criar uma matriz nula, mas com valores nas bordas iguais a b (dado como entrada). Assinatura: static int[][] matrizb( int n, int m, int b ) Exemplo: 6
Exercício : Bordas de uma matriz
Exercício 2: Maior elemento Vamos desenvolver um método que permita calcular o maior elemento de uma matriz de inteiros. Assinatura: static int maiorelemento( int [][]M ) Exemplo: Resposta 8
Exercício 2: Maior elemento 9
Exercício 3: Multiplicação Vamos desenvolver um método que permita multiplicar cada elemento de uma matriz por um inteiro x. Assinatura: static int [][] vezes( int M[][], int x) Exemplo: M= x=5 Resposta = 55 55 55 55 55 55 2
Exercício 3: Multiplicação 2
Exercício 4: Considere M uma matriz de números inteiros. Qual o valor de K? 22
Exercício 4: Considere M uma matriz de números inteiros. Qual o valor de K? k = menor valor da matriz M. 23
Exercício 5: Maior elemento matriz 3D Vamos desenvolver um método que permita calcular o maior elemento de uma matriz de inteiros. Assinatura: static int maiorelemento( int M[][][] ) 24
Exercício 5: Maior elemento matriz 3D 25
Exercício 5: Maior elemento matriz 3D 26
Atividade em aula 2
Questão Resposta: [, ] 28
Questão 2 29
Questão 3 3
Questão 3 Nenhum defeito. O método calcula a somatória de todos os elementos da matriz 3
Desafio O método, dada uma matriz de inteiros, e dois inteiros r, e s, permite trocar a linha r pela linha s. Note que: <= r < M.length <= s < M.length 32
Desafio 2 33
Além das matrizes 34
Além das matrizes Duas maneiras populares de representar um grafo: (A) Listas de adjacência. (B) Matriz de adjacência. G = (V,A) 5 2 V = {,2,3,4,5,6,} 3 4 6 A = { {,2}, {,3}, {,4}, {2,3}, {2,5}, {2,}, {3,4}, {3,5}, {3,6} } 35
Além das matrizes Matriz de adjacência. 5 2 3 4 6 2 3 4 5 6 2 3 4 5 6 Grafo não-direcionado 36
Além das matrizes Matriz de adjacência. 5 2 3 4 6 2 3 4 5 6 2 3 4 5 6 Grafo direcionado 3
Além das matrizes Considere um programa de GPS para o cálculo da melhor rota entre dois pontos. Problema: Dado um endereço de origem e destino, encontrar um camino mínimo entre a origem e o destino, i.e., encontrar a rota com a menor distância. 38
Além das matrizes Modelar o problema através de grafos. Vértices: Cruzamentos entre ruas. Arestas: Cada trecho de rua. Peso/custo: Comprimento do trecho (em kilometros) 39
Algoritmo de Floyd-Warshall FloydWarshall(MAdj): D = Madj para cada linha i em MAdj para cada coluna j em MAdj se (Madj[i][j]== e i!=j) // sem conexão? dist[i][j] = INFINITO N = numero de linhas de MAdj para k igual a até N para i igual a até N para j igual a até N se D[i][j] > D[i][k]+D[k][j] D[i][j] = D[i][k]+D[k][j] 4
Entrada 2 5 3 4 2 Saída 2 3 4 5 4 3 2 2 2 4 2 2 3 3 4 2 2 5 2 2 5 2 3 4 5 2 3 4 5 5 2 5 2