thegoodfellas/blogset-br huggingface dataset:
Entao, hoje eu estou triste. Muito triste. Meus olhinhos ja estao tao inchados que quase nao abrem. Desde as dez da manha eu choro e durmo, choro e durmo. O mestrado que eu estava querendo fazer... entao, nao vai rolar! Vou ter que arrumar uma outra coisa entao...vamos ver. hoje eu to eh passando pela dor. Diz o Gerhard que eu nao devo me preocupar. que algo melhor vira. Mas quando se esta chateada, eh dificil pensar assim. De qualquer forma, serviu como licao de ter recebido um nao. Nao me lembro de ter recebido um nao - no campo profissional - antes (primeiro emprego na Belocopy, foi de cara; vestibular; emprego nos eua; escolas de ingles; bolsa na escola; estagios; cemig... foram uma serie de eventos todos bem sucedidos e eu estava acostumada em sempre ter um "sim" ... enfim, nao eh facil receber um nao. E eu estou frustrada, chateada, triste e decepcionada comigo mesma. Mas foi um tanto quanto confuso. Foi tudo em alemao, e ninguem traduziu pra mim, se o Gerhard nao estivesse la no primeiro dia, tava ferrada. No segundo uma das professoras traduziu bem mais ou menos. Parte das tarefas eu sequer sabia que tinha que fazer, e quando percebi que tinha algo errado, procurei saber e tive que fazer tudo correndo pra dar conta de terminar. Alem disto eles fazem uma prova pra quem quer fazer arquitetura. Nao eh uma prova pra quem vai fazer o mestrado. Aqui o povo faz eh tudo ne... sao cinco anos no total: bacharelado e mestrado. Dai, vc ja sai como mestre. E eu nao entendo como que eles podem deixar as vagas todas juntas (de bacharelado e mestrado), ainda mais que eu era a unica tentando soh para os dois anos de mestrado). E um dos professores ficou questionando isso (de "repetir" o que eu ja estudei) e eu tentei explicar, ser convincente... mas eh isso. Ja era... agora eu vou descansar, porque estou ha quase tres semanas sem dormir direito do tanto que estava trabalhando tarde para deixar o portfolio pronto, alem dos testes que comecaram cedo e terminaram tarde... eu estou destruida. Em todos os sentidos. Slipknot nao e do Diabo, Kiss tambem nao. Os caras da Restart nao sao viados so pelas roupas que usam. Os do Nirvana tambem nao viviam so usando drogas. Coldplay e rock, nao importa se e leve. Justin Bieber pode ter uma voz que nao agrada a todos, mas admita que se ele nao tivesse talento ou no minimo carisma, nao estaria onde esta. Ninguem provou que Michael Jackson era pedofilo. Amy Winehouse na...o era so uma bebada drogada, era um grande talento. Marilyn Monroe tinha sentimentos e teve uma infancia pobre. Britney pode nao ser a melhor cantora do mundo, mas e a princesa do pop e ponto final. Axl Rose nao era gay so por usar shorts coladinhos no corpo e rebolar feito uma garota. E Cherie Currie nao era vadia por se apresentar de calcinha e espartilho. Ninguem agrada a todos. Mas todos tem o dever do
Oque e ser uma Belieber?Ser uma Belieber nao e ter montanhas de revistas do Bieber, nao e comprar milhares de posters e espalha-los pelo quarto, nao e adquirir todos os CDs que o JB tem. Ser uma Belieber nao e apenas ouvir as musicas do Justin Bieber e achar o Jus um lindo. Ser Belieber nao e so saber que o Justin adora mar; que suas materias preferidas sao matematica e ingles; que ele adora ouvir Michael Jackson e que ele queria ter o poder de voar. Ser Belieber nao e so falar que e Belieber e pronto. Ser belieber e defender seu idolo, fazer loucuras por ele, amar ele do jeito que ele e, se orgulhar cada vez mais. Ser belieber e falar todos os dias: eu te amo Justin Drew Bieber, e enfrentar todos chamando ele de biba, falando que ele canta mal, que ele tem voz fina. Ser belieber e estar ali do lado dele, defendendo de todos, e chorar por ele, e brigar por ele. Ser belieber e enfrentar a dor e a angustia de nao estar do lado do seu idolo quando ele mais precisa, e sofrer quando ve videos e ouve musicas dele. Ser belieber e escutar todos dizendo que voce esta ficando maluca, que o Justin nao sabe quem e voce, e depois vai la e humilha a pessoa dizendo que voce nao liga muito pra isso e que voce vai ama-lo eternamente. Ser belieber e enfrentar todos os haters, e se quebrar a cara, ela volta e humilha mais ainda. Ser belieber e acompanhar tudo o que seu idolo faz, e nao ter vergonha de falar: EU AMO O JUSTIN BIEBER. ser belieber e batalhar ate chegar no que ela quer, Ser uma Belieber e amar, amar cada vez mais, amar sem pedir nada em troca, e amar sempre haja o que houver, mas alem de amar,uma verdadeira Belieber precisa acreditar, acreditar que o impossivel e possivel. Ser uma verdadeira Belieber e acreditar que os sonhos sao possiveis, e nunca dizer nunca, porque e isso que o Justin quer, ele quer que a gente siga em frente ate o final, quer que a gente sonhe e acredite, e foi isso que ele fez, e funcionou. Ser Belieber e passar por cima de cada ignorancia que a gente passa ou que a gente vai passar, e nao se importar com o que dizem ou vao dizer da gente. Ser uma verdadeira Belieber e estar com o Justin sempre e sempre. E procurar cada dia o significado da palavra Belieber, mas nao no google, e sim dentro de si propria. Ser uma True Belieber e sempre estar sorrindo enquanto o Justin estiver, seja no Canada, seja no Brasil, seja nos Estados Unidos, Inglaterra ou no Japao. Ser uma Belieber e sempre ter a esperanca dentro do coracao, seja voce quem for, se voce for realmente Belieber voce vai saber o que e o verdadeiro amor de fa, porque so quem tem esse amor pode entender o sentido de tudo isso. Ser Belieber e nao se importar
se voce e a primeira ou a ultima a dizer Eu te amo Justin Bieber e sim sempre dizer isso. Ser Belieber e procurar varias maneiras de amar, seja voce branca, negra, amarela ou parda, se voce sente que voce e uma Belieber cada vez que voce se preocupa com o Justin, cada vez que voce chora ou sorri com o Justin, cada vez que voce briga pelo Justin, se voce sente esse amor de Belieber dentro de si, mesmo sem nunca ter tocado no Justin . Uma verdadeira belieber nao desiste enquanto seu sonho nao se tornar realidade, de ver seu idolo na sua frente, de toca-lo, abraca-lo e falar tudo o que sente por ele.
Ola! Hoje vou falar sobre os famosos lacos de repeticao. Estruturas bem simples e poderosas do mundo da computacao. Os lacos de repeticao se encarregam de repetir determinada instrucao enquanto uma determinada condicao for verdadeira. A partir de agora vamos chamar esses lacos de loops. Assim sendo, temos basicamente dois tipos de loops: O for e o while.No portugol, o while seria algo mais ou menos assim:inteiro i := 1ENQUANTO i < 10 FACA imprima(i) i = i + 1E o for, assim:PARA i = 0 de 1 a 10 FACA imprima(i)Ou seja, nos dois casos ele vai ter que repetir a instrucao imprima(i) ate que a variavel i seja igual a 10.Na linguagem de programacao C, isso ficaria assim:<![CDATA[int i = 0;while(i < 10){ printf(i); i = i + 1;}for(int i = 0; i < 10; i = i + 1) printf(i);]]>O laco while tem uma variacao, que se chama Do..While. No primeiro caso, quando fazemos o while normal, primeiro e verificado se i e menor do que 10 e entao a instrucao e executada. Ja, quando utilizamos dessa forma:<![CDATA[int i = 0;do { printf(i);} while(i < 10);]]>Primeiro e executada a instrucao, e depois a condicao e testada.Cuidado!E muito facil de cair sem perceber no famoso loop infinito.De uma olhada no banner do blog. Ve aquele "while( 1 > 0 ) printf("Bem vindo!");" ? Isso e um loop infinito. Quando nao se queria um desses, pode causar muita dor de cabeca. Agora, quando voce precisar de um desses, dentro do escopo do loop tem que haver alguma instrucao que execute o break (instrucao que forca o termino do loop), que quebra o loop infinito.Para terminar, que tal escrever uma funcao que, dado um numero inteiro n, retorne o seu fatorial?Em C:<![CDATA[int fatorial(int n){ int numFatorial = 1; for(int i = 1; i <= n; i = i + 1) numFatorial = numFatorial * i; return numFatorial;}]]>E isso! Ate a proxima! Ja vimos o conceito de vetores, anteriormente. Veremos agora o que chamamos de vetores bi-dimensionais, ou ainda arrays bi-dimensionais.Matriz, de acordo com a wikipedia: "In mathematics, a matrix (plural matrices, or less commonly matrixes) is a rectangular array of numbers". Ou: "Em matematica, a matriz e um vetor retangular de numeros".Amplamente utilizado nas ciencias matematicas, esse conceito ajuda a resolver problemas de algebra linear, resolucao de sistemas lineares, analise numerica, etc. E como a Ciencia da Computacao e muito matematica, as matrizes tambem sao utilizadas. Uma area bem interessante que se aplica - e muito - e a da computacao grafica. Matrizes de projecao, transformacao, etc, sao a base de todo trabalho grafico renderizado pelo computador que estamos acostumados a ver.Uma matriz A e composta por m linhas e n colunas, e e representada matematicamente da seguinte maneira:A = ( 123)456 Nesse caso, A e 2 x 3.Em computacao nos dizemos que uma matriz e um vetor de vetores. Ha?Calma, pequeno padawan. Imagine um vetor v, com 2 posicoes. Imaginou? Agora, imagine outros dois vetores, k e r, com 3 posicoes cada, e preenchidos com numeros inteiros qualquer.Se v for um
vetor de vetores, atribuimos as duas primeiras posicoes de v para k e r:k = { 1 ,2 ,3 }; r = { 4 ,5 ,6 };v[0] = k;v[1] = r;Agora, podemos dizer que v e um array bi-dimensional. Porque? Porque podemos acessar, por exemplo, o numero 5 da seguinte maneira: v[1][1]. Assim, acessamos o numero na segunda linha, na segunda coluna.Entendeu, pequeno padawan? v e uma matriz, um vetor de vetores.Vamos ilustrar como se faz o algoritmo de soma de duas matrizes:O algoritmo faz o seguinte:Inicializamos as variaveis i e j, para poder iterar sobre a matrizInicializamos a matriz a, que e 2 x 3 e a matriz b, de mesmo tamanho.Criamos a matriz c, para poder guardar o valor da soma de a e b.Vem a parte que realiza a soma. Aqui, iteramos com dois lacos de repeticao, dois for's. O primeiro for faz o loop pelas linhas, enquanto o segundo faz o loop pelas colunas. Ou seja, para cada linha, o for de j itera em todas as colunas. Assim, colocamos a soma dos valores de a[i][j] com b[i][j] em c[i][j]. Por hoje e isso! Em breve, passarei as operacoes basicas sobre matrizes.
Ola!Quando voce comeca a estudar a Ciencia da Computacao, voce aprende (ou pelo menos deveria aprender) muita matematica. Uma tecnica matematica aplicada a essa ciencia e recursao.De acordo com o verbete Recursion, da Wikipedia:"Recursion in computer science is a method where the solution to a problem depends on solutions to smaller instances of the same problem.[1] The approach can be applied to many types of problems, and is one of the central ideas of computer science."ou, em Portugues:"Recursao na ciencia da computacao e um metodo onde a solucao de um problema depende de solucoes de problemas menores em instancias do mesmo problema. O metodo pode ser aplicado em varios tipos de problemas, e e uma das ideias centrais da ciencia da computacao."Ha tambem uma frase muito legal para entender a recursao, que diz:"Para entender a recursao, e preciso primeiro entender a recursao"Ha? Calma, pequeno padawan. =)Imagine o seguinte problema: Voce esta no seu colegial, e o seu professor de matematica que voce adora tanto que ate deixou voce de recuperacao pra nao sentir saudades, pede uma lista enorme, so com fatoriais. Voce, um aluno calmo e consciente, respira fundo e pensa, dentre seus pensamentos matematicos: "Qual sera a relacao matematica entre todos esses fatoriais?"Entao, voce tem uma luz, daquelas que iluminam quarteirao em dia de apagao, e escreve:fatorial(n) = | 1 ,se n = 0| n * fatorial(n - 1) ,se n > 0Claro! Se o numero que ele pedir for zero, entao eu sei que o resultado e 1, por definicao. Mas se for maior do que zero, o resultado nada mais e do que ele vezes o fatorial do numero anterior a ele! E entao voce faz no seu rascunho algumas provas reais:fatorial(1) = 1 * fatorial(0) = 1 * 1 = 1fatorial(2) = 2 * fatorial(1) = 2 * 1 = 2fatorial(3) = 3 * fatorial(2) = 3* ( 2*fatorial(1)) = 3* ( 2* ( 1* fatorial(0))) = 3*2*1*1 = 6Voce acaba de entender a recursao!Passar esse conceito para um algoritmo em C, e facil. Ficaria dessa forma:<![CDATA[/* fatorial_r calcula de forma recursiva o fatorial de um numero inteiro n e devolve seu resultado*/int fatorial_r(int n){ if(n == 0) return 1; return n * fatorial_r(n - 1); }]]>Perceba a estrutura recursiva da funcao.Temos o caso base, que encerra a recursao em algum momento, para nao entrar em algo infinito:<![CDATA[ if(n == 0) return 1;]]>E entao, o passo da recursao, que reduz o problema a uma instancia menor, chamando a mesma funcao<![CDATA[ return n * fatorial_r(n - 1);]]>Na grande maioria dos casos (pra nao dizer todos), uma solucao recursiva pode ser escrita de forma iterativa. Veja o exemplo que eu dei quando falei sobre lacos de repeticao: A funcao fatorial, em sua versao iterativa.Uma funcao recursiva e, sem duvida, muito elegante. Hoje, muitas pessoas que estao na area da computacao nao conseguem utilizar recursao, outras nao a entendem, e outras sequer sabem da sua existencia. Entao, e algo que merece um pouco de estudo e atencao.E lembre-se: Para fazer um procedimento recursivo, e preciso ter fe! =)Vou postar mais alguns
Ja que segundo os Maias esse ano e o nosso ultimo como habitantes da Terra, e eu finalmente estou formado, me sinto no dever de salvar o blog!E para que isso aconteca de fato, teremos tres novidades:O blog voltara a ser atualizado (que bom :)As atualizacoes serao sempre as quartas-feirasAs postagens seguirao uma logica, para o aprendizado de algoritmosIsso quer dizer que alguns assuntos serao repetidos? Provavelmente. Mas dessa vez serao passados de uma forma um pouco diferente, contendo referencias para estudos futuros, links interessantes, entre outros. Espero poder passar a mensagem que o blog sempre quis: Os melhores instrumentos de um Cientista da Computacao sao um lapis e uma borracha bem macia! Coloquei hoje meu novo site no ar:www.guilhermerey.com.brEspero que gostem!E calma, 2011 vem ai com promessa de mais posts no blog :) Ola!Voce lembra das famosas potencias? Daquelas do tipo 23?Hoje vamos criar duas formas de realizar esse calculo.Queremos criar uma funcao que receba um numero inteiro a (base) e outro n (expoente) e retorne o resultado da multiplicacao de a por ele mesmo n vezes (ou, de um modo mais facil, a elevado a n).Primeiro, vamos pensar numa versao iterativa, utilizando lacos de repeticao.Criamos uma variavel para guardar o nosso resultado.<![CDATA[ int pot = 1;]]> Assim, para realizar a multiplicacao de a por ele mesmo n vezes, podemos realizar com um laco for:<![CDATA[ for(int i = 0; i < n; i++) pot = pot * a;]]> E pronto! temos nossa funcao potencia:<![CDATA[ /* Funcao potencia - recebe uma base inteira a e um expoente inteiro n e retorna a elevado a n */ int potencia(int a, int n) { int pot = 1; for(int i = 0; i < n; i++) pot = pot * a; return pot; }]]>Como ja temos nossa versao iterativa, vamos agora pensar na versao recursiva.Qual seria o caso base da nossa recursao?Uma linha de raciocinio seria pensar em um a = 2 e n = 3. 23 = 2 * (22)Certo? Pensando assim, podemos continuar: 23 = 2 * (22) = 2 * (2 * (21)) = 2 * (2 * (2 * (2^0)))Logo, o nosso caso base e quando o expoente e zero, ou n == 0, que sabemos que o resultado e 1[1]. E nosso passo da recursao e dado por base * potencia(base, expoente - 1).Colocando assim, temos: Potencia(a, n) = a * Potencia(a, n - 1). Pronto! Temos nossa funcao recursiva!<![CDATA[ /* Funcao potencia - recebe uma base inteira a e um expoente inteiro n e retorna a elevado a n, efetuando o calculo de maneira recursiva. */ int potencia_r(int a, int n) { if(n == 0) return 1; return a * potencia_r(a, n - 1); }]]>Obs.: Perceba que a funcao funciona adotando n >= 0. Nao estamos preocupados em tratar excecoes como n = -1, por enquanto =)Eu acho a funcao recursiva bem mais elegante =PMas e isso ai! Apenas mais um exemplo de recursao!Ate a proxima![1] Curiosidade: Pra quem nao sabe o porque de um numero elevado a zero resultar em 1, o processo e esse: x/x =
x1 : x1 = x1 - 1 = 1. Explicando: Se voce tem 2 objetos e quer dividir para 2 pessoas, sabemos que o resultado e 1. Qualquer numero dividido por ele mesmo resulta em 1. Logo, por propriedades de potencia, quando ha divisao de potencias de mesma base pode-se manter a base e subtrair os expoentes, resultando em 2^0. =)
Bom, sem mais delongas, so queria me pronunciar sobre o ano de 2010. Tomara que eu consiga manter isso aqui atualizado sempre! =]Abracos! Ola!Hoje, mais um post sobre recursao, abordando a sequencia de Fibonacci.Se voce perdeu o meu post sobre recursao, voce pode acessa-lo aqui. E tambem ha um sobre a funcao recursiva que faz a potencia de numeros inteiros, que voce pode ver por aqui.A sequencia de Fibonacci e uma sequencia matematica definida da seguinte forma:0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, ...Como podemos observar, a sequencia tem uma caracteristica: Ela comeca com 0, 1 e os proximos numeros sao definidos pela soma dos dois anteriores.Voce observa pelas contas:Dois primeiros: 0, 10 + 1 = 11 + 1 = 22 + 1 = 33 + 2 = 55 + 3 = 88 + 5 = 1313 + 8 = 21...Tendo isso em mente, podemos definir a seguinte relacao matematica:F(n) = | 0, se n = 0 | 1, se n = 1 | F(n - 1) + F(n - 2), em outros casosUtilizando essa definicao, facilmente podemos construir uma funcao recursiva que calcule a sequencia de fibonacci, certo?Pensando em um caso base para nossa recursao, o que temos? Sabemos que quando n = 0 ou n = 1, nao precisamos retornar nossa funcao de novo, e a resposta e o proprio n.Agora, vamos definir o passo da recursao. Caso n nao seja 0 ou 1, qual o valor da resposta? E a soma dos dois anteriores a n, certo? Ou seja:Pronto! Construimos nosso algoritmo que calcula o numero de fibonacci:E para visualizar a sequencia de Fibonacci como demonstrada no comeco? Como fazer? Calma, pequeno padawan. Vamos utilizar um laco de repeticao para poder calcular os numeros de fibonacci e imprimi-los na tela.Agora, pra brincar, e preciso apenas chamar a funcao fibonacci com o numero de elementos da sequencia desejado!fibonacci(5) Ira nos retornar a seguinte sequencia:0, 1, 1, 2, 3Nessa hora muitas pessoas nao compreendem o que exatamente esta acontecendo pra que a sequencia esteja certa. De onde estao vindo os numeros?Tentei ilustrar como ocorrem as chamadas recursivas:Veja, para cada iteracao do laco for, um numero fibonacci e calculado, e a funcao fibo realiza a recursao para este calculo. Perceba que todas chegam ate f(0) ou f(1), e vao retornando seus valores. Como em fibo(2), que precisa da resposta de f(1) + f(0), trazendo a soma 1 + 0, fazendo com que fibo(2) retorne 1.Esse e um classico da recursao. Sua solucao recursiva e muito elegante, mas como se verifica na imagem, nem tanto eficiente. A solucao iterativa e bem menos elegante, mas muito mais eficiente.Postarei a solucao iterativa em breve!Ate a proxima! Ola!Hoje vamos ver um problema classico na computacao. A busca em um vetor ordenado.Imagine o problema:Dado um inteiro x e um vetor v[0 ... n - 1] crescente, encontrar um indice k tal que v[k] == xQuando fiz um post sobre vetores, descrevi um algoritmo trivial para resolver esse problema. Voce pode ve-lo aqui.O que temos que nos perguntar e: "Tem alguma forma de
encontrar o indice que queremos sem precisar comparar x com todos os elementos de v?". E a resposta e: Sim, pequeno padawan.Para resolver o problema vamos utilizar a busca binaria.Vamos ilustrar essa tecnica?Imagine que voce tenha um dicionario na mao e eu peco para voce me dar a definicao da palavra zootecnia. Qual caracteristica do dicionario e importantissima para buscarmos alguma palavra nele?Ele e ordenado alfabeticamente. Entao o que fazemos? Rasgamos ele no meio, tendo na mao agora dois dicionarios menores. Verificamos se a palavra esta na pagina do meio do rasgo. Se sim, pronto, achamos a palavra. Se nao, precisamos procurar mais.Sabemos que a letra Z nao esta na primeira metade, por isso jogamos ela fora. Entao, pegamos a metade que sobrou e rasgamos no meio novamente. De novo vemos se a palavra esta na folha do meio. Nao? Entao pergunte: A letra procurada esta na primeira metade? Nao, entao jogamos fora e ficamos com a outra metade. Mais uma vez rasgamos no meio essa metade, e repetimos o processo. Fazendo isso, um momento acontecera de sobrar uma pagina do dicionario, onde estara a letra e a palavra que voce procura. E se a palavra nao estiver no dicionario, voce vai rasgar tudo ate sobrar uma folha so, e ela nao vai estar la. E voce nao precisou comparar sua palavra com todas do dicionario pra descobrir alguma informacao.Isso e a busca binaria!Se queremos encontrar um inteiro x em um vetor crescente v, precisamos apenas dividir ele em dois, depois novamente em dois, depois novamente, ate que a divisao sobre apenas x - ou, se nao estiver no vetor, retorne -1.Mas como implementar?Poderiamos implementar tanto uma funcao iterativa quanto uma funcao recursiva. Hoje vamos de iterativa :)Algoritmo de Busca Binaria em CExplicando o algoritmo:Nos ficamos em um laco de repeticao, que repete enquanto o limite inferior for menor ou igual ao limite superior. Ou seja, se eu tenho um vetor v[0 ... n - 1], ele primeiro tem limInf = 0 e limSup = n - 1. Entao dividimos no meio: meio = (limInf + limSup) / 2. Se x ja estiver na posicao do meio, retornamos x. Se nao, nos fazemos a seguinte pergunta: "x e maior do que o elemento do meio?" Se sim, ele esta na metade maior, entao pegamos nosso limInf e atribuimos limInf = meio + 1. Se nao, ele esta na metade menor, e o que fazemos e atribuir o limSup = meio - 1.Caso na primeira divisao o elemento x esteja na metade menor, nossos limites serao limInf = 0 e limSup = meio - 1. Entao, caso as divisoes ocorram e nenhum k satisfaca v[k] == x, o algoritmo retorna -1.Pronto! Esse e o algoritmo de busca binaria - solucao iterativa :)Ate a proxima!