Sunteți pe pagina 1din 2

Programare Funct a , ional

Tema 2
(toate grupele)
Scopul acestei teme este de a scrie o funct a genereze toate permut arile mult , ie care s , imii {1, 2, . . . , n} ( ntr-un mod interesant ;-)). In cele ce urmeaz a, o permutare (de lungime k ) va reprezentat a printr-o list a [a1 , . . . , ak ] astfel nc at a1 , . . . , ak s a cont a toate numerele de la 1 la , in k . De exemplu [1, 3, 2] e o permutare de lungime 3 s , i [1, 4, 2, 3] o permutare de lungime 4. Listele [1, 3] s ari. , i [1, 2, 2] nu sunt permut Intreb arile sunt ordonate astfel nc at r aspunsul de la o ntrebare s a e folositor la ntreb arile ce urmeaz a. Des a. , i enunt , ul temei este lung, rezolvarea este scurt 1. (1 punct) (a) Scriet ar s a de numere , i o funct , ie insert care primes , te ca argument un num , i o list ordonat a cresc ator s ntoarce lista ordonat a obt a prin inserarea num arului pe o , i care , inut , pozit atoare. De exemplu, insert 10 [1, 8, 11] ntoarce [1, 8, 10, 11], insert 3 [8, 11, 12] , ie corespunz ntoarce [3, 8, 11, 12] s ntoarce [8, 11, 12, 15]. , i insert 15 [8, 11, 12] (b) Folosind funct a de numere , ia insert, scriet , i o funct , ie sort care primes , te ca argument o list s ntoarce lista sortat a. De exemplu, sort [4, 5, 1] ntoarce [1, 4, 5] s ,i , i sort [4, 5, 1, 10, 2] ntoarce [1, 2, 4, 5, 10]. 2. (1 punct) (a) Scriet a s ntoarce , i o funct , ie isDecreasing care primes , te ca argument o list ,i True sau False, dup a cum lista este n ordine descresc atoare sau nu. De exemplu, isDecreasing [5, 4, 1] ntoarce True s ntoarce False. , i isDecreasing [2, 3, 1] (b) Scriet ntoarce cel mai lung sux descresc ator al unei liste. , i o funct , ie suxDecreasing care De exemplu, suxDecreasing [2, 3, 1] ntoarce [3, 1] s i suxDecreasing [1, 5, 7, 6, 4, 3, 2] , ntoarce [7, 6, 4, 3, 2]. (c) Scriet ntoarce elementul din list a care se g ases , i o funct , ie whereDecreasing care , te imediat nainte de cel mai lung sux descresc ator al unei liste. De exemplu, whereDecreasing [2, 3, 1] ntoarce 2 s ntoarce 5. Putet a funct , i whereDecreasing [1, 5, 7, 6, 4, 3, 2] , i presupune c , ia va apelat a doar pentru liste pentru care un astfel de element exist a. (d) Scriet als ntoarce un prex al , i o funct , ie prexDecreasing care primes , te ca argument o list ,i listei l astfel nc at l = (prexDecreasing l) ++ [whereDecreasing] ++ (suxDecreasing l). Putet a funct a doar pentru liste pentru care un astfel de prex , i presupune c , ia va apelat exist a. De exemplu, prexDecreasing [2, 3, 1] ntoarce [] s , i prexDecreasing [1, 5, 7, 6, 4, 3, 2] ntoarce [1] 3. (1 punct) (a) Scriet a s a cel , i o funct , ie smallest care primes , te ca argument o list , i calculeaz mai mic element din acest a list a. (b) Scriet a sortat a descresc ator , i o funct , ie smallestGreaterThan care primes , te ca argument o list ls ar x s a cel mai mic element din lista l care este mai mare dec at x. , i un num , i calculeaz De exemplu, smallestGreaterThan [7, 6, 4, 3, 2] 5 ntoarce 6. Putet a funct , i presupune c , ia va apelat a doar pentru argumente pentru care un astfel de element exist a. (c) Scriet as ar s ntoarce lista , i o funct , ie remove care primes , te ca argument o list , i un num ,i init a din care s-a s arul dat. De exemplu, remove [7, 6, 4, 3, 2] 6 ntoarce , ial , ters num [7, 4, 3, 2]. 4. (1 punct) Scriet ntoarce , i o funct , ie nextPermutation care primes , te la intrare o permutare s ,i um atoarea permutare (de aceeas n ordine lexicograc a. De exemplu, nextPermutation [2, 3, 1] = , i lungime) [3, 1, 2], nextPermutation [1, 2, 3] = [1, 3, 2], nextPermutation [1, 5, 7, 6, 4, 3, 2] = [1, 6, 2, 3, 4, 5, 7] s , i nextPermutation [1, 2, 3, 7, 6, 5, 4] = [1, 2, 4, 3, 5, 6, 7]. Hint: analizat atoare permutare, exemplicat aici pe , i procesul prin care se trece la urm [1, 5, 7, 6, 4, 3, 2]. Identic am cel mai lung sux descresc ator ([7, 6, 4, 3, 2]). Interschimb am

elementul de dinaintea suxului (5) cu cel mai mic element din sux mai mare dec at el (6) obt inem [1 , 6 , 7 , 5 , 4 , 3 , 2]. Sort a m suxul dup a interschimbare obt inem [1 , 6 , 2 , 3 , 4, 5, 7]. , , Vericat i algoritmul s i pe alte exemple. , , 5. (1 punct) (a) Scriet a dac a o permutare este ultima n ordine lexicograc a , i o funct , ie veric (i.e. nu mai urmeaz a niciuna dup a ea). De exemplu, isLastPermutation [3, 2, 1] s ,i isLastPermutation [5, 4, 3, 2, 1] ntorc True. isLastPermutation [2, 3, 1] s i isLastPermutation [1, 2, 4, 3, 5] , ntorc False. (b) Scriet ntoarce o list a , i o funct , ie permutations care primes , te la intrare o permutare s ,i de permut ari care cont ine permutarea primit a ca parametru s i toate permut a rile ce , , i urmeaz a lexicograc. De exemplu, permutations [3, 1, 2] ntoarce [[3, 1, 2], [3, 2, 1]] s ,i permutations [1, 2, 3, 4] ntoarce o list a cu toate cele 4! permut ari ale 1, 2, 3, 4. (c) Scriet ar natural n s ntoarce , i o funct , ie permutations care primes , te ca argument un num ,i o list a cu toate permut arile mult imii 1 , 2 , . . . , n . De exemplu, , permutations 3 = [[1, 2, 3], [1, 3, 2], [2, 1, 3], [2, 3, 1], [3, 1, 2], [3, 2, 1]].

Page 2

S-ar putea să vă placă și