TD 1 : Listes et séquences. PC - Lycée Thiers



Documents pareils
Exercices types Algorithmique et simulation numérique Oral Mathématiques et algorithmique Banque PT

Exercices Types Algorithmique et simulation numérique Oral Mathématiques et Algorithmique Banque PT Propositions de réponses

Définitions. Numéro à préciser. (Durée : )

1 Recherche en table par balayage

Travaux pratiques. Compression en codage de Huffman Organisation d un projet de programmation

1 Définition et Appel d une fonction. V. Phan Luong. Cours 4 : Fonctions

Bases de programmation. Cours 5. Structurer les données

Chap III : Les tableaux

STAGE IREM 0- Premiers pas en Python

SNT4U16 - Initiation à la programmation TD - Dynamique de POP III - Fichiers sources

Initiation à la programmation en Python

TP 1. Prise en main du langage Python

Algorithmique I. Algorithmique I p.1/??

Architecture des Systèmes d Information Architecture des Systèmes d Information

Découverte de Python

Algorithmique et Programmation, IMA

1. Structure d un programme C. 2. Commentaire: /*..texte */ On utilise aussi le commentaire du C++ qui est valable pour C: 3.

Initiation à l algorithmique

Programme Compte bancaire (code)

Perl Orienté Objet BioPerl There is more than one way to do it


Capacité d un canal Second Théorème de Shannon. Théorie de l information 1/34

Licence Bio Informatique Année Premiers pas. Exercice 1 Hello World parce qu il faut bien commencer par quelque chose...

1 Lecture de fichiers

4. Les structures de données statiques

1/24. I passer d un problème exprimé en français à la réalisation d un. I expressions arithmétiques. I structures de contrôle (tests, boucles)

Les arbres binaires de recherche

Java Licence Professionnelle CISII,

Utilisation d objets : String et ArrayList

Algorithmes et mathématiques. 1. Premiers pas avec Python. Exo Hello world!

1. Structure d'un programme FORTRAN 95

introduction Chapitre 5 Récursivité Exemples mathématiques Fonction factorielle ø est un arbre (vide) Images récursives

Cours d algorithmique pour la classe de 2nde

Programmation C++ (débutant)/instructions for, while et do...while

Initiation à LabView : Les exemples d applications :

03/04/2007. Tâche 1 Tâche 2 Tâche 3. Système Unix. Time sharing

Cours 7 : Utilisation de modules sous python

Programmation avec Xcas ou Python

La boucle for La boucle while L utilisation du if else. while (condition) { instruction(s) }

MISE A NIVEAU INFORMATIQUE LANGAGE C - EXEMPLES DE PROGRAMMES. Université Paris Dauphine IUP Génie Mathématique et Informatique 2 ème année

Calculabilité Cours 3 : Problèmes non-calculables.

Quantification Scalaire et Prédictive

La question est : dans 450 combien de fois 23. L opération est donc la division. Le diviseur. Le quotient

Probabilités. Rappel : trois exemples. Exemple 2 : On dispose d un dé truqué. On sait que : p(1) = p(2) =1/6 ; p(3) = 1/3 p(4) = p(5) =1/12

PROJET ALGORITHMIQUE ET PROGRAMMATION II

DM 1 : Montre Autoquartz ETA

Travaux Dirigés n 1 : chaînes de caractères

Représentation d un entier en base b

Recherche dans un tableau

Corrigé des TD 1 à 5

I. Introduction aux fonctions : les fonctions standards

Examen Médian - 1 heure 30

AWS avancé. Surveiller votre utilisation d EC2

V- Manipulations de nombres en binaire

Algorithmique, Structures de données et langage C

1 de 46. Algorithmique. Trouver et Trier. Florent Hivert. Mél : Florent.Hivert@lri.fr Page personnelle : hivert

Introduction à la programmation Travaux pratiques: séance d introduction INFO0201-1

UE C avancé cours 1: introduction et révisions

ET 24 : Modèle de comportement d un système Boucles de programmation avec Labview.

INF111. Initiation à la programmation impérative en C amini/cours/l1/inf111/ Massih-Reza Amini

ALGORITHMIQUE II NOTION DE COMPLEXITE. SMI AlgoII

6 - Le système de gestion de fichiers F. Boyer, UJF-Laboratoire Lig, Fabienne.Boyer@imag.fr

Cours d introduction à l informatique. Partie 2 : Comment écrire un algorithme? Qu est-ce qu une variable? Expressions et instructions

Correction TD algorithmique

Éléments d informatique Cours 3 La programmation structurée en langage C L instruction de contrôle if

Compression Compression par dictionnaires

ÉPREUVE COMMUNE DE TIPE Partie D

Corrigé des exercices sur les références

IN Cours 1. 1 Informatique, calculateurs. 2 Un premier programme en C

SOCLE COMMUN - La Compétence 3 Les principaux éléments de mathématiques et la culture scientifique et technologique

Cours d initiation à la programmation en C++ Johann Cuenin

Logiciel Libre Cours 3 Fondements: Génie Logiciel

TD3: tableaux avancées, première classe et chaînes

Cours de Programmation Impérative: Zones de mémoires et pointeurs

Manuel d'installation

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

Algorithmes récursifs

Calculateur quantique: factorisation des entiers

1 Introduction et installation

Complexité. Licence Informatique - Semestre 2 - Algorithmique et Programmation

Rappels sur les suites - Algorithme

Développement décimal d un réel

TP : Shell Scripts. 1 Remarque générale. 2 Mise en jambe. 3 Avec des si. Systèmes et scripts

Plan du cours Cours théoriques. 29 septembre 2014

Plan du cours. Historique du langage Nouveautés de Java 7

Informatique Générale

Algorithmique avec Algobox

Ordonnancement temps réel

Introduction à l algorithmique et à la programmation avec Python. Laurent Signac

Algorithmique et structures de données I

Exercice : la frontière des portefeuilles optimaux sans actif certain

COMMENT REDIGER UN RAPPORT TECHNIQUE?

Feuille TD n 1 Exercices d algorithmique éléments de correction

Chapitre 10. Les interfaces Comparable et Comparator 1

Les deux points les plus proches

Quelques Algorithmes simples

Cours de C++ François Laroussinie. 2 novembre Dept. d Informatique, ENS de Cachan

MIS 102 Initiation à l Informatique

CORRECTION EXERCICES ALGORITHME 1

Transcription:

Exercice 1

Exercice 1. Exercice 1. 1. Ecrire une fonctions moyenne() prenant en paramètre une séquence numérique (liste ou tuple) et retournant sa moyenne. 2. Ecrire une fonctions variance() prenant en paramètre une séquence numérique (liste ou tuple) et retournant sa variance. On rappelle que V (X ) = E((X E(X )) 2 ) = E(X 2 ) E(X ) 2 et on fera appel à la fonction moyenne(). 3. Quelles sont leur complexité (en fonction de la longueur de la séquence)?

Exercice 1. Correction 1. Pour la fonction moyenne() : def moyenne(tab): s = 0 for x in tab: s += x return s/len(tab) ou plus rapide, à l aide de la fonction sum() : def moyenne(tab): return sum(tab)/len(tab) De complexité linéaire : une boucle for parcourant la séquence. Remarque la fonction len(.) est en temps borné O(1).

Exercice 1. Correction 2. Pour la fonction variance() : A l aide de la définition : V (X ) = E((X E(X )) 2 : def variance(x): m = moyenne(x) Y = [(x - m)**2 for x in X] # Liste (X E(X )) 2 return moyenne(y) ou avec König-Huygens V (X ) = E(X 2 ) E(X ) 2 : def variance(x): X2 = [x**2 for x in X] # Liste X 2 return moyenne(x2) - moyenne(x)**2 Chacune de complexité linéaire : complexité linéaire pour calculer moyenne(x) complexité linéaire pour constituer la liste Y ou la liste X2. complexité linéaire pour calculer moyenne(y) ou moyenne(x2) A la suite.

.. (Oral Banque PT)

. 1. d(4) retourne [1,2,4] d(10) retourne [1,2,5,10]. Pour un entier positif n, la fonction d(n) retourne la liste des diviseurs de son argument. 2. def DNT(n): L=[] for nombre in range(2,n): if n%nombre==0: L.append(nombre) return L

. 3. def sommecarresdnt(n): return sum([x**2 for x in DNT(n)]) 4. L = [] for x in range(1000): if x == sommecarresdnt(x): L.append(x) print(l) retourne : [0, 4, 9, 25, 49, 121, 169, 289, 361, 529, 841, 961] C est la suite des carrés des nombres premiers. Il est évident que le carré d un nombre premier est égal à la somme des carrés de ses diviseurs non-triviaux. On conjecture que si un nombre N égale la somme des carrés de ses diviseurs non triviaux, alors N est le carré d un nombre premier.

.. (Oral Banque PT)

. 1. def nombrezeros(t,i): n = len(t) r = 0 while i < n and t[i] == 0: i += 1 r += 1 return r 2. Il suffit de constituer la liste du nombre max de zéros débutant aux indices allant de 0 à len(t)-1, puis de retourner son maximum : def nombrezerosmax(t): n = len(t) L = [nombrezeros(t,i) for i in range(n) ] return max(l)

. 3. Dans le pire des cas : celui d une liste constituée uniquement de zéros : nombrezeros(t,i) fait de l ordre de len(t)-i opérations. Ainsi la constitution de L effectue de l ordre de len(t) 1 len(t) len(t) i = i=0 k=1 k = O(len(t) 2 ) opérations. La recherche d un maximum est linéaire : O(len(t)) opérations. Ainsi la complexité est dans le pire des cas quadratique O(len(t) 2 ).

. 4. On peut effectuer la recherche en complexité linéaire : il suffit de ne pas calculer nombrezeros(t,i) pour tous les indice i : si on a obtenu a zéros contigus au dernier calcul on poursuit à l indice du premier 1 qui suit, soit à l indice précédent augmenté de a + 1 : def nombrezerosmax1(t): ListeNombreZeros = [] i = 0 while i < len(l): d = nombrezeros(t,i) ListeNombreZeros.append(d) i += d+1 return max(listenombrezeros) Dans la boucle while chaque élément de la liste t est lu une fois : complexité linéaire. Suivi de la recherche du maximum qui est en temps linéaire sur la longueur de la liste ListeNombreZeros, soit en temps au plus linéaire sur la longueur de t.

.. (Oral Banque PT) Indication pour la fonction codage() : créer une liste listephrase des caractères de la chaine phrase ; parcourir les 26 lettres de l alphabet par indice, en appelant les fonctions indices(x,phrase) et decalage(n), modifier chaque lettre x dans listephrase par le caractère codé correspondant. Finalement reconstituer à partir de listephrase la phrase codée.

. 1. alphabet = abcdefghijklmnopqrstuvwxyz 2. def decalage(n): return alphabet[n:] + alphabet[:n] 3. def indices(x,phrase): n = len(phrase) L = [] for i in range(n): if x == phrase[i]: L.append(i) return L

. def codage(n,phrase): alphabetcode = decalage(n) # Obtention de l alphabet codé # Constitution de la liste des caractères de phrase listephrase = [] for x in phrase: listephrase.append(x) % Codage de la liste en utilisant la fonction indices(,) for i in range(26): lettre = alphabet[i] lettrecode = alphabetcode[i] ind = indices(lettre,phrase) for i in ind: listephrase[i] = lettrecode # Obtention de la chaine codée : phrasecode = for lettre in listephrase : phrasecode += lettre return phrasecode

. Remarques : 1. Les fonctions intermédiaires sont là pour être utilisées! 2. On travaille sur des listes car une chaine de caractère est non-modifiable. 3. L algorithme est de complexité linéaire sur la longueur de la chaîne à coder. 5. Pour décoder un message crypté avec un décalage de n, il suffit de coder avec décalage -n (la fonction decalage() marche aussi avec un argument négatif). def decodage(n, phrasecode): return codage(-n, phrasecode)