Supongo que un pico 2D es un valor que es más alto que sus vecinos. También podemos definir que los valores en ambos extremos de la matriz solo tienen un vecino, y serán picos si son más altos que ese vecino.
Este algoritmo tendrá una complejidad mínima de O (n) ya que todos los elementos de la matriz deben examinarse para encontrar los picos. También se puede implementar en O (n) complejidad, es decir, lineal.
Podemos construir una máquina de estado para hacer esto de manera muy eficiente.
- ¿Qué subcampo o resultado en matemática pura podría ser el próximo en encontrar aplicaciones (sorprendentes) del mundo real?
- ¿Qué es un gráfico cíclico?
- ¿Existe un tipo de conjunto que se define al tener un elemento de tipo 'otro' para el resto del conjunto?
- ¿Por qué SAS es mucho más rápido que R? Utilicé el código para encontrar los primeros k números primos en SAS y R para comparar su eficiencia, y los códigos son esencialmente los mismos, pero los resultados están fuera de mi mente.
- ¿Podrá la inteligencia artificial resolver un problema matemático abierto, como la conjetura de Goldbach o la hipótesis de Riemann?
Los estados son: (escalar, descender) y la siguiente entrada también puede ser: (escalar, descender).
Cuando el estado actual = subir y la siguiente entrada = descender, tenemos un pico. De lo contrario, solo actualice el estado actual de acuerdo con la siguiente entrada.
Aquí hay un pseudocódigo.
current_state: = escalada
– 1 es el primer elemento de la matriz, n es el número de elementos
para i: = 1 a n
– Determinar next_input
si i = n entonces
next_input: = descendente
más
si valor (i) <valor (i + 1) entonces
next_input: = escalada
más
next_input: = descendente
terminara si
terminara si
– Determinar si se encontró un pico
si current_state = escalando y next_input = descendiendo entonces
– encontró un pico en el valor (i), haga lo que quiera con él
terminara si
– Actualizar estado actual
current_state: = next_input
fin para