Algoritmos: Problema 3n+1

Tulio Faria19 de fevereiro de 2017

Criando a solução em Javascript para o Problema 3n+1.Neste post continuamos a série de conteúdos sobre algoritmos. Principalmente sobre tipos de algoritmos que são utilizados em competições de programação e em entrevistas de emprego. O Problema 3n+1 foi retirado do livro Programming Challenges de Miguel Skiena. O objetivo do algoritmo é, dado i e j, como um intervalo de início e fim, achar o maior ciclo. O processo começa processando os valores de n. Se n é um número par, o próximo valor de n será n /2. Caso n seja impar, o próximo valor de n será 3 * n + 1. O algoritmo termina em n = 1. A ideia é calcular o número de passos até que n seja 1. Fazendo este processo entre i e j, e achando o maior número. Neste vídeo, explico um pouco melhor como funciona o algoritmo e como ele foi resolvido.

Veja no meu Gist

Não deixe de comentar com sua opinião, sugestão ou dúvida! E cadastre seu e-mail para receber nossas últimas novidades. Abraços!

E aqui o algoritmo completo:

{
  function cycleLen(n) {
    let steps = 1
    while (n !== 1) {
      if (n % 2 === 0) {
        n = n / 2
      } else {
        n = 3 * n + 1
      }
      steps++
    }
    return steps
  }
  function maxCycle(i, j) {
    let max = cycleLen(i)
    for (let k = i + 1; k <= j; k++) {
      let currentCycle = cycleLen(k)
      if (currentCycle > max) {
        max = currentCycle
      }
    }
    return i + ' ' + j + ' ' + max
  }
  console.log(maxCycle(1, 10))
  console.log(maxCycle(100, 200))
  console.log(maxCycle(201, 210))
  console.log(maxCycle(900, 1000))
}

Curta o DevPleno no Facebook, se inscreva no canal no YouTube e cadastre seu e-mail para não perder as atualizações. Abraço!

Autor
Tulio Faria19 de fevereiro de 2017

Últimas do Blog