image

Acesse bootcamps ilimitados e +650 cursos pra sempre

60
%OFF
Article image
Isadora Ariane
Isadora Ariane23/11/2024 12:01
Compartilhe

TOP 25 ALGORITMOS | Floyd’s Cycle Finding Array

  • #Estrutura de dados

É um algoritmo de ponteiro que usa apenas dois ponteiros, movendo-se pela sequência em velocidades diferentes. Este algoritmo é usado para encontrar um loop em uma lista encadeada. Ele usa dois ponteiros, um movendo-se duas vezes mais rápido que o outro. O mais rápido é chamado de ponteiro rápido e o outro é chamado de ponteiro lento.

📁 | Resumo

image

🤖 | Código

.
class Node {
  constructor(x) {
      this.data = x;
      this.next = null;
  }
}

// Função que retorna true se houver um loop em lista encadeada senão retorna false.
function detectLoop(head) {

  // Ponteiros rápidos e lentos apontam inicialmente para cabeça
  let slow = head, fast = head;

  // Loop que é executado enquanto os ponteiros rápido e lento estão não é nulo e não é igual
  while (slow !== null && fast !== null
         && fast.next !== null) {
      slow = slow.next;
      fast = fast.next.next;

      // Se o ponteiro rápido e lento apontar para o mesmo nó, então o ciclo é detectado
      if (slow === fast) {
          return true;
      }
  }
  return false;
}

// Crie uma lista linkada: 10 -> 20 -> 30 -> 40 -> 50 -> 60
let head = new Node(10);
head.next = new Node(20);
head.next.next = new Node(30);
head.next.next.next = new Node(40);
head.next.next.next.next = new Node(50);
head.next.next.next.next.next = new Node(60);

head.next.next.next.next = head;

if (detectLoop(head))
  console.log("true");
else
  console.log("false");
.

🕰️ | Complexidade de Tempo

Como depende do número de nós, a complexidade de tempo será O(n).

📦 | Complexidade de Espaço

Como NÃO há necessidade de espaço temporário auxiliar, a complexidade de espaço será O(1).

✔️ | Vantagens

✦ Eficiente;

❌ | Desvantagens

✦ Nada intuitivo e nada fácil de implementar;

Compartilhe
Comentários (0)