착화합 선형 O(n)
Em Big O Notation, 복잡한 선형 é apresentada como O(n). 문자열 매칭 알고리즘은 Boyer-Moore(Galil의 regra를 사용)와 선형으로 복잡하게 구성됩니다.
mas a questão toda não é pegar os algoritmos conhecidos e procurar no Google a complexidade deles e sim enxergar os padrões nesses algoritmos e entender a ponto de flagrar a complexidade no seu código e de outras pessoas. Pergunta a ser feita não é "esse algoritmo é O(n)?"e sim "O porquê desse algoritmo ser O(n)?".
최종 응답자 응답자가 최종 응답자일 때 Big O 표기법을 입력해야 합니다.
복잡한 선형, O(n), 다음 형식의 알고리즘을 시연합니다.
package main
import (
"fmt"
)
func linear(n int) int {
total := 0
for i := 1; i <= n; i++ {
total++
}
return total
}
func main() {
fmt.Println(linear(10))
}
Aqui temos uma operação apenas e não três como anteriormente, nesse caso é total++ que é o mesmo que: total é igual a total + 1, porém a complexidade é totalmente diferente pois o input também define quantas vezes i será incrementado no for statement . Então quanto maior for o input_(n)_ maior o numero de operações serão feitas em total.
Se no lugar de (i <= n) eu colocasse (i <= 10) seria um tempo constante O(1) mas como o 입력 간섭 no for essa complexidade é O(n).
Se formos olhar cada pedaço e dizer o número de operações:
Quando for analisar a complexidade do algoritmo não é necessário contar todas as operações, na maioria das vezes você vai acabar percebendo. Nesse caso como temos operações que são relacionadas a N que é o numero de inputs não tem porque nos preocuparmos com as que são constantes pois a parte linear já dominará a notação de complexidade, então se a gente deixar as constantes de lado sobram apenas as O (N).
E se você tiver dois for statement? Tipo assim:
package main
import "fmt"
func elevador(n) {
for i := 0 ; i < n; i++{
fmt.Println(i)
}
for j := n - 1 ; j >= 0; j--{
fmt.Println(j)
}
}
Ainda assim a complexidade será O(n) e não O(2n) porque Big O é sobre o comportamento quando a entrada cresce muuuuito. Lá perto do infinito e além pouco importa se é n ou 2n.
Pode ser que eu esteja batendo na mesma tecla, porém recomendo que leia mesmo as partes que você thinka que já sabe. O maior perigo de aprender é achar que já entendeu e não precisa estudar mais.
Agora temos em perspectiva dois tipos de complexidade a constante em cinza e a linear em azul e agora fica muito óbvio o porque do nome. Repare que dessa vez o input é de 10gb e não 10tb se eu tentasse fazer com um input de 10tb em um algoritmo de complexidade O(n) levaria bem mais tempo. A Linha de O(1) permanece plana não leva nem 1 segundo de runtime, a azul com um input de 10gb já leva 18 segundos.
Eu não to falando pra você ficar contando segundo, isso vai dependser do seu cenário, mas se você olhar o quanto as linhas já se distanciaram é bastante e como diz o ditado "de grão em grão a galinha enche o papo".
Reference
이 문제에 관하여(착화합 선형 O(n)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/vapordev/complexidade-linear-o-n-4k55텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)