This is an old revision of the document!
Soluții Notații asimptotice
1. Dați exemple de câte o funcție din următoarele clase de complexitate:
$ O(n)$
$Ω(log(n))$
$θ(n^2)$
$ɷ(1/n)$
$ o(3^n)$
2. Verificați valoarea de adevăr a următoarelor propoziții:
$ √n∈O(logn)$
lim(n→∞)(g(n)/f(n))=lim(n→∞)(√n/log(n))=(l'Hospital)lim(n→∞)(n/2*√n)=1/2*lim(n→∞)(√n)=+∞ ⇒ Fals
$ logn∈O(log(log n))$
lim(n→∞)(g(n)/f(n))=lim(n→∞)(logn/log(log n))=(l'Hospital)lim(n→∞)(1/n / 1/logn * 1/n)=1/2*lim(n→∞)(logn)=+∞ ⇒ Fals
$ n∈O(√n logn)$
lim(n→∞)(g(n)/f(n))=lim(n→∞)(n/√n logn)=lim(n→∞)(√n/logn)=(l'Hospital)lim(n→∞)(1/2 * 1/n^2 / 1/n)=1/2*lim(n→∞)(1/n)=0 ⇒ Fals
$ n+logn∈θ(n)$
lim(n→∞)(g(n)/f(n))=lim(n→∞)(n + logn/n)=1 + lim(n→∞)(logn/n)=(l'Hospital)1 + lim(n→∞)(1/n)= 1 ⇒ Adevarat
$ log(nlogn)∈θ(logn)$
lim(n→∞)(g(n)/f(n))==(l'Hospital)lim(n→∞)(1/nlogn*(logn+1) / 1/n)=lim(n→∞)(1/logn*(logn+1)) =lim(n→∞)(1 + 1/logn)=1 ⇒ Adevarat
$ √n∈ɷ(log n)$
lim(n→∞)(g(n)/f(n))=lim(n→∞)(√n/logn)= (l'Hospital)lim(n→∞)(1/2*√n)= ∞ ⇒ Adevarat
Analiză amortizată
1.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define COUNTER_SIZE 100
unsigned total_flips = 0;
int inc(unsigned *a, size_t m)
{
size_t i = 0;
unsigned current_flips = 0;
while (i < m && a[i] == 1) {
a[i] = 0;
current_flips++;
i++;
}
if (i == m) {
total_flips += current_flips;
return -1;
}
a[i] = 1;
current_flips++;
total_flips += current_flips;
return 0;
}
int main(int argc, char *argv[])
{
unsigned counter[COUNTER_SIZE];
memset(counter, 0, sizeof(counter));
if (argc < 2) {
fprintf(stderr, "Usage: %s <number_of_increments>\n", argv[0]);
return 1;
}
unsigned n = strtoull(argv[1], NULL, 10);
if (n == 0) {
fprintf(stderr, "Invalid number of increments: %s\n", argv[1]);
return 1;
}
for (int i = 0; i < n; i++) {
inc(counter, COUNTER_SIZE);
}
printf("Total flips: %u\n", total_flips);
}