of 9/9
SysSorting Professional Um Assistente de Avaliação de Estratégias de Ordenação Michel Alves dos Santos * Dezembro de 2011 Conteúdo Resumo 1 1 Introdução 1 1.1 Números Aleatórios .......... 2 1.2 Estratégias de Ordenação ...... 2 2 O Sistema 3 3 Componentes 3 3.1 LibraryTime ............. 3 3.2 LibraryRandom ............ 4 3.3 LibrarySorting ............ 4 3.4 MyGlWindowPlot .......... 4 3.5 Element e ElementVector ...... 4 4 Resultados 5 5 Conclusões 5 5.1 Trabalhos Futuros .......... 5 Referências 5 Resumo Neste trabalho são apresentados alguns resul- tados da construção de um assistente de avalia- ção de estratégias de ordenação, bem como a es- trutura desse mesmo assistente. Com o decorrer do mesmo apresentaremos os componentes notó- rios e sua estrutura. Além disso apresentaremos uma motivação para concepção do mesmo. Um bom conhecimento sobre complexidade compu- tacional, geração de números pseudo-aleatórios e distribuições de probabilidade faz-se necessário para uma compreeensão mais apurada do cerne do trabalho. Essas exigências são impostas face a estrutura da biblioteca de geração de números pseudo-aleatórios implementada que é modelada * Bacharelando em Ciência da Computação, Univer- sidade Federal do Estado de Alagoas (UFAL). E-mail: [email protected] Disciplina: Engenharia de Soft- ware II. Docente Responsável: Arturo Hernández Do- mínguez. através de funções de distribuição de probabili- dade que por sua vez descrevem a chance que um elemento tem de assumir um valor ao longo de um espaço de valores. Figura 1: Quadro de análises fornecido pelo assis- tente. Nesse quadro são exibidas as seguintes infor- mações: número de iterações, número de compara- ções e número de inversões executadas por uma de- terminada estratégia de ordenação escolhida. Essas informações são aferidas para as amostras em estado desordenado (em laranja), ordenado crescentemente (em verde) e ordenado decrescentemente (em azul). 1 Introdução A análise e compreensão das estratégias de ordenação são tarefas corriqueiras no processo de aprendizagem de complexidade computacio- nal. Os métodos mais clássicos são debatidos e suas respectivas complexidades teóricas são con- frontadas, porém muitas vezes, não há um apro- fundamento e muitas características relevantes de determinadas técnicas são deixadas de lado não ocorrendo um confrontamento prático des- ses métodos. Além disso não existe disponível, ate o mo- mento, uma ferramenta gratuita para aferição da complexidade das estratégias de ordenação que leve em consideração a natureza das amos- tras a serem classificadas. Para preencher essa lacuna propomos um As- sistente de Avaliação de Estratégias de Ordena- ção que possui como principais funcionalidades a geração de aglomerados numéricos aleatórios, 1

SysSorting Professional

  • View
    179

  • Download
    0

Embed Size (px)

DESCRIPTION

A análise e compreensão das estratégias de ordenação são tarefas corriqueiras no processo de aprendizagem de complexidade computacional. Os métodos mais clássicos são debatidos e suas respectivas complexidades teóricas são confrontadas, porém muitas vezes, não há um aprofundamento e muitas características relevantes de determinadas técnicas são deixadas de lado não ocorrendo um confrontamento prático desses métodos. Além disso não existe disponível, ate o momento, uma ferramenta gratuita para aferição da complexidade das estratégias de ordenação que leve em consideração a natureza das amostras a serem classificadas. Para preencher essa lacuna propomos um Assistente de Avaliação de Estratégias de Ordenação que possui como principais funcionalidades a geração de aglomerados numéricos aleatórios, a execução de determinadas estratégias sobre esses aglomerados e a exibição do esforço computacional e temporal necessários a execução.

Text of SysSorting Professional

  • SysSorting ProfessionalUm Assistente de Avaliao de Estratgias de Ordenao

    Michel Alves dos Santos

    Dezembro de 2011

    ContedoResumo 1

    1 Introduo 11.1 Nmeros Aleatrios . . . . . . . . . . 21.2 Estratgias de Ordenao . . . . . . 2

    2 O Sistema 3

    3 Componentes 33.1 LibraryTime . . . . . . . . . . . . . 33.2 LibraryRandom . . . . . . . . . . . . 43.3 LibrarySorting . . . . . . . . . . . . 43.4 MyGlWindowPlot . . . . . . . . . . 43.5 Element e ElementVector . . . . . . 4

    4 Resultados 5

    5 Concluses 55.1 Trabalhos Futuros . . . . . . . . . . 5

    Referncias 5

    ResumoNeste trabalho so apresentados alguns resul-

    tados da construo de um assistente de avalia-o de estratgias de ordenao, bem como a es-trutura desse mesmo assistente. Com o decorrerdo mesmo apresentaremos os componentes not-rios e sua estrutura. Alm disso apresentaremosuma motivao para concepo do mesmo. Umbom conhecimento sobre complexidade compu-tacional, gerao de nmeros pseudo-aleatriose distribuies de probabilidade faz-se necessriopara uma compreeenso mais apurada do cernedo trabalho. Essas exigncias so impostas facea estrutura da biblioteca de gerao de nmerospseudo-aleatrios implementada que modelada

    Bacharelando em Cincia da Computao, Univer-sidade Federal do Estado de Alagoas (UFAL). E-mail:[email protected] Disciplina: Engenharia de Soft-ware II. Docente Responsvel: Arturo Hernndez Do-mnguez.

    atravs de funes de distribuio de probabili-dade que por sua vez descrevem a chance queum elemento tem de assumir um valor ao longode um espao de valores.

    Figura 1: Quadro de anlises fornecido pelo assis-tente. Nesse quadro so exibidas as seguintes infor-maes: nmero de iteraes, nmero de compara-es e nmero de inverses executadas por uma de-terminada estratgia de ordenao escolhida. Essasinformaes so aferidas para as amostras em estadodesordenado (em laranja), ordenado crescentemente(em verde) e ordenado decrescentemente (em azul).

    1 IntroduoA anlise e compreenso das estratgias de

    ordenao so tarefas corriqueiras no processode aprendizagem de complexidade computacio-nal. Os mtodos mais clssicos so debatidos esuas respectivas complexidades tericas so con-frontadas, porm muitas vezes, no h um apro-fundamento e muitas caractersticas relevantesde determinadas tcnicas so deixadas de ladono ocorrendo um confrontamento prtico des-ses mtodos.

    Alm disso no existe disponvel, ate o mo-mento, uma ferramenta gratuita para aferioda complexidade das estratgias de ordenaoque leve em considerao a natureza das amos-tras a serem classificadas.

    Para preencher essa lacuna propomos um As-sistente de Avaliao de Estratgias de Ordena-o que possui como principais funcionalidadesa gerao de aglomerados numricos aleatrios,

    1

  • a execuo de determinadas estratgias sobre es-ses aglomerados e a exibio do esforo compu-tacional e temporal necessrios a execuo.

    1.1 Nmeros AleatriosAs funes de retorno de nmeros aleatrios

    da maioria das linguagens no so adequadas.Por exemplo, a funo rand() da linguagemC++ uma Pseudo Random Number Generatormedocre, pois usa o mtodo de congruncia li-near (Linear Congruential Generator ou LCG).O perodo de gerao de sequncias numricas

    para plataformas que utilizam LCG da ordemde m = 232 ou m = 264 (onde m indica o pe-rodo de gerao em base de potncias de 2). Aglibc por exemplo, usada pelo GCC (GNU Com-piler Collection1), possui uma periodicidade dem = 232 enquanto a biblioteca MMIX (criadapara processadores RISC de 64 bits por DonaldKnuth) possui uma periodicidade de m = 264.Para uma melhor gerao de nmeros aleat-

    rios usamos outros mtodos tais como o R250 eo Mersenne Twister. O R250 foi proposto por

    Gerador PeriodicidadeLCG [glibc - gcc] 232

    LCG [MMIX by Donald Knuth] 264

    R250 2250 1

    Mersenne Twister 219937 1

    Tabela 1: Para testar os limites tericos das es-tratgias de ordenao e verificar a robustez dasmesmas, os nmeros empregados devem possuirnatureza e origem aleatrias. Na corrente ta-bela so exibidos alguns geradores de nmerospseudo-aleatrios e seus respectivos perodos degerao.

    (Kirkpatrick & Stoll, 1981) em 1981. Ele per-mite perodos muito longos de gerao de n-meros aleatrios sem que o ciclo de repetiesse reinicie, o que uma caracterstica muito de-sejada em simulaes que trabalham com umgrande nmero de chamadas ao Gerador de N-meros Pseudo-Aleatrios(GNPA), tal como assimulaes Monte Carlo. Alm disso, possuiuma boa performance, permitindo que simula-es sejam realizadas em tempo real. O perodode gerao do R250 de quase m = 2250 1.R250 conhecido como um Registrador de Res-

    1Conjunto de compiladores de linguagens de progra-mao produzido pelo projeto GNU.

    posta de Deslocamento Generalizado ou GFSR(Generalized Feedback Shift Register).O Mersenne Twister um gerador de nme-

    ros aleatrios relativamente novo proposto em1997 por (Matsumoto & Nishimura, 1998). OMersenne Twister um GFSR com compri-mento de 624 e deslocamento de 397 semelhanteem esprito ao R250. Possui um surpreendenteperodo de 219937 1. O cerne do mtodo sebaseia em recorrncia matricial linear sobre umcorpo binrio F2, provendo uma gerao rpidae de alta qualidade de nmeros aleatrios.

    Outros mtodos de gerao de nmeros alea-trios baseados em distribuio numrica tam-bm foram utilizados como o Box-Muller (distri-buio polar) o mtodo da distribuio de Pois-son, entre outros (ver figura 2).

    Figura 2: Distribuies disponibilizadas pelo com-ponente LibraryRandom. Os mtodos de Congrun-cia Linear, R250 e Mersenne Twister so baseadasna distribuio uniforme.

    1.2 Estratgias de OrdenaoOrdenao o ato de se colocar os elemen-

    tos de uma sequncia de informaes, ou dados,em uma ordem predefinida. O termo tcnicoem ingls para ordenao sorting, cuja tra-duo literal classificao. Algumas ordensso facilmente definidas. Por exemplo, a ordemnumrica, ou a ordem alfabtica (crescentes oudecrescentes). Contudo, existem ordens, espe-cialmente de dados compostos, que podem serno triviais de se estabelecer. Um algoritmo queordena um conjunto ou sequncia de elementos(geralmente representado por um vetor), cha-mado de um algoritmo de ordenao ou estra-tgia de ordenao. Entre os mais importantes,podemos citar o bubble sort (ou ordenao por

    2

  • flutuao), heap sort (ou ordenao por amonto-amento), insertion sort (ou ordenao por inser-o), merge sort (ou ordenao por intercalao)e o quicksort (ou ordenao rpida).Existem vrias razes para se ordenar uma

    sequncia. Uma delas a possibilidade se aces-sar seus dados de modo mais eficiente.Algoritmos de ordenao estam entre os mais

    importantes da Cincia da Computao. A im-portncia desses algoritmos est relacionada aplicao dos mesmos em diferentes tipos deproblemas. Por isso, determinar o uso ade-quado dos algoritmos de ordenao fundamen-tal. Para isso faz-se necessrio o estudo de suascomplexidades de tempo para aferir qual a me-lhor estratgia para determinadas instncias deum problema. Sendo complexidade do tempo deum problema o nmero de passos que se tomapara resolver uma instncia de um problema, apartir do tamanho da entrada utilizando o algo-ritmo mais eficiente disposio.Intuitivamente, caso se tome uma instncia

    com entrada de longitude n que pode resolver-se em n2 passos, se diz que esse problema temuma complexidade em tempo de O(n2). Supos-tamente, o nmero exato de passos depende damquina em que se programa, da linguagem uti-lizada e de outros fatores. Para no ter que falardo custo exato de um clculo se utiliza a no-taco assimpttica. Quando um problema temcusto dado em tempo O(n2) em uma configura-o de computador e linguagem, este custo sero mesmo em todos os computadores, de maneiraque esta notao generaliza a noo de custo in-dependentemente do equipamento utilizado.O assistente de ordenao proposto utiliza-se

    de um componente que agrega vrias estratgiasde ordenao de vrias ordens de complexidade,indo desde algoritmos quadrticos como o bubblee o insertion at algoritmos log-lineares como omerge (figura 3).

    2 O SistemaA ferramenta foi concebida para verificar o

    nmero de instrues executadas em aglome-rados numricos desordenados, ordenados cres-centemente e decrescentemente, alm do tempoconsumido nessas operaes. A ferramenta pos-sui as seguintes funcionalidades: Gerao deaglomerado numrico aleatrio; Escolha da dis-tribuio para gerao do aglomerado numrico;Escolha da estratgia de ordenao. Mais infor-

    Figura 3: Algoritmos de ordenao disponibiliza-dos pelo componente LibrarySorting. Esses algorit-mos foram implementados e avaliados confrontandosuas respectivas complexidades tericas e suas apli-caes prticas.

    maes estruturais a respeito das classes compo-nentes e diagramao da interface grfica podemser adquiridas no final deste trabalho.

    3 ComponentesLogo a seguir sero apresentados alguns com-

    ponentes notrios do sistema. Tratam-se detrechos de cdigo intercambiveis que possuemcomo objetivo atender a problemas de amplo es-copo e corriqueiramente recorrentes. Uma defi-nio com um carter mais teortico seria a se-guinte: componente de software o termo utili-zado para descrever o elemento de software queencapsula uma srie de funcionalidades.

    Um componente uma unidade indepen-dente, que pode ser utilizado com outros compo-nentes para formar um sistema mais complexo.Em programao orientada a objetos um com-ponente a classe que implementa uma interfacee autnomo em relao a outros componen-tes do sistema. Um sistema de software podeser formado inteiramente somente por compo-nentes, pois estes se interligam atravs de suasinterfaces. Este processo de comunicao entrecomponentes denominado composio.

    3.1 LibraryTimeO componente LibraryTime foi construdo

    com o intuito de encapsular chamadas de baixonvel ao sistema de medio de tempo nativo.O componente possui uma interface simples epode ser utilizado em qualquer soluo de soft-ware que requeira uma mtrica para estimar acomplexidade temporal de determinada tarefa.

    3

  • Podemos visualizar um diagrama estrutural docomponente atravs da figura 4.

    Figura 4: Diagrama de classe do componente Li-braryTime e suas respectivas operaes. A estruturaclock_t que realiza essa composio proveniente dabiblioteca ctime.

    Em nosso assistente o componente foi uti-lizado para executar aferies sobre o esforocomputacional necessrio para realizao de de-terminadas tarefas. As respectivas complexida-des tericas foram confrontadas levando em con-siderao o tempo necessrio para sua execuocompleta e o tempo consumido (figura 5).

    Figura 5: Aplicao do componente. Tempos ob-tidos atravs da gerao pseudo-aleatria e aplica-o do algoritmo shell sort em aglomerado numricocom cardinalidade igual a 100000.

    3.2 LibraryRandomO componente LibraryRandom foi construdo

    com o intuito de encapsular mtodos para a ob-teno de nmeros pseudo-aleatrios. A inter-face desse componente moderadamente sim-ples mas requer do desenvolvedor conhecimentoprvio sobre distribuies de probabilidade paraum aproveitamento mais apurado. O diagramapode ser visualizado atravs da figura 8

    3.3 LibrarySortingO componente LibrarySorting foi construdo

    com o intuito de encapsular mtodos de orde-nao das mais variadas ordens de complexi-dade afim de se obter um embate atravs de seucomportamento no que tange o esforo compu-tacional necessrio para execuo dos mesmos.O componente facilmente extensvel e sua in-terface relativamente simples. Para elaborao

    desse componente utilizamos o padro strategy.Atravs da figura 10 podemos visualizar o dia-grama estrutural do mesmo.

    3.4 MyGlWindowPlotO componente MyGlWindowPlot foi cons-

    trudo com o intuito de se obter um controle ouwidget que fosse capaz de desenhar pontos emuma rea de desenho fornecida pela bibliotecaOpenGL. O componente foi desenvolvido atravsda extenso da classe de emulao de uma janelaOpenGL atravs da biblioteca FLTK. As chama-das internas so construdas atravs de puro c-digo OpenGL fazendo com que as mesmas pos-sam ser facilmente portadas para qualquer outraplataforma de construo de interfaces grficas(e.g. gtk, QT, .NET). Atravs da figura 9 pode-mos visualizar o componente em ao.

    3.5 Element e ElementVectorOs componentes Element e ElementVector

    constituem as classes do domnio do problemaque so intercambiveis entre os demais comp-nentes. Element constitui uma classe para ar-mazenamento das caracteristicas de um deter-minado elemento que ser foco das operaes dosistema. ElementVector comporta-se como umalista, porm diferente dos demais conteiners con-vencionais implementa operaes de verificaode minimalidade, maximalidade e ordenao. Aclassificao dos elementos atravs de ordenaointerna necessita de um predicado de ordenaodevido as caractersticas internas dos gabaritos(ou templates) da linguagem adotada.

    Figura 6: Diagrama de classe dos componentes Ele-ment e ElementVector e suas respectivas operaes.

    4

  • ClassificaoAlgoritmo TempoBubble 166.785sGnome 158.188sShaker 143.156sComb 142.328sInsertion 81.765sSelection 68.204sShell 1.281sHeap 1.235sQuick 1.234sMerge 1.375s

    Tabela 2: Quadro de ranqueamento das estra-tgias de ordenao. Os tempos foram obtidosatravs da aplicao dos respectivos algoritmosem aglomerados numricos aleatrios com car-dinalidade igual a 100000.

    4 ResultadosA seguir sero apresentados resultados obti-

    dos atravs da concepo da ferramenta (tabela2 e figura 7). Todos os testes foram executadossobre aglomerados numricos com cardinalidadeigual a 105. Os resultados exibidos referem-se amdia de tempo de 15 execues consecutivas decada estratgia levando em considerao a amos-tra desordenada, ordenada de maneira crescentee ordenada de maneira decrescente, ou seja:

    Ttotal =

    mi=1

    (td + toc + tod)

    m(1)

    Onde td o tempo necessrio para execuodo mtodo sobre a amostra desordenada, toc otempo para execuo sobre a amostra ordenadade forma crescente, tod o tempo para execuosobre a amostra ordenada de forma descrescentee Ttotal a mdia de tempos aps m execues.

    5 ConclusesAtravs da concepo do assistente pudemos

    analisar tanto de maneira terica quanto pr-tica o desempenho das estratgias de ordenaomais clssicas. Dentre vrias observaes salien-tamos que algoritmos de ordenao quadrticospossuem baixa complexidade de implementaoporm pecam no quesito desempenho, enquantoalgoritmos de ordenao do tipo dividir-para-conquistar so as melhores opes, porm de-vemos estar atentos aos casos degenerativos.

    Bubble Gnome Shaker Comb Insertion Selection Shell Heap Quick Merge

    050

    100

    150

    AlgoritmosBubbleGnomeShakerCombInsertionSelectionShellHeapQuickMerge

    Figura 7: Grfico em barras relativo ao ranquea-mento das estratgias de ordenao. notria apercepo de que algoritmos quadrticos de or-denao podem possuir baixa complexidade deimplementao porm pecam no quesito desem-penho.

    5.1 Trabalhos FuturosComo possveis extenses da ferramenta po-

    demos destacar a implementao de ordenaomulti-thread com o uso do paralelismo, a in-sero de grficos de desempenho acumulativo,a execuo de processos distribudos atravs deum middleware e a transformao das estrat-gias de ordenao em plugins.

    RefernciasBooch, G., J., R. & Jacobson, I. (2006), UML: Guia

    do Usurio, Vol. 1, 2 ed., Editora Campus.

    Kirkpatrick, S. & Stoll, E. (1981), A very fastshift-register sequence random number genera-tor, Journal of Computational Physics 40, 517526.

    Larman, C. (2000), Utilizando UML e padres: Umaintroduo anlise e ao projeto orientados a ob-jetos, 1 ed., Bookman.

    Matsumoto, M. & Nishimura, T. (1998), Mer-senne twister: A 623-dimensionally equidistribu-ted uniform pseudorandom number generator,ACM Transactions on Modeling and ComputerSimulation 8, 330.

    Sommerville, I. (2007), Engenharia de Software, 8ed., Pearson Addison Wesley.

    5

  • Figura 8: Diagrama de classe do componente LibraryRandom e suas respectivas operaes. Observe queas estratgias para obteno de nmeros pseudo-aleatrios estam aglomeradas dentro de um namespace.

    Figura 9: O OpenGL (Open Graphics Library) uma API livre utilizada na computao grfica, paradesenvolvimento de aplicativos grficos, ambientes 3D, jogos, entre outros. O OpenGL um conjunto dealgumas centenas de funes, que fornecem acesso a praticamente todos os recursos do hardware de vdeo.Internamente, ele age como uma mquina de estados, que de maneira bem especfica dizem ao OpenGL oque fazer. O OpenGL fornece um conjunto poderoso de comandos, mas restrito apenas ao desenho. Vriasbibliotecas existem para facilitar a manipulao de outros aspectos da aplicao, como GLU e GLUT.

    6

  • Figura 10: Diagrama de classe do componente LibrarySorting e suas respectivas operaes. Observeque as estratgias estam disponibilizadas utilizando o padro strategy. A classe AbstractSorting abriga adeclarao de todos os mtodos responsveis pela aferio do esforo computacional de um determinadomtodo. Entre os mtodos quadrticos implementados estam o bubble, o gnome, o shaker, o comb, o inser-tion e o selection. Dentre os no-quadrticos estam o shell, o heap, o quick e o merge. Outras estratgiaspodem ser implementadas, tais como: Cocktail sort, Oddeven sort, Stooge sort, Bogosort, Smoothsort,Cartesian tree sort, Tournament sort, Cycle sort, Tree sort, Library sort, Patience sorting, Polyphasemerge sort, Strand sort, American flag sort, Bead sort, Bucket sort, Burstsort, Counting sort, Pigeonholesort, Proxmap sort, Radix sort, Flashsort, Bitonic sorter, Batcher oddeven mergesort, Pairwise sortingnetwork, Timsort, Introsort, Spreadsort, UnShue sort, JSort, Spaghetti sort, Topological sorting e oPancake sorting.

    Figura 11: Fluxograma de interao com o sistema. Atravs desse fluxograma podemos notar que ainterao com o mesmo a mais simples possvel, exigindo do utilizador apenas alguns passos mnimos.

    7

  • Figura 12: Diagrama de arquitetura em camadas do sistema. A camada de viso fornecida atravs douso do kit de construo de interfaces grficas FLTK. Com esse kit construmos os objetos MyApplication eMyGlWindowPlot. Na camada de controle encontram-se os objetos do domnio (Element e ElementVector)e os servios (LibraryTime, LibraryUtils, LibraryRandom e LibrarySorting) e finalmente na camada demodelo se encontra o repositrio de definio de amostras (arquivos .rnd).

    Figura 13: Principais botes da interface grfica do usurio. Da esquerda para direita temos: o comandode gerao de amostras, o comando de execuo do mtodo de ordenao, uma lista de escolha do m-todo, uma lista de escolha de distribuies e finalmente uma lista de escolha para as ordens de avaliao(aleatria, crescente e decrescente).

    Figura 14: Seo timeline onde so exibidos os tempos necessrios para execuo de uma determinadaestratgia de ordenao sobre aglomerado numrico desordenado, ordenado crescentemente e ordenadodecrescentemente. Ao final so exibidos o tempo de gerao da amostra e o tempo total de ordenaopara as trs ordens anteriormente citadas.

    8

  • Figura 15: Sees Listas de Elementos, Limites Numricos, Rtulos, Mtodos Executados e Grfico deTempo. Na seo Listas de Elementos so apresentadas as listas de elementos desordenados e ordenados.Na seo Limites Numricos o usurio tem a possibilidade de estabelecer os limites numricos de geraodos aglomerados. Na seo Rtulos so exibidos os significados das cores empregadas para identificar oselementos de aferio. Na seo Mtodos Executados so exibidos os mtodos de gerao dos aglomeradosnumricos e a estratgia de ordenao escolhida. Em Grfico de Tempo so exibidos os tempos gastospara execuo do mtodo de ordenao para as trs ordens.

    Figura 16: Menus cortina disponibilizados pela aplicao. Da esquerda para a direita: Arquivos, Aes,Ferramentas e Ajuda. Atravs desses widgets o usurio pode ter acesso a outras funcionalidades do sistema.

    Figura 17: Uma viso geral da aplicao. A corrente figura exibe de maneira integral o assitente proposto,que possui como principal intuito verificar o nmero de instrues executadas em aglomerados numricosdesordenados, ordenados crescentemente e decrescentemente, alm do tempo consumido nessas operaes.

    9

    ResumoIntroduoNmeros AleatriosEstratgias de Ordenao

    O SistemaComponentesLibraryTimeLibraryRandomLibrarySortingMyGlWindowPlotElement e ElementVector

    ResultadosConclusesTrabalhos Futuros

    Referncias