Repository navigation
Home
Donald Knuth, em seu livro The Art of Computer Programming, define como uma das propriedades básicas de algoritmos a finitude (finiteness). Um algoritmo possui essa propriedade se as regras aplicadas por ele concluem em um período de tempo razoável. Como quantificar o que é razoável ou não depende do problema o qual o algoritmo tenta resolver e do quão rápidos são os algoritmos já conhecidos que resolvem esse problema.
O desempenho de algoritmos quanto a finitude pode ser representado por equações que representam seu tempo de execução.
Por exemplo, dado o problema de busca por um elemento
1.
2.
3.
4.
5.
Caso o elemento
NOTA - É um erro comum achar que a linha 2 executa apenas
$n$ vezes. Como o laço de repetição precisa de uma condição de parada, o valor de$i$ chega até$|V| + 1$ e, nesse caso, o laço verifica que a condição de continuidade não é mais satisfeita e o algoritmo segue sua execução para a linha 5.
É possível reorganizar os termos da equação de forma a chegar na equação
SYNOPSIS
#include <time.h>
int clock_gettime(clockid_t clockid, struct timespec *tp);struct timespec {
time_t tv_sec; /* seconds */
long tv_nsec; /* nanoseconds */
};#include <stdio.h>
#include <time.h>
#include <unistd.h>
int main(int argc, char **argv)
{
struct timespec a, b;
unsigned int t;
clock_gettime(CLOCK_MONOTONIC, &b);
sleep(1);
clock_gettime(CLOCK_MONOTONIC, &a);
t = (a.tv_sec * 1e9 + a.tv_nsec) - (b.tv_sec * 1e9 + b.tv_nsec);
printf("%u\n", t);
return 0;
}int search(int *v, unsigned int n, int k)
{
while (n-- > 0)
{
if (v[n] == k)
return n;
}
return -1;
}import java.lang.System;
import java.lang.Thread;
public class Measure
{
public static void main(String[] args) throws InterruptedException
{
long a, b, t;
b = java.lang.System.nanoTime();
java.lang.Thread.sleep(1000);
a = java.lang.System.nanoTime();
t = (a - b);
java.lang.System.out.println(t);
}
}public class Measure
{
public static int search(ArrayList<Integer> v, int k)
{
int n = v.size();
while (n-- > 0)
{
if (v.get(n) == k)
return n;
}
return -1;
}
}import time
if __name__ == "__main__":
b = time.time_ns()
time.sleep(1)
a = time.time_ns()
t = a - b
print(t)def search(v, k):
n = len(v)
while (n > 0):
n = n - 1
if v[n] == k:
return n
return -1use std::{thread, time};
fn main()
{
let duration = time::Duration::from_secs(1);
let now = time::Instant::now();
thread::sleep(duration);
let measure = now.elapsed();
println!("{}", measure.as_nanos());
}fn search(v: &mut Vec<i32>, k: i32) -> i32
{
let mut n = v.len();
while n > 0
{
n = n - 1;
if v[n] == k
{
return n as i32;
}
}
return -1;
}[1] Donald Knuth. The Art of Computer Programming.