Introdução à Programação OCaml
A sequência de inteiros de Perrin

Departamento de Informática
Universidade da Beira Interior



A sequência de Perrin

 

O problema que segue foi proposto na edição 2017 como item inicial da avaliação da componente prática da aprendizagem da programação OCaml

Problema

A sequência de Perrin é uma sequência de inteiros naturais que tem uma história interessante. Sugerida em 1876, foi explicitamente definida por François Olivier Raoul Perrin em 1899.

Tem várias aplicações, em particular em teoria dos grafos. Mas recentemente tem sido usada para descobrir coordenadas de taxis em redes urbanas de forma confidencial 1.

A sequência define-se de forma simples como

P0=3
P1=0
P2=2
Pn=Pn−2 + Pn−3  (com n>2)

Input

A entrada deste exercício consiste numa linha onde consta o inteiro n para qual se pretende obter Pn.

Output

Uma simples linha com o inteiro Pn.

Constraints

n≤ 10000

 
Este limite é arbitrário mas já obriga saber tratar de grandes números. Comece por usar o tipo int para garantir uma boa implementação e teste com valores pequenos. Garantida esta parte, use a seguir o tipo de dado num ou big_int fornecidos no módulo num (em particular num ou big_int).

Sample Input

44

Sample Output

236282

 

 

 

A resolução

 

 

Apresentamos diferentes soluções possíveis nos ficheiros seguintes:

 

Uma avaliação empírica das soluções

 

 
Procedeu-se a avaliação do tempo de execução das diferentes soluções aqui apresentadas. Todos os tempos são em medidos em segundos. As execuções foram single-threaded. o parâmetro n varia de 10 até 2.107, valor a partir do qual nenhuma solução apresenta um tempo razoável de cálculo.

n: 102030405060657075808590
naive 0000 00,050,230,933,815,5263,93 262,52
hash 0000 0000 00 0 0
vect 0000 0000 000 0
terminal 0000 0000000 0
matrix 0000 0000 000 0

 

n: 1001041052.1055.1051062.1065.1061072.107
naive ----------
hash 0 0 0,31,07 10,5-----
vect 0 0 0,240,91 7,39-----
terminal 0 0 0,070,26 1,4 5,46 22,94 164,72--
matrix 0 00,010,03 0,23 0,85 3,38 21,21 84,8 343,43

O computador que serviu de base à execução dos testes de performance tem a seguinte especificação técnica:

Model Name: Mac Pro
Processor Name: Quad-Core Intel Xeon E5
Processor Speed: 3,7 GHz
Number of Processors: 1
Total Number of Cores: 4
L2 Cache (per Core): 256 KB
L3 Cache: 10 MB
Memory: 12 GB

1

This document was translated from LATEX by HEVEA.