Conceitos Fundamentais de Estruturas de Dados e Algoritmos

Estruturas de Dados Comuns

  • Pillha: Coleção linear com operações de inserção e remoção realizadas em uma única extremidade.
  • Fila: Coleção linear com inserção em uma extremidade e remoção na oposta.
  • Vetor: Agrupamento ordenado de elementos do mesmo tipo em memória contígua.
  • Lista Encadeada: Elementos armazenados em nós interligados, com alocação não contígua.
  • Árvore: Estrutura hierárquica não linear com nós interconectados.
  • Grafo: Rede de vértices conectados por arestas sem hierarquia fixa.
  • Heap: Árvore binária especializada com propriedades de ordenação específicas.
  • Tabela Hash: Mapeamento eficiente de chaves para valores usando funções de dispersão.

Operações Algorítmicas Básicas

  • Busca: Localizar elementos que satisfaçam condições específicas
  • Inserção: Adicionar novos elementos à estrutura
  • Exclusão: Remover elementos existentes
  • Atualização: Modiifcar valores de elementos
  • Ordenação: Rearranjar elementos seguindo uma sequência lógica

Características Essenciais de Algoritmos

  • Finitude: Execução concluída em passos limitados
  • Determinismo: Instruções inequívocas e precisas
  • Exequibilidade: Operações implementáveis com recursos disponíveis
  • Entrada: Zero ou mais dados de processamento
  • Saída: Resultados derivados das entradas

Métodos de Descrição Algorítmica

Pseudocódigo

Algoritmo EncontrarMaior
Entrada: x, y, z
Saída: maior_valor

1. Se x > y então
2.   valor_temp = x
3. Senão
4.   valor_temp = y
5. Fim Se
6. Se z > valor_temp então
7.   maior_valor = z
8. Senão
9.   maior_valor = valor_temp
10. Retorne maior_valor

Implementação em Código

def obter_maior(valor1, valor2, valor3):
    candidato = valor1 if valor1 > valor2 else valor2
    if valor3 > candidato:
        return valor3
    return candidato

print(obter_maior(12, 8, 15))  # Retorna 15

Análise de Eficiência Algorítmica

Complexidade Temporal

Notação Exemplo Característica
O(1) Acesso direto Tempo constante
O(log n) Busca binária Divisão recorrente
O(n) Varredura linear Proporcional aos dados
O(n²) Ordenação por seleção Aninhamento quadrático

Complexidade Espacial

// Exemplo O(1)
int encontrar_maximo(int arr[], int n) {
    int max = arr[0];  // Espaço constante
    for(int i=1; i<n; i++) {
        if(arr[i] > max) max = arr[i];
    }
    return max;
}

// Exemplo O(n)
int* duplicar_array(int original[], int n) {
    int* copia = malloc(n * sizeof(int));  // Alocação linear
    for(int i=0; i<n; i++) {
        copia[i] = original[i] * 2;
    }
    return copia;
}

Publicado em 6-27 02:37