Olá! A palestra de hoje será um pouco diferente das demais. Será diferente porque está apenas indiretamente relacionado ao Java. No entanto, este tópico é muito importante para todo programador. Falaremos sobre algoritmos . O que é um algoritmo? Em termos simples, esta é uma certa sequência de ações que devem ser executadas para alcançar o resultado desejado . Freqüentemente usamos algoritmos na vida cotidiana. Por exemplo, todas as manhãs você se depara com uma tarefa: vir para a escola ou para o trabalho e ao mesmo tempo ser:
- Vestido
- Limpar
- Bem alimentado
- Acorde com um despertador.
- Tome um banho, lave o rosto.
- Prepare o café da manhã, faça café/chá.
- Comer.
- Se você não passou suas roupas desde a noite, passe-as.
- Vestir-se.
- Saia de casa.
- Compre ou baixe na Internet o “Dicionário de Nomes Pessoais Russos”, edição de 1966.
- Encontre todos os nomes da nossa lista neste dicionário.
- Escreva em um pedaço de papel em qual página do dicionário o nome está.
- Coloque os nomes em ordem usando as anotações em um pedaço de papel.
for
que executa esta tarefa
int[] numbers = new int[100];
// ..заполняем массив числами
for (int i: numbers) {
System.out.println(i);
}
Qual é a complexidade do algoritmo escrito? Linear, SOBRE. O número de ações que o programa deve executar depende exatamente de quantos números foram passados para ele. Se houver 100 números no array, haverá 100 ações (saídas na tela), se houver 10.000 números no array, 10.000 ações precisarão ser executadas. Nosso algoritmo pode ser melhorado? Não. De qualquer forma, teremos que fazer N passagens pelo array e realizar N saídas para o console. Vejamos outro exemplo.
public static void main(String[] args) {
LinkedList<Integer> numbers = new LinkedList<>();
numbers.add(0, 20202);
numbers.add(0, 123);
numbers.add(0, 8283);
}
Temos um vazio LinkedList
no qual inserimos vários números. Precisamos estimar a complexidade do algoritmo para inserir um único número em LinkedList
nosso exemplo e como isso depende do número de elementos da lista. A resposta é O(1) - complexidade constante . Por que? Atenção: cada vez inserimos um número no início da lista. Além disso, como você lembra, ao inserir números em LinkedList
elementos, eles não são deslocados para lugar nenhum - os links são redefinidos (se de repente você esqueceu como funciona o LinkedList, dê uma olhada em uma de nossas palestras antigas ). Se agora o primeiro número da nossa lista for o número х
, e inserirmos o número y no início da lista, tudo o que é necessário é:
x.previous = y;
y.previous = null;
y.next = x;
Para esta redefinição de referência, não nos importa quantos números existem agoraLinkedList
- pelo menos um, pelo menos mil milhões. A complexidade do algoritmo será constante - O(1).
GO TO FULL VERSION