{"id":168,"date":"2015-11-11T14:26:36","date_gmt":"2015-11-11T17:26:36","guid":{"rendered":"http:\/\/just.pro.br\/blog\/?p=168"},"modified":"2015-11-28T11:13:09","modified_gmt":"2015-11-28T14:13:09","slug":"codigo-huffman","status":"publish","type":"post","link":"https:\/\/just.pro.br\/blog\/2015\/11\/11\/codigo-huffman\/","title":{"rendered":"C\u00f3digo Huffman"},"content":{"rendered":"<p>Ol\u00e1, pessoal.<\/p>\n<p>Aqui est\u00e1 o c\u00f3digo da codifica\u00e7\u00e3o Huffman que voc\u00eas fizeram em sala de aula (quer dizer, ainda falta pra chegar l\u00e1 :p). A partir desse c\u00f3digo voc\u00eas far\u00e3o o compactador. Na sexta, tiro as d\u00favidas de voc\u00eas.<\/p>\n<pre class=\"brush: cpp; title: ; notranslate\" title=\"\">\r\n#include &lt;iostream&gt;\r\n#include &lt;string.h&gt;\r\n#include &lt;stdio.h&gt;\r\n#include &lt;algorithm&gt;\r\n#include &lt;vector&gt;\r\n\r\nusing namespace std;\r\n\r\ntypedef struct no\r\n{\r\n    int quantidade = 0;\r\n    int asc;\r\n} nozin;\r\n\r\ntypedef struct noArvore\r\n{\r\n    noArvore *f&#x5B;2];\r\n    int quantidade;\r\n    char letra&#x5B;256];\r\n} nozinArvore;\r\n\r\nbool compareTo(nozin a, nozin b)\r\n{\r\n    return a.quantidade &gt; b.quantidade;\r\n}\r\n\r\nbool compareArvore(noArvore *A, noArvore *B)\r\n{\r\n    return A-&gt;quantidade &lt; B-&gt;quantidade;\r\n}\r\n\r\nchar *buscaElemento(char letra, noArvore *no)\r\n{\r\n    if ((no != NULL)\r\n        return &quot;0&quot;;\r\n\r\n    if (no-&gt;letra != letra)\r\n    {\r\n        if( (no-&gt;f&#x5B;0]-&gt;letra != letra))\r\n        {\r\n            buscaElemento(letra,no-&gt;f&#x5B;1]);\r\n        }\r\n    }\r\n}\r\n\r\nint main()\r\n{\r\n    char palavra&#x5B;256];\r\n    nozin vetorAsc&#x5B;256];\r\n    int index = 0;\r\n    vector&lt;noArvore*&gt; vetorArvore;\r\n\r\n    printf(&quot;Informe um texto: &quot;);\r\n    scanf(&quot;%s&quot;,palavra);\r\n\r\n    while(palavra&#x5B;index] != 0)\r\n    {\r\n        vetorAsc&#x5B;palavra&#x5B;index]].quantidade++;\r\n        vetorAsc&#x5B;palavra&#x5B;index]].asc = palavra&#x5B;index];\r\n        index++;\r\n    }\r\n\r\n    sort(&amp;vetorAsc&#x5B;0], &amp;vetorAsc&#x5B;256], compareTo);\r\n\r\n    index = 0;\r\n\r\n    while(index &lt; 256)\r\n    {\r\n        if(vetorAsc&#x5B;index].quantidade != 0)\r\n        {\r\n            printf(&quot;Posicao = %d | Letra: %c | Quantidade: %i\\n&quot;,index, vetorAsc&#x5B;index].asc, vetorAsc&#x5B;index].quantidade);\r\n            noArvore *noTemp = (noArvore *)malloc(sizeof(noArvore));\r\n            noTemp-&gt;quantidade = vetorAsc&#x5B;index].quantidade;\r\n            noTemp-&gt;letra = vetorAsc&#x5B;index].asc;\r\n            noTemp-&gt;f&#x5B;0] = noTemp-&gt;f&#x5B;1] = NULL;\r\n            vetorArvore.push_back(noTemp);\r\n        }\r\n        index++;\r\n    }\r\n\r\n    sort(vetorArvore.begin(), vetorArvore.end(), compareArvore);\r\n\r\n    while(vetorArvore.size() &gt; 1)\r\n    {\r\n        noArvore *noAux = (noArvore *)malloc(sizeof(noArvore));\r\n        noAux-&gt;f&#x5B;0] = vetorArvore&#x5B;0];\r\n        noAux-&gt;f&#x5B;1] = vetorArvore&#x5B;1];\r\n        noAux-&gt;quantidade = vetorArvore.at(0)-&gt;quantidade + vetorArvore.at(1)-&gt;quantidade;\r\n        vetorArvore.erase(vetorArvore.begin());\r\n        vetorArvore.erase(vetorArvore.begin());\r\n        vetorArvore.push_back(noAux);\r\n        sort(vetorArvore.begin(), vetorArvore.end(), compareArvore);\r\n    }\r\n\r\n    return 0;\r\n}\r\n<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>Ol\u00e1, pessoal. Aqui est\u00e1 o c\u00f3digo da codifica\u00e7\u00e3o Huffman que voc\u00eas fizeram em sala de aula (quer dizer, ainda falta pra chegar l\u00e1 :p). A partir desse c\u00f3digo voc\u00eas far\u00e3o o compactador. Na sexta, tiro as d\u00favidas de voc\u00eas. #include &hellip;<\/p>\n<p class=\"read-more\"> <a class=\"more-link\" href=\"https:\/\/just.pro.br\/blog\/2015\/11\/11\/codigo-huffman\/\"> <span class=\"screen-reader-text\">C\u00f3digo Huffman<\/span> Read More &raquo;<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[4,2],"tags":[],"class_list":["post-168","post","type-post","status-publish","format-standard","hentry","category-estrutura-de-dados-2","category-unifacs"],"_links":{"self":[{"href":"https:\/\/just.pro.br\/blog\/wp-json\/wp\/v2\/posts\/168","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/just.pro.br\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/just.pro.br\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/just.pro.br\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/just.pro.br\/blog\/wp-json\/wp\/v2\/comments?post=168"}],"version-history":[{"count":1,"href":"https:\/\/just.pro.br\/blog\/wp-json\/wp\/v2\/posts\/168\/revisions"}],"predecessor-version":[{"id":169,"href":"https:\/\/just.pro.br\/blog\/wp-json\/wp\/v2\/posts\/168\/revisions\/169"}],"wp:attachment":[{"href":"https:\/\/just.pro.br\/blog\/wp-json\/wp\/v2\/media?parent=168"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/just.pro.br\/blog\/wp-json\/wp\/v2\/categories?post=168"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/just.pro.br\/blog\/wp-json\/wp\/v2\/tags?post=168"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}