Antes da Segunda Leitura - Hashs como Indexadores

[ ou, segundo alguns, "como tudo comecou": ver Alen G. Konheim - Hashing in Computer Science - Fifty Years of Slicing and Dicing - Wiley, 2010 ]


Imagine uma lista de NOMEs associados, digamos, a E-MAILs, a TELEFONEs e a ENDERECOs. Temos aqui uma tabela, uma 'base de dados' formada por 'registros' (linhas) representando 'objetos' pelos valores específicos de cada uma de suas propriedades ou 'atributos' (colunas).

De organização similar a uma tabela de registros, o arquivo titulo-html_lineus_url.txt (ver abaixo), que pode ser baixado assim:

wget --no-check-certificate web.cip.com.br/pater/SI2022/titulo-html_lineus_url.txt

lista 111 pássaros de 70 espécies diferentes registradas no Campus da UFRJ na Praia Vermelha entre janeiro de 2020 e fevereiro de 2021.
Entre 2020 e 2022 já foram fotografados mais de 160 indivíduos de 80 espécies registradas.
[Ver avesdapv.info, em particular, o índice ]

A lista em titulo-html_lineus_url.txt tem três colunas separadas por um caracter <TAB>.

Aqui estão as primeiras seis linhas do arquivo-texto puro:
Andorinha-pequena-de-casa 2Pygochelidon cyanoleuca"http://www.avesdapv.info/imagens/pt_andorinha_pequena_de_casa2.html"
Andorinha-pequena-de-casaPygochelidon cyanoleuca"http://www.avesdapv.info/imagens/pt_andorinha_pequena_de_casa.html"
Andorinha-serradora 2Stelgidopteryx ruficollis"http://www.avesdapv.info/imagens/pt_andorinha_serradora_2.html"
Andorinha-serradoraStelgidopteryx ruficollis"http://www.avesdapv.info/imagens/pt_andorinha_serradora.html"
Andorinh&atilde;o-do-temporalChaetura meridionalis"http://www.avesdapv.info/imagens/pt_andorinhao-do-temporal.html"
Beija-flor-de-fronte-violeta machoThalurania glaucopis"http://www.avesdapv.info/imagens/pt_beija_flor_de_fronte_violeta_macho.html"


A primeira coluna está ordenada alfabeticamente, sem duplicatas, pelos TITULOs de fotos diferentes de cada passaro registrado, com letras acentuadas como códigos html.
[Note que a grafia do quinto título no arquivo-texto puro: 'Andorinh&atilde;o-do-temporal', é interpretada como html pelo navegador: 'Andorinhão-do-temporal']

A segunda coluna tem o nome científico da ESPECIE do pássaro fotografado, com algumas repetições, já que títulos diferentes podem corresponder a uma mesma espécie.

A terceira coluna contém o ENDERECO de cada página html que descreve o pássaro, uma URL (endereço) diferente para cada título, pois não há duplicatas, assim como na primeira coluna.

A posição na lista identifica implicitamente certo registro - no caso, um registro de pássaro - e, desse modo, o número da linha ocupada pelo objeto também pode ser considerado um 'atributo' do registro naquele conjunto ordenado.

Assim como cada TITULO identifica uma linha na lista, isto é, cada um dos 111 registros diferentes de pássaro na lista, a POSICAO da linha na lista também serve para identificar o registro.

'Andorinhão-do-temporal' e 'quinta linha' identificam o mesmo registro.

Mais geralmente, bases de dados são conjuntos de 'registros' ordenados ('linhas') que representam 'objetos' similares através de seus 'atributos', atributos que pertencem s certas 'categorias' ('colunas').

Para localizar (e, eventualmente, selecionar, modificar, inserir ou eliminar) uma linha específica é necessário comparar certo atributo buscado com o correspondente da linha.

Qualquer atributo que for necessariamente diferente para cada registro pode servir de 'chave primária' - identificadora de apenas um registro - para localizá-lo na base de dados.

Na lista de pássaros, tanto o TITULO, como o ENDERECO ou o número da linha (a POSICAO do registro) podem servir de chave primária para identificar cada registro para aquele estado da lista no tempo.

Certamente 'para alquele estado da lista', pois, se forem trocados os valores daqueles atributos entre registros diferentes, também será trocada a sua localização e, portanto, sua identificação.

A POSICAO do registro depende da ordenação específica do conjunto de linhas, enquanto que todos os outros atributos são independentes da posição do registro no conjunto.

Pode-se buscar um registro, portanto, 'por posição' ou 'por conteúdo', conforme o caso. Em geral, a ordenação dos registros em uma lista pode-se fazer pela ordenação de certo atributo (coluna) que os identifique univocamente, de modo a facilitar a busca por aquela chave.

Como cada registro tem um valor do atributo 'TITULO' diferente, podemos ordenar os registros pelo atributo 'TITULO', facilitando assim a localização de um TITULO específico no conjunto (coluna) de TITULOs.

Dependendo do critério de ordenação, da eliminação ou inserção de registros, ou da alteração de atributos de outro registro, a POSICAO de um registro na lista pode variar sem a alteração de outros atributos daquele registro.

Em outras palavras, normalmente um registro não tem um lugar 'próprio' no conjunto dos outros registros, ou um 'nome próprio e adequado', derivado apenas do seu 'conteúdo', no sentido que estivemos discutindo anteriormente.

No exemplo acima, a posição de cada registro será provavelmente diferente se ordenarmos os registros por TITULO ou se a ordenação for feita por ENDERECO (URL).

Sabemos que é muito mais fácil localizar o(s) número(s) de linha de certo nome em uma lista de registros ordenada alfabeticamente, ou o(s) número(s) de linha de certo número em outra lista de registros ordenada numericamente, do que localizar números em listas alfabéticas de nomes, ou nomes em listas númericas; ou qualquer atributo em listas 'desordenadas'.

Diferentemente das listas 'desordenadas', nas listas ordenadas sabemos imediatamente se o que buscamos vem antes ou depois de certa linha arbitrária da lista. Nossa busca 'converge', por assim dizer, para a localização procurada.

De qualquer modo, para inserir um registro em uma lista ordenada qualquer, sempre será necessário localizar o antecessor e o sucessor do novo registro na nova lista, pois os registros não tem "nomes próprios', 'autônomos', por assim dizer, mas sim 'nomes dependentes' (localizações específicas dependentes) dos outros 'nomes' existentes no momento da inserção.

Para facilitar a localização ou inclusão de um registro, são mantidos índices ordenados por chaves de busca correspondentes a cada atributo.

No caso do nosso exemplo, por TITULO, por ESPECIE e por ENDERECO (URL).

Embora um valor do atributo ESPECIE nao sirva como 'chave primária', pois pode corresponder a varios registros (linhas), serve como 'chave de busca' mais geral, permitindo, por exemplo, localizar os registros de pássaros que pertencem a uma mesma ESPECIE.

Aqui temos as seis primeiras linhas do arquivo titulo-html_especie_url.txt ordenadas

por TITULO
Andorinha-pequena-de-casa 2Pygochelidon cyanoleuca"http://www.avesdapv.info/imagens/pt_andorinha_pequena_de_casa2.html"
Andorinha-pequena-de-casaPygochelidon cyanoleuca"http://www.avesdapv.info/imagens/pt_andorinha_pequena_de_casa.html"
Andorinha-serradora 2Stelgidopteryx ruficollis"http://www.avesdapv.info/imagens/pt_andorinha_serradora_2.html"
Andorinha-serradoraStelgidopteryx ruficollis"http://www.avesdapv.info/imagens/pt_andorinha_serradora.html"
Andorinh&atilde;o-do-temporalChaetura meridionalis"http://www.avesdapv.info/imagens/pt_andorinhao-do-temporal.html"
Beija-flor-de-fronte-violeta machoThalurania glaucopis"http://www.avesdapv.info/imagens/pt_beija_flor_de_fronte_violeta_macho.html"


por ESPECIE:
Andorinh&atilde;o-do-temporalChaetura meridionalis"http://www.avesdapv.info/imagens/pt_andorinhao-do-temporal.html"
Andorinha-pequena-de-casa 2Pygochelidon cyanoleuca"http://www.avesdapv.info/imagens/pt_andorinha_pequena_de_casa2.html"
Andorinha-pequena-de-casaPygochelidon cyanoleuca"http://www.avesdapv.info/imagens/pt_andorinha_pequena_de_casa.html"
Andorinha-serradora 2Stelgidopteryx ruficollis"http://www.avesdapv.info/imagens/pt_andorinha_serradora_2.html"
Andorinha-serradoraStelgidopteryx ruficollis"http://www.avesdapv.info/imagens/pt_andorinha_serradora.html"
Beija-flor-de-fronte-violeta machoThalurania glaucopis"http://www.avesdapv.info/imagens/pt_beija_flor_de_fronte_violeta_macho.html"


por ENDERECO:
Andorinha-pequena-de-casaPygochelidon cyanoleuca"http://www.avesdapv.info/imagens/pt_andorinha_pequena_de_casa.html"
Andorinha-pequena-de-casa 2Pygochelidon cyanoleuca"http://www.avesdapv.info/imagens/pt_andorinha_pequena_de_casa2.html"
Andorinha-serradoraStelgidopteryx ruficollis"http://www.avesdapv.info/imagens/pt_andorinha_serradora.html"
Andorinha-serradora 2Stelgidopteryx ruficollis"http://www.avesdapv.info/imagens/pt_andorinha_serradora_2.html"
Andorinh&atilde;o-do-temporalChaetura meridionalis"http://www.avesdapv.info/imagens/pt_andorinhao-do-temporal.html"
Beija-flor-de-fronte-violeta machoThalurania glaucopis"http://www.avesdapv.info/imagens/pt_beija_flor_de_fronte_violeta_macho.html"



Assim, dada uma lista de registros, para localizar o(s) que satisfaz(em) certa condição, isto é, com certo atributo, basta localizar no índice ordenado pelo atributo o(s) endereço(s) ('nomes') do(s) registro(s) que lhe corresponde(m).

Mas temos acima três cópias completas da tabela, apenas pela necessidade de ordenação prévia por atributos diferentes.

Para evitar criar cópias desnecessárias de todos os atributos em cada tabela, basta que os 'índices' façam a correspondência entre o atributo ordenado e a chave-primária do registro completo.

Por exemplo, se assumimos apenas o TITULO como chave primária da tabela (ordenada por TITULO), tanto o índice ordenado por ESPECIE pode omitir a coluna ENDERECO, como o índice ordenado por ENDERECO pode omitir a coluna ESPECIE.

Uma vez localizados os registros completos (pelos TITULOs) correspondentes a certa ESPECIE ou a certo ENDERECO, a linha da tabela completa (ordenada por TITULO) fornecerá todos os atributos faltantes.

Assim, teríamos, ordenado

por TITULO (tabela completa, com todos os atributos):
Andorinha-pequena-de-casa 2Pygochelidon cyanoleuca"http://www.avesdapv.info/imagens/pt_andorinha_pequena_de_casa2.html"
Andorinha-pequena-de-casaPygochelidon cyanoleuca"http://www.avesdapv.info/imagens/pt_andorinha_pequena_de_casa.html"
Andorinha-serradora 2Stelgidopteryx ruficollis"http://www.avesdapv.info/imagens/pt_andorinha_serradora_2.html"
Andorinha-serradoraStelgidopteryx ruficollis"http://www.avesdapv.info/imagens/pt_andorinha_serradora.html"
Andorinh&atilde;o-do-temporalChaetura meridionalis"http://www.avesdapv.info/imagens/pt_andorinhao-do-temporal.html"
Beija-flor-de-fronte-violeta machoThalurania glaucopis"http://www.avesdapv.info/imagens/pt_beija_flor_de_fronte_violeta_macho.html"


por ESPECIE (índice com as colunas ESPECIE e TITULO)
Chaetura meridionalisAndorinh&atilde;o-do-temporal
Pygochelidon cyanoleucaAndorinha-pequena-de-casa 2
Pygochelidon cyanoleucaAndorinha-pequena-de-casa
Stelgidopteryx ruficollisAndorinha-serradora 2
Stelgidopteryx ruficollisAndorinha-serradora
Thalurania glaucopisBeija-flor-de-fronte-violeta macho


por ENDERECO (índice com as colunas ENDERECO e TITULO)
"http://www.avesdapv.info/imagens/pt_andorinha_pequena_de_casa2.html"Andorinha-pequena-de-casa 2
"http://www.avesdapv.info/imagens/pt_andorinha_pequena_de_casa.html"Andorinha-pequena-de-casa
"http://www.avesdapv.info/imagens/pt_andorinha_serradora_2.html"Andorinha-serradora 2
"http://www.avesdapv.info/imagens/pt_andorinha_serradora.html"Andorinha-serradora
"http://www.avesdapv.info/imagens/pt_andorinhao-do-temporal.html"Andorinhão-do-temporal
"http://www.avesdapv.info/imagens/pt_beija_flor_de_fronte_violeta_macho.html"Beija-flor-de-fronte-violeta macho


Assim se organiza um banco de dados 'relacional', por tabelas de registros e índices.

Temos aqui o que se chama uma 'tabela indexada' (na memória principal, RAM) ou um 'arquivo indexado' (na memória de massa, discos rígidos, etc.), tabela ou arquivo que possui índices ordenados por cada campo (atributo) que possa servir de chave de busca.

Buscamos um atributo qualquer pelo índice 'chave-de-busca --> chave_primária' (ordenado por chave-de-busca daquele atributo) e, em seguida, buscamos na tabela ordenada pela chave-primária o(s) registro(s) completo(s) correspondente(s).

No exemplo, para encontrar os registros que correspondem à ESPECIE 'Pygochelidon cyanoleuca', buscamos no índice ordenado por ESPECIE o padrão 'Pygochelidon cyanoleuca' e recuperamos a chave-primária de cada registro correspondente, isto é, recuperamos no índice os TITULOs 'Andorinha-pequena-de-casa 2' e 'Andorinha-pequena-de-casa'.

Agora podemos buscar na tabela completa de registros ordenada por TITULOs (chave-primária da tabela) as entradas 'Andorinha-pequena-de-casa 2' e 'Andorinha-pequena-de-casa' e, assim, localizar os registros correspondentes.

Para otimizar o espaço assim como o acesso aos dados, pode-se atribuir a cada linha da tabela completa um índice, uma chave-primária em princípio independente de qualquer atributo do registro, um 'apontador' para o registro.

Um primeiro candidato natural a 'apontador' (ou chave-primária independente de conteúdo) seria a própia POSICAO da linha na tabela.

As seis primeiras linhas da tabela de pássaros, com o atributo POSICAO acrescentado explicitamente, seriam
001Andorinha-pequena-de-casa 2Pygochelidon cyanoleuca"http://www.avesdapv.info/imagens/pt_andorinha_pequena_de_casa2.html"
002Andorinha-pequena-de-casaPygochelidon cyanoleuca"http://www.avesdapv.info/imagens/pt_andorinha_pequena_de_casa.html"
003Andorinha-serradora 2Stelgidopteryx ruficollis"http://www.avesdapv.info/imagens/pt_andorinha_serradora_2.html"
004Andorinha-serradoraStelgidopteryx ruficollis"http://www.avesdapv.info/imagens/pt_andorinha_serradora.html"
005Andorinh&atilde;o-do-temporalChaetura meridionalis"http://www.avesdapv.info/imagens/pt_andorinhao-do-temporal.html"
006Beija-flor-de-fronte-violeta machoThalurania glaucopis"http://www.avesdapv.info/imagens/pt_beija_flor_de_fronte_violeta_macho.html"


[A razão para os zeros iniciais vem do número total de registros (linhas), que sabemos ser 111]

Os índices agora ficariam assim,

por ESPECIE
Chaetura meridionalis005
Pygochelidon cyanoleuca001
Pygochelidon cyanoleuca002
Stelgidopteryx ruficollis003
Stelgidopteryx ruficollis004
Thalurania glaucopis006


por ENDERECO
"http://www.avesdapv.info/imagens/pt_andorinhao-do-temporal.html"005
"http://www.avesdapv.info/imagens/pt_andorinha_pequena_de_casa2.html"001
"http://www.avesdapv.info/imagens/pt_andorinha_pequena_de_casa.html"002
"http://www.avesdapv.info/imagens/pt_andorinha_serradora_2.html"003
"http://www.avesdapv.info/imagens/pt_andorinha_serradora.html"004
"http://www.avesdapv.info/imagens/pt_beija_flor_de_fronte_violeta_macho.html"006


por TITULO
Andorinha-pequena-de-casa002
Andorinha-pequena-de-casa 2001
Andorinha-serradora004
Andorinha-serradora 2003
Andorinh&atilde;o-do-temporal005
Beija-flor-de-fronte-violeta macho006


Uma vez numerados os registros, cada linha de cada índice ordenado por atributo particular aponta para o número correspondente do registro.

A cada alteração na 'base de dados' não há necessidade de (re)ordenar a tabela original, mas sim os índices envolvidos.

Agora temos um 'nome' (a chave-primária) arbitrário para cada registro, referência, em princípio, completamente independente do conteúdo do objeto nomeado.

Permanece, contudo, em cada processo de localizar, incluir ou excluir registros, a necessidade de se buscar nas listas ordenadas a posição 'correta' das linhas.

E a posição 'correta' no índice, como vimos, não faz parte do registro, mas sim deve ser derivada cada vez das condiçães variáveis do conjunto completo dos objetos ordenados no índice.

Incluir, modificar ou excluir registros implica alterar todos os índices dos atributos envolvidos. Quanto maior a quantidade de registros e atributos, mais difícil será a manutenção da consistência da base de dados e de seus índices.

Os que usam planilhas de cálculo conhecem bem as limitações, dificuldades de atualização e morosidade para localizar, alterar, incluir e excluir registros em tabelas com grande quantidade de linhas e colunas.

A título de ilustração, verificar (abrindo em uma planilha, por exemplo) a tabela de textos (e seus atributos), depositados nas reprografias da Escola de Comunicação da UFRJ, que foram objeto de inventário feito pelos alunos da disciplina Sistemas de Informação entre os anos 2011 e 2012.
[ Ver https://pater.web.cip.com.br/reprografia/consolidado09_05_12.txt ]

O HASH como uma forma 'autonômica' de nomeação universal dos conteúdos intelectuais digitalizados, derivada inteiramente de um cálculo padronizado sobre o conteúdo do objeto nomeado, como vimos sugerido por Julian Assange no caso das URLs ( http://bit.ly/2CV3vW7 e http://bit.ly/32pq3Xw ), trata várias dessas dificuldades 'heteronômicas', por assim dizer, derivadas das dependências mútuas entre registros.

Assim, a solução para as dificuldades de atualização de índices e tabelas e as inconsistências derivadas da 'nomeação' dos objetos de forma completamente independente do seu conteúdo vem da reintrodução, por um lado, da dependência do conteúdo na identificação dos registros, e, por outro lado, da independência em relação aos outros registros.

Para dar um exemplo, podemos ordenar um conjunto pequeno de números de CPF sem necessidade de compará-los entre si, apenas calculando seus dígitos verificadores.

Assim como, no exercício-desafio da Primeira Leitura, pudemos identificar quadros duplicados, não indexados, sem compará-los integralmente, comparando apenas seus hashs calculados.

Há registro do uso de HASHs como indexadores desde pelo menos 1953 (Ver Alan G. Konheim, citado acima).

Por outro lado, as tabelas indexadas para localizar informações existem há muito tempo; o cálculo medieval do horário noturno era feito normalmente através de tabelas astronômicas indexadas (Ver Arno Borst, The Ordering of Time, 1993).

Mais modernamente, as aplicações criptográficas do HASH e técnicas derivadas, do blockchain às moedas digitais, continuam a apontar para importantes, incontáveis e inadvertidas possibilidades de uso.


CONTEÚDO DO ARQUIVO titulo-html_lineus_url.txt - 111 linhas, 3 colunas - TITULO, ESPECIE, ENDERECO (URL)


Andorinha-pequena-de-casa 2Pygochelidon cyanoleuca"http://www.avesdapv.info/imagens/pt_andorinha_pequena_de_casa2.html"
Andorinha-pequena-de-casaPygochelidon cyanoleuca"http://www.avesdapv.info/imagens/pt_andorinha_pequena_de_casa.html"
Andorinha-serradora 2Stelgidopteryx ruficollis"http://www.avesdapv.info/imagens/pt_andorinha_serradora_2.html"
Andorinha-serradoraStelgidopteryx ruficollis"http://www.avesdapv.info/imagens/pt_andorinha_serradora.html"
Andorinhão-do-temporalChaetura meridionalis"http://www.avesdapv.info/imagens/pt_andorinhao-do-temporal.html"
Beija-flor-de-fronte-violeta machoThalurania glaucopis"http://www.avesdapv.info/imagens/pt_beija_flor_de_fronte_violeta_macho.html"
Beija-flor-de-garganta-verdeAmazilia fimbriata"http://www.avesdapv.info/imagens/pt_beija_flor_de_garganta_verde.html"
Beija-flor-tesoura 2Eupetomena macroura"http://www.avesdapv.info/imagens/pt_beija_flor_tesoura2.html"
Beija-flor-tesouraEupetomena macroura"http://www.avesdapv.info/imagens/pt_beija_flor_tesoura.html"
Bem-te-vi 2Pitangus sulphuratus"http://www.avesdapv.info/imagens/pt_bem_te_vi2.html"
Bem-te-viPitangus sulphuratus"http://www.avesdapv.info/imagens/pt_bem_te_vi.html"
Bentevizinho-de-penacho-vermelhoMyiozetetes similis"http://www.avesdapv.info/imagens/pt_bentevizinho_de_penacho_vermelho.html"
Bico-de-lacreEstrilda astrild"http://www.avesdapv.info/imagens/pt_bico_de_lacre.html"
BiguásNannopterum brasilianus"http://www.avesdapv.info/imagens/pt_biguas.html"
CambacicaCoereba flaveola"http://www.avesdapv.info/imagens/pt_cambacica.html"
Canário-da-terra fêmeaSicalis flaveola"http://www.avesdapv.info/imagens/pt_femea_de_canario_da_terra.html"
Canário-da-terra machoSicalis flaveola"http://www.avesdapv.info/imagens/pt_canario_da_terra_macho.html"
CarcaráCaracara plancus"http://www.avesdapv.info/imagens/pt_carcara.html"
CarrapateiroMilvago chimachima"http://www.avesdapv.info/imagens/pt_carrapateiro.html"
Caturrita 2Myiopsitta monachus"http://www.avesdapv.info/imagens/pt_caturrita_b.html"
CaturritaMyiopsitta monachus"http://www.avesdapv.info/imagens/pt_caturrita.html"
Choca-listrada fêmeaThamnophilus palliatus"http://www.avesdapv.info/imagens/pt_choca-listrada_femea.html"
Choca-listrada machoThamnophilus palliatus"http://www.avesdapv.info/imagens/pt_choca-listrada_macho.html"
Chupim filhoteMolothrus bonariensis"http://www.avesdapv.info/imagens/pt_chupim_filhote.html"
Coleirinho macho 1Sporophila caerulescens"http://www.avesdapv.info/imagens/pt_coleirinho_macho1.html"
Coleirinho macho 2Sporophila caerulescens"http://www.avesdapv.info/imagens/pt_coleirinho_macho2.html"
Coleirinho-machoSporophila caerulescens"http://www.avesdapv.info/imagens/pt_coleirinho_macho.html"
Corruíra 2Troglodytes musculus"http://www.avesdapv.info/imagens/pt_corruira2.html"
CorruíraTroglodytes musculus"http://www.avesdapv.info/imagens/pt_corruira.html"
Curicas 2Amazona amazonica"http://www.avesdapv.info/imagens/pt_curicas2.html"
CuricasAmazona amazonica"http://www.avesdapv.info/imagens/pt_curicas.html"
CuricaAmazona amazonica"http://www.avesdapv.info/imagens/pt_curica.html"
Falcão-de-coleiraFalco femoralis"http://www.avesdapv.info/imagens/pt_falcao_de_coleira.html"
Ferreirinho-relógio com galhinhoTodirostrum cinereum"http://www.avesdapv.info/imagens/pt_ferreirinho-relogio_com_galhinho_para_o_ninho.html"
GaivotãoLarus dominicanus"http://www.avesdapv.info/imagens/pt_gaivotao.html"
Garça-moura 1Ardea cocoi"http://www.avesdapv.info/imagens/pt_garca_moura7_uma_perna.html"
Garça-moura 2 casal da 3Ardea cocoi"http://www.avesdapv.info/imagens/pt_garca_moura5_casal_da_4.html"
Garça-moura 3Ardea cocoi"http://www.avesdapv.info/imagens/pt_garca_moura4.html"
Garça-moura 4Ardea cocoi"http://www.avesdapv.info/imagens/pt_garca_moura3.html"
Garça-moura 5Ardea cocoi"http://www.avesdapv.info/imagens/pt_garca_moura2.html"
Gaturamo-macho 1Euphonia violacea"http://www.avesdapv.info/imagens/pt_gaturamo_macho_1.html"
Gaturamo-verdadeiro fêmeaEuphonia violacea"http://www.avesdapv.info/imagens/pt_gaturamo_verdadeiro_femea.html"
Gavião-asa-de-telhaParabuteo unicinctus"http://www.avesdapv.info/imagens/pt_gaviao-asa-de-telha.html"
Gavião-asa-de-telha voandoParabuteo unicinctus"http://www.avesdapv.info/imagens/pt_gaviao-asa-de-telha_voando.html"
Gavião-carijó com ratazanaRupornis magnirostris"http://www.avesdapv.info/imagens/pt_gaviao_carijo_com_ratazana.html"
Gibão-de-couroHirundinea ferruginea"http://www.avesdapv.info/imagens/pt_gibao-de-couro.html"
Guaracava-de-barriga-amarela 2Elaenia flavogaster"http://www.avesdapv.info/imagens/pt_guaracava_de_barriga_amarela_b.html"
Guaracava-de-barriga-amarelaElaenia flavogaster"http://www.avesdapv.info/imagens/pt_guaracava_de_barriga_amarela.html"
JacupembaPenelope superciliaris"http://www.avesdapv.info/imagens/pt_jacupemba.html"
Jandaia-de-testa-vermelhaAratinga auricapillus"http://www.avesdapv.info/imagens/pt_jandaia.html"
João-de-barro com ninhoFurnarius rufus"http://www.avesdapv.info/imagens/pt_joao_de_barro_com_ninho.html"
João-de-barroFurnarius rufus"http://www.avesdapv.info/imagens/pt_joao_de_barro.html"
Lavadeira-mascarada 2Fluvicola nengeta"http://www.avesdapv.info/imagens/pt_lavadeira_mascarada2.html"
Lavadeira-mascarada com ninhoFluvicola nengeta"http://www.avesdapv.info/imagens/pt_lavadeira_mascarada_com_ninho.html"
Maracanã-pequena 2Diopsittaca nobilis"http://www.avesdapv.info/imagens/pt_maracana_pequena_2.html"
Maracanã-pequenaDiopsittaca nobilis"http://www.avesdapv.info/imagens/pt_maracana_pequena.html"
Maracanã-verdadeira 1Primolius maracana"http://www.avesdapv.info/imagens/pt_maracana_verdadeira_1.html"
Maracanã-verdadeira 2Primolius maracana"http://www.avesdapv.info/imagens/pt_maracana_verdadeira_2.html"
Martim-pescador grande (macho)Megaceryle torquata"http://www.avesdapv.info/imagens/pt_martim_pescador_grande_macho.html"
NeineiMegarynchus pitangua"http://www.avesdapv.info/imagens/pt_neinei.html"
Ninho de Asa-brancaPatagioenas picazuro"http://www.avesdapv.info/imagens/pt_ninho_de_asa_branca.html"
Ninho de Bem-te-viPitangus sulphuratus"http://www.avesdapv.info/imagens/pt_ninho_de_bem_te_vi.html"
Ninho de Ferreirinho-relógioTodirostrum cinereum"http://www.avesdapv.info/imagens/pt_ninho_de_ferreirinho-relogio.html"
Ninho de PardalPasser domesticus"http://www.avesdapv.info/imagens/pt_ninho_de_pardal.html"
Ninho de RisadinhaCamptostoma obsoletum"http://www.avesdapv.info/imagens/pt_ninho_de_risadinha.html"
Ninho de Sabiá-laranjeiraTurdus rufiventris"http://www.avesdapv.info/imagens/pt_ninho_de_sabia_laranjeira.html"
Ninho de Sanhaço-cinzentoTangara sayaca"http://www.avesdapv.info/imagens/pt_ninho_de_sanhaco_cinzento_2.html"
Papagaio-verdadeiroAmazona aestiva"http://www.avesdapv.info/imagens/pt_papagaio-verdadeiro.html"
PardalPasser domesticus"http://www.avesdapv.info/imagens/pt_pardal.html"
Pardal fêmeaPasser domesticus"http://www.avesdapv.info/imagens/pt_pardal_femea.html"
Periquitao-maracanãPsittacara leucophthalmus"http://www.avesdapv.info/imagens/pt_periquitao-maracana.html"
Periquito-ricoBrotogeris tirica"http://www.avesdapv.info/imagens/pt_periquito_rico.html"
Pica-pau-anão-barradoPicumnus cirratus"http://www.avesdapv.info/imagens/pt_pica_pau_anao_barrado.html"
Picapauzinho-barrado fêmeaPicumnus cirratus"http://www.avesdapv.info/imagens/pt_picapauzinho-barrado_femea.html"
Picapauzinho-barrado macho 1Picumnus cirratus"http://www.avesdapv.info/imagens/pt_picapauzinho-barrado_macho_1.html"
Pomba Asa-branca 2Patagioenas picazuro"http://www.avesdapv.info/imagens/pt_pomba_asa_branca2.html"
Pomba Asa-branca 3Patagioenas picazuro"http://www.avesdapv.info/imagens/pt_pomba_asa_branca3.html"
Pomba Asa-brancaPatagioenas picazuro"http://www.avesdapv.info/imagens/pt_pomba_asa_branca.html"
Pombo-domesticoColumba livia"http://www.avesdapv.info/imagens/pt_pombo_domestico.html"
Príncipe 2Pyrocephalus rubinus"http://www.avesdapv.info/imagens/pt_principe_2.html"
PríncipePyrocephalus rubinus"http://www.avesdapv.info/imagens/pt_principe.html"
Quero-queroVanellus chilensis"http://www.avesdapv.info/imagens/pt_quero-quero.html"
Quiriquiri fêmeaFalco sparverius"http://www.avesdapv.info/imagens/pt_quiriquiri_femea.html"
RisadinhaCamptostoma obsoletum"http://www.avesdapv.info/imagens/pt_risadinha.html"
Rolinha-roxaColumbina talpacoti"http://www.avesdapv.info/imagens/pt_rolinha_roxa.html"
Sabiá-branco 2Turdus leucomelas"http://www.avesdapv.info/imagens/pt_sabia_branco_2.html"
Sabiá-brancoTurdus leucomelas"http://www.avesdapv.info/imagens/pt_sabia_branco.html"
Sabiá-do-campo com galhinhoMimus saturninus"http://www.avesdapv.info/imagens/pt_sabia-do-campo_com_galhinho.html"
Sabiá-do-campo casalMimus saturninus"http://www.avesdapv.info/imagens/pt_sabia-do-campo_casal.html"
Sabiá-laranjeiraTurdus rufiventris"http://www.avesdapv.info/imagens/pt_sabia_laranjeira.html"
Sabiá-poca 2Turdus amaurochalinus"http://www.avesdapv.info/imagens/pt_sabia_poca_2.html"
Sabiá-pocaTurdus amaurochalinus"http://www.avesdapv.info/imagens/pt_sabia_poca.html"
Saí-andorinha fêmeaTersina viridis"http://www.avesdapv.info/imagens/pt_sai_andorinha_femea.html"
Saí-azul fêmeaDacnis cayana"http://www.avesdapv.info/imagens/pt_sai-azul_femea.html"
Saí-azul machoDacnis cayana"http://www.avesdapv.info/imagens/pt_sai-azul_macho.html"
Saí-canário machoThlypopsis sordida"http://www.avesdapv.info/imagens/pt_macho_de_sai_canario.html"
Saíra-amarela casalTangara cayana"http://www.avesdapv.info/imagens/pt_saira_amarela_casal.html"
Saíra-amarelaTangara cayana"http://www.avesdapv.info/imagens/pt_saira_amarela.html"
Sanhaço-cinzento 2Tangara sayaca"http://www.avesdapv.info/imagens/pt_sanhaco_cinzento_2.html"
Sanhaço-cinzentoTangara sayaca"http://www.avesdapv.info/imagens/pt_sanhaco_cinzento.html"
Sanhaço-do-coqueiro 2Tangara palmarum"http://www.avesdapv.info/imagens/pt_sanhaco_do_coqueiro2.html"
Sanhaço do coqueiroTangara palmarum"http://www.avesdapv.info/imagens/pt_sanhaco_do_coqueiro.html"
Suiriri 2Tyrannus melancholicus"http://www.avesdapv.info/imagens/pt_suiriri2.html"
Suiriri-cavaleiroMachetornis rixosa"http://www.avesdapv.info/imagens/pt_suiriri_cavaleiro.html"
SuiririTyrannus melancholicus"http://www.avesdapv.info/imagens/pt_suiriri.html"
Teque-tequeTodirostrum poliocephalum"http://www.avesdapv.info/imagens/pt_teque-teque.html"
Tesourão machoFregata magnificens"http://www.avesdapv.info/imagens/pt_tesourao_macho.html"
TesourãoFregata magnificens"http://www.avesdapv.info/imagens/pt_tesourao.html"
Tucano-de-bico-preto casalRamphastos vitellinus"http://www.avesdapv.info/imagens/pt_tucano-de-bico-preto_casal.html"
Tucano-de-bico-pretoRamphastos vitellinus"http://www.avesdapv.info/imagens/pt_tucano-de-bico-preto_1.html"
Urubu-de-cabeca-pretaCoragyps atratus"http://www.avesdapv.info/imagens/pt_urubu_de_cabeca_preta.html"