Documente Academic
Documente Profesional
Documente Cultură
I.
Notiuni teoretice
1. Ce este un algoritm? Cuvantul algoritm are la origine numele matemeticianului person Al-Khwarizmi. Un algoritm inseamna o metoda sau procedura alcatuita din pasii necesari rezolvarii unei probleme sau, in general, unei categorii de probleme. Un algoritm este caracterizat de urmatoarele proprietati: - Corectitudine: furnizarea de catre algoritm a unei solutii corecte pentru problema data. - Generalitate: un algoritm trebuie sa fie capabil sa rezolve o categorie de probleme si nu o problema particulara. - Claritate: algoritmul trebuie sa descrie clar pasii ce trebuie urmati pentru a rezolva o problema - Finititudine: un algoritm se termina dupa un numar finit de pasi - Eficienta: inseamna viteza(timpul de obtinere a rezultatului) si spatiul(spatiul pe disc alocat si cantitatea de memorie alocata in timpul procesarii) - Existenta unei intrari: datele ce vor fi prelucrate - Existenta unei iesiri: rezultatul obtinut in urma prelucrarii intrarii. 2. Clasificarea algoritmilor a. dupa modul de implementare: - recursivi - iterativi - serial-paralel - deterministic-aleatoriu b. dupa paradigma utilizata: - algoritmi backtracking - algoritmi divide et impera - algoritmi de programare dinamica - algoritmi de tip greedy etc. 3. Algoritmi fundamentali 1. 2. 3. 4. 5. 6. 7. Inmultirea a la russe Sortarea prin selectie Sirul lui Fibonacci Algoritmul lui Euclid pentru calculul celui mai mare divizor comun Triunghiul lui pascal Inmultirea matricelor Turnurile din Hanoi
II.
1. Inmultirea a la russe Metoda nu presupune folosirea inmultirii ci divizarea cu 2 si adunarea. Algoritmul este:
Codul de mai jos exemplifica modul de implementarea a algoritmului intr-un limbaj de programare(in cazul de fata, Java).
import java.util.Scanner; public class Russe { public static int arusse(int a, int b) { int[] x,y; int i=1, prod=0; x=new int[1000]; y=new int[1000]; x[1]=a; y[1]=b; while(x[i]>1) { x[i+1]=x[i]/2; y[i+1]=y[i]+y[i]; i=i+1; } while(i>0) { if((x[i]%2)!=0) prod=prod+y[i]; i=i-1; } return prod; } public static void main(String[] args) { Scanner s=new Scanner(System.in); System.out.println("Se efectueaza inmultirea a doua numere: "); System.out.println("Primul numar: "); int a=s.nextInt(); System.out.println("Al doilea numar: ");
} }
2. Algoritmul lui Euclid pentru calculul celui mai mare divizor comun a.) Pseudocod
public static void main(String[] args) { Scanner s=new Scanner(System.in); System.out.println("Calculul celui mai mare divizor comun folosind algoritmul lui Euclid "); System.out.println("Primul numar: "); int m=s.nextInt(); System.out.println("Al doilea numar: "); int n=s.nextInt(); System.out.println("Cel mai mare divizor comun este: "+cmmdc(m,n)); } III. [de completat] Teme