Document a Cao
-
Upload
fernando-tavares -
Category
Documents
-
view
230 -
download
0
Transcript of Document a Cao
-
7/30/2019 Document a Cao
1/22
DCC-ICEx-UFMG
TP0: Palavras Cruzadas
Thiago Costa Porto
10 de Maro de 2008
1
-
7/30/2019 Document a Cao
2/22
Sumrio
1 Introduo 3
2 Taxa de Interseo 3
3 Problema da Gerao de Palavras Cruzadas 3
4 Soluo Proposta 4
5 Tipos Abstratos de Dados 5
5.1 Matriz Esparsa . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55.2 Informaes sobre palavras . . . . . . . . . . . . . . . . . . . . . 7
6 Entrada 8
6.1 Tipo da Entrada . . . . . . . . . . . . . . . . . . . . . . . . . . . 86.2 Tratamento da Entrada . . . . . . . . . . . . . . . . . . . . . . . 86.2.1 Pseudo-cdigo . . . . . . . . . . . . . . . . . . . . . . . . . 96.2.2 Anlise de Complexidade . . . . . . . . . . . . . . . . . . 9
6.3 Exemplo de Entrada . . . . . . . . . . . . . . . . . . . . . . . . . 10
7 O Algoritmo 11
7.1 Descrio do Algoritmo . . . . . . . . . . . . . . . . . . . . . . . 117.2 Pseudo-cdigo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137.3 Anlise de Complexidade . . . . . . . . . . . . . . . . . . . . . . 14
8 Sada 15
9 Ambiente de Testes 15
10 Testes 16
10.1 Tempo de Usurio . . . . . . . . . . . . . . . . . . . . . . . . . . 1610.2 Memria Utilizada . . . . . . . . . . . . . . . . . . . . . . . . . . 1710.3 Tempo de Sistema . . . . . . . . . . . . . . . . . . . . . . . . . . 1810.4 Tempo de Relgio . . . . . . . . . . . . . . . . . . . . . . . . . . . 1910.5 Taxa de interseo . . . . . . . . . . . . . . . . . . . . . . . . . . 20
11 Anlise dos Resultados 20
11.1 Por que o score no uma boa escolha de ordenao . . . . . . . 20
11.2 Taxa de Interseo . . . . . . . . . . . . . . . . . . . . . . . . . . 2111.3 Memria . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2111.4 Tempo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
12 Trabalhos Futuros 21
13 Concluso 21
2
-
7/30/2019 Document a Cao
3/22
1 Introduo
Palavras cruzadas dito, por muitos, como o jogo mais popular e difundido
no mundo. No entanto, sua histria recente. O primeiro jogo de palavrascruzadas como conhecemos surgiu, oficialmente, em 21 de Dezembro de 1913.Foi publicado no jornal americano New York World por um jornalista ingls,Arthur Wynne[1, 2].
Outras pessoas se aventuraram na criao de palavras cruzadas aps o su-cesso da primeira publicao. Estas conseguiam ver e arranjar palavras emformas geomtricas e cada uma tinha um estilo prprio, o que gerou milharesde cruzadinhas diferentes.
Palavras cruzadas diferem de caa-palavras e outros jogos do gnero por ter
como condio o cruzamento entre palavras, ou seja, toda palavra no jogo deveser cruzada por outra. A medida de qualidade que utilizaremos para a palavracruzada a taxa de intersero e, maximiz-la uma tarefa muito difcil. Acriao de um novo jogo envolve muito planejamento, pois deve-se tentar maxi-mizar a taxa de intersero.
A taxa de intersero crescer se as palavras utilizadas terem tamanho pe-queno, e se as possibilidades de insero de palavras ocorrerem nas quatro dire-es. Este trabalho apresenta uma maneira de gerar jogos de palavras cruzadasa partir de um dicionrio, tentando maximizar a taxa de intersero entre aspalavras.
2 Taxa de Interseo
A taxa de interseo foi adotada como medidor da qualidade da resposta. Ataxa de interseo t(x) de um jogo de palavra cruzada dada por:
t(x) = nmero de letras com interseonmero total de letras das x palavras no tabuleiro .
3 Problema da Gerao de Palavras Cruzadas
O problema que este trabalho aborda a gerao de palavras cruzadas dado
um dicionrio de palavras. Essas palavras devem ser arranjadas em tabuleiro,formando um jogo de palavras cruzadas. O tabuleiro no tem limite, pois seutamanho varia de acordo com as palavras do dicionrio que iro compor o jogo.Deve-se maximizar a taxa de interseo.
Computacionalmente, a gerao de cruzadinhas um problema NP-completo.Isso ocorre quando queremos calcular todos os jogos possveis de um dado dici-onrio. Podemos dificultar ainda mais o problema, estabelecendo limites parao tabuleiro. No entanto possvel, com certeza absoluta, escolher o jogo commelhor taxa de interseo.
3
-
7/30/2019 Document a Cao
4/22
4 Soluo Proposta
Este trabalho prope uma heurstica para a soluo do problema especi-
ficado. Essa heurstica tenta maximizar a taxa de interseo ao priorizar ainsero de palavras de tamanho pequeno. O tabuleiro representado por umamatriz esparsa. As direes possveis para a insero de palavras dada uma letraso na vertical, horizontal, diagonal primria e diagonal secundria, tudo issoem relao letra. Pode-se dizer que as diagonais formam um X e a verticale horizontal formam uma cruz na letra em questo. Isso ilustrado pela Figura1abaixo:
Figura 1: Possveis direes de insero em relao uma letra do tabuleiro da palavracruzada.
As letras so escolhidas seqncialmente a partir da primeira linha da ma-triz esparsa. Inicialmente, o tabuleiro contm uma nica letra, arbitrariamenteescolhida. Logo, a matriz possui apenas uma linha e uma coluna. Essa letra escolhida e tenta-se colocar palavras nas outras trs direes.
As palavras so escolhidas de maneira seqncial para a tentativa de inser-o. Essas palavras provm do dicionrio e so tratadas e alocadas em um vetorde uma estrutura que ter informaes sobre essa palavra. Esse procedimento explicado posteriormente. necessrio e suficiente visualizar, no momento, umvetor que contm as palavras do dicionrio, e que estas palavras so selecionadasde maneira seqncial.
Se todas as direes estiverem preenchidas, se for realizada uma insero ouo nmero de palavras disponveis para tentativa esgotado, a prxima letra direita desta escolhida. Caso no exista letra direita, escolhida a primeira
4
-
7/30/2019 Document a Cao
5/22
letra da linha abaixo. Ainda resta um caso, se a letra for a ltima letra da ltimalinha da matriz. Caso isso ocorra, selecionada a primeira letra do tabuleiro.
O procedimento de tentativa de insero continua at que o nmero de pa-lavras no tabuleiro seja alcanado ou que no seja mais possvel encaixar outrapalavra. Se nenhuma outra palavra encaixar, nao permitido abrir espaopara uma nova palavra, pois, ento, o jogo deixaria de ser palavra cruzada paravirar, por exemplo, um caa-palavras.
5 Tipos Abstratos de Dados
Foram implementados dois tipos abstratos da dados para auxiliar a imple-mentao da soluo apresentada. O primeiro tipo abstrato de dados representaum nodo, ou elemento, da matriz esparsa, que compe o tabuleiro, a grelha, ondeficaro as palavras. O segundo tipo tem a funo de guardar uma palavra einformaes sobre ela.
5.1 Matriz Esparsa
A matriz esparsa o conjunto de elementos da estrutura sparse dispostossequencialmente, ou seja, conectados entre si. A estrutura sparse apresentaquatro ponteiros, dois inteiros que contm informao sobre a posio do ele-mento na matriz e outros quatro inteiros que marcam se o elemento parte deuma interseo horizontal, vertical ou diagonal (principal ou secundria).
Os quatro ponteiros so denominados up, down, left, e right, para referen-ciar onde est o prximo elemento em tal direo. Um exemplo de representaoda matriz (Figura 2) mostra como se comportam os elementos. A matriz es-parsa comea com um nodo cabea, inicialmente com todos os apontadoresapontando para si prpria, uma vez que no h elementos na matriz. medidaque so adicionadas linhas e colunas matriz, so criadas novos nodos cabeapara cada linha e coluna.
Figura 2: Representao da estrutura sparse.
5
-
7/30/2019 Document a Cao
6/22
Estes elementos tm particularidades em relao aos elementos da matrizque representaro as letras da palavra cruzada. A primeira delas so as utiliza-es de ponteiros. Nas linhas, o ponteiro left aponta para o ltimo elemento da
linha, e, nas colunas, o ponteiro up aponta para o ltimo elemento da coluna.Essa particularidade faz linhas e colunas se assemelharem ao conceito de listacircular e, de fato, esta foi estrutura de dados que serviu de base para esta im-plementao de matriz esparsa.
Outra particularidade para os nodos de linha e coluna a representao deposio na matriz. Como estes nodos no fazem parte da matriz esparsa, ja quesua funo marcar linhas e colunas da matriz, estes no devem ser impres-sos. Dessa forma, uma maneira prtica de representar sua posio na estruturada matriz setar valores negativos que indicam qual linha ou coluna o nodoest delimitando. Por exemplo, o nodo cabea da quinta linha da matriz tem
como posio (5, 0). J o da quinta coluna da matriz tem como posio (0,5).
A razo para a implementao de ambas desta forma , no primeiro caso,facilitar a adio de novas linhas e colunas no topo da matriz, como ilustra afigura (Figura 3). No segundo caso, facilitou a procura por elementos na matrize a impresso da mesma, uma vez que possvel diferenciar, rapidamente, umnodo cabea de um elemento da matriz.
Figura 3: Esquema de como so identificados os nodos cabea e os elementos damatriz. Os ponteiros no triviais, left e up, esto coloridos da mesma cor para indicar
como se relacionam.
6
-
7/30/2019 Document a Cao
7/22
As operaes deste tipo abstrato de dados consistem, basicamente, na cria-o de novas linhas e colunas para a matriz esparsa. O maior desafio foi criarmtodos que criassem linhas esquerda e no topo da matriz. Para entender
seu funcionamento, basta pensar que estes mtodos arredam os outros ele-mentos da matriz para a direita ou para baixo, criando, assim, uma linha embranco na matriz. Esse procedimento est exibido na figura abaixo (Figura 4).
Figura 4: Representao da insero de novos elementos esquerda e acima do ele-mento inicial, da cor branca.
Alm das operaes de criao de linhas e colunas, o mais importante m-todo para a confeco da palavra cruzada o get_node(). Esta funo faz aprocura por um elemento em uma dada posio na matriz. Caso no encontre,ele retorna NULL. Dessa forma, o algoritmo, sempre que recebe NULL destafuno, identifica que a posio desejada est livre, e poder ser utilizada numainsero.
A razo para a utilizao da matriz esparsa gira em torno do uso de espao,pois com a matriz esparsa s ser alocado espao que ser utilizado. Toda linhaou coluna da matriz ter, ao menos, 1 elemento. Logo, uma soluo em que ogasto de memria depende do nmero e tamanho de palavras utilizados.
5.2 Informaes sobre palavras
A estrutura wordinfo possui um arranjo de char, como uma string, e doisinteiros que representam o tamanho da palavra e, atuando como um booleano,se a palavra j foi inserida na palavra cruzada.
Os inteiros, in_use e length, so determinados de acordo com a entradautilizada. A varivel in_use depende do uso da palavra no tabuleiro. Elase porta como um booleano, assumindo o valor 0 quando no utilizada e 1quando a palavra est presente no tabuleiro. O inteiro length indica o tamanho
7
-
7/30/2019 Document a Cao
8/22
da palavra e usada para facilitar a ordenao do vetor. Caso contrrio, aordenao utilizaria a funo strlen() da biblioteca < string.h >. Para evitaresse procedimento, a varivel est presente na estrutura wordinfo.
6 Entrada
6.1 Tipo da Entrada
O programa implementado recebe como entrada um dicionrio de palavrase o nmero de palavras que iro compor a palavra cruzada.
O dicionrio de palavras nada mais que um arquivo texto que contm pala-vras, de preferncia, uma por linha. Deste arquivo ser extrado, de cada linha,as palavras que sero utilizadas na composio da palavra cruzada.
O tamanho total de uma palavra est definido no mdulo io.h, em que definido o tamanho mximo de uma palavra. Se o tamanho da palavra for ex-cedido no dicionrio de entrada, a palavra em questo ser dividida em duas ouquantas mais partes necessrias.
O nmero de palavras num deve respeitar a seguinte condio: 0 < num t,em que t o nmero total de palavras no dicionrio. O nmero t no precisa serdefinido no arquivo dicionrio, j que existe uma funo no mdulo que trata aentrada do programa, io.c, que calcula o nmero de palavras total do dicionrio.
Neste trabalho, o nmero de letras que cada palavra pode ter 40, definidono arquivo io.h, como indicado abaixo:
#define WORD_MAX_SIZE 41 /* 41 pois 1 espaco deve ser \0 */
6.2 Tratamento da Entrada
Antes de comear a construir a palavra cruzada, a entrada deve ser adequadaao algoritmo. Primeiramente, algumas condies impostas sobre as palavras dodicionrio devem ser atendidas:
Cada palavra deve estar em maisculas
Expresses, como tudo bem, sero consideradas uma nica palavra
No permitido nenhum acento nas palavras
Destas, apenas a terceira condio esperada que seja cumprida pelo di-cionrio. As duas primeiras so ajustadas por funes do mdulo io.c. Paramodificar o case das palavras, a funo uppercase() muda de caixa baixa paracaixa alta. Para transformar expresses em palavras, espao em branco so re-movidos pela funo edit_word(), que, entre outros pequenos tratamentos decdigo, retira os espaos em branco.
8
-
7/30/2019 Document a Cao
9/22
Em seguida, calculado o tamanho de cada palavra. Isso feito pela funomake_length(). O valor computado e adicionado estrutura wordinfo dapalavra.
6.2.1 Pseudo-cdigo
Parmetros: Vetor wordinfo, dicionrio de palavras
AbreArquivo(dicionrio);tam DeterminaTamanho(dicionrio);
while tam doPalavra pi GetPalavraArquivo(dicionrio, pi);RetiraEspacoAcento(pi);Uppercase(pi);CopiaVetor (pi, wordinfo);tam tam 1;
end
make_length(wordinfo);QuickSort(wordinfo);
Algorithm 1: Algoritmo para tratar os dados do arquivo de entrada
6.2.2 Anlise de Complexidade
Esse processo de tratamento de entrada comea com a definio de quantaspalavras sero extradas, dado o nmero total de linhas. importante ressaltarque o tamanho total da palavra deve ser suficiente para armazenar toda a linhaa ser obtida do dicionrio. Dessa forma, a varivel max_size, que marca otamanho mximo de uma palavra, deve sempre ter tamanho maior ou igual quea maior palavra ou expresso do dicionrio. Na segunda linha do pseudo-cdigoapresentamos uma rotina que determinar o total de palavras a serem conside-radas. Esse mtodo percorre todas as linhas do arquivo, logo tem complexidadeO(tam).
Em seguida, consideramos o loop. Esse loop possui trs mtodos que fa-zem o ajuste da palavra nos moldes que requerido pelo problema. As funesUppercase e RetiraEspacoAcento apresentam complexidade O(max_size), emtodos os casos, enquanto o mtodo CopiaVetor tem complexidade O(1).
Fora do loop, passamos ainda pelas funes de ajuste do vetor. A funomake_length tem ordem de complexidade O(tam), para todos os casos. OQuickSort apresenta complexidade de O(tam2) no pior caso, O(tam) no me-lhor caso e O(tam log(tam)) no caso mdio.
Logo, podemos dizer que a complexidade do tratamento da entrada O((tammax_size) + tam + tam2) no pior caso, O((tam max_size) + 2 tam) nomelhor caso, e O((tam max_size) + tam + tam log(tam)) no caso mdio. O
9
-
7/30/2019 Document a Cao
10/22
pior caso s ocorre quando o pior caso do QuickSort ocorrer.
Como o dicionrio utilizado neste trabalho tm suas palavras dispostas em
ordem alfabtica, o vetor wordinfo j est parcialmente ordenado. O grfico aseguir mostra como se comporta o programa em relao ao nmero de palavrase o compara com a funo f(x), a qual o fit dos resultados obtidos nos testescom a entrada.
Figura 5: Anlise de complexidade do algoritmo de tratamento da entrada
Os dados utilizados correspondem mdia dos valores de tempo obtido em5 execues para cada dicionrio utilizado. Observamos que o algoritmo bemcomportado, ficando prximo funo f(x) e apresentando um comportamentopraticamente linear.
6.3 Exemplo de Entrada
Um exemplo de entrada est exibido abaixo. o contedo de um arquivotexto, com 12 palavras, que formar o dicionrio. Esse apenas um exemplo,
10
-
7/30/2019 Document a Cao
11/22
pois a base de palavras utilizado para a realizao dos testes do trabalho contm20063 palavras.
## exemplo de arquivo de entrada ##
carro
aviao
atletico
kibe
cheiro
ratazana
macaxeira
fisica
lepitacional
excecao abertafutebol
7 O Algoritmo
7.1 Descrio do Algoritmo
Aps tratar a entrada, o programa comea a montar a palavra cruzada. Oprimeiro passo buscar a palavra de melhor score no vetor de palavras. Elaser inserida na horizontal e marcar o incio do tabuleiro, que estava vazio. Apalavra ocupar, na primeira linha, l colunas, em que l corresponde ao tamanhodo palavra. Feito isso, garantido que a palavra melhor relacionada do vetoresteja no tabuleiro.
Aps realizar o primeiro passo, o algoritmo tenta inserir as outras palavras,percorrendo as letras j existentes no tabuleiro. As outras palavras so sele-cionadas em seqncia, do vetor de palavras. A tentativa de insero ocorrequando uma palavra que contm a letra selecionada encontrada.
, ento, verificado se ser possvel a insero da palavra na direo livreda letra, seguindo a ordem: vertical, horizontal, diagonal principal e diagonalsecundria. Caso seja possvel a insero, ela feita e a prxima palavra dovetor escolhida para continuar o processo. Se no acontecer a insero, a pr-
xima letra do tabuleiro escolhida.
Essa tentativa de insero envolve a funo get_node, que determina se possvel inserir a palavra no tabuleiro ou no. A funo verifica as posies emque as letras da palavra sero inseridas, averiguando se h ou no o encaixe dasletras da palavra com as letras existentes nas posies.
O procedimento de tentativa continua, at que seja alcanado o total depalavras desejados ou que no haja mais possibilidades de insero.
11
-
7/30/2019 Document a Cao
12/22
Em seguida, apresentado o pseudo-cdigo do algoritmo implementado. lembrado que o pseudo-cdigo uma verso compacta e informal do algoritmoimplementado, no exibindo particularidades de implementao.
12
-
7/30/2019 Document a Cao
13/22
7.2 Pseudo-cdigo
entrada: Dicionrio de palavras, total de palavras desejadas
sada : Palavra Cruzada, taxa de interseoinicializao das estruturas e tratamento de entrada;
words total de palavras desejadas;Escolhe palavra p1;AlocaEspacoMatriz(p1);InserePalavra(p1, pos(1,1), matrix);words words 1;
while words do
Palavra pi GetPalavra(Dicionrio);if houve insero or no existem palavras livres then
Letra li GetLetra(matrix);end
/* Verifica e tenta insero */
if pi encaixa em li thenif !horizontal then
if ChecaHorizontal(pi, li) thenInserePalavra(pi, pos(li), matrix);
end
end
else if !vertical thenif ChecaVertical(pi, li) then
InserePalavra(pi, pos(li), matrix);end
end
else if !dprincipal thenif ChecaDiagonalPrincipal(pi, li) then
InserePalavra(pi, pos(li), matrix);end
end
else if !dsecundaria thenif ChecaDiagonalSecundaria(pi, li) then
InserePalavra(pi, pos(li), matrix);
endend
end
if houve insero thenPalavra pi MarcaUsoPalavra(pi);
end
end
Imprime (matrix);Algorithm 2: Palavra Cruzada Zambs
13
-
7/30/2019 Document a Cao
14/22
7.3 Anlise de Complexidade
O algoritmo para a formao da palavra cruzada comea com a busca pela
primeira palavra do vetor de palavras. Em seguida, escolhida a primeira letra,e, ento, entramos no loop. O loop ser executado, no melhor caso, w 1 ve-zes, em que w o nmero de palavras desejadas no tabuleiro da palavra cruzada.
Dentro do loop, as funes para a escolha da palavra e da letra tm ordemde complexidade, no pior caso, de O(tam) e O(tletras), em que tam o ta-manho do vetor wordinfo e tletras o total de letras presentes no tabuleiro.Em seguida, temos as funes que checam se a insero possvel. Estas tmcomplexidade O(max_size 1), em que max_size o tamanho mximo deuma palavra. A funo max_size 1 pois a letra da palavra que j est notabuleiro no participa da verificao. Essa frmula vlida quando a palavra
verificada pode ser includa no jogo. Do contrrio, a complexidade pode variarde O(1) a O(max_size1), pois o programa pra a verificao se alguma letrano encaixa.
Com isso, podemos dizer que a complexidade do algoritmo apresentado O((w 1) (4 (max_size 1) + tam + tletras)), no melhor caso. No piorcaso, o loop ser executado (w1) tletras vezes, que o caso em que a ltimapalavra livre do vetor a que encaixa na letra anterior selecionada. A com-plexidade ser de O(((w1) (tletras)) (4 (max_size1) + tam + tletras)).Verificamos o grfico abaixo, sobre a complexidade do algoritmo, que mostra otempo de execuo pelo tamanho da palavra cruzada.
Figura 6: Anlise de complexidade do algoritmo de insero de palavras no tabuleiro
14
-
7/30/2019 Document a Cao
15/22
Como se pode observar, a funo da complexidade se aproxima da funof(x), a qual uma regresso linear dos dados coletados. O fit foi feito a partirde uma equao do segundo grau, como se desejava. Logo, percebemos que o
algoritmo tem ordem de complexidade quadrtica.
Por fim, podemos afirmar que o programa apresenta complexidade quadr-tica, quando analisado o tratamento da entrada e o algoritmo de insero depalavras. Abaixo, temos o grfico total de palavras por tempo.
8 Sada
A sada do programa a impresso do tabuleiro e da taxa de intersero dapalavra cruzada. A sada, pode ser direcionada para um arquivo ou pode serimpressa no terminal em que executa. Para direcionar a sada para um arquivo,basta executar o programa com o seguinte comando:
./zambs -i -w >nome_da_arquivo
Um exemplo de sada est indicado abaixo:
## exemplo de saida com 20 palavras ##
O
A C R
N L A S
P O O
R N D
S E E O M
M H U Z
S A E
I D S M
D
taxa de intersecao : 0.392157
9 Ambiente de Testes
Os testes sero executados em um computador Intel Centrino T5450, com 3GB de RAM, rodando o sistema operacional Ubuntu 7.10.
15
-
7/30/2019 Document a Cao
16/22
10 Testes
O programa deve ser executado da seguinte forma pela linha de comando:
./zambs -i -n
Os testes tm como propsito medir o tempo gasto para a execuo total doprograma para diferentes tamanhos de palavra cruzada. Ser variado o tamanhodo dicionrio e o total de palavras presentes no tabuleiro. Ser medido tambma memria utilizada pelo algoritmo apresentado.
Sero comparados trs heursticas diferentes. Alm do algoritmo apresen-tado nesse trabalho, dois outros foram implementados, e so modificaes doalgoritmo do trabalho.
O primeiro desses algoritmo ordena o vetor de palavras em relao freqn-cia das letras que aparecem, numa medida denominada score e explicada naanlise dos resultados. O segundo algoritmo igual ao primeiro em relao aovetor de palavras, porm tenta maximizar o nmero de intersees para a letrado tabuleiro, ou seja, tenta inserir palavras na vertical, horizontal e diagonais.
10.1 Tempo de Usurio
Figura 7: Comparao dos tempos de usurio
16
-
7/30/2019 Document a Cao
17/22
10.2 Memria Utilizada
Figura 8: Memria utilizada pelo algoritmo apresentado
17
-
7/30/2019 Document a Cao
18/22
10.3 Tempo de Sistema
Figura 9: Comparao da tempo de sistema
18
-
7/30/2019 Document a Cao
19/22
10.4 Tempo de Relgio
Figura 10: Comparao do tempo de relgio
19
-
7/30/2019 Document a Cao
20/22
10.5 Taxa de interseo
Figura 11: Comparao da taxa de interseo
11 Anlise dos Resultados
11.1 Por que o score no uma boa escolha de ordenao
O score uma medida de quo bem relacionada est a palavra. Esta medidaconsiste em uma mdia ponderada, que leva em conta o nmero de vezes n(x)que cada letra x da palavra aparece na base de palavras utilizada. Por exemplo,supondo n(A) = 400 e n(B) = 100, a palavra ABA teria um score de:
n(ABA) =n(A) + n(B) + n(A)
3=
400 + 100 + 400
3= 300.
O score calculado no tratamento da entrada. Aps o clculo do tamanhoda palavra, ser calculado o score. Isso feito pelos mtodos make_alphabet()e make_score(). O mtodo make_alphabet() recebe como parmetros um ve-tor de inteiros com 26 posies, cada uma dessas representando uma letra doalfabeto, e um vetor de wordinfo, contendo palavras. Ser calculado, ento, afreqencia de cada letra do alfabeto na lista de palavras.
Com os valores do vetor de inteiros, pode-se calcular o score de cada pala-vra, com a funo make_score(). O score ser a varivel usada para ordenar ovetor de wordinfo, o que feito pelo mtodo QuickSort. Aps a ordenao, o
20
-
7/30/2019 Document a Cao
21/22
programa ir comear a montar a palavra cruzada.
Porm, utilizar o score como fator nico de ordenao do vetor no uma
boa escolha. Alm dos resultados obtidos nos testes j indicarem este fato, bastapensarmos em palavras com um tamanho prximo do mximo e que tenham umscore alto. Elas estariam no comeo do vetor e, para esta implementao, gerariasolues com taxa de interseo mais baixas.
11.2 Taxa de Interseo
A melhor taxa apresentada pelo algoritmo apresentado neste trabalho. Issose deve ao tamanho das palavras que so priorizadas, o que maximiza a taxa deinterseo. O pior foi obtido pelo algoritmo score, pois o tamanho das palavraspriorizadas maior nesta implementao. O algoritmo que tenta a maximizao
das letras apresenta melhor resultado at cerca de 400 palavras. Isso ocorre poiso algoritmo passa a inserir palavras de tamanho maior em cada letra, e tentausar as 4 direes possveis.
11.3 Memria
O uso de memria varia pouco, pois a alocao s ocorre quando h a ne-cessidade de insero de novos elementos. Fazendo o fit com uma funo doprimeiro grau, percebe-se que a complexidade de espao da soluo linear.
11.4 Tempo
O algoritmo mais rpido o que usa o score como mtodo de ordenao dovetor. A rapidez se deve ao fato de as palavras do comeo do vetor terem letrasmuitas letras em comum, o que aumenta a possibilidade de uma palavra que irencaixar estar no inico do vetor.
O pior tempo o que tenta maximizar o nmero de intersees de umaletra. Obviamente, isso ocorre pelo maior nmero de tentativas de insero queir ocorrer.
12 Trabalhos Futuros
Para melhorar o desempenho do algoritmo utilizado neste trabalho, seriainteressante ordenar o vetor de palavras, utilizando um algoritmo estvel, pri-meiramente pelo score e, em seguida, pelo length. O prximo trabalho a serrealizado com esta soluo proposta sua paralelizao.
13 Concluso
Neste trabalho, foi implementado um algoritmo para a gerao de uma pa-lavra cruzada a partir de um dicionrio de palavras. Foi explorada a prtica
21
-
7/30/2019 Document a Cao
22/22
de alocao dinmica com a linguagem C, durante a implementao da ma-triz esparsa. Foi comparado o desempenho do algoritmo proposto com outrasduas variaes em relao ao tempo de sistema, usurio e de relgio. Por fim,
mostrou-se que o algoritmo implementado oferece boas solues para o problemada gerao de palavras cruzadas.
Referncias
[1] Ilan Berker and A. C. Cem Say. A crossword puzzle generator for turkish.1993.
[2] George Eliot. Brief history of crossword puzzles.http://www.crosswordtournament.com/more/wynne.html, visitado em10/03/2008.