25
INE5403 F UNDAMENTOS DE M ATEMÁTICA D ISCRETA PARA A C OMPUTAÇÃO P ROF .M AURO ROISENBERG UFSC - CTC - INE Prof. Mauro Roisenberg - UFSC/CTC/INE/2008 – p. 1/2

INE5403 FUNDAMENTOS DE MATEMÁTICA DISCRETAmauro.roisenberg/ine5403/slides... · Dois inteiros são somados através da adição sucessiva de pares de bits, e de um carry, quando

  • Upload
    others

  • View
    5

  • Download
    0

Embed Size (px)

Citation preview

Page 1: INE5403 FUNDAMENTOS DE MATEMÁTICA DISCRETAmauro.roisenberg/ine5403/slides... · Dois inteiros são somados através da adição sucessiva de pares de bits, e de um carry, quando

INE5403

FUNDAMENTOS DE

M ATEMÁTICA DISCRETA

PARA A COMPUTAÇÃO

PROF. MAURO ROISENBERG

UFSC - CTC - INE

Prof. Mauro Roisenberg - UFSC/CTC/INE/2008 – p. 1/25

Page 2: INE5403 FUNDAMENTOS DE MATEMÁTICA DISCRETAmauro.roisenberg/ine5403/slides... · Dois inteiros são somados através da adição sucessiva de pares de bits, e de um carry, quando

2 - NÚMEROS I NTEIROS

2.1) Divisão nos Inteiros

2.2) Números Primos e MDCs

2.3) Inteiros e Algoritmos

2.4) Aplicações de Teoria dos Números

Prof. Mauro Roisenberg - UFSC/CTC/INE/2008 – p. 2/25

Page 3: INE5403 FUNDAMENTOS DE MATEMÁTICA DISCRETAmauro.roisenberg/ine5403/slides... · Dois inteiros são somados através da adição sucessiva de pares de bits, e de um carry, quando

I NTRODUÇÃO

Existem várias classes de problemas que aparecem na MatemáticaDiscreta:

dada uma seqüência de inteiros, ache o maior;

dado um conjunto liste todos os seus subconjuntos;

dado um conjunto de inteiros, coloque-os em ordem crescente;

dada uma rede de comunicação, ache o menor caminho entredois vértices.

Quando apresentado a estes problemas, a primeira coisa a fazer éconstruir um modelo que traduza o problema em um contextomatemático.

Achar o modelo matemático adequado é apenas parte da solução.Para completar a solução é necessário um método que solucionará oproblema geral utilizando o modelo.

Prof. Mauro Roisenberg - UFSC/CTC/INE/2008 – p. 3/25

Page 4: INE5403 FUNDAMENTOS DE MATEMÁTICA DISCRETAmauro.roisenberg/ine5403/slides... · Dois inteiros são somados através da adição sucessiva de pares de bits, e de um carry, quando

I NTRODUÇÃO

O método consiste em procedimento com uma seqüência de passosque levam até a resposta desejada. Tal seqüência de passos échamada de um algoritmo .

Definição: Um algoritmo é um conjunto finito de instruções precisaspara realizar um cálculo ou solucionar um problema.

O termo algoritmo muitas vezes é utilizado para designarprocedimentos para realizar operações aritméticas usando arepresentação decimal dos inteiros.

Estes algoritmos, adaptados para serem utilizados com arepresentação binária, são a base para a aritméticacomputacional.

Prof. Mauro Roisenberg - UFSC/CTC/INE/2008 – p. 4/25

Page 5: INE5403 FUNDAMENTOS DE MATEMÁTICA DISCRETAmauro.roisenberg/ine5403/slides... · Dois inteiros são somados através da adição sucessiva de pares de bits, e de um carry, quando

REPRESENTAÇÃO DOS I NTEIROS

No nosso dia-a-dia utilizamos na notação decimal para expressarnúmeros inteiros. Por exemplo, 965 é utilizado para denotar9.102 + 6.10 + 5.

Podemos utilizar outras bases, além da decimal.

Computadores normalmente utilizam notação binária (base 2)para realizar operações aritméticas.

De fato, podemos utilizar qualquer inteiro positivo maior que 1

como base quando expressamos inteiros, como mostrado peloseguinte teorema:

Prof. Mauro Roisenberg - UFSC/CTC/INE/2008 – p. 5/25

Page 6: INE5403 FUNDAMENTOS DE MATEMÁTICA DISCRETAmauro.roisenberg/ine5403/slides... · Dois inteiros são somados através da adição sucessiva de pares de bits, e de um carry, quando

EXPANSÃO DE n NA BASE b

Teorema 1: Seja b um inteiro positivo maior que 1. Então se n é uminteiro positivo, ele pode ser expresso de maneira única na forma

n = akbk + ak−1bk−1 + · · · + a1b

1 + a0

onde k é um inteiro não negativo, a0, a1, · · · , ak são inteiros nãonegativos menores que b, e ak 6= 0.

A expansão de n na base b (nome do Teorema 1) é denotada por(akak−1 · · · a1a0)b.

Por exemplo, (245)8 representa 2.82 + 4.8 + 5 = 165.

Prof. Mauro Roisenberg - UFSC/CTC/INE/2008 – p. 6/25

Page 7: INE5403 FUNDAMENTOS DE MATEMÁTICA DISCRETAmauro.roisenberg/ine5403/slides... · Dois inteiros são somados através da adição sucessiva de pares de bits, e de um carry, quando

EXPANSÕES BINÁRIAS

Na notação binária, cada dígito pode ser 0 ou 1. Em outras palavras,a expansão binária de um inteiro é uma “cadeia” (string) de bits.

Expansões binárias são utilizadas por computadores pararepresentar e realizar a aritmética com inteiros.

Exemplo 1: Qual a expansão decimal de um inteiro que possui(101011111)2 como sua expansão binária?

(101011111)2 =

1.28 + 0.27 + 1.26 + 0.25 + 1.24 + 1.23 + 1.22 + 1.21 + 1.20 = 351

Prof. Mauro Roisenberg - UFSC/CTC/INE/2008 – p. 7/25

Page 8: INE5403 FUNDAMENTOS DE MATEMÁTICA DISCRETAmauro.roisenberg/ine5403/slides... · Dois inteiros são somados através da adição sucessiva de pares de bits, e de um carry, quando

EXPANSÕES HEXADECIMAIS

16 dígitos diferentes são necessários para esta expansão. Os dígitoshexadecimais utilizados são: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D,E e F ,onde as letras A até F representam os dígitos correspondentes aosnúmeros 10 a 15 (na notação decimal).

Exemplo 2: Qual a expansão decimal de um inteiro que possui(2AE0B)16 como sua expansão hexadecimal?

(2AE0B)16 = 2.164 +10.163 +14.162 +0.161 +11.160 = (175627)10

Prof. Mauro Roisenberg - UFSC/CTC/INE/2008 – p. 8/25

Page 9: INE5403 FUNDAMENTOS DE MATEMÁTICA DISCRETAmauro.roisenberg/ine5403/slides... · Dois inteiros são somados através da adição sucessiva de pares de bits, e de um carry, quando

CONVERSÃO DE BASE

Como construir a expansão de um inteiro n na base b.

Primeiro, divida n por b para obter um quociente e um resto, ouseja:n = bq0 + a0 , com 0 ≤ a0 < b.

O resto, a0, é o dígito mais a direita na expansão de n na base b.A seguir divida q0 por b para obter:q0 = bq1 + a1 , com 0 ≤ a1 < b.

a1 é o segundo dígito da direita na expansão de n na base b.Continue este processo, dividindo sucessivamente os quocientespor b. Este processo termina quando se obtém um quocienteigual a zero.

Prof. Mauro Roisenberg - UFSC/CTC/INE/2008 – p. 9/25

Page 10: INE5403 FUNDAMENTOS DE MATEMÁTICA DISCRETAmauro.roisenberg/ine5403/slides... · Dois inteiros são somados através da adição sucessiva de pares de bits, e de um carry, quando

CONVERSÃO DE BASE

Exemplo 3: Ache a expansão octal (base 8) de (12345)10.

Primeiro, divida 12345 por 8 para obter12345 = 8.1543 + 1

Sucessivamente divida os quocientes por 81543 = 8.192 + 7

192 = 8.24 + 0

24 = 8.3 + 0

3 = 8.0 + 3

Assim a expansão de 12345 na base 8 é dada pelos restosobtidos:(12345)10 = (30071)8.

Prof. Mauro Roisenberg - UFSC/CTC/INE/2008 – p. 10/25

Page 11: INE5403 FUNDAMENTOS DE MATEMÁTICA DISCRETAmauro.roisenberg/ine5403/slides... · Dois inteiros são somados através da adição sucessiva de pares de bits, e de um carry, quando

ALGORITMO PARA CONVERSÃO DE BASE

O pseudo-código a seguir acha a expansão (ak−1 · · · a1a0)b de uminteiro n na base b.

Algoritmo 1: Construindo Expansões Base b

procedure base b expansion(n:positive integer)

q := n

k := 0

while q 6= 0

begin

ak := q mod b

q := bq/bc

k := k + 1

end {the base b expansion of n is (ak−1 · · · a1a0)b}

Prof. Mauro Roisenberg - UFSC/CTC/INE/2008 – p. 11/25

Page 12: INE5403 FUNDAMENTOS DE MATEMÁTICA DISCRETAmauro.roisenberg/ine5403/slides... · Dois inteiros são somados através da adição sucessiva de pares de bits, e de um carry, quando

ALGORITMOS PARA OPERAÇÕES COM I NTEIROS

Os algoritmos para realizar operações com inteiros usando suasrepresentações em expansões binárias são extremamenteimportantes em aritmética computacional.

Descreveremos algoritmos para adição e multiplicação de doisinteiros expressos como expansões binárias.

Analisaremos a complexidade computacional destes algoritmos emtermos do número de operações de bits necessárias para suaexecução.

Prof. Mauro Roisenberg - UFSC/CTC/INE/2008 – p. 12/25

Page 13: INE5403 FUNDAMENTOS DE MATEMÁTICA DISCRETAmauro.roisenberg/ine5403/slides... · Dois inteiros são somados através da adição sucessiva de pares de bits, e de um carry, quando

ALGORITMO PARA SOMA DE I NTEIROS

Sejam dois números a e b cujas expansões binárias são:a = (an−1an−2 · · · a1a0)2, b = (bn−1bn−2 · · · b1b0)2,de tal forma que a e b possuem n bits (bits 0 podem ser colocados no início de umadas expansões se necessário).

Para somar a e b, primeiramente some seus dígitos mais a direita:a0 + b0 = c0.2 + s0,onde s0 é o bit mais a direita na expansão binária de a + b e c0 é o "vai um" (carry ),que pode ser 0 ou 1.

A seguir some o próximo par de bits e o carry,a1 + b1 + c0 = c1.2 + s1,onde s1 é o próximo bit na expansão binária de a + b, e c1 é o carry.

Continue este processo, somando os bits correspondentes nas duas expansõesbinárias e o carry.

Este processo produz a expansão binária da soma dea + b = (snsn−1sn−2 · · · s1s0)2.

Prof. Mauro Roisenberg - UFSC/CTC/INE/2008 – p. 13/25

Page 14: INE5403 FUNDAMENTOS DE MATEMÁTICA DISCRETAmauro.roisenberg/ine5403/slides... · Dois inteiros são somados através da adição sucessiva de pares de bits, e de um carry, quando

ALGORITMO PARA SOMA DE I NTEIROS

Exemplo 4: Some a = (1110)2 e b = (1011)2.

a0 + b0 = 0 + 1 = 0.2 + 1.De forma que c0 = 0 e s0 = 1. Continuando o algoritmo:

a1 + b1 + c0 = 1 + 1 + 0 = 1.2 + 0.De forma que c1 = 1 e s1 = 0. Continuando o algoritmo:

a2 + b2 + c1 = 1 + 0 + 1 = 1.2 + 0.De forma que c2 = 1 e s2 = 0. Continuando o algoritmo:

a3 + b3 + c2 = 1 + 1 + 1 = 1.2 + 1.De forma que c3 = 1 e s3 = 1. O que significa que s4 = c3 = 1.

Assim, s = a + b = (11001)2.

Prof. Mauro Roisenberg - UFSC/CTC/INE/2008 – p. 14/25

Page 15: INE5403 FUNDAMENTOS DE MATEMÁTICA DISCRETAmauro.roisenberg/ine5403/slides... · Dois inteiros são somados através da adição sucessiva de pares de bits, e de um carry, quando

ALGORITMO PARA SOMA DE I NTEIROS

O pseudo-código a seguir acha a expansão binária (snsn−1 · · · s1s0)2

da soma da expansão binária de dois inteiros a e b.Algoritmo 2: Soma de Inteiros

procedure add(a,b:positive integer)

{the binary expansions of a and b are (an−1an−2 · · · a1a0)2

and (bn−1bn−2 · · · b1b0)2 respectively

c := 0

for j = 0 to n − 1

begin

d := b(aj + bj + c)/2c

sj := aj + bj + c − 2d

c := d

end

sn := c

{the binary expansion of the sum is (snsn−1 · · · s0)2 }

Prof. Mauro Roisenberg - UFSC/CTC/INE/2008 – p. 15/25

Page 16: INE5403 FUNDAMENTOS DE MATEMÁTICA DISCRETAmauro.roisenberg/ine5403/slides... · Dois inteiros são somados através da adição sucessiva de pares de bits, e de um carry, quando

ANÁLISE DO ALGORITMO

Quantas adições de bits são necessárias no Algoritmo 2 para somardois inteiros com n bits (ou menos) na sua representação binária?

Dois inteiros são somados através da adição sucessiva de paresde bits, e de um carry, quando ele ocorre.

Assim, o número total de adições de bits realizadas é menor ouno máximo igual a três vezes o número de bits da expressão.

Podemos então dizer que o número de adições de bits realizadaspelo Algoritmo 2 para somar dois inteiros de n−bits éproporcional a n (O(n)).

Isto significa que, se somar dois inteiros de n bits leva um tempot, então a soma de dois inteiros de 2n bits leva um tempo 2t.

Prof. Mauro Roisenberg - UFSC/CTC/INE/2008 – p. 16/25

Page 17: INE5403 FUNDAMENTOS DE MATEMÁTICA DISCRETAmauro.roisenberg/ine5403/slides... · Dois inteiros são somados através da adição sucessiva de pares de bits, e de um carry, quando

ALGORITMO PARA M ULTIPLICAÇÃO DE I NTEIRO

Consideremos agora a multiplicação de dois inteiros a e b de n bits.

Usando a propriedade distributiva, vemos que:

ab = a(b020 + b12

1 + · · · + bn−12n−1) =

a(b020) + a(b12

1) + · · · + a(bn−12n−1).

Note que: abj = a se bj = 1 e abj = 0 se bj = 0

Além disso, cada vez que multiplicamos um termo por 2, “rotamos” asua expansão binária um bit para a esquerda e colocamos um 0 naposição mais a direita da expansão binária.

Obtemos então (abj)2j “rotando” a expansão binária de (abj) j

vezes para a esquerda, acrescentando j 0′s na direita da expansão.

Finalmente, obtemos ab somando os n inteirosabj2

j , j = 0, 1, 2, · · · , n − 1

Prof. Mauro Roisenberg - UFSC/CTC/INE/2008 – p. 17/25

Page 18: INE5403 FUNDAMENTOS DE MATEMÁTICA DISCRETAmauro.roisenberg/ine5403/slides... · Dois inteiros são somados através da adição sucessiva de pares de bits, e de um carry, quando

ALGORITMO PARA M ULTIPLICAÇÃO DE I NTEIRO

O pseudo-código a seguir acha a expansão binária (snsn−1 · · · s1s0)2

da multiplicação da expansão binária de dois inteiros a e b.Algoritmo 3: Multiplicação de Inteiros

procedure multiply(a,b:positive integer)

{the binary expansions of a and b are (an−1an−2 · · · a1a0)2 and (bn−1bn−2 · · · b1b0)2

c := 0

for j = 0 to n − 1

begin

if bj = 1 then cj := a “rotado” j vezes

else cj := 0

end

{ c0, c1, · · · , cn−1 são os produtos parciais

p := 0

for j = 0 to n − 1

p := add(p, cj)

{p é o valor de ab }

Prof. Mauro Roisenberg - UFSC/CTC/INE/2008 – p. 18/25

Page 19: INE5403 FUNDAMENTOS DE MATEMÁTICA DISCRETAmauro.roisenberg/ine5403/slides... · Dois inteiros são somados através da adição sucessiva de pares de bits, e de um carry, quando

ALGORITMO PARA M ULTIPLICAÇÃO DE I NTEIRO

Exemplo 5: Multiplique a = (110)2 e b = (101)2.

ab0.20 = (110)2.1.2

0 = (110)2.

ab1.21 = (110)2.0.2

1 = (0000)2.e

ab2.22 = (110)2.1.2

2 = (11000)2.Basta agora somar (00110)2 + (00000)2 + (11000)2, usando oalgoritmo da soma:

ab = (11110)2.

Prof. Mauro Roisenberg - UFSC/CTC/INE/2008 – p. 19/25

Page 20: INE5403 FUNDAMENTOS DE MATEMÁTICA DISCRETAmauro.roisenberg/ine5403/slides... · Dois inteiros são somados através da adição sucessiva de pares de bits, e de um carry, quando

ANÁLISE DO ALGORITMO

Quantas adições e “rotações” de bits são necessárias no Algoritmo 3para multiplicar dois inteiros?

Como o Algoritmo 3 processa o produto de a e b somando os produtos parciaisc0, c1, c2, · · · , cn−1. E como para obter cada cj são necessárias j “rotações”,então são necessárias no máximo:0 + 1 + 2 + · · · + n − 1 “rotações”.

Assim, o número de “rotações” é proporcional (ou da mesma ordem de grandeza)que n2 (O(n2)).

Para somar os produtos parciais cj requerem a soma de um inteiro de n-bits, uminteiro de n + 1-bits , · · · , e um inteiro de (2n)-bits,

Sabemos que cada uma destas operações requer um número proporcional a n

de operações de bits,

Conseqüentemente, o número de operações de bits necessárias para multiplicardois números é da ordem de grandeza de n2 (O(n2)).

Prof. Mauro Roisenberg - UFSC/CTC/INE/2008 – p. 20/25

Page 21: INE5403 FUNDAMENTOS DE MATEMÁTICA DISCRETAmauro.roisenberg/ine5403/slides... · Dois inteiros são somados através da adição sucessiva de pares de bits, e de um carry, quando

ALGORITMO PARA DIVISÃO DE I NTEIROS

O pseudo-código a seguir calcula o quociente e o resto da divisão deum inteiro a por um inteiro positivo d.

Algoritmo 4: Divisão de Inteiros (div e mod )

procedure division(a: integer, d:positive integer)

q := 0

r := |a|

while r ≥ d

begin

r := r − d

q := q + 1

end

if a < 0 and r > 0 then

begin

r := d − r

q := −(q + 1)

end

{ q = a div d é o quociente, r = a mod d é o restoProf. Mauro Roisenberg - UFSC/CTC/INE/2008 – p. 21/25

Page 22: INE5403 FUNDAMENTOS DE MATEMÁTICA DISCRETAmauro.roisenberg/ine5403/slides... · Dois inteiros são somados através da adição sucessiva de pares de bits, e de um carry, quando

EXPONENCIAÇÃO M ODULAR

Em criptografia, é importante muitas vezes calcular de formaeficiente bn mod m, onde b, n e m são números inteiros grandes.

Geralmente é impraticável calcular bn e então achar o seu restoquando dividido por m, pois bn será um número muito grande.

Em vez disso, podemos usar um algoritmo que utiliza a expansãobinária do expoente n = (ak−1 · · · a1a0)2.

O algoritmo acha sucessivamente b mod m, b2 mod m, b4 mod m,· · ·, b2

k−1

mod m e se vale da seguinte propriedade:c = (a.b)( mod m)

c = (a( mod m)).(b( mod m))( mod m)

Prof. Mauro Roisenberg - UFSC/CTC/INE/2008 – p. 22/25

Page 23: INE5403 FUNDAMENTOS DE MATEMÁTICA DISCRETAmauro.roisenberg/ine5403/slides... · Dois inteiros são somados através da adição sucessiva de pares de bits, e de um carry, quando

ALGORITMO PARA EXPONENCIAÇÃO M ODULAR

Algoritmo 5: Exponenciação Modular

procedure modular exponentiation(b: integer, n = (ak−1ak−2 · · · a1a0)2,

m:positive integer)

x := 1

power := b mod m

for i := 0 to k − 1

begin

if ai = 1 then x := (x.power) mod m

power := (power.power) mod m

end

{ x vale bn mod m }

Prof. Mauro Roisenberg - UFSC/CTC/INE/2008 – p. 23/25

Page 24: INE5403 FUNDAMENTOS DE MATEMÁTICA DISCRETAmauro.roisenberg/ine5403/slides... · Dois inteiros são somados através da adição sucessiva de pares de bits, e de um carry, quando

ALGORITMO PARA EXPONENCIAÇÃO M ODULAR

Exemplo 6: Use o Algoritmo 5 para calcular 2644 mod 645.

Inicialmente fazemos x = 1 e power = 2 mod 645 = 2.

A expansão binária de 644 = (1010000100)2.

O algoritmo calcula 22j

mod 645 para j = 1, 2, · · · , 9

sucessivamente elevando ao quadrado e reduzindo modulo 645.

Se aj = 1 (onde aj é o bit na j−ésima posição da expansão

binária de 644), ele multiplica o valor atual de x por 22j

mod 645e reduz o resultado módulo 645.

Prof. Mauro Roisenberg - UFSC/CTC/INE/2008 – p. 24/25

Page 25: INE5403 FUNDAMENTOS DE MATEMÁTICA DISCRETAmauro.roisenberg/ine5403/slides... · Dois inteiros são somados através da adição sucessiva de pares de bits, e de um carry, quando

ALGORITMO PARA EXPONENCIAÇÃO M ODULAR

Exemplo 6

i = 0 : Como a0 = 0, temos x = 1 e power = 22 = 4 mod 645 = 4;

i = 1 : Como a1 = 0, temos x = 1 e power = 42 = 16 mod 645 = 16;

i = 2 : Como a2 = 1, temos x = (1.16) mod 645 = 16 e

power = 162 = 256 mod 645 = 256;

i = 3 : Como a3 = 0, temos x = 16 e power = 2562 = 65536 mod 645 = 391;

i = 4 : Como a4 = 0, temos x = 16 e power = 3912 = 152881 mod 645 = 16;

i = 5 : Como a5 = 0, temos x = 16 e power = 162 = 256 mod 645 = 256;

i = 6 : Como a6 = 0, temos x = 16 e power = 2562 = 65536 mod 645 = 391;

i = 7 : Como a7 = 1, temos x = (16.391) mod 645 = 451 e

power = 3912 = 152881 mod 645 = 16;

i = 8 : Como a8 = 0, temos x = 451 e power = 162 = 256 mod 645 = 256;

i = 9 : Como a9 = 1, temos x = (451.256) mod 645 = 1.

Prof. Mauro Roisenberg - UFSC/CTC/INE/2008 – p. 25/25