Últimos artigos
-
Esse artigo tem o objetivo de explicar os fundamentos e técnicas por trás do algoritmo de ordenação Insertion Sort. Serão apresentadas uma análise de complexidade de tempo e espaço assim como uma implementação completa em C++ do algoritmo. -
Esse artigo tem como objetivo explicar o que é o princípio filosófico conhecido como a Navalha de Ockham e como ele é utilizado dentro da Ciência da Computação. Exemplos e discussões sobre o tema também são apresentados neste texto.A navalha de Ockham na Ciência da Computação
-
Essa teoria vem da matemática do século 19 e é hoje aplicada como método formal de avaliação de algoritmos dentro da Ciência da Computação. Neste artigo você irá entender a história, a intuição e como adotamos este fundamento na análise de complexidade de algoritmos.Comportamento assintótico de funções
-
Este artigo explica os fundamentos da notação Ω (letra grega ômega) e os motivos pelos quais ela é tão essencial para a análise e complexidade de algoritmos. Exemplos de algoritmos e comportamento assintótico de funções serão mostrados ao longo deste artigo. Ao final você deverá compreender a importância e como aplicar este fundamento em seu dia à dia como cientista da computação.A notação Ômega
-
Este artigo detalha os fundamentos por trás da notação Θ (letra greta Theta) e os motivos pelos quais ela é tão essencial para a análise e complexidade de algoritmos. Exemplos de algoritmos e comportamento assintótico de funções serão detalhados ao longo deste artigo. Ao final você deverá compreender a importância e como aplicar este fundamento em seu dia à dia como cientista da computação.A notação Theta
-
Este artigo detalha os fundamentos por trás da notação O e os motivos pelos quais ela é tão essencial para a análise e complexidade de algoritmos. Exemplos de algoritmos, comportamento assintótico de funções, limites e análises serão detalhados ao longo deste artigo. Ao final você deverá compreender a importância e como aplicar este fundamento em seu dia à dia como cientista da computação.A notação O
-
Este artigo tem como objetivo explicar os detalhes de implementação da abstração Descritores de Arquivos que é utilizada pelo sistema operacional Linux para controlar arquivos. Iremos discutir o que eles são de fato no código do kernel do linux e como ele é importante. Além disso, exemplos de uso no sistema operacional serão apresentados.O que são file descriptors
-
Este artigo apresenta diferentes latências inerentes aos programas de computadores que nem sempre estão bem esclarecidos para um programador. Essas diferenças lhe darão uma visão global e impacto que cada uma delas tem em um algoritmo, programa ou sistema.Latências que todo programador deveria saber
-
Esse artigo descreve a estrutura de dados Ring Buffer ou Buffer circular. São discutidos as características, as aplicações, a versatilidade e as complexidades de tempo de espaço que envolvem essa tão importante estrutura de dados.Ring Buffer ou Buffer circular
-
Artigo explicando o que são as funções como serviço e como a computação serverless é tão importante para os provedores em nuvem. No artigo são apresentados o modelo, sua cronologia, os fundamentos, as vantagens e as limitações.Computação Serverless
-
Esse artigo tem como objetivo discutir e apresentar as diferenças entre arquivos texto e binário. Quais são as vantagens e desvantagens de usar ambos formatos. Exemplos de aplicações que os utilizam e de código que os manipula serão objeto desse artigo.Diferenças entre arquivos texto e binário
-
Esse artigo tem o objetivo de contextualizar e explicar o funcionamento da execução em Pipeline dentro de processadores. Serão abordados como o processador é projetado para permitir a execução em Pipeline e como ele acontece em tempo de execução.Organização e arquitetura de computadores - Pipeline em processadores
-
Um sinal de interrupção de software é uma maneira de comunicar informações entre processos sobre estado, sistema ou hardware com outro processo. Nesse artigo iremos entender como o Linux implementa os sinais de modo a garantir uma boa gestão de processos. Exemplos de implementação utilizando os sinais do Linux serão apresentados.Linux Signals - As interrupções de software na gestão de processos em sistemas operacionais
-
Esse artigo tem como objetivo apresentar o problema proposto por Dijkstra sobre sincronização na comunicação entre processos/threads dentro de um Sistema Operacional. Iremos compreender o problema através da analogia a um Jantar de filósofos. Iremos também escrever uma solução do problema em linguagem C++ e discutir o assunto sincronização.O Jantar dos filósofos - Problema de sincronização em Sistemas Operacionais
-
Esse artigo tem como objetivo explicar a intuição por trás do algoritmo Busca Binária ou Binary Search. Iremos ver como caso base a busca sequencial e, à partir disso, entender as motivações para a Busca Binária. Serão apresentadas implementações em linguagem C de forma recursiva e iterativa.Busca Binária
-
A lógica CMOS tem papel crucial na construção de circuito integrados muito grandes e cada vez menores. Nesse artigo iremos compreender como ela é implementada, suas características e limitações.CMOS - A lógica complementar de oxidação em metais semicondutores
-
Esse artigo tem como objetivo apresentar o circuito lógico Flip-Flop D utilizado como uma dos elementos de memória mais simples dentro da implementação de circuitos digitais utilizados em chips de computadores.Elementos de memória - O circuito lógico Flip-Flop D
-
Em ciência da computação um dos problemas utilizados como reflexão sobre a implementação e necessidade de protocolos de comunicação com confirmação é o problema dos dois exércitos. Conhecido também como problema dos generais bizantinos, iremos apresentar e discutir o problema utilizando o jogo Star CraftO problema dos dois exércitos e os protocolos com confirmação
-
Esse artigo tem o objetivo de explicar os fundamentos e técnicas por trás do algoritmo de ordenação Quicksort. Serão apresentadas uma análise de complexidade de tempo e espaço assim como uma implementação completa em C++ do algoritmo.O Algoritmo de ordenação Quicksort
-
Nesse artigo iremos analisar e implementar a estrutura de dados Tabela Hash utilizando a linguagem C++. Iremos abordar uma função hash básica e porquê ela é importante. Além disso veremos alguns casos de uso dessa estrutura de dados.Tipos abstratos de dados - Tabela Hash
-
Nesse artigo você aprenderá a não ter medo de ler artigos científicos. Iremos ver como eles são estruturados e como podemos absorver o conteúdo de maneira mais pragmática.Como ler artigos científicos
-
Esse artigo visa apresentar os conceitos e as abstrações que envolvem a implementação de um protocolo simples em cima da pilha TCP/IP através da API de baixo nível de Sockets utilizando a linguagem CProgramando um protocolo utilizando sockets
-
Esse artigo tem como objetivo apresentar o algoritmo de Busca em profundidade em uma solução prática escrita em C++. Serão discutidos sua complexidade de tempo e espaço assim como as características básicas do algoritmoBusca em profundidade
-
Esse artigo tem como objetivo apresentar o algoritmo de Busca em largura em uma solução prática escrita em C++. Serão discutidos sua complexidade de tempo e espaço assim como as características básicas do algoritmoBusca em largura
-
Esse artigo apresenta soluções algorítmicas para o problema de inverter strings sem inverter as palavras. Serão mostradas soluções que permite resolver o problema sem utilizar nenhuma variável temporária, ou seja, sem nenhum storage.Como inverter uma frase sem inverter as palavras
-
Para analisar um loop em um algoritmo ou verificar sua corretude utiliza-se técnicas como Invariantes de loop. Esse artigo tem o objetivo de explicar os fundamentos e como aplica-los para fazer essas verificações.Invariante de Laço - Loop invariants
-
O protocolo ARP traduz endereços Internet, os IPs, em endereços da camada física como os endereços MAC do protocolo Ethernet. Nesse artigo iremos ver as propriedades, funcionamento e exemplos de código sobre esse protocolo.O protocolo ARP - Address Resolution Protocol
-
As threads são fluxos de execução de um programa. Elas podem ou não compartilhar memória. Nesse artigo iremos ver os fundamentos sobre threads, suas características e limitações. Tudo isso através de um programa de exemplo escrito em C++.O que são e como funcionam as threads
-
Todo programa ao ser carregado pelo sistema operacional ganha um espaço de endereçamento. Existe uma área para alocações dinâmicas chamada Heap. Funções desse programa possuem uma pilha de memória (stack). Esse artigo tem o objetivo de mostrar as diferenças na alocação de memória entre essas duas áreas.Heap vs stack
-
As árvores de busca binária são estruturas de dados encadeadas e organizadas de forma binária. Cada item da estrutura possui referências para seus filhos à esquerda, direita e também para o seu parente. Esse artigo irá mostrar esses fundamentos e uma implementação em C++.Tipos abstratos de dados - Árvore de busca binária (Binary search tree)
-
As listas encadeadas (linked lists) são estruturas de dados organizadas em uma ordem linear baseadas em ponteiros e não por índices. Esse artigo tem o objetivo de apresentar os fundamentos das listas encadeadas e como implementá-las em C++.Tipos abstratos de dados - Lista encadeada (Linked list)
-
A fila (queue) é um dos mais simples tipos abstratos de dados. Esse artigo tem o objetivo de apresentar os fundamentos dessa estrutura de dados e mostrar uma implementação feita na linguagem C++.Tipos abstratos de dados - Fila (Queue)
-
Quando você digita uma url no seu navegador ele traduz o nome do domínio em um endereço IP para requisitar uma página Web. Esse artigo irá te mostrar como, através de sockets, é feito essa tradução.Resolvendo DNS com sockets
-
Os sockets são abstrações das camadas de rede para aplicações que precisam se comunicar com outras aplicações através de redes. Esse artigo tem o objetivo de explicar o funcionamento do sockets em baixo nível e porque eles são tão importantes.O que são e como funcionam os Sockets
-
A pilha (stack) é um dos mais simples tipos abstratos de dados. Esse artigo tem como objetivo apresentar os fundamentos dessa estrutura de dados e mostrar uma implementação básica em C++.Tipos abstratos de dados - Pilha (Stack)
-
O OpenFlow permitiu que pesquisadores pudessem criar experimentos com novos protocolos em redes convencionais. Nesse artigo entenderemos como funciona o protocolo OpenFlow e como ele permite aplicar SDN em nossas redes.O protocolo OpenFlow
-
As aplicações modernas evoluem de maneira muito rápida. Novos algoritmos são criados e facilmente experimentados. Já protocolos de rede não tem uma curva evolutiva assim. Esse artigo irá explicar como SDN pode facilitar isso.Redes definidas por software (Software Defined Networking)