Document a Cao

Embed Size (px)

Citation preview

  • 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.