Até hoje eu não faço ideia de como passei em 2 semestres de estrutura de dados na faculdade, já que eu n entendia absolutamente NADA. Aí vem o Akita e em 1hr cria uma linked list de todo o conteúdo da minha cabeça e do nada tudo faz sentido!
@@porfiriodevCara eu também tô na mesma, não dava muita atenção pra essas aulas pq meu professor tinha uma didática péssima, e eu nem imaginava da importância delas, o Akita me deu uma nova visão sobre tudo que tive contato
@@pedrobarbieri9811 nossa, a minha era MT gente boa, mas também tinha uma didática horrível! E isso é fundamental pra entender arrays, grafos, árvores, etc. Faz muita falta esse conhecimento de base
Esse vídeo é difícil. Estou aqui pela terceira vez. Não é a didática, penso que é a complexidade do conteúdo. Que legal que tenho a oportunidade de rever várias vezes. Obrigado por compartilhar o seu tempo fazendo esse trabalho pra gente.
Quando você vê o Akita falando diretamente sobre C dois vídeos seguidos, você percebe que 2021 vai ser um ano foda!! Valeu d+ Akita O vídeo que muita gente tava esperando você falar sobre: Algoritmos e Estrutura de Dados
Apreciei muito este vídeo (e o anterior). Desde já deixo aqui minha congratulação pela produção de conteúdo de qualidade sem a necessidade de click baits, enganar o público com a filosofia do oba-oba e buscar views com base em hype, práticas tão comuns entres os "dev influencers". Sou um admirador do seu trabalho. Gostaria de pontuar detalhes de security dentro de alguns tópicos abordados e fazer algumas singelas retificações. Vou me deter apenas às peculiaridades da Linguagem C a luz do ISO/IEC 9899:1999 (e 2011), até porque a exposição dos conceitos subjacentes foi muito boa. Certamente recomendarei este vídeo (e o anterior) justamente àqueles que me solicitam material introdutório sobre a relação de C com as parte mais duras da máquina que ficam debaixo do capô. Eu acho importante esses pequenos detalhes porque Secure Coding e C na prática se tornaram inseparáveis, e para aqueles que estão apredendo é quase indispensável dar atenção ao tema. 05:05 A declaração de hello designa uma array de non-const chars com "automatic storage", numa análise a priori esse objeto é bem possível que esteja alocado na stack, sim, contudo seria muito dificil este estar alocado em .rodata, pois, vulgarmente falando, os elementos desta array são mutáveis. Se `hello` fosse declarado como `static const char hello[]` a chance de ser alocado em .rodata seria muito mais plausível. 24:10 Aqui *hash não é inicializada, o que, posteriormente, pode implicar em acessos a uma POSSÍVEL "trap representation" (resumindo: um padrão de bits de uma area de memória que não pode ser traduzido num valor válido de um determinado tipo), o que pode desencadear um "undefined behavior" à luz do Padrão. Não se pode supor que todos os objetos estarão corretamente inicializados, nem mesmo se fosse utilizado "calloc()" (função que aloca o objeto e inicializa os bits da memória em zero), pois não há garantias, à luz do Padrão, que este objeto cuja representação ostenta todos bits com valor zero possa ser traduzido no valor "null pointer". O correto seria inicializar os membros com NULL. Ou seja, eu estou afirmando que, à luz do Padrão, `memset(hash, 0, sizeof(*hash))` é diferente de `*hash = (struct Hash){{0}}`. 27:45 Caso semelhante ao anterior: node->next em createNode é deixado em estado não-inicializado. Acontece que em 29:01 é apresentada a função insertNode que faz uso da expressão node->next, que implica no acesso de uma POSSÍVEL "trap representation". Sobre este tópico específico: consultar a Regra EXP33-C do SEI CERT C Coding Standard
obrigadão pelo detalhamento e, claro, tem toda razão. eu falei de calloc e esqueci de usar ele. eu fico tentando simplificar a explicação pra não ficar confuso demais pra iniciante e esqueço de detalhes assim que na real são importantes.
Cara, você é fantástico. Resumiu vários períodos da faculdade em 2 vídeos no UA-cam. Recomendo fortemente para quem é autodidata. Realmente muito bom, parabéns 😬
Esse canal é a razão que ainda tenho fé na internet, eu comecei a faculdade de Ciência da Computação e comecei a assistir teus vídeos um pouco antes, está me ajudando de mais e sinto que vai me acompanhar por grande parte do meu desenvolvimento nesta carreira. Muito foda Akita! PS: Tira essas bonecas japonesas do cenário, tá me destraindo kkkk
Akita, ótimo vídeo mais uma vez. Sobre estatística: a curva Normal é característica da Distribuição Normal dos elementos, que apresenta ponto máximo, ou seja, pode-se haver acumulação de elementos em um determinado ponto. Acredito que o que você quis dizer era Distribuição Regular ou Uniforme, que é o cenário *IDEAL* para uma função de hash, pois os elementos se distribuem de forma igual diante de todo o domínio (inputs da função hash).
Akita: voces precisam estudar Algoritmos e Estruturas de dados... Eu: puts, mas é chato :( *Akita lança video sobre o assunto* Eu: CARALHO ISSO É MUITO FODA!
Tua eloquência é admirável, me faz ter uma saudades absurda de programar em C novamente, e revisitar todas as Estruturas de dados que na época tive dificuldades em absorver. Monstro!!!!
Depois de fazer a matéria de Estruturas de Dados duas vezes, passar com nota máxima na segunda, criar um repositório de estruturas de dados em php, finalmente consigo assistir 1 hora de video do Akita e entender 60% dele de primeira kkkkk
Akita, se eu não tivesse assistido 80% dos seus vídeos, eu diria que você também está fazendo Computação na Univesp. Esses dois últimos vídeos foram praticamente complementos às aulas das duas últimas semanas de Estruturas da Dados, com o adendo de fazer o link com a disciplina de Fundamentos Matemáticos para Computação. Muito legal, muito bom e muito obrigado pelo conteúdo.
Nos últimos dias , nos tempos livres , busco assistir aos vídeos deste canal. Honestamente, nunca vi um indivíduo tão capacitado fora dos filmes. Fogos ! Minha admiração
Fabio Akita, excelente exposição dos seus conhecimentos adquiridos na prática durante todos seus anos de trabalho. Você mostrou a todos que se as pessoas não aprenderem a sintaxe da linguagem C é impossível obter sucesso no desenvolvimento de qualquer programa.
Sem palavras Akita, não é a primeira vêz que eu to assistindo esse vídeo. Assisti algumas vezes pra entender, depois que entendi, assisti pra admirar os detalhes dessa Arte que vc faz. Parabéns
3 роки тому+2
Esses vídeos do Akita são e estão cada vez melhores. Foi quase um semestre de Ciência da Computação em 1 hora. Excelente!
Obrigado Akita, comecei a faculdade de engenharia elétrica a pouco tempo e quando comecei a estudar C você começa a fazer vídeo sobre C. Vai ser um grande aprendizado!
GRANDE MESTRE FABIO, estava vendo sua participação HipstersPonto da Alura, ficou show., venho aqui e me deparo com mais um conteúdo TOP. Só tenho que lhe agradecer por nos presentear com seus ensinamento. Gratidão!
Que video bem feito! Vou usar esses seus vídeo como uma ajuda na hora que eu não me lembrar de algo. Uma maneira que também fica bem interessante e que penso que deve funcionar para o insertNode seria: void insertNode(struct Hash *hash, char *key, char *value){ unsigned int index = hashCode(key); struct Node *node = Hash->list[index}; if(node == NULL){ hash->list[index] = createNode(key, value); } else { while(node->next != NULL) { node = node->next; } node->next = createNode(key, value) } }
Sobre os arrays. Fui ver como é feito no python e elas são listas ligadas onde temos uma matriz que mapeia o endereço do espaço novo alocado ao índice que usamos para acessar. Dessa forma ele consegue extender a lista sem precisar alocar um novo espaço e fazer a cópia de todos os elementos e o tempo de acesso a cada um continua estático pois [1] leva ao endereço da matriz que leva ao endereço alocado. Muito obrigado pelos vídeos Akita, ajuda muito nós estudos e a motivar!
Cara, tava tendo dificuldade de entender isso na faculdade, mas o vídeo ficou muito didático e ajudou bastante. O interessante é que o Akita traz o histórico do problema junto casos reais. Acho que esse é o grande problema da faculdade, ela deixa muitas coisas muito abstratas, e trazer o contexto do problema ajuda a entender muito mais o assunto. Como pode um vídeo tão curto ser tão explicativo sobre o assunto? Parabéns pela didática!
Akita, essa sua explicação de Hash ficou muito didática! Já tinha estudado e implementado, mas mesmo assim deu aquela "luz" pra olhar as coisas de forma mais visual, show!
Pra quem estiver procurando uma introdução mais leve e direta ao ponto, o livro "Entendendo Algoritmos: Um guia ilustrado para programadores e outros curiosos" de Aditya Y. Bhargava é uma boa pra iniciar.
Parabéns Fábio Akita, Poucas pessoas fazem um review do proprio video, consequentemente cria uma geração de reprodutores de erros que defendem estarem corretos, quando vejo um contéudo assim como o seu me orgulha o tempo que fico assistindo seus videos e coletando informações para segir na carreira. Obrigado por ser alguém Profissional e Humano.
Depois de assistir esse vídeo tenho 2 metas: 1. Assistir de novo todos os vídeos do Akita mas com caderno na mão anotando e estudando até entender tudo que tá sendo falado. 2. Necessito dessa blusa (aliás achei a sua cara dá até pra ler com a sua voz.).
to estudando algoritmos e estruturas de dados, vi várias implementações em diferentes linguagens, só consegui entender de fato depois de assistir esse video, a forma que o Akita explica é mt boa
Excelente vídeo Akita! É louco pensar que já ensinei estrutura de dados e teoria para uns (bons) ex-alunos que hoje estão na Codeminer, espero ter sido útil haha
Aos 6 minutos, é possível acontecer da string ser copiada para a stack caso seja escrito em forma/sintaxe de array e não ponteiro, principalmente se o array não for const (o compilador vai tender a copiar a string para dentro da área da stack do array, já que a section rodata não deve ser escrita durante a execução do programa), entretanto ao passar a variável para outras funções passará apenas o endereço mesmo. Eu tenho um código sobre isso no github, mas a última vez que colei aqui o youtube tirou o comentário por considerar spam provavelmente. Aos 51 mins, isso lembra o problema que foi resolvido recentemente no GTA V, onde um modder encontrou o motivo do load demorado do GTA Online: a função parecia parsear o json de itens do jogo usava uma implementação do sscanf que por baixo chamava strlen sempre, como os devs devem ter testado com uma lista pequena não notaram isso, mas conforme novos itens foram sendo adicionados no jogo o json chegou aos vários MB e o jogo começou a demorar muito pra dar load.
Eu ia exatamente falar sobre esse caso do GTA 5 , serio que sugeira aquilo, literalmente ninguém analisou o código, imagina bilhões de interações em um json maluco.
3 роки тому+20
Só digo uma coisa. Até os "FODÕES MASTER" erram, pq eu não posso errar também. Vamos pra cima nessa bagaceira. Sucesso pra todos nós.
Tem uma palestra recente do próprio Brian Kernighan em que ele explica uns pontos sobre C, e na palestra ele confessa ter que procurar as assinaturas das funções da própria stdlib do C porque não sabe de cabeça, e admite que o código que usa num exemplo lá não é robusto pra escalas maiores de dados de entrada Eu me senti menos pior como programador vendo isso fslfjsgkj
Lembrei do livro que estou lendo da mestra Loiane Groner, Estruturas de dados e algoritmos com JavaScript, super recomendo! Como sempre, parabéns pelo conteúdo Akita! a comunidade agradece s2
Cara que massa, por isso gosto dos seus vídeos e o seu jeito de ser, não tem frescura nenhuma em ensinar e mais ainda quando está errado, e faz um vídeo refatorando um vídeo anterior, sucesso sempre Akita!
Um ótimo vídeo que dá uma visão geral da área de estrutura de dados e algoritmos. É uma dos meus tópicos preferidos do mundo da computação, adorei estudar isso na faculdade. Com certeza, seu video reviveu o quanto esse tópico é fascinante. No meu canal, até estou produzindo vídeos-aulas deste tópico inspirado no Cormen e no que estudei pela graduação. Simplesmente fascinante!! Parabéns mais uma vez! =)
22:09 Em C puro você não precisa fazer typecast do ponteiro void que o malloc retorna, o compilador faz isso automaticamente. Já em C++ sim, é obrigatório fazer o que fizeste.
@@julio9577 Em C, programador tem que ficar bem atento mesmo, por um lado, se não fizer casting, o compilador pode achar ruim que vc está atribuindo um ponteiro void* para uma variavel com outro tipo. Por outro lado, se vc fizer o casting errado, vc pode estar acessando dados corrompidos.
Valeu Akita! O ecossistema de programação brasileiro carece MUITO de conteúdo de qualidade em C... é incrível sua capacidade de mesmo não sendo especialista nessa ferramenta ainda assim ser responsável por alguns dos melhores vídeos sobre o assunto. Por isso que dizem que asiático é tudo alien hehehe
Todas as sugestões de livros neste vídeo são muito pertinente, mas quando vi você mostrar o Rivest (57') fiquei ainda mais satisfeito e trouxe à memória o quão achava gostosa esta obra, quando estudei informática na universidade "La Sapienza" de Roma a partir de 1996. O Rivest era já um clássico naquela época. Não quero parecer saudosista e acredito que a literatura deva sempre melhorar, porém alguns clássicos continuam tendo grande valor didático. Como curiosidade, a capa do Rivest é uma obra do grande escultor estadunidense Alexander Calder, uma escultura realizada para ser pendurada e movimentada.
Cara muito obrigado, continua ai dando uma moral, para nós no C ou no Ruby.... está sendo muito contrutivo pra quem como eu ta começando as 39 anos, valeu .... cara sempre ta com uma camiseta foda.
Esse vídeo foi nostálgico pra mim. C foi minha primeira paixão nas linguagens de programação e depois entendi que isso só aconteceu por que eu tinha um professor sensacional, assim como o Akita. 😆
Na entrevista de emprego: Recrutador: Qual sua experiência com C? Eu: Acompanhei a playlist do Akita e acompanho até hoje. Recrutador: Bem vindo a vaga Senior!
Acabei agora de assistir pela segunda vez o primeiro vídeo sobre C para ver se entendia direito, e ele posta uma continuação kkkkkkkkkkkkkk (Akita, está faltando adicionar o primeiro vídeo de C na playlist "Programação para Iniciantes")
Ótimo vídeo Fábio. Só uma observação, acho que quando se referiu a uma distribuição aleatória, em que todos os elementos têm a mesma chance de aparecer para evitar colisões, quis dizer uma distribuição uniforme, e não gaussiana. Uma distribuição gaussiana, ou normal, teria mais colisões já que é centrada na média.
Parabéns pela aula, sim uma aula, há anos atras quando eu estava estudando estrutura de dados não tive este entendimento assim tão "mastigado", parabéns.
Suas explicações sempre são melhores e mais claras que dos meus professores! (Funcionário público não se esforça pelo salário que tem) Parabéns pelo canal continue assim!
KHDAS rsrsrs :-D No caso da distruibuição para função de gerador de hashes... teoricamente a distribuição normal não é boa, pois concentras os resultados ao redor de um valor médio. A função hash precisa gerá-las idealmente com uma distruibuição uniforme discreta... além disso, a distribuição normal só é aplicada à variáveis aleatórias contínuas também o que gera uma série de problemas... .... Eu estudei tanto essas coisas que não deu tempo de estudar desenvolvimento de sistemas... Errar é humano, mas akitar é divino! Obrigado mestre.
Ótimo vídeo, cada vídeo seu é cheio de conhecimento e extremamente educativo, parabéns. Apenas uma dica caso não queira ter que ficar sempre usando struct antes de declarar suas variáveis. Pode-se usar a palavra-chave typedef e encurtar isso. Para o caso da struct Node, você pode usar typedef para fazer uso apenas da palavra "Node" para se referir a "struct Node". Primeira forma: struct Node{ int value; struct Node *previous; }; typedef struct Node Node; Segunda forma: typedef struct Node{ int value; struct Node *previous; }Node; Aí no código em vez de declarar uma variável assim: struct Node *node = ... você poderá declarar assim: Node *node = ... O que por consequência permite mudar: sizeof (struct Node) para: sizeof (Node)
Akita como sempre desbravando o mundo dos hexadecimais and bytes !!! A cada vídeo um novo ensinamento e uma nova vontade de aprender algo novo (Pra mim claro) e diferente ! #NetKita #vlw
Às vezes é dificil de perceber que o Akita deixou o cabelo crescer...
3 роки тому
Seria interessante falar também das desvantagens em relação a cache misses entre as estruturas, mas aí também cairiamos em AoS vs SoA que poderiam ter um vídeo só para esses tópicos de micro optimizações. Como sempre, ótimo video!
Cheguei ao ponto de dormir ouvindo o podcast do akita ! parabéns seus conteúdos são de altissimo valor, irei continuar sendo seu jovem padawan mestre akita
22:54 Curti como você usou as funções antes mesmo de implementá-las. Uma semi orientação a objetos aí 😅 "programe para interfaces, e não para implementações"
Monstro demais... Estou penando a 2 anos com engenharia de software, sou autodidata e tudo que sei foi mais especulação do que ciência, então muita coisa fica difícil de entrar na cabeça depois dos 40 anos .. bora perseguir o nível Akita de programação
Muito foda o vídeo. Comecei a ler o Introduction to Algorithms mês passado e tinha boiado na explicação do Big Theta e Big Omega. Esse vídeo deu uma esclarecida.
3 роки тому
Veeelho.... quero uma camiseta dessas! hahahahhaahah Um ótimo vídeo cara... muito bom mesmo, em dois vídeos explica melhor do que cursos e cursos inteiros.
cara o akita é simplesmente Fodástico!! O cara tinha de tudo pra tá curtindo a vida sem compromisso nenhum e faz videos de 1hora ou mais e fora o que acontece nos bastidores (edição e companhia ltda rsrs) isso é quase uma consultoria!! P Q P. Que Deus te abençoe meu caro, você esta mudando minha visão sobre programação te conheci faz 1 ano e ontem completei 20 anos tenho muita sorte de conhecer um canal desses e poder me direcionar melhor junto com os estudos da faculdade complementar com esse mundarel de conteúdo... Isso que eu faço engenharia de produção de software... Que tem muita pouca coisa de programação no começo o forte mesmo vem a partir do 3 ano
Parabéns pelos vídeos, Akita. Quisera eu ter acesso a esse tipo de material durantes meus anos de faculdade. Tive que aprender alguns dos pontos explicados no vídeo na marra. Enfim, bom pro pessoal que tá aprendendo agora.
Sensei Akita, já pensou em fazer um sobre assembly x86/64? Um hello world ficaria incrível e poderia falar de chamadas ao sistema e mostrar meio que um código C equivalente. Mostrando com ifes, whiles, fores são convertidos em linguagem de máquina (e os registradores de trabalho, ip, flags). Depois poderia ter um falando sobre stack. E também poderia falar sobre uma retrospectiva histórica do assembly x86. Ficaria incrível. Um incrível Hello Underword! Acho que fecharia com chave de ouro! Obrigado, mestre!
Uma observação: em 40:05, o Akita menciona que 'i' deve ir até 'total - 1', o que está correto já que o array tem 15 posições (0 a 14). O erro está na condição. 'i < total - 1', que vai parar em 13 ao invés de 14. Isso porque total - 1 nesse caso é 14, representando o último elemento do array, mas o operador '
Boa noite! muito bom o vídeo! Um sucesso, por hora conversamos sobre como ficou menos "mágico" o que acontece nos bastidores. Realmente esse erros são uma "bostinha" (coisa pequena) perto do conteúdo apresentado. Continuo aguardando a sequência e parabéns! Pena que demora 15 dias! kkkkk. Valeuuuu!
Akita, vc vai abordar também sobre complexidade de espaço? Como por exemplo o Merge Sorte apesar de ter uma complexidade de tempo de execução de O(n*logn), ele cria vários arrays, tendo a complexidade de espaço de O(n) que quando nós falamos de sorting de arrays grandes pode ser um fator que leve a falta de memória.
Depois desse vídeo: "só sei que nada sei e o pouco que sei, tô duvidando se sei mesmo."
Essa é a magia! Não desista!
Muito bom! 😂
30 minutos de aula ead: "que negócio chato bicho"
1 hora de vídeo do Akita: "meu Deus do céu, computação é incrível"
Até hoje eu não faço ideia de como passei em 2 semestres de estrutura de dados na faculdade, já que eu n entendia absolutamente NADA. Aí vem o Akita e em 1hr cria uma linked list de todo o conteúdo da minha cabeça e do nada tudo faz sentido!
@@porfiriodevCara eu também tô na mesma, não dava muita atenção pra essas aulas pq meu professor tinha uma didática péssima, e eu nem imaginava da importância delas, o Akita me deu uma nova visão sobre tudo que tive contato
@@pedrobarbieri9811 nossa, a minha era MT gente boa, mas também tinha uma didática horrível! E isso é fundamental pra entender arrays, grafos, árvores, etc. Faz muita falta esse conhecimento de base
Recrutador: Qual sua experiência?
Eu: Estudo os vídeos do Akita.
Recrutador: Tá contratado!
Recrutador: kkkkkk Então,. toma aí uma prova com os conteúdos que ele falou!
Eu: Então, deixa...
@@RodrigoSantos-ch2ej puts ahahahahahahahaha, tem que assistir com uma lista anotando os hotspots po, pra estudar depois
"Eu estudo os videos do Akita um vez só....e entendo" - Quer virar meu sócio?
@@Viller01 vou te falar... Pior que faço isso! Mas, tem tanta coisa pra estudar que as vezes fico meio: "Tô meio perdido aqui, véio!"
@@hex_maquina kkkkk nesse nível!!
Deveria ter um botão chamado "Pô, meu velho, muito obrigado pelo conteúdo e que Deus te abençoe sempre"
Esse vídeo é difícil. Estou aqui pela terceira vez. Não é a didática, penso que é a complexidade do conteúdo. Que legal que tenho a oportunidade de rever várias vezes. Obrigado por compartilhar o seu tempo fazendo esse trabalho pra gente.
Quando você vê o Akita falando diretamente sobre C dois vídeos seguidos, você percebe que 2021 vai ser um ano foda!! Valeu d+ Akita
O vídeo que muita gente tava esperando você falar sobre: Algoritmos e Estrutura de Dados
Lembrando que essa foi só a introdução. Tem mais pra vir. ❤️
Vim do futuro para dizer que ele já lançou o 3º vídeo de C!
E foi um ano foda d++, mesmo...
Minha 1a oportunidade na área veio depois da luz que esse e outros vídeos do homem foram lançados xD
Feliz ano novo!!!
Apreciei muito este vídeo (e o anterior). Desde já deixo aqui minha congratulação pela produção de conteúdo de qualidade sem a necessidade de click baits, enganar o público com a filosofia do oba-oba e buscar views com base em hype, práticas tão comuns entres os "dev influencers". Sou um admirador do seu trabalho.
Gostaria de pontuar detalhes de security dentro de alguns tópicos abordados e fazer algumas singelas retificações. Vou me deter apenas às peculiaridades da Linguagem C a luz do ISO/IEC 9899:1999 (e 2011), até porque a exposição dos conceitos subjacentes foi muito boa. Certamente recomendarei este vídeo (e o anterior) justamente àqueles que me solicitam material introdutório sobre a relação de C com as parte mais duras da máquina que ficam debaixo do capô. Eu acho importante esses pequenos detalhes porque Secure Coding e C na prática se tornaram inseparáveis, e para aqueles que estão apredendo é quase indispensável dar atenção ao tema.
05:05
A declaração de hello designa uma array de non-const chars com "automatic storage", numa análise a priori esse objeto é bem possível que esteja alocado na stack, sim, contudo seria muito dificil este estar alocado em .rodata, pois, vulgarmente falando, os elementos desta array são mutáveis. Se `hello` fosse declarado como `static const char hello[]` a chance de ser alocado em .rodata seria muito mais plausível.
24:10
Aqui *hash não é inicializada, o que, posteriormente, pode implicar em acessos a uma POSSÍVEL "trap representation" (resumindo: um padrão de bits de uma area de memória que não pode ser traduzido num valor válido de um determinado tipo), o que pode desencadear um "undefined behavior" à luz do Padrão. Não se pode supor que todos os objetos estarão corretamente inicializados, nem mesmo se fosse utilizado "calloc()" (função que aloca o objeto e inicializa os bits da memória em zero), pois não há garantias, à luz do Padrão, que este objeto cuja representação ostenta todos bits com valor zero possa ser traduzido no valor "null pointer". O correto seria inicializar os membros com NULL. Ou seja, eu estou afirmando que, à luz do Padrão, `memset(hash, 0, sizeof(*hash))` é diferente de `*hash = (struct Hash){{0}}`.
27:45
Caso semelhante ao anterior: node->next em createNode é deixado em estado não-inicializado. Acontece que em 29:01 é apresentada a função insertNode que faz uso da expressão node->next, que implica no acesso de uma POSSÍVEL "trap representation".
Sobre este tópico específico: consultar a Regra EXP33-C do SEI CERT C Coding Standard
obrigadão pelo detalhamento e, claro, tem toda razão. eu falei de calloc e esqueci de usar ele. eu fico tentando simplificar a explicação pra não ficar confuso demais pra iniciante e esqueço de detalhes assim que na real são importantes.
Esses 59:00 minutos de vídeo são melhores do que 4:00 horas de aula na faculdade
Akita eu te amo, entenda kkk🥰🥰🥰🥰💞
Cara, você é fantástico. Resumiu vários períodos da faculdade em 2 vídeos no UA-cam. Recomendo fortemente para quem é autodidata. Realmente muito bom, parabéns 😬
Esse canal é a razão que ainda tenho fé na internet, eu comecei a faculdade de Ciência da Computação e comecei a assistir teus vídeos um pouco antes, está me ajudando de mais e sinto que vai me acompanhar por grande parte do meu desenvolvimento nesta carreira. Muito foda Akita! PS: Tira essas bonecas japonesas do cenário, tá me destraindo kkkk
Akita, ótimo vídeo mais uma vez. Sobre estatística: a curva Normal é característica da Distribuição Normal dos elementos, que apresenta ponto máximo, ou seja, pode-se haver acumulação de elementos em um determinado ponto. Acredito que o que você quis dizer era Distribuição Regular ou Uniforme, que é o cenário *IDEAL* para uma função de hash, pois os elementos se distribuem de forma igual diante de todo o domínio (inputs da função hash).
é uniforme, eu falei errado. tá nas erratas
Humildade é tudo. Independentemente de alguns erros, sua iniciativa e conteúdo é de grande valia meu amigo. Grande abraço!
Akita: voces precisam estudar Algoritmos e Estruturas de dados...
Eu: puts, mas é chato :(
*Akita lança video sobre o assunto*
Eu: CARALHO ISSO É MUITO FODA!
Tua eloquência é admirável, me faz ter uma saudades absurda de programar em C novamente,
e revisitar todas as Estruturas de dados que na época tive dificuldades em absorver. Monstro!!!!
Melhor notificação! Akita, não pare de postar nunca!!!
Dr. Akita, o senhor é o Hermes da Informática. Thank you for share you knowledge with us.
Ah como esses vídeos são essenciais! Parabéns pelo trabalho Akita!!
Depois de fazer a matéria de Estruturas de Dados duas vezes, passar com nota máxima na segunda, criar um repositório de estruturas de dados em php, finalmente consigo assistir 1 hora de video do Akita e entender 60% dele de primeira kkkkk
vish, vou começar essa matéria esse mês, to dando uma passada pra ver oque a por vir👀
@@gustavohenriquenascimentod3992 eai passou?
Akita, se eu não tivesse assistido 80% dos seus vídeos, eu diria que você também está fazendo Computação na Univesp. Esses dois últimos vídeos foram praticamente complementos às aulas das duas últimas semanas de Estruturas da Dados, com o adendo de fazer o link com a disciplina de Fundamentos Matemáticos para Computação. Muito legal, muito bom e muito obrigado pelo conteúdo.
Que aula! Como sempre falo não sou da área mas curto demais ver as explicações e ler os comentários do pessoal!
Didática é foda!
Tem coisa melhor que receber uma notificação de vídeo novo do Akita?
1 visualização, 64 likes, este homem é um deus msm. Ansioso pra ver!
Nos últimos dias , nos tempos livres , busco assistir aos vídeos deste canal. Honestamente, nunca vi um indivíduo tão capacitado fora dos filmes. Fogos ! Minha admiração
Fabio Akita, excelente exposição dos seus conhecimentos adquiridos na prática durante todos seus anos de trabalho. Você mostrou a todos que se as pessoas não aprenderem a sintaxe da linguagem C é impossível obter sucesso no desenvolvimento de qualquer programa.
Sem palavras Akita, não é a primeira vêz que eu to assistindo esse vídeo. Assisti algumas vezes pra entender, depois que entendi, assisti pra admirar os detalhes dessa Arte que vc faz.
Parabéns
Esses vídeos do Akita são e estão cada vez melhores. Foi quase um semestre de Ciência da Computação em 1 hora. Excelente!
Video do Akita se refutando, tem meu like! kkkkk
Conteúdo Partilhado com êxito. Muito obrigado pelo conhecimento oferecido a comunidade. Meus parabéns pelo trabalho.
Obrigado Akita, comecei a faculdade de engenharia elétrica a pouco tempo e quando comecei a estudar C você começa a fazer vídeo sobre C. Vai ser um grande aprendizado!
GRANDE MESTRE FABIO, estava vendo sua participação HipstersPonto da Alura, ficou show., venho aqui e me deparo com mais um conteúdo TOP. Só tenho que lhe agradecer por nos presentear com seus ensinamento. Gratidão!
Que video bem feito! Vou usar esses seus vídeo como uma ajuda na hora que eu não me lembrar de algo. Uma maneira que também fica bem interessante e que penso que deve funcionar para o insertNode seria:
void insertNode(struct Hash *hash, char *key, char *value){
unsigned int index = hashCode(key);
struct Node *node = Hash->list[index};
if(node == NULL){
hash->list[index] = createNode(key, value);
} else {
while(node->next != NULL) {
node = node->next;
}
node->next = createNode(key, value)
}
}
Sobre os arrays. Fui ver como é feito no python e elas são listas ligadas onde temos uma matriz que mapeia o endereço do espaço novo alocado ao índice que usamos para acessar. Dessa forma ele consegue extender a lista sem precisar alocar um novo espaço e fazer a cópia de todos os elementos e o tempo de acesso a cada um continua estático pois [1] leva ao endereço da matriz que leva ao endereço alocado.
Muito obrigado pelos vídeos Akita, ajuda muito nós estudos e a motivar!
Cara, tava tendo dificuldade de entender isso na faculdade, mas o vídeo ficou muito didático e ajudou bastante. O interessante é que o Akita traz o histórico do problema junto casos reais. Acho que esse é o grande problema da faculdade, ela deixa muitas coisas muito abstratas, e trazer o contexto do problema ajuda a entender muito mais o assunto. Como pode um vídeo tão curto ser tão explicativo sobre o assunto? Parabéns pela didática!
Akita, essa sua explicação de Hash ficou muito didática!
Já tinha estudado e implementado, mas mesmo assim deu aquela "luz" pra olhar as coisas de forma mais visual, show!
Ia ser mt massa um video sobre grafos , árvores e dp
O cabelo do Akira estava bugando meu cérebro 🧠 tipo truques da mente. Foi só comigo ?
Pra quem estiver procurando uma introdução mais leve e direta ao ponto, o livro "Entendendo Algoritmos: Um guia ilustrado para programadores e outros curiosos" de Aditya Y. Bhargava é uma boa pra iniciar.
Vdd, esse livro é muito bom msm!
"Vamos consertar o C cagado do akita", acho que na leitura rápida não soaria tão bem kkkkk / 5ª série
Pelo menos não foi C# ,né kkkkkkk
kkkkkkkkkkkkk eu ri
Bug no C dos outros é refresco.
@@ruanpablo2002 Quem tem C# tem medo
Meu Deus, se fosse C# seria perfeito o comentário, em C já foi muito bom 🤣🤣🤣🤣🤣
Parabéns Fábio Akita,
Poucas pessoas fazem um review do proprio video, consequentemente cria uma geração de reprodutores de erros que defendem estarem corretos, quando vejo um contéudo assim como o seu me orgulha o tempo que fico assistindo seus videos e coletando informações para segir na carreira.
Obrigado por ser alguém Profissional e Humano.
Depois de assistir esse vídeo tenho 2 metas:
1. Assistir de novo todos os vídeos do Akita mas com caderno na mão anotando e estudando até entender tudo que tá sendo falado.
2. Necessito dessa blusa (aliás achei a sua cara dá até pra ler com a sua voz.).
Parabéns pelo vídeo Akita !!!! Sem duvidas um dos melhores.
Obrigada Akita pelo vídeo, cada dia sinto-me mais motivada a estudar. Excelebte canal. Parabéns.
Só aqui no Akitando eu curto o vídeo antes de assistir. Qualidade garantida!!!
to estudando algoritmos e estruturas de dados, vi várias implementações em diferentes linguagens, só consegui entender de fato depois de assistir esse video, a forma que o Akita explica é mt boa
Sensacional, eu sempre tenho dificuldade em determinar a complexidade de algoritmos, a explicação ajudou!!!
Excelente vídeo Akita! É louco pensar que já ensinei estrutura de dados e teoria para uns (bons) ex-alunos que hoje estão na Codeminer, espero ter sido útil haha
Obrigadão!👊
Akita sempre dando uma força para eu saber o quanto não sei de nada hahaha. Obrigado mestre, ótimo vídeo!
Mais um vídeo de muito conteúdo!
Valeu Akita!
A camiseta ficou ótima!
Aos 6 minutos, é possível acontecer da string ser copiada para a stack caso seja escrito em forma/sintaxe de array e não ponteiro, principalmente se o array não for const (o compilador vai tender a copiar a string para dentro da área da stack do array, já que a section rodata não deve ser escrita durante a execução do programa), entretanto ao passar a variável para outras funções passará apenas o endereço mesmo.
Eu tenho um código sobre isso no github, mas a última vez que colei aqui o youtube tirou o comentário por considerar spam provavelmente.
Aos 51 mins, isso lembra o problema que foi resolvido recentemente no GTA V, onde um modder encontrou o motivo do load demorado do GTA Online: a função parecia parsear o json de itens do jogo usava uma implementação do sscanf que por baixo chamava strlen sempre, como os devs devem ter testado com uma lista pequena não notaram isso, mas conforme novos itens foram sendo adicionados no jogo o json chegou aos vários MB e o jogo começou a demorar muito pra dar load.
Eu ia exatamente falar sobre esse caso do GTA 5 , serio que sugeira aquilo, literalmente ninguém analisou o código, imagina bilhões de interações em um json maluco.
Só digo uma coisa. Até os "FODÕES MASTER" erram, pq eu não posso errar também. Vamos pra cima nessa bagaceira. Sucesso pra todos nós.
esse é o pensamento, todos estamos igualmente sujeitos a tudo.
@@lucasgadelha137 Verdade meu amigo, vamos nos permitir a errar também, mas sempre aprendendo com os erros. Forte abraço.
Tem uma palestra recente do próprio Brian Kernighan em que ele explica uns pontos sobre C, e na palestra ele confessa ter que procurar as assinaturas das funções da própria stdlib do C porque não sabe de cabeça, e admite que o código que usa num exemplo lá não é robusto pra escalas maiores de dados de entrada
Eu me senti menos pior como programador vendo isso fslfjsgkj
Lembrei do livro que estou lendo da mestra Loiane Groner, Estruturas de dados e algoritmos com JavaScript, super recomendo!
Como sempre, parabéns pelo conteúdo Akita! a comunidade agradece s2
Cara que massa, por isso gosto dos seus vídeos e o seu jeito de ser, não tem frescura nenhuma em ensinar e mais ainda quando está errado, e faz um vídeo refatorando um vídeo anterior, sucesso sempre Akita!
os videos do Akita ta sendo um norte para o que eu tenho que estuda.Obrigadão, Akita.
Um ótimo vídeo que dá uma visão geral da área de estrutura de dados e algoritmos. É uma dos meus tópicos preferidos do mundo da computação, adorei estudar isso na faculdade. Com certeza, seu video reviveu o quanto esse tópico é fascinante. No meu canal, até estou produzindo vídeos-aulas deste tópico inspirado no Cormen e no que estudei pela graduação. Simplesmente fascinante!! Parabéns mais uma vez! =)
22:09 Em C puro você não precisa fazer typecast do ponteiro void que o malloc retorna, o compilador faz isso automaticamente. Já em C++ sim, é obrigatório fazer o que fizeste.
Alguns compiladores de C podem gerar um warning ou um erro dependendo da configuração.
Realmente, e também fazer o casting no malloc pode mascarar erros.
@@julio9577 Em C, programador tem que ficar bem atento mesmo, por um lado, se não fizer casting, o compilador pode achar ruim que vc está atribuindo um ponteiro void* para uma variavel com outro tipo. Por outro lado, se vc fizer o casting errado, vc pode estar acessando dados corrompidos.
Valeu Akita! O ecossistema de programação brasileiro carece MUITO de conteúdo de qualidade em C... é incrível sua capacidade de mesmo não sendo especialista nessa ferramenta ainda assim ser responsável por alguns dos melhores vídeos sobre o assunto. Por isso que dizem que asiático é tudo alien hehehe
Muito bom! Você possui excelente didática. Por um lado foi bom ter acontecido alguns erros, pois você fez esse outro vídeo top falando de C hehehe
Tava estudando estrutura de dados essa semana, tinha acabado de ver linked list. Seus vídeos são incríveis, vlww Akita.
Tipo de notificação que melhora nosso dia.
26:41 esse foi o melhor exemplo pra explicação de hash que eu já ouvi, parabéns pelo conteúdo
Todas as sugestões de livros neste vídeo são muito pertinente, mas quando vi você mostrar o Rivest (57') fiquei ainda mais satisfeito e trouxe à memória o quão achava gostosa esta obra, quando estudei informática na universidade "La Sapienza" de Roma a partir de 1996. O Rivest era já um clássico naquela época. Não quero parecer saudosista e acredito que a literatura deva sempre melhorar, porém alguns clássicos continuam tendo grande valor didático.
Como curiosidade, a capa do Rivest é uma obra do grande escultor estadunidense Alexander Calder, uma escultura realizada para ser pendurada e movimentada.
Cara muito obrigado, continua ai dando uma moral, para nós no C ou no Ruby.... está sendo muito contrutivo pra quem como eu ta começando as 39 anos, valeu .... cara sempre ta com uma camiseta foda.
Esse vídeo foi nostálgico pra mim. C foi minha primeira paixão nas linguagens de programação e depois entendi que isso só aconteceu por que eu tinha um professor sensacional, assim como o Akita. 😆
Na entrevista de emprego:
Recrutador: Qual sua experiência com C?
Eu: Acompanhei a playlist do Akita e acompanho até hoje.
Recrutador: Bem vindo a vaga Senior!
Acabei agora de assistir pela segunda vez o primeiro vídeo sobre C para ver se entendia direito, e ele posta uma continuação kkkkkkkkkkkkkk
(Akita, está faltando adicionar o primeiro vídeo de C na playlist "Programação para Iniciantes")
bem lembrado, adicionei!
@@Akitando Tmj! Seu trabalho é incrível!
Ótimo vídeo Fábio. Só uma observação, acho que quando se referiu a uma distribuição aleatória, em que todos os elementos têm a mesma chance de aparecer para evitar colisões, quis dizer uma distribuição uniforme, e não gaussiana. Uma distribuição gaussiana, ou normal, teria mais colisões já que é centrada na média.
Comentei mas já notaram haha.
@@matheuszabin Eu ia comentar, mas fui procurar para ver se alguém já tinha visto! kkkkk Like pros dois! ;-)
Não indica cursos, o cara indica LIVRO. Um dos poucos canais de Programação onde tem Programação mesmo.
Parabéns pela aula, sim uma aula, há anos atras quando eu estava estudando estrutura de dados não tive este entendimento assim tão "mastigado", parabéns.
Suas explicações sempre são melhores e mais claras que dos meus professores! (Funcionário público não se esforça pelo salário que tem)
Parabéns pelo canal continue assim!
Akita sensei sempre ajudando. Obrigado!
KHDAS rsrsrs :-D No caso da distruibuição para função de gerador de hashes... teoricamente a distribuição normal não é boa, pois concentras os resultados ao redor de um valor médio. A função hash precisa gerá-las idealmente com uma distruibuição uniforme discreta... além disso, a distribuição normal só é aplicada à variáveis aleatórias contínuas também o que gera uma série de problemas... .... Eu estudei tanto essas coisas que não deu tempo de estudar desenvolvimento de sistemas... Errar é humano, mas akitar é divino! Obrigado mestre.
sim, eu bobeei, já tá na errata.
Vim do javascript e estou iniciando no java e esses videos estão sendo absurdamente educativos pra mim. Muito obrigado.
Qualidade do vídeo está excepcional Fábio
Ótimo vídeo, cada vídeo seu é cheio de conhecimento e extremamente educativo, parabéns.
Apenas uma dica caso não queira ter que ficar sempre usando struct antes de declarar suas variáveis. Pode-se usar a palavra-chave typedef e encurtar isso.
Para o caso da struct Node, você pode usar typedef para fazer uso apenas da palavra "Node" para se referir a "struct Node".
Primeira forma:
struct Node{
int value;
struct Node *previous;
};
typedef struct Node Node;
Segunda forma:
typedef struct Node{
int value;
struct Node *previous;
}Node;
Aí no código em vez de declarar uma variável assim:
struct Node *node = ...
você poderá declarar assim:
Node *node = ...
O que por consequência permite mudar:
sizeof (struct Node)
para:
sizeof (Node)
Sim, bem lembrado. Não fiz ainda pra não ter que explicar isso nesses vídeos. Mas faço no próximo.
Akita como sempre desbravando o mundo dos hexadecimais and bytes !!! A cada vídeo um novo ensinamento e uma nova vontade de aprender algo novo (Pra mim claro) e diferente ! #NetKita #vlw
Às vezes é dificil de perceber que o Akita deixou o cabelo crescer...
Seria interessante falar também das desvantagens em relação a cache misses entre as estruturas, mas aí também cairiamos em AoS vs SoA que poderiam ter um vídeo só para esses tópicos de micro optimizações. Como sempre, ótimo video!
um vídeo melhor que o outro... parabéns Fábio !!!
Cheguei ao ponto de dormir ouvindo o podcast do akita ! parabéns seus conteúdos são de altissimo valor, irei continuar sendo seu jovem padawan mestre akita
Não aguento assistir uma aula EAD, mas quando o vídeo do Akita de 1 hora acaba eu fico puto.
"Como assim já acabou ?" 😂😂
Eu já chego dando like porque sei que o conteúdo é foda!
22:54
Curti como você usou as funções antes mesmo de implementá-las. Uma semi orientação a objetos aí 😅 "programe para interfaces, e não para implementações"
Monstro demais... Estou penando a 2 anos com engenharia de software, sou autodidata e tudo que sei foi mais especulação do que ciência, então muita coisa fica difícil de entrar na cabeça depois dos 40 anos .. bora perseguir o nível Akita de programação
Sempre a melhor notificação, paro tudo que estou fazendo para assistir.
Muito foda o vídeo.
Comecei a ler o Introduction to Algorithms mês passado e tinha boiado na explicação do Big Theta e Big Omega. Esse vídeo deu uma esclarecida.
Veeelho.... quero uma camiseta dessas! hahahahhaahah
Um ótimo vídeo cara... muito bom mesmo, em dois vídeos explica melhor do que cursos e cursos inteiros.
cara o akita é simplesmente Fodástico!! O cara tinha de tudo pra tá curtindo a vida sem compromisso nenhum e faz videos de 1hora ou mais e fora o que acontece nos bastidores (edição e companhia ltda rsrs) isso é quase uma consultoria!! P Q P. Que Deus te abençoe meu caro, você esta mudando minha visão sobre programação te conheci faz 1 ano e ontem completei 20 anos tenho muita sorte de conhecer um canal desses e poder me direcionar melhor junto com os estudos da faculdade complementar com esse mundarel de conteúdo... Isso que eu faço engenharia de produção de software... Que tem muita pouca coisa de programação no começo o forte mesmo vem a partir do 3 ano
Rapaz, tive AED I semestre passado e esse vídeo já serviu como revisão para AED II que terei nesse semestre
Vlw, Akita
Parabéns pelos vídeos, Akita. Quisera eu ter acesso a esse tipo de material durantes meus anos de faculdade. Tive que aprender alguns dos pontos explicados no vídeo na marra. Enfim, bom pro pessoal que tá aprendendo agora.
Acho que foi um dos seus melhores videos.
Caralho, é muito conteúdo!
Puta aula Akita, obrigado!
Nostalgia total!
Lembrei da minha época de faculdade. Obrigado!
vou precisar assistir esse vídeo umas vezes pra entender todo o conteúdo!
Vídeo veio em hora bem oportuna, tava entediado vendo meu programinha compilar
Sensei Akita, já pensou em fazer um sobre assembly x86/64? Um hello world ficaria incrível e poderia falar de chamadas ao sistema e mostrar meio que um código C equivalente. Mostrando com ifes, whiles, fores são convertidos em linguagem de máquina (e os registradores de trabalho, ip, flags). Depois poderia ter um falando sobre stack. E também poderia falar sobre uma retrospectiva histórica do assembly x86. Ficaria incrível. Um incrível Hello Underword! Acho que fecharia com chave de ouro! Obrigado, mestre!
Uma observação: em 40:05, o Akita menciona que 'i' deve ir até 'total - 1', o que está correto já que o array tem 15 posições (0 a 14). O erro está na condição. 'i < total - 1', que vai parar em 13 ao invés de 14. Isso porque total - 1 nesse caso é 14, representando o último elemento do array, mas o operador '
Muito do que foi dito nestes vídeos deveria estar no material de muitos docentes. infelizmente passam superficialmente.
Boa noite! muito bom o vídeo! Um sucesso, por hora conversamos sobre como ficou menos "mágico" o que acontece nos bastidores. Realmente esse erros são uma "bostinha" (coisa pequena) perto do conteúdo apresentado. Continuo aguardando a sequência e parabéns! Pena que demora 15 dias! kkkkk. Valeuuuu!
Akita, vc vai abordar também sobre complexidade de espaço? Como por exemplo o Merge Sorte apesar de ter uma complexidade de tempo de execução de O(n*logn), ele cria vários arrays, tendo a complexidade de espaço de O(n) que quando nós falamos de sorting de arrays grandes pode ser um fator que leve a falta de memória.
Basicamente um semestre de estruturas de dados 1 e 2 em um vídeo. Parabéns pelo conteúdo!