caralho mano, melhor explicação que já vi, geralmente outros vídeos mostram somente a lógica, mas nunca explicam o código, parabéns professor pela explicação!
Como é possível ninguem comentar essa intro de Lost Painting do Castlevania? Professor, acompanho suas aulas faz algum tempo e são muito boas. Meus parabéns! E essas intros são sensacionais também! Sucesso para você e sua equipe.
Melhor didática que encontrei no you tube para estrutura de dados, mesmo essa matéria de ordenação sendo complexa. Vou ter que rever esse video umas 10 vezes pra entender kkk
Caraio, eu aqui rushando algoritmos de ordenação pq vou fazer P2 daqui a pouco e você vem com essa OST do Symphony of the Night Lost Painting, pqp, chorei.
@@emanuelafonsocoimbra1511 Sei q já faz 2 anos, mas agora na uff eles vão cobrar isso na p1 kkk. Mergesort, Quicksort, alguns quebra cabeças recursivos como hanoi e um chinês lá, tá bem osso. :(
Cada letra corresponde a um número, o A por exemplo corresponde ao número 65, então bastava mudar int* para char* que o alg ja funcionaria perfeitamente
oq aconteceria se o variavel meio na função mergesort recebesse recebesse o valor fim no lugar de (flor(inicio+fim)/2), e a complexidade desse algoritimo como ficaria???
fim1 e fim2 indicam se a primeira e segunda metades do vetor V já acabaram. Eles começam com 0 (falso) e !fim1 é verdadeiro (1). if(!fim1 && !fim2) equivale a if(fim1 == 0 && fim2 == 0)
Melhor professor de ed que ja vi, parabéns!
caralho mano, melhor explicação que já vi, geralmente outros vídeos mostram somente a lógica, mas nunca explicam o código, parabéns professor pela explicação!
obrigado
Como é possível ninguem comentar essa intro de Lost Painting do Castlevania?
Professor, acompanho suas aulas faz algum tempo e são muito boas. Meus parabéns! E essas intros são sensacionais também! Sucesso para você e sua equipe.
Essa musica é muito boa
melhor professor, melhores aulas, melhor didática ..... grande trabalho.
bixo, ele faz cada intro top, tu já viu a do fzero?
Pois é carai, vi e voltei dizendo "eu conheço essa música" hahahaha, muito bom, deu até vontade de jogar ele novamente (mais uma vez).
Lost Painting na intro... simplesmente perfeito
Melhor didática que encontrei no you tube para estrutura de dados, mesmo essa matéria de ordenação sendo complexa.
Vou ter que rever esse video umas 10 vezes pra entender kkk
Explicação top de mais, eu aprendo mais no youTube que na faculdade.
Fico feliz que o conteúdo esteja ajudando.
Perfeito! Melhor vídeos explicativo. Na verdade, melhores vídeos explicativos, são os seus. Muito obrigado pela aula!
Caraio, eu aqui rushando algoritmos de ordenação pq vou fazer P2 daqui a pouco e você vem com essa OST do Symphony of the Night Lost Painting, pqp, chorei.
Essa intro do castlevania
Melhor explicação que eu encontrei, parabéns professor.
Que bom que ajudou
Aula bem esclarecedora, melhor que na facul.
Caralho mano que vídeo bom, só consegui entender vendo o código pronto.
Só irei comentar devido a intro de Castlevania SotN, é como se eu voltatasse no tempo. Se não me engano era no mapa das medusa
Eu ouvi a abertura e me bateu umas nostalgia e eu não lembrava de onde kkkkkkkkk
Uma outra abordagem ideal seria o MergeSort com Listas encadeadas!
iria ser massa ein, vc tem o código?
MELHOR EXPLICAÇÃO!!
Parabéns!!! Muito obrigado pela aula excepcional. Está sendo essencial pra minha p2 aqui da UFF.
Estava muito difícil encontrar alguma aula que prestasse, mas gostei muito dessa playlist. Valeu mesmo...indo me inscrever no canal agora!!! hahahaha
@@emanuelafonsocoimbra1511 Sei q já faz 2 anos, mas agora na uff eles vão cobrar isso na p1 kkk. Mergesort, Quicksort, alguns quebra cabeças recursivos como hanoi e um chinês lá, tá bem osso. :(
excelente aula me ajudou muito, valeu professor pelo canal
Aulas Muito boas👏
Obrigado!
Como poderia fazer esta questao ?
Faça um programa que dado uma string, coloque as letras dela em ordem crescente pelo algoritmo MergSort.
Cada letra corresponde a um número, o A por exemplo corresponde ao número 65, então bastava mudar int* para char* que o alg ja funcionaria perfeitamente
Fiz em C++ para usar algumas coisas a mais, mas nada critico.
#include
using namespace std;
void merge(char* vetor, int begin, int middle, int end) {
int p1 = begin;
int p2 = middle + 1;
int size = end - begin + 1;
int* vetor_aux = (int*)malloc(sizeof(int) * size);
bool fim1 = false, fim2 = false;
if(vetor_aux != NULL) {
// percorrendo o vetor auxiliar
for(int i=0;i middle) ? true : false;
fim2 = (p2 > end) ? true : false;
} else {
// caso tenha chegado ao final de alguma metade
// basta inserir o restante da outra metade no vetor_aux
if(fim1)
vetor_aux[i] = vetor[p2++];
if(fim2)
vetor_aux[i] = vetor[p1++];
}
}
// copia o vetor_aux para o vetor original
for(int i = begin, j = 0; j < size; ++i, ++j)
vetor[i] = vetor_aux[j];
}
free(vetor_aux);
}
void merge_sort(char* vetor, int begin, int end) {
if(begin < end) {
int middle = (int)(begin + end) / 2.0;
merge_sort(vetor, begin, middle);
merge_sort(vetor, middle + 1, end);
merge(vetor, begin, middle, end);
}
}
int main() {
char vetor[] = {"HGFEDCBA"};
merge_sort(vetor, 0, 7);
for(auto x:vetor) cout
oq aconteceria se o variavel meio na função mergesort recebesse recebesse o valor fim no lugar de (flor(inicio+fim)/2), e a complexidade desse algoritimo como ficaria???
Qual a função do "floor" que aparece nos 2.25 minutos? arredondar o resultado da divisão?
+Natan Pedersolli Sim, é para arredonda para baixo. Assim, 2.7, por exemplo, virá 2.0.
@@progdescomplicada Mas a variável que recebe o resultado é um int, no caso, 2.7 vira 2 na variável mesmo sem o floor, certo?!
@@vinipostagemsim, em C sim
Na parte do código
if(V[p1] < V[p2])
{
temp[i] = V[p1++];
} else {
temp[i] = V[p2++;
}
não seria if(V[p1]
qual sond track teve no começo do video desta vez ?
Excelente! Muito obrigado!!
Ótima explicação! Poderia disponibilizar esse código?
www.facom.ufu.br/~backes/material_comp.php
incrível explicação!!!
Obrigado!
Obrigada pelo video!!
MUITO boa a aula
Para quê serve o floor?
Arredonda para baixo: 3.9 vira 3
Excelente!
Suas aulas são ótimas, mas um detalhe que me incomoda bastante é a questão do eco da voz, mas enfim, é sensacional
boa noite, então professor gostaria de saber como colocar um numero aleatório nesse programa:
#include
#include
#include
#include
#include
typedef struct detalhes_s
{
int comps; /* Quantidade de comparacoes */
int trocas; /* Quantidade de trocas */
unsigned long duracao_us; /* Tempo total de processamento em microsegundos */
} detalhes_t;
void merge( int *array, int inicio, int meio, int fim, detalhes_t *detalhes )
{
int *vetAux, p1, p2, tamanho, i, j, k;
int fim1 = 0, fim2 = 0;
tamanho = fim - inicio + 1;
p1 = inicio;
p2 = meio + 1;
vetAux = (int *) malloc( tamanho * sizeof(int) );
if(vetAux != NULL){
for(i = 0; i < tamanho; i++){
if(!fim1 && !fim2){
detalhes->comps++;
if(array[p1] < array[p2]){
vetAux[i] = array[p1++];
detalhes->trocas++;
}
else{
vetAux[i] = array[p2++];
detalhes->trocas++;
}
if(p1 > meio)
fim = 1;
if(p2 > fim)
fim2 = 1;
} else {
detalhes->comps++;
if(!fim1){
vetAux[i] = array[p1++];
detalhes->trocas++;
}
else{
vetAux[i] = array[p2++];
detalhes->trocas++;
}
}
}
for(j = 0, k = inicio; j < tamanho; j++, k++){
array[k] = vetAux[j];
}
}
free(vetAux);
}
void mergeSortR(int *array, int inicio, int fim, detalhes_t *detalhes )
{
int meio;
if(inicio < fim) {
meio = floor( (fim + inicio) / 2 );
mergeSortR( array, inicio, meio, detalhes );
mergeSortR( array, meio+1, fim, detalhes );
merge( array, inicio, meio, fim, detalhes );
}
}
void mergeSort(int *array, int inicio, int fim, detalhes_t *detalhes )
{
struct timeval t0, t1;
/* Inicializa estrutura de detalhes */
detalhes->comps = 0;
detalhes->trocas = 0;
gettimeofday(&t0, NULL);
mergeSortR( array, inicio, fim, detalhes );
gettimeofday(&t1, NULL);
/* Calcula tempo de processamento */
detalhes->duracao_us = ((t1.tv_sec - t0.tv_sec) * 1000000L) + (t1.tv_usec - t0.tv_usec);
}
int main( void )
{
unsigned int i;
detalhes_t info;
/* Vetor */
int foobar[16] = { 10, 2, 5, 8, 9, 7, 1, 3, 4, 6, 0, 5, 1, 8, 6, 5 };
/* Exibe Vetor de entrada */
for( i = 0; i < sizeof(foobar) / sizeof(int); i++ )
printf( (i==0) ? "Entrada=%d" : ",%d", foobar[i] );
printf("
");
/* Ordena vetor */
mergeSort( foobar, 0, 15, &info );
/* Exibe vetor ordenado */
for( i = 0; i < sizeof(foobar)/ sizeof(int); i++ )
printf( (i==0) ? "Saida=%d" : ",%d", foobar[i] );
printf("
");
/* Exibe Informacoes */
printf( "Comparacoes: %d
", info.comps );
printf( "Trocas: %d
", info.trocas );
printf( "Duracao: %ldus
", info.duracao_us);
return 0;
}
tentei porem nao consegu, poderia me da uma força ?
Para números aleatórios vc vai precisar das funções srand() e rand(): www.cplusplus.com/reference/cstdlib/rand/
Muito bom!
Amigos o que é !fim1 ?
Sei que talvez o ! seria o contrário de algo, mas o que seria no código?
fim1 e fim2 indicam se a primeira e segunda metades do vetor V já acabaram. Eles começam com 0 (falso) e !fim1 é verdadeiro (1).
if(!fim1 && !fim2)
equivale a
if(fim1 == 0 && fim2 == 0)
fim1 começa com falso, quando negamos isso (!fim1), se torna verdadeiro, portanto, se fim1 começa com 0, quando negado vira 1.
Muito obrigadaaaaaaaaaaaaaa
muito booom!!
Boa Noite!! poderia disponibilizar o código por e-mail?
programacaodescomplicada.wordpress.com/complementar/
Nossa! Parecia ser mais dificil com o professor mostrando em sala de aula.
compra um microfone melhor por favor mas fora isso os videos estao muito bom parabens amigo jhahahhahahah
Castlevania!!
FInalmente uma aula que nao tem dancinha
#luciadanceinap3
Parece o sheldon do the big ben theory