{"id":441,"date":"2021-08-19T07:15:20","date_gmt":"2021-08-19T10:15:20","guid":{"rendered":"http:\/\/www.galirows.com.br\/meublog\/competir\/?page_id=441"},"modified":"2021-08-19T07:16:48","modified_gmt":"2021-08-19T10:16:48","slug":"muitas-saidas-para-serem-mostradas","status":"publish","type":"page","link":"http:\/\/www.galirows.com.br\/meublog\/competir\/dicas\/muitas-saidas-para-serem-mostradas\/","title":{"rendered":"Muitas sa\u00eddas para serem mostradas"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Imagine um situa\u00e7\u00e3o em que voc\u00ea precise mostrar um n\u00famero muito grande de valores na sa\u00edda.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Por exemplo, digamos que voc\u00ea precise mostrar 10 mil vezes um determinado valor. O c\u00f3digo para isso n\u00e3o \u00e9 nada complicado e \u00e9 mostrado a seguir (nas linguagens C e Python 3.x), em que eu simplesmente solicito que seja escrito o caractere 1.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"c\" class=\"language-c\">#include &lt;stdio.h&gt;\n\nint main() {\n  int i;\n\n  for (i = 0; i &lt; 10000; i++) {\n    printf(\"1\");\n  }\n\n  return 0;\n}<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"python\" class=\"language-python\">for i in range(10000):\n    print(\"1\", end = '')  <\/code><\/pre>\n\n\n\n<p class=\"has-text-align-right wp-block-paragraph\">No c\u00f3digo em Python utilizei o <em>end=&#8221;<\/em> para que os n\u00fameros n\u00e3o ficassem separados por um espa\u00e7o entre eles.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Veja que mesmo que nada precise ser calculado, a escrita dessa sa\u00edda exige um tempo de processamento, sendo esse tempo de escrita um tempo relativamente longo. Essa quest\u00e3o ficar\u00e1 clara no restante da explica\u00e7\u00e3o.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Inicialmente come\u00e7arei exemplificando a quest\u00e3o com a linguagem C, mas recomendo que, mesmo que o interesse seja a linguagem Python, a explica\u00e7\u00e3o seja acompanhada. <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Fiz a execu\u00e7\u00e3o do c\u00f3digo na linguagem C diversas vezes e obtive um tempo de execu\u00e7\u00e3o m\u00e9dio de 0,8 segundos. Parece um tempo pequeno, mas que pode comprometer o tempo limite da execu\u00e7\u00e3o de um algoritmo e pode ser significativamente melhorado.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Para melhorar o tempo de execu\u00e7\u00e3o com essas impress\u00f5es \u00e9 necess\u00e1rio utilizar menos o comando de impress\u00e3o. Para isso \u00e9 preciso armazenar os valores desejados e fa\u00e7o isso utilizando um vetor. No c\u00f3digo a seguir eu crio um vetor de caracteres e adiciono os valores nesse vetor, imprimindo o vetor ao final do processo.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"c\" class=\"language-c line-numbers\">#include &lt;stdio.h&gt;\n\n#define TAM 10000\nint main() {\n  int i;\n  char vet[TAM+1];\n\n  for (i = 0; i &lt; TAM; i++) {\n    vet[i] = '1';\n  }\n  vet[i] = '\\0';\n  printf(\"%s\", vet);\n\n  return 0;\n}<\/code><\/pre>\n\n\n\n<p class=\"has-text-align-right wp-block-paragraph\">Veja que na linha 11 eu adicionei um caractere &#8216;\\0&#8217; finalizar a string e \u00e9 por causa dele que o tamanho do vetor ficou com TAM+1 (para comportar os 10 mil valores mais esse caractere).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">O c\u00f3digo aumentou de complexidade, mas pelo fato de escrever a sa\u00edda apenas 1 vez, isso melhor a velocidade de execu\u00e7\u00e3o, que passou a ser de 0,02 segundos, ou seja, 40 vezes mais r\u00e1pido do que a solu\u00e7\u00e3o anterior.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Mesmo que a execu\u00e7\u00e3o seja mais r\u00e1pida, veja que a solu\u00e7\u00e3o ocupa mais mem\u00f3ria e que o uso de mem\u00f3ria pode exceder o limite dispon\u00edvel. Nesse caso, \u00e9 preciso alterar o c\u00f3digo ainda pensando em reduzir o uso dos printfs. No c\u00f3digo abaixo eu aumento em 100 vezes a quantidade de valores a serem impressos, mas sem aumentar a quantidade de mem\u00f3ria do c\u00f3digo anterior. Eu precisei dar mais prints, mas mesmo assim o tempo m\u00e9dio para a execu\u00e7\u00e3o do c\u00f3digo ficou em 0,06 segundos.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"c\" class=\"language-c\">#include &lt;stdio.h&gt;\n\n#define TAM 10000\nint main() {\n  int i,j;\n  char vet[TAM+1];\n\n  for (i = 0; i &lt; 100; i++) {\n    for (j = 0; j &lt; TAM; j++) {\n      vet[j] = '1';\n    }\n    vet[i] = '\\0';\n    printf(\"%s\", vet);\n  }\n\n  return 0;\n}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Para a linguagem Python \u00e9 ideia \u00e9 a mesma, mas tenho algumas observa\u00e7\u00f5es. Na linguagem Python existem algumas quest\u00f5es a serem vistas. Se eu executar o c\u00f3digo a seguir, o resultado ser\u00e1 mostrado no seguinte formato: [&#8216;1&#8217;, &#8216;1&#8217;, &#8216;1&#8217;, &#8230;. &#8216;1&#8217;]. <\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"python\" class=\"language-python\">vet = []\nfor i in range(TAM):\n    vet.append('1')\nprint(vet)<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u00c9 poss\u00edvel fazer uma string conforme fiz no c\u00f3digo em linguagem C. Mostro o c\u00f3digo abaixo, mas j\u00e1 aviso que o desempenho dele \u00e9 bastante ruim por causa das concatena\u00e7\u00f5es necess\u00e1rias, sendo inclusive pior do que a primeira solu\u00e7\u00e3o mostrada.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"python\" class=\"language-python\">saida = \"\"\nfor i in range(TAM):\n    saida = saida + '1'\nprint(saida)<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">A minha solu\u00e7\u00e3o para essa quest\u00e3o em Python \u00e9 utilizar um recurso do pr\u00f3prio <em>print <\/em>do Python. O asterisco na frente do nome da vari\u00e1vel \u00e9 para que sejam mostrados todos os valores do vetor de forma iterativa. o uso do <em>sep=&#8221;<\/em> \u00e9 para que n\u00e3o seja adicionado um espa\u00e7o entre os caracteres (\u00e9 a configura\u00e7\u00e3o para o que separador entre caracteres seja nada).<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"python\" class=\"language-python\">vet = []\nfor i in range(TAM):\n    vet.append('1')\nprint(*vet, sep='')<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Se quiser comparar os tempos de execu\u00e7\u00e3o de cada uma dessas solu\u00e7\u00f5es em Python, fiz um script com as solu\u00e7\u00f5es que est\u00e1 dispon\u00edvel em: <a href=\"https:\/\/py3.codeskulptor.org\/#user306_fYvT7MH09t_0.py\" target=\"_blank\" rel=\"noreferrer noopener\">https:\/\/py3.codeskulptor.org\/#user306_fYvT7MH09t_0.py<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Imagine um situa\u00e7\u00e3o em que voc\u00ea precise mostrar um n\u00famero muito grande de valores na sa\u00edda. Por exemplo, digamos que voc\u00ea precise mostrar 10 mil vezes um determinado valor. O c\u00f3digo para isso n\u00e3o \u00e9 nada complicado e \u00e9 mostrado a seguir (nas linguagens C e Python 3.x), em que eu simplesmente solicito que seja [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":410,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-441","page","type-page","status-publish","hentry"],"aioseo_notices":[],"amp_enabled":true,"_links":{"self":[{"href":"http:\/\/www.galirows.com.br\/meublog\/competir\/wp-json\/wp\/v2\/pages\/441","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/www.galirows.com.br\/meublog\/competir\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"http:\/\/www.galirows.com.br\/meublog\/competir\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"http:\/\/www.galirows.com.br\/meublog\/competir\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/www.galirows.com.br\/meublog\/competir\/wp-json\/wp\/v2\/comments?post=441"}],"version-history":[{"count":2,"href":"http:\/\/www.galirows.com.br\/meublog\/competir\/wp-json\/wp\/v2\/pages\/441\/revisions"}],"predecessor-version":[{"id":443,"href":"http:\/\/www.galirows.com.br\/meublog\/competir\/wp-json\/wp\/v2\/pages\/441\/revisions\/443"}],"up":[{"embeddable":true,"href":"http:\/\/www.galirows.com.br\/meublog\/competir\/wp-json\/wp\/v2\/pages\/410"}],"wp:attachment":[{"href":"http:\/\/www.galirows.com.br\/meublog\/competir\/wp-json\/wp\/v2\/media?parent=441"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}