Você está na página 1de 39

101 – Algoritmo | Unidade 04

UNIDADE 4 – VETOR, MATRIZ, ORDENAÇÃO, PESQUISA, LISTA E ÁRVORE


BINÁRIA
MÓDULO 1 – VETOR
01

1 - ESTRUTURAS DE DADOS HOMOGÊNEOS


Estudamos, ao longo da nossa disciplina, que uma variável é um espaço na memória, que é reservado
para armazenar determinados tipos de dados. Entretanto, até o momento, nós trabalhamos apenas com
dados básicos (reais, inteiros, caracteres, literais e lógicos) e variáveis simples para armazenar esses
dados. Só que os tipos de dados básicos nem sempre são suficientes para representar as estruturas de
dados necessárias para resolver todos os problemas que se apresentam.

Imagine, por exemplo, que você receba o nome e a nota de 100 alunos de uma escola, e depois precise
listar o nome de cada um, a média final de cada aluno e ainda a média da turma.

Agora imagine você declarando uma a uma, todas as 100 variáveis para o nome, depois as 100 variáveis
para as notas. O seu algoritmo ficaria semelhante a este:

inicio
caractere aluno1, aluno2, aluno3, aluno4, aluno5, aluno6, aluno7, aluno8, aluno9, aluno10,
aluno11, aluno12, aluno13, aluno14, aluno15, aluno16, aluno17, aluno18, aluno19, aluno20,
aluno21, aluno22, aluno23, aluno24, aluno25, aluno26, aluno27, aluno28, aluno29, aluno30,
aluno31, aluno32, aluno33, aluno34, aluno35, aluno36, aluno37, aluno38, aluno39, aluno40,
aluno41, aluno42, aluno43, aluno44, aluno45, aluno46, aluno47, aluno48, aluno49, aluno50,
aluno51, aluno52, aluno53, aluno54, aluno55, aluno56, aluno57, aluno58, aluno59, aluno60,
aluno61, aluno62, aluno63, aluno64, aluno65, aluno66, aluno67, aluno68, aluno69, aluno70,
aluno71, aluno72, aluno73, aluno74, aluno75, aluno76, aluno77, aluno78, aluno79, aluno80,
aluno81, aluno82, aluno83, aluno84, aluno85, aluno86, aluno87, aluno88, aluno89, aluno90,
aluno91, aluno92, aluno93, aluno94, aluno95, aluno96, aluno97, aluno98, aluno99, aluno100;
real nota1, nota2, nota3, nota4, nota5, nota6, nota7, nota8, nota9, nota10,
nota11, nota12, nota13, nota14, nota15, nota16, nota17, nota18, nota19, nota10,
nota21, nota22, nota23, nota24, nota25, nota26, nota27, nota28, nota29, nota10,
nota31, nota32, nota33, nota34, nota35, nota36, nota37, nota38, nota39, nota10,
nota41, nota42, nota43, nota44, nota45, nota46, nota47, nota48, nota49, nota10,
nota51, nota52, nota53, nota54, nota55, nota56, nota57, nota58, nota59, nota10,
nota61, nota62, nota63, nota64, nota65, nota66, nota67, nota68, nota69, nota10,
nota71, nota72, nota73, nota74, nota75, nota76, nota77, nota78, nota79, nota10,
nota81, nota82, nota83, nota84, nota85, nota86, nota87, nota88, nota89, nota10,
nota91, nota92, nota93, nota94, nota95, nota96, nota97, nota98, nota99, nota100;

Além do trabalho de declarar todas as variáveis, você deveria gerenciar as variáveis no algoritmo.
Provavelmente seu algoritmo iria ficar muito grande, o que poderia deixar lenta a aplicação.

Seria bem trabalhoso, não? É para casos como esse que usamos as estruturas de dados homogêneos.

© 2014 - AIEC - Associação Internacional de Educação Continuada

1
101 – Algoritmo | Unidade 04

02

Estruturas de dados homogêneos são estruturas que permitem armazenar conjuntos de dados de um
mesmo tipo (daí o nome ‘homogêneos’) em uma única variável.

Essas estruturas são também chamadas de variáveis compostas homogêneas ou variáveis compostas
indexadas.

As estruturas de dados homogêneas são classificadas em dois tipos:

• os vetores (ou arrays), estruturas que armazenam os dados em uma única linha e várias colunas
(dizemos que são unidimensionais);

• as matrizes, estruturas que armazenam os dados em forma de tabela, com várias linhas e várias
colunas (são bidimensionais).

No presente módulo nosso objeto de estudo serão os vetores. As matrizes serão estudadas em outra
ocasião.

03

2 - VETOR: CONCEITO E CARACTERÍSTICAS


Vetor é um conjunto de valores do mesmo tipo, armazenados em locais contíguos na memória e
possuem o mesmo nome, ou seja, é uma variável que armazena diversas variáveis do mesmo tipo.

Suponha a seguinte situação: você precisa elaborar um algoritmo que receba dois números reais
fornecidos pelo usuário e forneça como resultado a soma dos mesmos. Rapidamente é possível pensar a
solução:

#incluir <biblioteca>
principal()
inicio
real a, b, soma;
escreva(“Digite os números: ”);
leia(a, b);
soma = a + b;
escreva(“Soma = “, soma);
fim

Vetores homogêneos são matrizes unidimensionais que armazenam dados de um mesmo tipo.

Veremos oportunamente o que é matriz, mas podemos dizer agora, de forma resumida, que uma matriz

© 2014 - AIEC - Associação Internacional de Educação Continuada

2
101 – Algoritmo | Unidade 04

seria vários vetores do mesmo tipo e do mesmo tamanho um em cima do outro, ou um do lado do
outro.

04

Declaração de um vetor

Os vetores precisam ser declarados antes de serem utilizados, assim como fazemos com as variáveis
simples. A declaração de um vetor, entretanto, é um pouco diferente da declaração de uma variável
comum, pois se trata de uma variável indexada. É como se declarássemos diversas variáveis dentro de
uma só, diferenciadas por um índice.

Essas variáveis correspondem aos elementos do vetor (em nosso exemplo, os nomes dos alunos). Já o
índice é um valor numérico do tipo inteiro, que sempre começa em 1 e corresponde à posição de cada
elemento no vetor. Observe a tabela a seguir.

Essa tabela representa um vetor de 5 elementos. Os elementos são os nomes (Carla, Cleide, Dalton,
Diana, Edson). Os números de 1 a 5 representam os índices, que são as posições de cada elemento no
vetor. Por exemplo, o elemento ‘Diana’ ocupa a posição ‘4’ do vetor.

Ao declarar um vetor, o seu ‘tamanho’ deve ser informado. O ‘tamanho’ de um vetor é a quantidade de
dados que será armazenada na variável. Na tabela acima, o tamanho do vetor é 5. No nosso exemplo
(dos nomes dos alunos), o tamanho do vetor é 100, pois queremos armazenar os nomes de 100 alunos.

Veja a sintaxe da declaração de um vetor:

<identificador> : vetor [tamanho] de <tipo>


Tamanho = [Vi..Vf], onde: Vi = valor inicial e Vf = valor final

Nosso exemplo:

nomes : vetor [1..100] de literal

No nosso exemplo, ao invés de declararmos diversas variáveis (aluno1, aluno2... aluno100), estamos
declarando diversos elementos (os nomes) em uma variável.

Variável indexada
É o conjunto de variáveis do mesmo tipo, referenciadas pelo mesmo nome e individualizadas por
índices. Podem ter um ou mais índices e ao número de índices necessários para a localização de um
elemento dentro da variável indexada dá-se o nome de dimensão.

© 2014 - AIEC - Associação Internacional de Educação Continuada

3
101 – Algoritmo | Unidade 04

05

Um vetor matematicamente é representado na forma:

Nesta representação cada dado é determinado por um índice na forma aij, sendo “a” a variável, “i” a
linha e “j” a coluna. No caso dos vetores, o índice j é constante e igual a 1 e, portanto, pode ser
desconsiderado. A tabela a seguir apresenta a representação dos elementos de um vetor.

SINTAXE:

tipo_da_variável nome_da_variável [tamanho];

Para acessar os conteúdos dos dados de um vetor basta escrever o índice em pesquisa.

SINTAXE:

vetor[1], vetor[2] ..., vetor[n]


06

Voltando ao problema apresentado anteriormente, ao usarmos o conceito de vetor, o problema de


somar 1000 números reais se simplifica e a solução é apresentada a seguir.

#incluir <biblioteca>
principal()
inicio
inteiro i;
real vetor[1000], soma;
para(i←1; i<=1000; i←i+1)
inicio
escreva(“Digite o número”, i,”:”);
leia(vetor[i]);
fim

© 2014 - AIEC - Associação Internacional de Educação Continuada

4
101 – Algoritmo | Unidade 04

soma = 0;
para(i←1; i<=1000; i←i+1)
soma = soma + vetor[i];
escreva(“Soma = “, soma);
fim

Às vezes, a quantidade total de dados armazenados é conhecida, portanto, é necessário criar algoritmos
que permitam a entrada de todos estes dados.

07

3 - APLICAÇÃO DE VETORES EM ALGORITMOS

Os vetores possuem seus tamanhos descritos logo no início, na declaração das variáveis, e seu endereço
interno dos valores na memória é declarado como “i”, também logo no início.

inteiro vetor[101];
inteiro i;

Para que possamos ler e escrever os valores de um vetor é necessário realizar a chamada do índice, no
caso o [i]. Assim serão lidos e apresentados na tela os valores contidos em cada vetor.

leia(vetor[i]);
escreva(vetor[i]);

O valor de [i] varia de acordo com o tamanho do vetor, essa leitura ou armazenamento depende da
mudança do valor do endereço. Para que essa mudança ocorra é necessário usar uma estrutura de
repetição. Lembrando que a estrutura de repetição PARA é utilizada quando se sabe o número de vezes
que um trecho do algoritmo deve ser repetido.

para (i ← 1; i <= 100; i ← i + 1)

Com esses elementos elencados acima temos condições de utilizar vetores em nossos algoritmos.

08

© 2014 - AIEC - Associação Internacional de Educação Continuada

5
101 – Algoritmo | Unidade 04

Exemplo 1
Foi realizada uma análise estatística sobre a idade de garotos de ruas em uma
determinada cidade. Elaborar um algoritmo que armazene até 100 destas idades
em um vetor e depois as apresente na ordem em que foram armazenadas.

Solução:

#incluir <biblioteca>
principal()
inicio
inteiro vetor[101];
inteiro i;
inteiro total;
para (i ← 1; i <= 100; i ←i + 1)
inicio
escreva ("Entre com um numero");
leia(vetor[i]);
total = i + 1;
fim
escreva("Os números que você digitou foram:");
para (i ← 1; i < total; i ←i + 1)
escreva(vetor[i]);
fim

09

Exemplo 2
A média aritmética é obtida dividindo-se a soma das observações pelo
número delas. Elaborar um algoritmo, para calcular a média aritmética das
50 notas de uma turma de alunos.

Solução:

#incluir <biblioteca>
principal()
inicio
real notas[50];
real soma;
inteiro i;
para(i ← 1; i <= 50; i ←i + 1)
inicio

© 2014 - AIEC - Associação Internacional de Educação Continuada

6
101 – Algoritmo | Unidade 04

escreva(“Digite a”, i, “nota do aluno: “);


leia(notas[i]);
fim
soma = 0.0;
para(i ← 1; i <= 50; i ←i + 1)
soma = soma + notas[i];
escreva(“Media aritmética das notas: “, soma/50);
fim

10

Exemplo 3
A média geométrica de um conjunto de números positivos é definida como
o produto de todos os membros do conjunto elevado ao inverso do
número de membros. Elaborar um algoritmo, para calcular a média
geométrica das 50 notas de 1 turma de alunos.

Solução:

#incluir <biblioteca>
principal()
inicio
real notas[50];
real prod;
inteiro i;
para(i ← 1; i <= 50; i ←i + 1)
inicio
escreva(“Digite a”, i, “nota do aluno: “);
leia(notas[i]);
fim
prod = 1.0;
para(i ← 1; i <= 50; i ←i + 1)
prod = prod*notas[i];
escreva(“Media geométrica das notas: “, pot(prod,1/50));
fim

11

Exemplo 4
O dinheiro é o meio usado na troca de bens, na compra de bens, serviços, força

© 2014 - AIEC - Associação Internacional de Educação Continuada

7
101 – Algoritmo | Unidade 04

de trabalho, divisas estrangeiras ou nas demais transações financeiras. É emitido e controlado pelo
governo de cada país, que é o único que tem essa atribuição. Elaborar um algoritmo que, dado um
determinado valor inteiro em reais, calcule a menor quantidade de cédulas de R$ 1,00; R$ 2,00; R$ 5,00;
R$ 10,00; R$ 20,00; R$ 50,00 e R$ 100,00 que representa tal valor.

Solução exemplo 4

#incluir <biblioteca>
principal()
inicio
inteiro i, valor, quant;
inteiro tab[7] ;
tab[1] = 100;
tab[2] = 50;
tab[3] = 20;
tab[4] = 10;
tab[5] = 5;
tab[6] = 2;
tab[7] = 1;
escreva(“Digite o valor em reais: “);
leia(valor);
para(i ← 1; i < 7; i ←i + 1)
inicio
quant = valor DIV tab[i];
se (quant> 0)
inicio
escreva(“Valor da nota = ”, tab[i]);
escreva(“Numero de notas = ”, quant);
fim
valor = valor MOD tab[i];
fim
fim

Exemplo 5
A tabuada é uma tabela contendo todos os produtos dos números inteiros de 1 a
9. Elaborar um algoritmo que apresente a tabuada de um dado valor t, utilizando
vetor.

© 2014 - AIEC - Associação Internacional de Educação Continuada

8
101 – Algoritmo | Unidade 04

Solução exemplo 5

#incluir <biblioteca>
principal
inicio
inteiro a[10], i, t;
escreva("Digite qual tabuada deseja pesquisar: ");
leia(t);
para(i ← 1; i<=10; i ←i + 1)
a[i] = i * t;
para(i ← 1; i<=10; i ←i + 1)
escreva(i, “x”, t, “=”, a[i]);
fim

12

Operações com Vetores

Não é possível operar diretamente todos os valores do vetor, como um conjunto todo, mas um
de cada vez. Vejamos a imagem abaixo:

Se quisermos somar um vetor com outro, deve-se somar separadamente cada valor, unitariamente. O
mesmo ocorre se quisermos somar os valores do mesmo vetor. A soma é de um elemento com outro.
Para isso, é necessário utilizar a estrutura de repetição, a qual possibilita percorrer todo o vetor e
realizar a soma.

Os vetores também podem realizar outras operações, tudo depende da necessidade de cada algoritmo.

Exemplo 6
Elaborar um algoritmo que imprima 100 números na ordem oposta em que
foram informados em um vetor.

#incluir <biblioteca>
principal()
inicio
inteiro i;
inteiro a[100];
para(i ← 1; i <= 100; i ←i + 1)

© 2014 - AIEC - Associação Internacional de Educação Continuada

9
101 – Algoritmo | Unidade 04

inicio
escreva(“Elemento “, i);
leia(a[i]);
fim
para(i ← 100; i>=1; i ←i - 1)
escreva(“Elemento : “, a[i]);
fim

13

Exemplo 7
Elaborar um algoritmo que imprima os elementos de posição ímpar de um vetor
de 100 elementos.

#incluir <biblioteca>
principal()
início
inteiro i;
inteiro a[100];
para (i ← 1; i <= 100; i ←i + 1)
início
escreva(“Elemento “, i);
leia(a[i]);
fim
para (i ← 1; i <= 100; i ←i + 1)
início
se (i MOD 2 = 1)
escreva(“Elemento: “, a[i]);
fim
fim

14

Exemplo 8
Elaborar um algoritmo que imprima os elementos pares de um vetor de 100
elementos.

© 2014 - AIEC - Associação Internacional de Educação Continuada

10
101 – Algoritmo | Unidade 04

#incluir <biblioteca>
principal()
início
inteiro i;
inteiro a[100];
para (i ← 1; i <= 100; i ←i + 1)
início
escreva(“Elemento “, i);
leia(a[i]);
fim
para (i ← 1; i <= 100; i ←i + 1)
início
se (a[i] MOD 2 = 0)
escreva(“Elemento: “, a[i]);
fim
fim

15

Exemplo 9
Elaborar um algoritmo que imprima os elementos ímpares de posição par de
um vetor de 100 elementos.

Solução Exemplo 9

#incluir <biblioteca>
principal()
início
inteiro i;
inteiro a[100];
para (i ← 1; i <= 100; i ←i + 1)
início
escreva(“Elemento “, i);
leia(a[i]);
fim
para (i ← 1; i <= 100; i ←i + 1)
início
se (i MOD 2 = 0 & a[i] MOD 2 = 1)
escreva(“Elemento: “, a[i]);
fim
fim

© 2014 - AIEC - Associação Internacional de Educação Continuada

11
101 – Algoritmo | Unidade 04

Exemplo 10
Elaborar um algoritmo que imprima os elementos pares de posição ímpar e os elementos
múltiplos de 3 de posição par de um vetor de 100 elementos.

Solução Exemplo 10

#incluir <biblioteca>
principal()
início
inteiro i, a[100];
para (i ← 1; i <= 100; i ←i + 1)
início
escreva(“Elemento “, i);
leia(a[i]);
fim
para (i ← 1; i <= 100; i ←i + 1)
início
se (i MOD 2 = 1 & a[i] MOD 2 = 0)
escreva(“Elemento:“, a[i], “de posição”, i);
se (i MOD 2 = 0 & a[i] MOD 3 = 0)
escreva(“Elemento:“, a[i], “de posição”, i);
fim
fim

Exemplo 11
Elaborar um algoritmo que carregue um vetor com dez números
inteiros. Calcule o quadrado dos valores e mostre em um vetor
resultante.

Solução Exemplo 11

#incluir <biblioteca>
principal()
inicio
inteiro vet1[10], vet2[10], i;
para (i ← 1; i <= 10; i ←i + 1)
inicio
escreva("Digite um numero ");
leia(vet[i]);
fim

© 2014 - AIEC - Associação Internacional de Educação Continuada

12
101 – Algoritmo | Unidade 04

para (i ← 1; i <= 10; i ←i + 1)


inicio
aux← vet1[i]*vet1[i];
vet2[i] ←aux;
fim
para (i ← 1; i <= 10; i ←i + 1)
escreva(vet2[i]);
fim

16

Para fixar o conceito de vetor e compreender melhor a aplicação de vetores em algoritmos, assista ao
vídeo abaixo.

https://www.youtube.com/watch?v=MWR37yk2uwo

17

RESUMO
Aprendemos até agora, que a execução dos comandos com as estruturas de controle utilizou tipos de
dados básicos, com variáveis simples dos tipos: real, inteiro, literal, caractere e lógico. Neste módulo
aprendemos situações em que os tipos de dados básicos não são suficientes para resolver os problemas,
assim, é necessário utilizar estruturas de dados homogêneas, que são estruturas que permitem
armazenar conjuntos de dados de um mesmo tipo (daí o nome ‘homogêneos’) em uma única variável.
Vimos que as estruturas de dados homogêneas são classificadas em dois tipos: os vetores (ou arrays,
que são estruturas que armazenam os dados em uma única linha e várias colunas) e as matrizes, que
são estruturas que armazenam os dados em forma de tabela, com várias linhas e várias colunas (são
bidimensionais). O vetor é um conjunto de valores do mesmo tipo, armazenados em locais contíguos na
memória e possuem o mesmo nome, ou seja, é uma variável que armazena diversas variáveis do mesmo
tipo.

UNIDADE 4 – VETOR, MATRIZ, ORDENAÇÃO, PESQUISA, LISTA E ÁRVORE


BINÁRIA
MÓDULO 2 – MATRIZ
01

1 - CONCEITO
Aprendemos no módulo passado o conceito de vetores, que são estruturas de dados unidimensionais,
com variáveis indexadas referenciadas por um único índice. Você aprendeu que, armazenando os dados
em um vetor e acessando-o, em seguida, podemos exibir suas informações em uma lista. Vimos também

© 2014 - AIEC - Associação Internacional de Educação Continuada

13
101 – Algoritmo | Unidade 04

que os vetores lidam com apenas uma dimensão, ou seja, se fosse uma tabela, ela só teria uma coluna
com várias linhas ou uma linha com várias colunas, como podemos ver na tabela abaixo.

Neste módulo aprenderemos o conceito e a prática do uso de matrizes.

Exemplificamos no módulo anterior a declaração de um vetor com 1000 alunos. Infelizmente fica quase
inviável trabalhar com um vetor tão grande, por isso é indicado o uso de matriz, no caso para um vetor
de 1000 alunos teríamos uma matriz de 10x100 ou 100x10.

Vet [1000] = Mat [10][100] = Mat [100][10]

Para melhorar o exemplo, imagine um tabuleiro de damas ou de xadrez, podemos representar como um
vetor de 100 posições. Como você diria em qual posição está a peça vermelha mais avançada à direita? E
utilizando uma matriz? Caso você vá fazer as contas da posição da peça, lembre que a leitura deverá ser
da esquerda para direita, do ponto mais alto para o mais baixo.

Sendo assim, para melhor visualização e melhor forma de trabalhar nesse caso, é aconselhável utilizar
matriz, neste exemplo matriz 10x10.

Resposta: Vet[70] ou Mat[7][10]

02

Uma matriz é chamada de unidimensional, quando se trata de um vetor com um índice


apenas, bidimensional, quando possui dois índices e multidimensional, quando possui dois ou mais
índices.

A declaração do vetor ou matriz multidimensional é efetuada com múltiplos colchetes, que informam a
quantidade de elementos que a matriz poderá conter, podendo ser atribuídos valores aos itens em sua
declaração inicial ou, atribuídos valores durante a demanda do processamento da aplicação, de acordo
com as necessidades do algoritmo.

© 2014 - AIEC - Associação Internacional de Educação Continuada

14
101 – Algoritmo | Unidade 04

Vet [i] – matriz unidimensional


Mat[i][j] – matriz bidimensional ou multidimensional
Mat[i][j][k] – matriz multidimensional

Uma matriz pode ser definida como um conjunto de variáveis de mesmo tipo e identificadas pelo
mesmo nome. Essas variáveis são diferenciadas por meio da especificação de dois índices que definem
posições dentro dessa estrutura.

Vamos pegar como exemplo uma matriz bidimensional (duas dimensões linha X colunas). Podemos
considerar que ela será assim:

Consideramos que para acessarmos o valor um (1), localizamos o índice por sua linha (1) e coluna (1),
deste modo seu índice é (1,1). O valor 2 (dois), por exemplo, será (1, 2).

03

A declaração de uma matriz em português estruturado pode ser da seguinte forma:

tipo_da_variável nome_da_variável [linha][coluna];

Nesta estrutura, o índice da esquerda indexa as linhas e o da direita indexa as colunas. Ao preencher ou
ler uma matriz, o índice mais à direita varia mais rapidamente que o índice à esquerda.

Observe a matriz 3x2 abaixo: enquanto o índice à esquerda “i” fica fixo o índice a direita “j” fica variando
mais rapidamente.

Componente [i][j]

© 2014 - AIEC - Associação Internacional de Educação Continuada

15
101 – Algoritmo | Unidade 04

Componentes [1][1] <- Maria (linha 1,coluna 1)


Componentes [1][2] <- João (linha 1,coluna2)
Componentes [2][1] <- Fátima (linha 2coluna1)
Componentes [2][2] <- Francisco (linha 2 coluna 2)
Componentes [3][1] <- Fernanda (linha 3coluna1)
Componentes [3][2]<- José (linha 3coluna2)

Seguem os valores da matriz [3,2]:

04

2 - EXEMPLOS
Vejamos alguns exemplos de algoritmos utilizando matrizes.

Exemplo 1
Elaborar um algoritmo que construa uma matriz de dimensão 20 x 10, e armazene
em cada célula o valor de 1 a 200, sequencialmente ordenados por linha. O
programa deve mostrá-los na tela em formato tabular.

#incluir <biblioteca>
principal()
inicio
inteiro mtrx [20][10];
inteiro i,j,cont;
cont← 1;
para (i←1;i<=20;i←i+1)
para (j←1;j=10;j←j+1)
inicio
mtrx[i][j] ←cont;
cont←cont + 1;
fim
para (i←1;i<=20;i←i+1)

© 2014 - AIEC - Associação Internacional de Educação Continuada

16
101 – Algoritmo | Unidade 04

inicio
escreva(“|”);
para (j←1;j=10;j←j+1)
inicio
escreva(mtrx[i][j]);
fim
escreva(“|”);
escreva(pular linha);
fim
fim

05

Exemplo 2
Elaborar um algoritmo que carregue uma matriz 2 x 2, calcule e mostre uma
matriz resultante que será a matriz digitada multiplicada pelo maior elemento
da matriz.

#incluir <biblioteca>
principal()
inicio
inteiromat[2][2], resultado[2][2], i, j, maior;
para(i←1;i<=2;i←i+1)
inicio
para(j←1;j<=2;j←j+1)
inicio
escreva("Digite o elemento da linha”, i, “e coluna”, j);
leia(mat[i][j]);
fim
fim
maior←mat[i][j];
para(i←1;i<=2;i←i+1)
inicio
para(j←1;j<=2;j←j+1)
inicio
se (mat[i][j] > maior)
maior←mat[i][j];
fim
fim

© 2014 - AIEC - Associação Internacional de Educação Continuada

17
101 – Algoritmo | Unidade 04

para(i←1;i<=2;i←i+1)
inicio
para(j←1;j<=2;j←j+1)
resultado[i][j] ← maior * mat[i][j];
fim
escreva("Imprimindo a matriz resultante ");
para(i←1;i<=2;i←i+1)
inicio
para(j←1;j<=2;j←j+1)
inicio
escreva(resultado[i][j]);
fim
fim
fim

06

Exemplo 3
Elaborar um algoritmo que carregue uma matriz 10 x 3 com as notas de
dez alunos em três provas. Mostre um relatório com o número do aluno
(número da linha) e a prova em que cada aluno obteve menor nota. Ao
final do relatório, mostre quantos alunos tiveram menor nota na prova
1, quantos alunos tiveram menor nota na prova 2 e quantos alunos
tiveram menor nota na prova 3.

#incluir <biblioteca >


principal()
inicio
real notas[10][3], menor;
inteiro q1, q2, q3, prova_menor, i, j;
para (i←1;i<=10;i←i+1)
inicio
para(j←1;j<=3;j←j+1)
inicio
escreva("Digite a”, j ,”nota do aluno”, i);
leia(notas[i][j]);
fim
fim
q1← 0;
q2← 0;
q3← 0;

© 2014 - AIEC - Associação Internacional de Educação Continuada

18
101 – Algoritmo | Unidade 04

para (i←1;i<=10;i←i+1)
inicio
escreva("Aluno numero %d", i);
menor = notas[i][1];
prova_menor = 0;
para(j←1;j<=3;j←j+1)
inicio
se (notas[i][j] <= menor)
inicio
menor← notas[i][j];
prova_menor← j;
fim
fim
escreva("A menor nota do aluno”, i, “foi na”, prova_menor, prova.");
se (prova_menor = 1)
q1 = q1 + 1;
se (prova_menor = 2)
q2 = q2 + 1;
se (prova_menor = 3)
q3 = q3 + 1;
fim
escreva("Quantidade de alunos com menor nota na prova 1 = ", q1);
escreva("Quantidade de alunos com menor nota na prova 2 = ", q2);
escreva("Quantidade de alunos com menor nota na prova 3 = ", q3);
fim

07

Exemplo 4
Elaborar um algoritmo que carregue uma matriz 10 x 20 com
números inteiros e some cada uma das linhas, armazenando o
resultado das somas em um vetor. A seguir, multiplique cada
elemento da matriz pela soma da linha e mostre a matriz
resultante.

#incluir <biblioteca >


principal()
inicio
realmat[10][20], soma[10];
inteiro i, j;
para (i←1;i<=10;i←i+1)
inicio

© 2014 - AIEC - Associação Internacional de Educação Continuada

19
101 – Algoritmo | Unidade 04

para (j←1;j<=20;j←j+1)
inicio
escreva("Digite o elemento da lin=”, i, “e col=”, j, “da matriz");
leia(mat[i][j]);
fim
fim
para (i←1;i<=10;i←i+1)
inicio
soma[i] ← 0;
para (j←1;j<=20;j←j+1)
soma[i] ← soma[i] + mat[i][j];
fim
para (i←1;i<=10;i←i+1)
inicio
para (j←1;j<=20;j←j+1)
mat[i][j] ←mat[i][j] * soma[i];
fim
escreva("Imprimindo a matriz resultante");
para (i←1;i<=10;i←i+1)
inicio
escreva("Linha”, i);
para (j←1;j<=20;j←j+1)
escreva(mat[i][j]);
fim
fim

08

Exemplo 5
Uma matriz é uma série de variáveis do mesmo tipo referenciadas por um
único nome, onde cada variável é diferenciada por meio de um número
chamado índice. Elaborar um algoritmo que carregue uma matriz 3 x 3,
calcule e mostre uma matriz resultante que será a matriz digitada
multiplicada pelo menor elemento da matriz.

#incluir <biblioteca>
principal()
inicio
inteiromat[3][3], resultado[3][3], i, j, menor;
para(i←1;i<=3;i←i+1)
inicio
para(j←1;j<=3;j←j+1)

© 2014 - AIEC - Associação Internacional de Educação Continuada

20
101 – Algoritmo | Unidade 04

inicio
escreva("Digite o elemento da linha”, i, “e coluna”, j);
leia(mat[i][j]);
fim
fim
menor←mat[i][j];
para(i←1;i<=3;i←i+1)
inicio
para(j←1;j<=3;j←j+1)
inicio
se (mat[i][j] < menor)
menor←mat[i][j];
fim
fim
para(i←1;i<=3;i←i+1)
inicio
para(j←1;j<=3;j←j+1)
resultado[i][j] ← menor * mat[i][j];
fim
escreva("Imprimindo a matriz resultante ");
para(i←1;i<=3;i←i+1)
inicio
para(j←1;j<=3;j←j+1)
inicio
escreva(resultado[i][j]);
fim
fim
fim

09

3 - MATRIZES MULTIDIMENSIONAIS
As matrizes multidimensionais possuem duas (mat [i][j]) ou mais dimensões (mat [i][j][k]), porém são
pouco utilizadas devido ao consumo de memória que exigem. O aumento é exponencial, pois guarda as
informações multidimensionais dinamicamente na memória. Conforme a necessidade do programa que
está sendo construído pode-se usar outros métodos para guardar as informações. Atualmente os
sistemas utilizam bancos de dados para isso. Bancos de dados são locais específicos onde se pode
armazenar todo o tipo de informação e recuperar, quando necessário.

© 2014 - AIEC - Associação Internacional de Educação Continuada

21
101 – Algoritmo | Unidade 04

SINTAXE:

tipo_da_variável nome_da_variável [tam1][tam2] ... [tamN]

Podem-se inicializar matrizes, assim como é possível inicializar variáveis.

SINTAXE:

tipo_da_variável nome_da_variável [tam1][tam2] ... [tamN] =


{lista_de_valores};

A lista de valores é composta por valores (do mesmo tipo da variável) separados por vírgula. Os valores
devem ser dados na ordem em que serão colocados na matriz.

Alguns exemplos de inicializações de matrizes:

Real vet [6] = { 1.3, 4.5, 2.7, 4.1, 0.0, 100.1 };


Inteiro mat [3][4] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 };

OBSERVAÇÃO: O primeiro exemplo demonstra inicialização de vetores. O segundo exemplo demonstra a


inicialização de matrizes multidimensionais, onde mat está sendo inicializada com 1, 2, 3 e 4 em sua
primeira linha, 5, 6, 7 e 8 na segunda linha e 9, 10, 11 e 12 na última linha.

10

4 - ORDENAÇÃO E PESQUISA

Uma das formas de deixar o algoritmo mais rápido é ordenando os vetores e matrizes. Isso facilita, em
uma pesquisa, encontrar mais rapidamente o que se deseja. Imagine você com um baralho completo,
você sabe que são muitas cartas e estão desordenadas. Se alguém pedir a carta 7 de Copas, você deverá
procurar a carta em todo o baralho. Sua consulta será demorada e muito, pois dependerá da sorte para
que o 7 de Copas esteja logo no início da pilha. Se a carta procurada estiver na última posição, você
passará por todas as cartas do baralho para achar a carta desejada.

Se esse baralho estivesse ordenado por número ou por naipes, sua busca seria bem mais rápida. A
ordenação ajudaria em muito a sua consulta, reduzindo drasticamente o tempo de pesquisa.

Ordenar corresponde ao processo de rearranjar um conjunto de objetos em uma ordem ascendente ou

© 2014 - AIEC - Associação Internacional de Educação Continuada

22
101 – Algoritmo | Unidade 04

descendente. O objetivo principal da ordenação é facilitar a recuperação posterior de itens do conjunto


ordenado.

11

Ordenação por Troca – Método Bolha

O método bolha ordena uma lista comparando valores entre pares consecutivos e rearranjando os
valores de acordo com a ordem.

Possui esse nome pelo fato de que se um valor, que deveria estar no topo da lista, estiver embaixo, ele
vai progredindo até o seu devido lugar.

Exemplo 6
Elabore um algoritmo que carregue um vetor com 100 números inteiros. Após
isto, o algoritmo deve ordenar de maneira crescente os dados.

#incluir <biblioteca>
principal()
inicio
inteiro vet[100], i, j, aux;
para (i ← 1; i <= 100; i ← i + 1)
inicio
escreva("Digite um numero ");
leia(vet[i]);
fim
para (i ← 1; i <= 100; i ← i + 1)
para (j ← 1; j <= 99; j ← j + 1)
se (vet[j] >vet[j+1])

© 2014 - AIEC - Associação Internacional de Educação Continuada

23
101 – Algoritmo | Unidade 04

inicio
aux←vet[j];
vet[j] ←vet[j+1];
vet[j+1] ←aux;
fim
para (i ← 1; i <= 100; i ← i + 1)
escreva(vet[i]);
fim

Para ordenar o vetor de forma decrescente é apenas necessário trocar o sinal de maior para o sinal de
menor na linha “se (vet[j] <vet[j+1])”

12

Pesquisa Linear ou Sequencial

Algoritmos de pesquisa de valores, assim como os de ordenação, também têm como objetivo a
recuperação de dados. Ambos os algoritmos evoluem conjuntamente com as tecnologias da
computação.

A pesquisa linear ou sequencial é o método mais intuitivo de busca, ele lê um valor sequencialmente e
compara com todos os elementos do vetor.

Voltando ao exemplo do baralho, seria como se nós passássemos carta a carta para achar o 7 de Copas,
respeitando a sequência das cartas. Esse método é utilizado quando há pequena quantidade de
elementos para pesquisar. Imagine que temos 10 cartas no baralho e nos é solicitada uma específica.
Iremos olhar as cartas uma a uma conforme sequência.

Exemplo 7
Elabore um algoritmo que carregue um vetor com 10 números de telefones. Após
isto, o algoritmo deve informar a posição de um determinado telefone.

#incluir <biblioteca>
principal()
inicio
inteiro i, j, aux;
literalvet[10], tel;
para (i ← 1; i <= 10; i ← i + 1)
inicio
escreva("Digite um telefone ");

© 2014 - AIEC - Associação Internacional de Educação Continuada

24
101 – Algoritmo | Unidade 04

leia(vet[i]);
fim
escreva("Pesquisa telefone ");
leia(tel);
para (i ← 1; i <= 10; i ← i + 1)
se (vet[i] == tel)
escreva("Telefone na posição ",i);
fim

13

Pesquisa Binária ou Logarítmica

A pesquisa binária é muito utilizada quando se quer ganhar tempo na pesquisa. Geralmente a pesquisa
binária é utilizada quando temos muitos elementos.

Se fôssemos aplicar a pesquisa binária no exemplo do baralho, deveríamos reparti-lo ao meio e verificar
se a carta que apareceu está antes ou depois daquela que estamos procurando. Caso estejamos longe
da carta procurada, devemos descartar a metade mais distante e repartir novamente o bolo do baralho.
E assim seguimos até encontrar a carta desejada. Veja que, para isso funcionar, o baralho deve estar na
ordem, ou gastaremos muito tempo na procura.

A pesquisa binária ou logarítmica é uma otimização do algoritmo simples, no entanto, neste caso, é
necessário que a lista esteja ordenada. A busca consiste em pegar o elemento central da lista e
comparar com o valor a ser buscado, caso o elemento esteja na parte superior da lista, a parte inferior
é descartada e o processo se repete.

A figura abaixo representa um elemento em uma lista a ser encontrado.

14

Exemplo 8
Elabore um algoritmo que carregue um vetor com 10 números inteiros.
Após isto, o algoritmo deve informar a posição de um determinado
número.

© 2014 - AIEC - Associação Internacional de Educação Continuada

25
101 – Algoritmo | Unidade 04

#incluir <biblioteca>
principal()
inicio
inteiro inicial, meio, final, i, num, vet[10];
para (i ← 1; i <= 10; i ← i + 1)
inicio
escreva("Digite um numero ");
leia(vet[i]);
fim
escreva("Pesquise o numero ");
leia(num);
inicial← 1
final← 10
enquanto (inicial <= final)
inicio
meio← (inicial + final)/2
se (num == vet[meio] )
inicio
escreva("Número na posição ",i);
inicial← final;
fim
senão
se (num <= vet[meio])
final← meio -1;
senão
inicial← meio + 1;
fim
fim

15

RESUMO

Aprendemos nesse módulo que as matrizes são conjuntos de vetores do mesmo tipo, ou melhor, são
estruturas de dados homogêneos de duas (ou mais) dimensões. As matrizes facilitam a forma de
representação das variáveis e também ajudam no armazenamento bidirecional dos dados. Aprendemos
os tipos de pesquisas e como realizar uma pesquisa linear e a pesquisa binária, que propõe agilizar uma
pesquisa quando temos muitos elementos. Não podemos esquecer que a ordenação é fundamental
para que as pesquisas possam ser rápidas e eficientes. Todas essas ferramentas ajudam no
desenvolvimento dos algoritmos e consequentemente dos futuros programas, que serão construídos
por programadores.

UNIDADE 4 – VETOR, MATRIZ, ORDENAÇÃO, PESQUISA, LISTA E ÁRVORE


BINÁRIA
MÓDULO 3 – ÁRVORE BINÁRIA

© 2014 - AIEC - Associação Internacional de Educação Continuada

26
101 – Algoritmo | Unidade 04

01

1 - ESTRUTURAS

Antes de iniciarmos com o assunto “Árvores”, primeiro apresentaremos o conceito de estruturas, que
estará presente em quase todo o conteúdo desse módulo.

Buscamos nesse momento o apoio do dicionário Aurélio on-line, que descreve dessa forma a
palavra estrutura:

s.f. Maneira como um edifício ou uma coisa qualquer é construída, organizada e disposta. / Maneira
como as partes de um todo estão dispostas entre si: estrutura do corpo humano. / Armação, esqueleto,
arcabouço. / Ordem, disposição e relações das partes que compõem uma obra: a estrutura do poema. /
Geologia Natureza das camadas geológicas e disposição dessas camadas, umas em relação às outras. /
Matemática Caráter de um conjunto resultante das operações nele definidas e das propriedades dessas
operações: estrutura de grupo. / Psicologia Conjunto orgânico de formas que, segundo os gestaltistas,
seria percebido de imediato, antes da captação dos detalhes. // Reforma das estruturas, reformas
legislativas que modificam profundamente as estruturas administrativas, econômicas ou sociais de uma
coletividade. // Estrutura latente de um grupo, configuração dos membros de um grupo, que a análise
de um teste sociométrico permite pôr em evidência.

Percebemos então que a palavra estrutura pode ser usada para diversos aspectos, tudo depende da
visão e da necessidade. Necessidade essa de demonstrar as partes de um todo, que juntos formam uma
estrutura única. No exemplo abaixo é apresentada a estrutura de uma empresa, percebe-se que há uma
hierarquia funcional entre os cargos, que são representados por caixas. Essa hierarquia demonstra uma
precedência de regras e atividade do dia a dia. Na altura superior da estrutura está o Vice Presidente e
então vai descendo, explorando a área da Direção da TI, que possui três gerências no mesmo nível
hierárquico (Gerência de Infraestrutura e serviços, Gerência de Desenvolvimento e Gerência de
Arquitetura e Processos). Essas gerências estão subdivididas internamente, conforme características de
cada área.

© 2014 - AIEC - Associação Internacional de Educação Continuada

27
101 – Algoritmo | Unidade 04

Estrutura Organizacional

02

Logo abaixo, apresentamos um exemplo de árvore genealógica, onde os mais velhos precedem os mais
jovens: temos os bisavós, avós, pais e o filho. Na verdade essa árvore é de uma pessoa somente, pois
não está considerando outros parentes, como irmãos, primos, tios etc. Seria uma árvore gigantesca se
colocássemos todos os parentes.

© 2014 - AIEC - Associação Internacional de Educação Continuada

28
101 – Algoritmo | Unidade 04

Árvore genealógica

03

2 - ÁRVORES

As árvores são utilizadas para representar hierarquicamente estruturas, como demonstrado acima nos
exemplos da árvore genealógica e a estrutura organizacional. Na tecnologia as árvores podem ser
utilizadas para representar decisões, definições formais de linguagem ou mesmo para representar
hierarquia entre elementos.

Na programação de sistemas e na computação, a árvore é uma estrutura de dados que herda as


características das topologias. Na estrutura de árvore os dados estão dispostos de forma hierárquica,
como um conjunto de dados hierarquicamente subordinado a outro.

Descrevendo a estrutura árvore

Para melhor entendimento iremos pegar o exemplo de uma árvore, isso mesmo, só que você a colocará
de cabeça para baixo. Todas as árvores possuem raiz, a raiz é o um elemento principal da árvore, sem a
raiz não teríamos a árvore. Visualizando a imagem abaixo percebemos que a árvore além da raiz possui
outros elementos e outras ligações, que são denominados galhos ou filhos. Essas ramificações são
originadas dos nós. Os galhos levam a outros nós que também possuem outros galhos. O elemento que
não possui galhos é conhecido como folha ou nó terminal.

© 2014 - AIEC - Associação Internacional de Educação Continuada

29
101 – Algoritmo | Unidade 04

04

Árvore binária

Segundo Marcos Laureano:

Uma árvore binária é um conjunto finito de elementos que está vazio ou é particionada em três
subconjuntos.

Os subconjuntos da árvore são:

• raiz da árvore - elemento inicial (único);


• subárvore da esquerda - se vista isoladamente compõe uma outra árvore;
• subárvore da direita - se vista isoladamente compõe uma outra árvore.

A árvore pode não ter nenhum elemento (árvore vazia). A construção de uma árvore pode ser recursiva
e, devido a isso, muitas operações sobre árvores binárias utilizam recursão. Lembrando
que recursividade é o processo de definir algo em termos de si mesmo e é, algumas vezes, chamado de
definição circular. Assim, pode-se dizer que o conceito de algo recursivo está dentro de si, que por sua
vez está dentro de si e assim sucessivamente, infinitamente, ou seja, se não tiver um mecanismo de
saída ou de parada o algoritmo entrará em loop.

As árvores onde cada nó que não seja folha numa árvore binária tem subárvores esquerda e direita.

© 2014 - AIEC - Associação Internacional de Educação Continuada

30
101 – Algoritmo | Unidade 04

05

A figura abaixo apresenta um método convencional de representação de uma árvore. Nesta árvore, o
elemento A é a raiz da árvore, a subárvore da esquerda é o elemento B e a da direita é representada
pelo elemento C. Um nó sem ilhós é chamado de folha. Sendo A a raiz de uma árvore binária e B sua
subárvore, é dito que A é pai de B e que B é filho de A.

Representação de árvore

Sendo assim temos outras relações de parentesco conforme figura acima, onde B e C são filhos
de A, B e C são irmãos, D e E são irmãos e H e I são irmãos. Outra forma visualizada na figura é que C é
pai de F, que é pai de H e I.

As letras B, C, E, F são chamados de nós, e as letras D, G, H, I são nós sem filhos, que são chamados de
folhas.

06

Tamanho da árvore

O caminho da raiz de uma árvore até a sua folha final é calculada pela seguinte fórmula k – 1. Onde se
conta o número de nós do lado maior da árvore, que é a letra k e subtrai por um. Assim você terá o

© 2014 - AIEC - Associação Internacional de Educação Continuada

31
101 – Algoritmo | Unidade 04

tamanho de uma árvore. Veja a figura abaixo, K é igual a 4, usando a fórmula k – 1, o tamanho da árvore
é 3. Sendo assim a raiz não se conta.

07

Altura do nó

A altura do nó pode se confundir com o tamanho, mas não é. A altura do nó é comprimento do maior
caminho do nó até alguns de seus descendentes. Descendentes do nó são todos os nós que podem ser
alcançados caminhando-se para baixo a partir da raiz. A altura de cada uma das folhas é 1. Desta
maneira a altura de A é 4, a altura de C é 3 enquanto que de D, E e F são 2 e G, H e I são 1.

08

Outro ponto importante a observar é como medir o grau de saída de cada nó. Que é número de filhos
de um nó. Por exemplo, o nó B tem grau de saída 2, o nó C tem grau 1, o nó F grau 2.

© 2014 - AIEC - Associação Internacional de Educação Continuada

32
101 – Algoritmo | Unidade 04

09

Nível do nó

O nível de um nó pode ser definido, a partir do nó raiz, que é de nível 0. Os outros nós têm um nível que
é uma unidade a mais do que o nível do seu pai. Na árvore da figura abaixo temos:

Nível 0: A
Nível 1: B e C
Nível 2: D, E e F
Nível 3: G, H e I

10

Árvore Binária Completa

Uma árvore completa é uma árvore binária na qual todas as folhas estão no mesmo nível k. Sendo k a
profundidade da árvore (tamanho). Para se calcular o número total de nós utiliza a seguinte fórmula
(2k+1– 1) e para calcular número total de folhas utiliza a seguinte fórmula (k2).

© 2014 - AIEC - Associação Internacional de Educação Continuada

33
101 – Algoritmo | Unidade 04

Embora uma árvore binária completa possua muitos nós (o máximo para cada profundidade), a distância
da raiz a uma folha qualquer é relativamente pequena.

A árvore da figura abaixo tem profundidade 3, então utilizando a fórmula para calcular a quantidade de
nós:

(2k+1– 1)
(23+1– 1)
(24 - 1)
(16 – 1) = 15, então temos 15 nós.

Agora, para calcular a quantidade de folhas temos:


(k3)
(23) = 8, então temos 8 folhas.

11

Realizando Busca em Árvore Binária

Importante, primeiramente, antes de realizar uma busca em uma árvore é a organização dos dados
contidos na árvore. O objetivo de organizar é para facilitar a tarefa de procura de um determinado valor.
Lembrando que a busca em qualquer tipo de estrutura de dados é mais rápida quando os dados estão
ordenados.

A partir da raiz e de posse da informação a ser encontrada, é possível saber qual o caminho (galho) a ser
percorrido até encontrar o nó desejado. Para tanto, basta verificar se o valor procurado é maior, menor
ou igual ao nó que se está posicionando. Deve-se observar que não existe uma única forma de organizar
um conjunto de informações em uma árvore de busca binária, afinal, dependendo da escolha do nó raiz,
obtêm-se árvores diferentes.

12

3 – GRAFO

Primeiramente é bom registrar que grafo não é gráfico, apesar de os nomes serem parecidos e de o
grafo poder ser representado graficamente.

© 2014 - AIEC - Associação Internacional de Educação Continuada

34
101 – Algoritmo | Unidade 04

Segundo João Dovicchi:

Grafos são estruturas matemáticas usadas para representar ideias ou modelos, por intermédio de uma
ilustração, gráfico ou esquema.

Estritamente, em matemática, a teoria dos grafos é utilizada para representar o relacionamento entre
dois ou mais conjuntos, grandezas ou valores. A representação de um mapa de rotas, redes e outros
modelos semelhantes podem ser feita por meio do que se denominam grafos.

Vamos tomar, por exemplo, um mapa de rotas aéreas. Na figura abaixo, nota-se que existem várias
rotas de um ponto a outro, por exemplo, de Florianópolis a Brasília existem as possibilidades via
Curitiba, via São Paulo ou via Rio de Janeiro. Algumas rotas podem ter mais escalas, por exemplo, pode-
se ir a Brasília por São Paulo, passando por Curitiba, Rio e Belo Horizonte. Podemos ter também um voo
panorâmico, onde o avião sai de um lugar e volta para o mesmo lugar. Por exemplo, voo de São Paulo
para São Paulo, onde o avião sai do aeroporto de Congonhas sobrevoa a cidade e volta para Congonhas.

Neste exemplo, temos a linha que liga


cada dois pontos. Quando esse
movimento acontece chamamos
de laços. O mapa de rotas contém
pontos, que representam as cidades, e
estão ligados por linhas, que representam
as rotas aéreas. Cada um dos pontos de
um grafo é denominado nó e cada uma
das ligações é denominada arcos.

13

A representação de dados como estrutura de dados, pode ser aplicada em Mapas de distâncias, Mapas
Metabólicos, Diagramas e Fluxogramas, Redes de computadores, Redes Neurais, Estruturas químicas,
redes sociais etc.

© 2014 - AIEC - Associação Internacional de Educação Continuada

35
101 – Algoritmo | Unidade 04

No caso das redes sociais, por exemplo, Facebook, Orkut, Linkedin existe um relacionamento social e
negocial entre pessoas. Nesses relacionamentos as pessoas se interligam através da amizade e grupos
de interesse. Se A é amigo de B e B é amigo de C, indiretamente, A está "conectado" a C. Essas redes de
amigos são exemplos de um grafo. Você possui amigos e está "conectado" a eles. Estes, eventualmente
estão conectados a outras pessoas. Quando entramos no perfil de um amigo e entramos no perfil de
algum conhecido do nosso amigo, que você não conhece, vimos um caminho de pessoas, de você até o
amigo do amigo. Isso é um problema de grafo. Deve-se partir de uma pessoa (você) e, percorrendo seus
relacionamentos, encontrar um "caminho" até outra pessoa.

As pessoas que se relacionam entre si são chamados de nós do grafo. Cada relacionamento entre os nós
é chamado de aresta. Abaixo, temos uma imagem que representa um GRAFO simplesmente.

De acordo com a imagem do grafo, percebemos que


geralmente os nós são representados por círculos e as
arestas por linhas, que conectam esses círculos. Outro
detalhe interessante é que os nós da figura têm números
dentro deles. Esses números servem apenas para
distinguir os nós.

Os nós podem representar os números das casas no sistema de distribuição de água, poderia ser o nome
da cidade no mapa, lista de amigos do Facebook.

14

Observe esses exemplos de grafos.

© 2014 - AIEC - Associação Internacional de Educação Continuada

36
101 – Algoritmo | Unidade 04

© 2014 - AIEC - Associação Internacional de Educação Continuada

37
101 – Algoritmo | Unidade 04

Dá para perceber, a partir de todos esses exemplos, que o conceito de grafos é bastante abrangente e
pode ser utilizado para diversas coisas. Mas como assim “utilizar”? Uma das maneiras, citando o
exemplo das linhas do Metrô, como poderíamos aumentar o fluxo de pessoas em cada linha (nó)? Esse é
um grande problema hoje para as grandes cidades, como São Paulo e Rio de Janeiro. Aumentar o
número de pessoas que utilizam o metrô, tirando carros em circulação das ruas. Não é apenas construir
novos nós, ou novas estações, é um estudo de fluxo de pessoas, horários de picos, velocidade de cada
trem, temperatura etc.

É isso que torna a teoria dos grafos um campo tão estudado. As pessoas estudam esse modelo
matemático porque sabem que, se conseguirem desenvolver novos trabalhos em cima desse modelo
abstrato, esses trabalhos serão aplicáveis a inúmeros problemas reais. Imagine que você tenha
conseguido desenvolver um trabalho para aumentar o fluxo entre dois nós de um grafo. Esse seu
trabalho poderá ser aplicado a qualquer modelo, dentro das características de cada problema. É
importante então sempre levar em consideração todas as necessidades de cada problema.

Outro exemplo que podemos usar é a ampliação de casas com luz elétrica. Vejamos, expandir energia
elétrica para pessoas que não possuem pode tirar de quem já tem, ou prejudicar o funcionamento.
Ampliar e melhorar a distribuição da rede de energia elétrica é um desafio para o governo e as centrais
elétricas. Aumentar com responsabilidade.

São estudos que devem ser feitos para não prejudicar a distribuição para o restante da cidade. Estamos
vendo que não é o caso só de colocar mais postes e fios. Deve se ter um estudo de como atender a
demanda de melhoria, que é a expansão de energia para quem não tem.

© 2014 - AIEC - Associação Internacional de Educação Continuada

38
101 – Algoritmo | Unidade 04

15

RESUMO

As estruturas estão presentes no nosso dia a dia, no trabalho, na escola, entre outras. Na tecnologia as
árvores podem ser utilizadas para representar decisões, definições formais de linguagem ou mesmo
para representar hierarquia entre elementos. As árvores também são estruturas, que apoiam em vários
momentos o desenvolvimento do software. A construção de uma árvore pode ser recursiva, até atender
a necessidade do algoritmo.

Uma árvore binária é um conjunto finito de elementos que está vazio ou é particionada em três
subconjuntos: raiz da árvore; subárvore da esquerda e subárvore da direita.

Os grafos são estruturas matemáticas usadas para representar ideias ou modelos, por intermédio de
uma ilustração, gráfico ou esquema. O seu estudo é importante para ajudar na melhoria do cotidiano
das pessoas, não somente para a TI. Estudos de fluxos de transporte, distribuição de energia, cursos de
água e rotas e áreas são exemplos de grafos e estão, todos os dias, sendo avaliados em prol da
população.

© 2014 - AIEC - Associação Internacional de Educação Continuada

39

Você também pode gostar