{"id":9988,"date":"2023-12-04T20:47:54","date_gmt":"2023-12-04T23:47:54","guid":{"rendered":"https:\/\/elemarjr.com\/clube-de-estudos\/?post_type=artigos&#038;p=9988"},"modified":"2023-12-26T09:57:14","modified_gmt":"2023-12-26T12:57:14","slug":"processamento-ou-armazenamento-o-que-economizar","status":"publish","type":"artigos","link":"https:\/\/elemarjr.com\/clube-de-estudos\/artigos\/processamento-ou-armazenamento-o-que-economizar\/","title":{"rendered":"Processamento ou Armazenamento, O Que Economizar?"},"content":{"rendered":"\n<p>Estamos diante de um dilema cl\u00e1ssico no universo dos <em>algoritmos<\/em> e <em>estruturas de dados<\/em>: tomar decis\u00f5es \u00e9 um processo desafiador, especialmente quando essas decis\u00f5es impactam diretamente a efici\u00eancia de nossos programas. Como voc\u00ea j\u00e1 sabe, cada escolha envolve uma ren\u00fancia. Mas voc\u00ea j\u00e1 se pegou ponderando sobre o impacto que suas escolhas t\u00eam na efici\u00eancia de processamento em contraste com a efici\u00eancia de armazenamento?<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">O Dilema do Trade-off<\/h2>\n\n\n\n<p>Ao desenhar uma solu\u00e7\u00e3o, frequentemente nos deparamos com o trade-off entre a efici\u00eancia de processamento e efici\u00eancia de armazenamento. Esse desafio pode ser ilustrado por um cen\u00e1rio real que muitos de n\u00f3s podemos ter enfrentado: decidir qual estrutura de dados utilizar em um recurso cr\u00edtico de um aplicativo de alta performance. Se escolhermos estruturas que permitem inser\u00e7\u00f5es e dele\u00e7\u00f5es r\u00e1pidas, como listas ligadas, estaremos nos desviando do acesso r\u00e1pido que um array proporciona. Em contrapartida, se nossos requisitos exigirem acesso imediato, um array pode ser \u00f3timo, apesar das inser\u00e7\u00f5es e dele\u00e7\u00f5es serem mais custosas.<\/p>\n\n\n\n<p>Aqui est\u00e1 um exemplo pr\u00e1tico em C# que ilustra esse balanceamento:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" style=\"font-size:.875rem;line-height:1.25rem\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" data-code=\"\/\/ Array: Acesso r\u00e1pido, mas inser\u00e7\u00e3o e remo\u00e7\u00e3o lentas\nint[] dataArray = new int[1000];\ndataArray[500] = 123; \/\/ Acesso r\u00e1pido - O(1)\n\n\/\/ Lista Ligada: Inser\u00e7\u00e3o e remo\u00e7\u00e3o r\u00e1pidas, mas acesso lento\nLinkedList<int&gt; linkedList = new LinkedList<int&gt;();\nlinkedList.AddLast(123); \/\/ Inser\u00e7\u00e3o r\u00e1pida - O(1)\nint value = linkedList.ElementAt(500); \/\/ Acesso lento - O(n)\" style=\"color:#d8dee9ff;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki nord\" style=\"background-color: #2e3440ff\"><code><span class=\"line\"><span style=\"color: #616E88\">\/\/ Array: Acesso r\u00e1pido, mas inser\u00e7\u00e3o e remo\u00e7\u00e3o lentas<\/span><\/span>\n<span class=\"line\"><span style=\"color: #81A1C1\">int<\/span><span style=\"color: #ECEFF4\">[]<\/span><span style=\"color: #D8DEE9FF\"> dataArray <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">new<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">int<\/span><span style=\"color: #ECEFF4\">[<\/span><span style=\"color: #B48EAD\">1000<\/span><span style=\"color: #ECEFF4\">]<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9\">dataArray<\/span><span style=\"color: #ECEFF4\">[<\/span><span style=\"color: #B48EAD\">500<\/span><span style=\"color: #ECEFF4\">]<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #B48EAD\">123<\/span><span style=\"color: #81A1C1\">;<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #616E88\">\/\/ Acesso r\u00e1pido - O(1)<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #616E88\">\/\/ Lista Ligada: Inser\u00e7\u00e3o e remo\u00e7\u00e3o r\u00e1pidas, mas acesso lento<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">LinkedList<\/span><span style=\"color: #ECEFF4\">&lt;<\/span><span style=\"color: #81A1C1\">int<\/span><span style=\"color: #ECEFF4\">&gt;<\/span><span style=\"color: #D8DEE9FF\"> linkedList <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">new<\/span><span style=\"color: #D8DEE9FF\"> LinkedList<\/span><span style=\"color: #ECEFF4\">&lt;<\/span><span style=\"color: #81A1C1\">int<\/span><span style=\"color: #ECEFF4\">&gt;()<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9\">linkedList<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">AddLast<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #B48EAD\">123<\/span><span style=\"color: #ECEFF4\">)<\/span><span style=\"color: #81A1C1\">;<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #616E88\">\/\/ Inser\u00e7\u00e3o r\u00e1pida - O(1)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #81A1C1\">int<\/span><span style=\"color: #D8DEE9FF\"> value <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">linkedList<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">ElementAt<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #B48EAD\">500<\/span><span style=\"color: #ECEFF4\">)<\/span><span style=\"color: #81A1C1\">;<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #616E88\">\/\/ Acesso lento - O(n)<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>\u00c9 essencial reconhecer que cada escolha traz seus <em>trade-offs<\/em> e exigir\u00e1 que voc\u00ea renuncie a alguns aspectos em favor de outros.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">O Balan\u00e7o Entre Extremos<\/h2>\n\n\n\n<p>Encontrar o equil\u00edbrio certo entre efici\u00eancia de processamento e armazenamento \u00e9 uma habilidade cr\u00edtica para engenheiros de software. Voc\u00ea sacrifica armazenamento para ganhar velocidade ou prefere economizar espa\u00e7o aceitando uma performance um pouco menor? Contextos diferentes demandam respostas diferentes.<\/p>\n\n\n\n<p>Considere o Google Search, um sistema em que o tempo de resposta \u00e9 cr\u00edtico. O Google opta por estruturas que priorizam a velocidade, como os \u00edndices invertidos, que consumem mais espa\u00e7o mas proporcionam resultados de busca quase instant\u00e2neos. Em um dispositivo m\u00f3vel, no entanto, onde o espa\u00e7o de armazenamento \u00e9 precioso, a solu\u00e7\u00e3o pode requerer uma estrat\u00e9gia contr\u00e1ria.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Conclus\u00e3o<\/h2>\n\n\n\n<p>A decis\u00e3o de priorizar processamento ou armazenamento \u00e9 uma das mais fundamentais em engenharia de software, e deve ser tomada ap\u00f3s cuidadosa considera\u00e7\u00e3o do contexto da aplica\u00e7\u00e3o. Ao ponderar entre velocidade e espa\u00e7o, pergunte-se: o que \u00e9 mais cr\u00edtico para a minha aplica\u00e7\u00e3o? Esse artigo e outros t\u00f3picos relevantes s\u00e3o discutidos com profundidade nos meus grupos de estudos e mentorias, onde focamos em compartilhar melhores pr\u00e1ticas e estrat\u00e9gias de design de solu\u00e7\u00e3o adequada.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">TL;DR<\/h2>\n\n\n\n<ol class=\"wp-block-list\">\n<li>O trade-off entre efici\u00eancia de processamento e armazenamento \u00e9 um desafio comum na escolha de algoritmos e estruturas de dados.<\/li>\n\n\n\n<li>Estrat\u00e9gias como pr\u00e9-computa\u00e7\u00e3o e p\u00f3s-computa\u00e7\u00e3o priorizam respectivamente a velocidade e a economia de espa\u00e7o.<\/li>\n\n\n\n<li>A escolha do que economizar depende do contexto da aplica\u00e7\u00e3o e \u00e9 um tema central nos meus grupos de estudos e mentorias.<\/li>\n<\/ol>\n","protected":false},"featured_media":9961,"parent":0,"template":"","cursos":[5],"class_list":["post-9988","artigos","type-artigos","status-publish","has-post-thumbnail","hentry","cursos-algortimos"],"acf":[],"_links":{"self":[{"href":"https:\/\/elemarjr.com\/clube-de-estudos\/wp-json\/wp\/v2\/artigos\/9988","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/elemarjr.com\/clube-de-estudos\/wp-json\/wp\/v2\/artigos"}],"about":[{"href":"https:\/\/elemarjr.com\/clube-de-estudos\/wp-json\/wp\/v2\/types\/artigos"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/elemarjr.com\/clube-de-estudos\/wp-json\/wp\/v2\/media\/9961"}],"wp:attachment":[{"href":"https:\/\/elemarjr.com\/clube-de-estudos\/wp-json\/wp\/v2\/media?parent=9988"}],"wp:term":[{"taxonomy":"cursos","embeddable":true,"href":"https:\/\/elemarjr.com\/clube-de-estudos\/wp-json\/wp\/v2\/cursos?post=9988"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}