Ordem de definição de crescimento de Reynolds & Tymann

47

Estou lendo um livro chamado Principles of Computer Science (2008), de Carl Reynolds e Paul Tymann (publicado pela Schaum's Outlines).

O segundo capítulo apresenta algoritmos com um exemplo de pesquisa sequencial que simplesmente itera através de uma lista de nomes e retorna VERDADEIRO se um determinado nome for encontrado na lista.

O autor continua dizendo (página 17):

Dizemos que a "ordem de crescimento" do algoritmo de busca seqüencial é n. A notação para isso é T (n). Também dizemos que um algoritmo cuja ordem de crescimento está dentro de algum fator constante de T (n) tem um teta de NL. "A pesquisa seqüencial tem um teta de n." O tamanho do problema é n, o comprimento da lista que está sendo pesquisada.

Acho isso muito difícil de seguir. O livro está cheio de erros, por isso não tenho certeza se estou faltando alguma coisa ou se há um erro de digitação no parágrafo acima. Em inglês geral, raramente vejo qualquer frase terminar com "... diga".

Estou muito confuso.

T de quê? O livro não explica. É para o tempo ou para teta?

Se "um theta de NL" significa "A pesquisa seqüencial tem um theta de n". L de quê? 'Linear' ou 'comprimento'?

Escrevi para os editores pedindo uma explicação. Eles disseram que encaminhariam minha mensagem aos autores. Eles não responderam. Também tentei procurar outras fontes, mas ainda sinto que estou entendendo mal alguma coisa - por isso não posso descansar até decodificar este parágrafo.

Se alguém tiver uma cópia desse livro e tiver entendido esse parágrafo. Então, eu apreciaria se você pudesse me informar se esse parágrafo é preciso ou explicá-lo em outras palavras. Obrigado.

JW.
fonte
Complexidade temporal T (n), da Wikipedia : "Como o tempo de desempenho de um algoritmo pode variar com entradas diferentes do mesmo tamanho, geralmente se usa a pior complexidade de tempo de um algoritmo, denotada como T (n), que é definida como a quantidade máxima de tempo gasto em qualquer entrada de tamanho n Menos comum, e geralmente especificada explicitamente, é a medida da complexidade do caso médio.A complexidade do tempo é classificada pela natureza da função T (n). Por exemplo, um algoritmo com T (n) = O (n) é chamado de algoritmo de tempo linear e "[...]"
Stefan
1
Acredito que seja este livro e, além da resenha não estelar que acabei de deixar, há outra datada de hoje, o que provavelmente não é uma coincidência!
Jason C
Esse uso do say parece a definição menos usada: assumir ou supor. Pense nisso como "..., digamos". Ainda não tenho certeza se essa frase faz sentido.
Roger Krueger

Respostas:

77

O parágrafo está errado. Infelizmente, parece exatamente o tipo de coisa que um aluno que não entende o material escreveria como resposta a um exercício. Esse tipo de bobagem não tem lugar em um livro didático. Não faça movimentos bruscos. Largue o livro. Afaste-se do livro.

T(n)

T(n)Tn

T(1)=kT(n)=T(n1)+lognfor n>1
TT(n)=blahTT

T(n)n

Obviamente, isso foi mutilado. Eu acho que os autores pretendiam escrever algo como,

T(n)nn

Mas, por favor, não dizemos "tem um teta de ", assim como, se é a sua notação de altura, você não diria "John tem um de 180cm". Não é apenas uma forma correta de palavras. Na verdade, dizemos: "O tempo de execução do algoritmo é theta  (ou theta de  )". Observe em particular que é uma ferramenta para falar sobre funções matemáticas, não sobre algoritmos. Teta não significa que o tempo de execução seja alguma coisa; é algo que você pode usar para falar sobre o tempo de execução.nhhnnΘ

"NL", a propósito, denota o espaço de registro não determinístico da classe de complexidade , que não faz nenhum sentido na posição em que apareceu na citação original.

David Richerby
fonte
12
O primeiro parágrafo me fez sorrir porque é exatamente o tipo de coisa que a polícia da ciência da computação lhe diria :-) (+1 também, esta é uma boa resposta).
Juho
3
Muito obrigado pela sua explicação. É realmente muito útil e agora sinto que entendo um pouco melhor (ou, pelo menos, não sinto angústia no meu cérebro por não entender esse parágrafo). Eu posso relaxar agora.
JW.
2

Parece que o autor está tentando explicar a notação Big O , mas a renomeou como por nenhuma razão específica e destruiu completamente o texto.T

Para uma boa descrição da notação Big O (assim como little-o e Theta), recomendo o livro Introdução aos Algoritmos do MIT, do Prof. Leiserson.

Parece que uma distinção importante é que se refere à complexidade total de um algoritmo, que normalmente é tempo , espaço ou ambos. (por exemplo, alguns algoritmos são mais lentos com conjuntos de dados maiores; outros requerem mais espaço de armazenamento com dados maiores; e outros requerem mais tempo e mais espaço) .Onotation

Parece que esta se refere apenas à medição do tempo de um algoritmo e não leva em consideração os requisitos de armazenamento.Tnotation

abelenky
fonte
1
Não parece que eles estão tentando explicar o grande O - eles explicitamente falam sobre teta.
David Richerby
O texto do Prof. Leiserson descreve especificamente o Theta como uma variação mais precisa do BigO. Sei que pode haver outras definições de Theta, mas o teta relacionado ao BigO é com quem eu estou familiarizado.
abelenky
2
Eu não acho que é isso que está acontecendo. Em vez disso, suspeito que seja a negligência comum de escrever "T (n) = n" e assumir (sem dizer explicitamente) que todos deduzirão que T (n) se refere a um tempo de execução, e especificamente o tempo de execução do algoritmo que eles usam. tenha em mente, e n se refere ao tamanho da entrada.
DW