Probabilités et informatique I Aléatoire et machine

Hasonló dokumentumok
Imperatív programozás

Imperatív programozás

Adattípusok, vezérlési szerkezetek. Informatika Szabó Adrienn szeptember 14.

C# osztályok. Krizsán Zoltán

Tipp A Word makrók kimerítõ tárgyalását megtalálhatjuk az O Reilly gondozásában megjelent Writing Word Macros címû könyvben.

Széchenyi István Egyetem

PYTHON. Avagy hosszú az út a BioPythonig

2015, Diszkrét matematika

Java Programozás 9. Gy: Java alapok. Adatkezelő 5.rész

Tulajdonságalapú tesztelés

Ismerkedés a Python programnyelvvel. és annak micropython változatával

C# nyelv alapjai. Krizsán Zoltán 1. Objektumorientált programozás C# alapokon tananyag. Általános Informatikai Tanszék Miskolci Egyetem

ä ä

Les régions de la Hongrie. Budapest

OOP: Java 4.Gy: Java osztályok

A Python programozási nyelv

Programozási technikák Pál László. Sapientia EMTE, Csíkszereda, 2009/2010





2018, Diszkrét matematika

Collections. Összetett adatstruktúrák

List<String> l1 = new ArrayList<String>(); List<Object> l2 = l1; // error

Komputeralgebra Rendszerek

JAVA PROGRAMOZÁS 3.ELŐADÁS

Imperatív programozás

Python tanfolyam Python bevezető I. rész

1. Egészítsük ki az alábbi Python függvényt úgy, hogy a függvény meghatározza, egy listába, az első n szám faktoriális értékét:

2018, Diszkre t matematika. 10. elo ada s

2019, Diszkrét matematika. 1. el adás

2018, Diszkrét matematika

Kifejezések. Kozsik Tamás. December 11, 2016

Java és web programozás

libgdx alapok, első alkalmazás

Adatbázis rendszerek II. Adatbázis elérése C# kliens programból ADO.NET API-n keresztül

2018, Diszkre t matematika. 8. elo ada s

Python I. Vincze Dávid Miskolci Egyetem, IIT

Proxer 7 Manager szoftver felhasználói leírás

abkezel.java import java.awt.*; import java.awt.event.*; import javax.swing.*; import java.sql.*; public class abkezel extends JFrame {

Ismerkedés a Python programnyelvvel. és annak micropython változatával

(NGB_TA024_1) MÉRÉSI JEGYZŐKÖNYV

CREATE TABLE student ( id int NOT NULL GENERATED ALWAYS AS IDENTITY PRIMARY KEY, name varchar(100) NOT NULL, address varchar(100) NOT NULL )

Create & validate a signature

Pál László. Sapientia EMTE, Csíkszereda, 2014/2015

Algoritmusok Tervezése. 4. Előadás Visual Basic 1. Dr. Bécsi Tamás

Farkas Szilveszter Magyarországi Web Konferencia Budapest, október 3.

Objektumorientált programozás C# nyelven III.

Java-ról Kotlinra. Ekler Péter AutSoft BME AUT. AutSoft

1. Gyakorlat: Telepítés: Windows Server 2008 R2 Enterprise, Core, Windows 7

Komputeralgebra Rendszerek

Hálózatbiztonság Androidon. Tamas Balogh Tech AutSoft

2016, Diszkrét matematika

RADEAUX MAXI RADEAU GRAND RADEAU. REF : A100BSP Bleu marine /blanc/ bleu marine. +/ x 1000 x 90 mm

FELÜLET...13 PROJEKTTERV...14

Delegátumok C#-ban Krizsán Zoltán iit

C# feladatok gyűjteménye

Szatírikus film készül Ceausescu életéről

PHP II. WEB technológiák. Tóth Zsolt. Miskolci Egyetem. Tóth Zsolt (Miskolci Egyetem) PHP II / 19

Hálózatok építése és üzemeltetése

Mechatronika és mikroszámítógépek 2017/2018 I. félév. Bevezetés a C nyelvbe

Programozás III CSOMAGOK. Az összetartozó osztályok és interfészek egy csomagba (package) kerülnek.

Alprogramok, paraméterátadás

Emlékeztető: a fordítás lépései. Szimbólumtábla-kezelés. Információáramlás. Információáramlás. Információáramlás.

On The Number Of Slim Semimodular Lattices

Grafikus felhasználói felületek. Abstract Window Toolkit, a java.awt és java.awt.event csomagok

Gyors tippek linuxra

Modern unit és integrációs tesztelés

2018, Diszkrét matematika

A PHP nyelv alapjai. Web-Sky Consulting Kft Tóth Imre 2009

main int main(int argc, char* argv[]) { return 0; } main return 0; (int argc, char* argv[]) main int int int main main main

Bánsághi Anna

Operációs Rendszerek II. labor. 2. alkalom

117. AA Megoldó Alfréd AA 117.

Adatbázisok webalkalmazásokban

Osztályok. construct () destruct() $b=new Book(); $b=null; unset ($b); book.php: <?php class Book { private $isbn; public $title;

C#, OOP. Osztályok tervezése C#-ban

2016, Diszkrét matematika

Informatikai Kar. 3. fejezet. alapismeretek. Giachetta Roberto

Eszközszolgáltatás keretében Oberthur kártyára és Oberthur SIM termékre kiadott tanúsítvány telepítési útmutatója

Java és web programozás

SDI ALKALMAZÁS I. Workspace / ResourceView / Toolbar / IDR_MAINFRAME. Workspace / ResourceView / Menu / IDR_MAINFRAME

Megoldott feladatok. Informatika

PyS60....avagy Python a mobilon

Felhasználó által definiált adattípus

SZERVER OLDALI JAVASCRIPT. 3. hét Javascript nyelvi elemek

Entity Framework + LINQ oktatási segédlet

Termékismertető. Wilo-Sevio AIR,

Programozási nyelvek Python

Eseményvezérelt alkalmazások fejlesztése I 11. előadás. Szoftverek tesztelése

ADATBÁZISKEZELÉS KÖZVETLEN ELÉRÉSSEL II...2

Szoftvergyártás: gyártásvezérlés kód-figyeléssel

Objektumorientált programozás C# nyelven

Objektumorientált programozás C# nyelven

ZH mintapélda. Feladat. Felület

ROS Remote Operations Service

Programozás II. ATM példa Dr. Iványi Péter

A Python programozási nyelv

Visual Basic 2005 Express Edition A VISUAL STUDIO HASZNÁLATA NEM LEKTORÁLT VÁLTOZAT

Stateless Session Bean

Átírás:

Probabilités et informatique I Aléatoire et machine INFO2 - semaines 36 à 37 Guillaume CONNAN septembre 2015 Iut de Nantes - Dpt d informatique 1 / 25

$ ssh keygen t rsa Generating public/private rsa key pair. Enter file in which to save the key (/home/moi/.ssh/id_rsa): /tmp/id_rsa Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /tmp/id_rsa. Your public key has been saved in /tmp/id_rsa.pub. 2 / 25

BEGIN RSA PRIVATE KEY MIIEpQIBAAKCAQEAyq/yDe2K8EGOEYfj3YBqtjPWeVEUcEiNv6EFxEf17bQlUr1z UBPxs5uWPFkR8lKKoW+pipAmrM9mgJc/wQz3VoNO6xqic7XAjeTcHRyUmf0kHFAb 0FDzpAzDQMguLzhoKm5ac6u91kxL8pKLvrgDc1HVhHXild8pkjtVgGJFpOYu2av+ PwbAd0IdgIyfatOtlQJjjNi/X+jlcP7+SmEkdutft7ZieBkEYoJddYQBllzGsgVS vvwzfwdy3dcvocndesdy7vdexdxgw7hqgzd2y2xlxeotnstcxuibjwtbkqtufk52 9g5HCg3PDJk+qB0b0Z5FT2beomimpsJdLq5BhQIDAQABAoIBABUVQidiux4Mo5t9 OB2VOwRi1f9eiLK5SU1SkYf+OD2WjH9Tx4ff2zdkircSSMSdA2CRfeA06GD3XeEo WnBZSe0M0YuxBI7mq/XWhXLdwzNVWok7Z/k+QmmhDjpR2EP/KQ6o1e3MQn3lB81e ovyepxu8yopbxmtcidxeycehl9j0dqii1rgql1bkxqz2ubciwblx4foyvlgmx0vs us3f2t5ykbpgodp3rez4oosjfq4vwqxizohl59lpnu4zg0z9veosnabrbjzkqm4w 3dtPDVnUonGn+kSiDOuI+P7jShHVKVSahEmMMoxUGoPkUbIfTq9gKSCs8IkOLqlp muajvsecgyea9l97nc2oafmdywrkpuniti43+mr8g4kvmaeezyiometasrg/twrt TiVuhu6j+NxaZoRuZxaIHPvc9YoPhyrjidnSwBeM23wVU3GSObr3pCcwBZniuWJa WMjMKTArqdWMPqTFWhfHb7Ig0YpxLtWWy5Lo4+Cv2hHVZoZlWkbE4JkCgYEA0pt3 VMZHNO+aE3StvBremrNsbdv1nkIAOAlHWju/w+c9qeE4yxB5SG1w7suJgOLw8Tjm E40CeJYzJiZ29nBt0q/ZTo4OoOr09NnUVTVRuZkVRcLdLnbPnPYkxxbmjkOrCblL lm+jpqo9xerwetuuakjikduks+avi4avmjx+/80cgyea3udcemizhj9gbylwg+94 55s8ysxx4YyZGWHmLtTXkJ9rgUqT9aElJGPbQZP4b5o8GQrfNvb2H8lUIrHsxf+P PhH/AQFlPwrNABXjMrMkiCelKbKL+N5JsqgJKQgYfjnH683/aawnL7jxXhyNDnlE Jef1/AehBR603ZDeXldloSkCgYEAxFUoBoCdCw0+flqsR4po8KDJORTvwWvX1mVX /hdrks6cxozwk/+cgnd9iy91brci+s1hnvyitbybctqy3irs7rb/psqpenvuhx+4 AQMmv7Wk7ha9qL4bx0BzgqGnpwIQJY12lzBuKcwFUEEoVmnjMEPoDouUPp17dNXv SAKThhUCgYEAkqDr3LeWh6tLxcfWlcdE5/ukZcaKNKH1w2ShyBbHB9I7UJFl0yoZ ugup9ylftgg2ebecwzerisdodqsrtpoff8zmbtbv43xv58rda0bgj3nzxq7f2stv vjw53pnt8udyflh5lnavfli05j11lboo3kwgfffwm3bycvmvbda16zq= END RSA PRIVATE KEY 3 / 25

réseau cryptographie test jeux infographie tri - recherche langues naturelles... 4 / 25

réseau cryptographie test jeux infographie tri - recherche langues naturelles... 4 / 25

réseau cryptographie test jeux infographie tri - recherche langues naturelles... 4 / 25

réseau cryptographie test jeux infographie tri - recherche langues naturelles... 4 / 25

réseau cryptographie test jeux infographie tri - recherche langues naturelles... 4 / 25

réseau cryptographie test jeux infographie tri - recherche langues naturelles... 4 / 25

réseau cryptographie test jeux infographie tri - recherche langues naturelles... 4 / 25

réseau cryptographie test jeux infographie tri - recherche langues naturelles... 4 / 25

Aléatoire? 5 / 25

Sur machine? int getrandomnumber() { return 4 ; // J ai trouvé 4 en lançant un dé // Hasard assuré, j le jure } 6 / 25

7 / 25

On veut générer une suite pseudo-aléatoire de 10 chiffres L actuel est 5 772 156 649 Son carré vaut 33 317 792 380 594 909 201 Le nouveau nombre est donc 7 923 805 949 8 / 25

On veut générer une suite pseudo-aléatoire de 10 chiffres L actuel est 5 772 156 649 Son carré vaut 33 317 792 380 594 909 201 Le nouveau nombre est donc 7 923 805 949 8 / 25

On veut générer une suite pseudo-aléatoire de 10 chiffres L actuel est 5 772 156 649 Son carré vaut 33 317 792 380 594 909 201 Le nouveau nombre est donc 7 923 805 949 8 / 25

On veut générer une suite pseudo-aléatoire de 10 chiffres L actuel est 5 772 156 649 Son carré vaut 33 317 792 380 594 909 201 Le nouveau nombre est donc 7 923 805 949 8 / 25

Python 9 / 25

def prendmilieu(nb): lnb = len(str(nb)) return((nb**2 // 10**(max(1,lnb // 2)) ) % 10**lnb) def longvonneumann(graine): L = [] k = graine while k not in L: L.append(k) k = prendmilieu(k) return(len(l)) 10 / 25

def prendmilieu(nb): lnb = len(str(nb)) return((nb**2 // 10**(max(1,lnb // 2)) ) % 10**lnb) def longvonneumann(graine): L = [] k = graine while k not in L: L.append(k) k = prendmilieu(k) return(len(l)) 10 / 25

In [45]: prendmilieu(5772156649) Out[47]: 7923805949 In [48]: max([longvonneumann(k) for k in range(900000,1000000)]) Out[48]: 119 11 / 25

In [45]: prendmilieu(5772156649) Out[47]: 7923805949 In [48]: max([longvonneumann(k) for k in range(900000,1000000)]) Out[48]: 119 11 / 25

D. H. Lehmer 1905-1991 12 / 25

1949 : X n+1 = (ax n + c) mod m m, le module, vérifiant 0 < m, a, le facteur, vérifiant 0 a < m, c, l incrément, vérifiant 0 c < m, X 0, la graine, vérifiant 0 X 0 < m, 13 / 25

1949 : X n+1 = (ax n + c) mod m m, le module, vérifiant 0 < m, a, le facteur, vérifiant 0 a < m, c, l incrément, vérifiant 0 c < m, X 0, la graine, vérifiant 0 X 0 < m, 13 / 25

1949 : X n+1 = (ax n + c) mod m m, le module, vérifiant 0 < m, a, le facteur, vérifiant 0 a < m, c, l incrément, vérifiant 0 c < m, X 0, la graine, vérifiant 0 X 0 < m, 13 / 25

1949 : X n+1 = (ax n + c) mod m m, le module, vérifiant 0 < m, a, le facteur, vérifiant 0 a < m, c, l incrément, vérifiant 0 c < m, X 0, la graine, vérifiant 0 X 0 < m, 13 / 25

Python c est facile 14 / 25

def gcm(m,a,c,x): while True: yield x x = (a*x + c) % m 15 / 25

In [105]: gen = gcm(10,7,7,7) In [106]: gen Out[106]: <generator object gcm at 0x7fc4dfd56678> # Sur Python 2.7 next est une méthode : gen.next() In [107]: next(gen) Out[107]: 7 In [108]: next(gen) Out[108]: 6 In [109]: next(gen) Out[109]: 9 In [110]: [next(gen) for k in range(20)] Out[110]: [0, 7, 6, 9, 0, 7, 6, 9, 0, 7, 6, 9, 0, 7, 6, 9, 0, 7, 6, 9] In [111]: [x for x in itertools.islice(gen,10)] Out[111]: [0, 7, 6, 9, 0, 7, 6, 9, 0, 7] 16 / 25

Théorème 1 Le GCM est de période m si, et seulement si : 1 c est premier avec m ; 2 a 1 est un multiple de tous les diviseurs premiers de m ; 3 a 1 est un multiple de 4 si m est un multiple de 4. 17 / 25

Théorème 1 Le GCM est de période m si, et seulement si : 1 c est premier avec m ; 2 a 1 est un multiple de tous les diviseurs premiers de m ; 3 a 1 est un multiple de 4 si m est un multiple de 4. 17 / 25

Théorème 1 Le GCM est de période m si, et seulement si : 1 c est premier avec m ; 2 a 1 est un multiple de tous les diviseurs premiers de m ; 3 a 1 est un multiple de 4 si m est un multiple de 4. 17 / 25

Théorème 1 Le GCM est de période m si, et seulement si : 1 c est premier avec m ; 2 a 1 est un multiple de tous les diviseurs premiers de m ; 3 a 1 est un multiple de 4 si m est un multiple de 4. 17 / 25

/dev/random /dev/urandom 18 / 25

19 / 25

π 3, 14159 26 53589 79 32 38 46 26 43 38 32 79... 20 / 25

In [9]:?Counter Type: type String form: <class collections.counter > File: /usr/local/lib/python3.4/collections/ init.py Init definition: Counter(self, iterable=none, **kwds) Docstring: Dict subclass for counting hashable items. Sometimes called a bag or multiset. Elements are stored as dictionary keys and their counts are stored as dictionary values. 21 / 25

stats1pi = Counter(str(N(pi,10**5))) In [8]: stats1pi Out[8]: Counter({ 1 : 10137, 6 : 10028, 5 : 10026, 3 : 10026, 7 : 10025, 0 : 9999, 8 : 9978, 4 : 9971, 2 : 9908, 9 : 9902,. : 1}) 22 / 25

stats1pi = Counter(str(N(pi,10**5))) In [8]: stats1pi Out[8]: Counter({ 1 : 10137, 6 : 10028, 5 : 10026, 3 : 10026, 7 : 10025, 0 : 9999, 8 : 9978, 4 : 9971, 2 : 9908, 9 : 9902,. : 1}) 22 / 25

def parpaquets(iterable, n): """ iter transforme un itérable en itérateur * n répète n fois la liste * iters découpe la liste iters en une suite d arguments zip crée une liste de n-uplets à partir de n listes """ iters = [iter(iterable)] * n return zip_longest(* iters) stats2pi = Counter( parpaquets( str( N(pi, 10**5) ), 2 ) ).values() 23 / 25

In [59]: stats2pi Out[59]: dict_values([506, 440, 483, 499, 523, 469, 522, 517, 556, 491, 469, 511, 491, 538, 498, 489, 510, 488, 503, 509, 558, 536, 509, 511, 494, 523, 505, 499, 504, 498, 474, 459, 518, 492, 485, 494, 462, 507, 487, 491, 536, 558, 529, 499, 493, 537, 549, 465, 522, 487, 472, 498, 517, 521, 482, 483, 482, 494, 503, 498, 494, 452, 501, 490, 491, 512, 514, 470, 456, 484, 515, 527, 479, 512, 502, 490, 473, 468, 530, 509, 484, 1, 488, 513, 520, 556, 445, 491, 1, 505, 475, 494, 463, 463, 468, 507, 501, 510, 551, 512, 534, 507]) 24 / 25

Voici un code naïf : def cherchemotif(motif,chaine): en = enumerate(chaine) deb = motif[0] n = len(motif) for i,k in en: if k == deb and chaine[i:i+n] == motif: return i return Pas trouvé In [10]: cherchemotif( 007,str(N(pi,10**7))) Out[10]: 2807 In [12]: cherchemotif( 1234567,str(N(pi,10**7))) Out[12]: 9470345 25 / 25

Voici un code naïf : def cherchemotif(motif,chaine): en = enumerate(chaine) deb = motif[0] n = len(motif) for i,k in en: if k == deb and chaine[i:i+n] == motif: return i return Pas trouvé In [10]: cherchemotif( 007,str(N(pi,10**7))) Out[10]: 2807 In [12]: cherchemotif( 1234567,str(N(pi,10**7))) Out[12]: 9470345 25 / 25

Voici un code naïf : def cherchemotif(motif,chaine): en = enumerate(chaine) deb = motif[0] n = len(motif) for i,k in en: if k == deb and chaine[i:i+n] == motif: return i return Pas trouvé In [10]: cherchemotif( 007,str(N(pi,10**7))) Out[10]: 2807 In [12]: cherchemotif( 1234567,str(N(pi,10**7))) Out[12]: 9470345 25 / 25