Posts filed under ‘Estrutura de Dados’

E a Probabilidade e a Estatística, hein?

Na faculdade eu sempre olhei muito enviesado para a Probabilidade e a Estatística, mas isso devia-se, claro, à ignorância em relação ao pensamento estatístico. Como Leonard Mlodinow nos ensina no exclente “O Andar do Bêbado: como o acaso determina nossas vidas“, e eu cito: “a mente humana foi construída para identificar uma causa definida para cada acontecimento, podendo assim ter bastante dificuldade em aceitar a influência de fatores aleatórios ou não relacionados”. É isso! Temos extrema dificuldade em entender o pensamento aleatório, probabilístico e, por consequência, o estatístico. Mas, como escrito no mesmo livro (citando o economista Armen Alchian), “os processos aleatórios são fundamentais na natureza, e onipresentes em nossa vida cotidiana; e ainda assim, a maioria das pessoas, não os compreende”.

Mas, é óbvio que isso precisa mudar. Nós, Cientistas da Computação e amantes da tecnologia e da Tecnologia da Informação em geral, não somos “a maioria das pessoas”. Precisamos mudar a nossa lógica determinística, afinal, a ciência inteira (e a Computação não fica de fora) é dominada inteiramente pela Estatística e pelo pensamento estocástico.

“O desenho de nossas vidas, como a chama da vela, é continuamente conduzido em novas direções por diversos eventos aleatórios que, juntamente com nossas reações a eles, determinam nosso destino. Como resultado, a vida é ao mesmo tempo difícil de prever e difícil de interpretar” – Leonard Mlodinow em “O Andar do Bêbado: como o acaso determina nossas vidas”

Portanto, começamos esse estudo, muitas vezes com resultados contra-intuitivos. Mas temos uma ferramenta de grande valia: o computador e as linguagens de programação. Portanto, vamos começar com um experimento básico: a probabilidade da moeda lançada.

Para isso, fiz um script em Python (2.7.11) para simular o lançamento de uma moeda e, em seguida, computar as probabilidades dos lançamentos. Os resultados são interessantes. Quanto mais o número de lançamentos aumenta mais as frequências aproximam-se do número previsto (50% para cada uma das faces).

Aqui está o código:

# -*- coding: UTF-8 -*-
"""
Função:
    Exemplo de lançamento de moeda
Autor:
    Professor Ed - Data: 29/05/2016 -
Observações:  ?
"""
def gera_matriz_lancamentos(matriz, tamanho):
    import random
    matriz_faces = []
    print 'Gerando...'
    for x in range(tamanho):
        num = random.randint(1,2) #1 = cara, 2 = coroa
        matriz.append (num)
        
        if num==1:
            matriz_faces.append('Cara')
        else:
            matriz_faces.append('Coroa')

    print matriz_faces


def calcula_probabilidades(matriz, tamanho):
    soma_cara = 0
    soma_coroa = 0
    
    for i in range(len(matriz)):
        if matriz[i]==1:
            soma_cara = soma_cara+1
        elif matriz[i]==2:
            soma_coroa = soma_coroa + 1
    
    probabilidade_cara = float(soma_cara)/float(tamanho)*100
    probabilidade_coroa = float(soma_coroa)/float(tamanho)*100    
    
    print 'Foram lancadas ' + str(soma_cara) + ' caras e ' + str(soma_coroa) + ' coroas'

    probabilidades = []
    probabilidades.append(probabilidade_cara)
    probabilidades.append(probabilidade_coroa)    
    
    return probabilidades


matriz=[]
tamanho = int(raw_input('Digite o tamanho da matriz de lancamentos: '))
gera_matriz_lancamentos(matriz, tamanho)
#print 'Um para cara e 2 para coroa'
#print matriz
vetor_probabilidades = []
vetor_probabilidades = calcula_probabilidades(matriz, tamanho)
print 'As probabilidades sao: %f%% e %f%%' % (vetor_probabilidades[0], vetor_probabilidades[1])

Nem sempre, como os números gerados pelo computador são (pseudo)aleatórios (falaremos disto depois), as frequências são próximas a 50% (variando bastante entre as execuções do programa), mas, em geral, sempre que a quantidade de lançamentos é imensa (acima de 10.000), as probabilidades aproximam-se do limite esperado.

probabilidade-moedaUm exemplo da execução do programa com duas instâncias exatamente iguais, mas com valores gerados diferentes. (mais ou menos como acontece na realidade).

Abaixo, um exemplo de uma instância com 100.000 lançamentos provando que as frequências, de fato, aproximam-se das probabilidades previstas:

probabilidade-moeda-100mil-lancamentos

É isso aí. Nos próximos posts vamos falar um pouco mais sobre os significados e como calcular essas probabilidades, sempre tentando um enfoque prático com a ajuda dessa ferramenta magnífica que é o computador!
Até!

P.S.: Assim que meu repositório for clonado certinho (tive uns problemas com o Git local) eu coloco o link para o programa prontinho no Github.
Pronto! Já apanhei resolvi o problema do Git e você pode baixar o arquivo-fonte clicando aqui.

quarta-feira, 29 junho, 2016 at 2:49 pm 1 comentário

Popularidade de linguagens – Você conhece o índice Tiobe?

Você conhece ou já ouviu falar do índice Tiobe? Este é um ranking organizado pela empresa Tiobe que tenta mostrar a popularidade das linguagens de programação quando comparada com outras. Ele iniciou em 2001 e é atualizado todos os meses desde então.

Ele leva em consideração o número de resultados de buscas de nomes de linguagens ou equivalentes em inúmeros sites como Google, Wikipedia, YouTube, Yahoo, Bing, Amazon, Blogger, Baidu e WordPress.

Há uma antiga amiga dos estudantes de Estruturas de Dados que, desde o início do ranking, praticamente nunca saiu do top 5. Nem preciso dizer que é a boa e velha filha de Dennis Ritchie, a Linguagem C!

O ranking de Julho de 2013 estava assim (para as 10 primeiras posições):

Position Jul 2013 Position Jul 2012 Delta in Position Programming Language Ratings Jul 2013 Delta Jul 2012 Status
1 1 C 17.628% -0.70%   A
2 2 Java 15.906% -0.18%   A
3 3 Objective-C 10.248% +0.91%   A
4 4 C++ 8.749% -0.37%   A
5 7 PHP 7.186% +2.17%   A
6 5 C# 6.212% -0.46%   A
7 6 (Visual) Basic 4.336% -1.36%   A
8 8 Python 4.035% +0.03%   A
9 9 Perl 2.148% +0.10%   A
10 11 JavaScript 1.844% +0.39%   A

 

Neste agosto de 2013 ela (a Linguagem C) deu uma variada e caiu para 2º lugar por alguns décimos. Confira:

Position Aug 2013 Position Aug 2012 Delta in Position Programming Language Ratings Aug 2013 Delta Aug 2012 Status
1 2 Java 15.978% -0.37%   A
2 1 C 15.974% -2.96%   A
3 4 C++ 9.371% +0.04%   A
4 3 Objective-C 8.082% -1.46%   A
5 6 PHP 6.694% +1.17%   A
6 5 C# 6.117% -0.47%   A
7 7 (Visual) Basic 3.873% -1.46%   A
8 8 Python 3.603% -0.27%   A
9 11 JavaScript 2.093% +0.73%   A
10 10 Ruby 2.067% +0.38%   A

O que confirma a força da linguagem criada há mais de quarenta anos nos laboratórios da Bell para desenvolver o Unix. Maior do que a popularidade é a influência da rainha das linguagens de programação. Praticamente todas as linguagens foram, de alguma forma (umas mais, outras menos) influenciada por C. Praticamente existe uma divisão em A.C. e D.C. (Antes de C e Depois de C) na história das linguagens de programação!

Só por curiosidade, o LangPop coloca a linguagem C como a número 1 em popularidade em suas séries. Confira: http://www.langpop.com/

O que você acha deste índice de popularidade? É confiável? Concorda que C é um marco na história das linguagens de programação? Quais as linguagens que você utiliza? Gosta de C? Sabe C? Comente!🙂

quarta-feira, 14 agosto, 2013 at 10:10 am Deixe um comentário

Aulas de Estruturas de Dados (03, 04, 05 e 06)

Aqui estão disponíveis as aulas 03, 04, 05 e 06 de Estruturas de Dados e seus respectivos exercícios (inseridos nas próprias aulas). As datas de entrega dos exercícios foram comentadas somente em sala de aula. Curtam e estudem. (Lembrando que o material de Estruturas de Dados em C está reduzido pelo pouco tempo disponível devido a troca de professores). Para baixar é só clicar:

Estruturas de Dados – Aula 03
Estruturas de Dados – Aula 04
Estruturas de Dados – Aula 05
Estruturas de Dados – Aula 06

Bons estudos!

terça-feira, 19 junho, 2012 at 1:23 am Deixe um comentário

Aula 02 de Estrutura de Dados e questões sobre a primalidade de inteiros

Já está disponível a AULA 02 de Estrutura de Dados. Para baixar, basta clicar aqui.

Lembrando que retirei o slide que continha o programa com o teste de primalidade, já que ele deverá ser enviado como trabalho até dia 26/04, quinta-feira. Após este período colocarei a aula completa, lembrando que como comentei este teste de primalidade é extremamente ineficiente.

Sobre a questão de primalidade de números inteiros, recomendadíssimo a leitura sobre o teste de primalidade AKS, conhecido como teste da primalidade Agrawal-Kayal-Saxena. E também o teste de primalidade de Fermat para geração de números não-primos ou mesmo o teste de primalidade de Miller-Rabin (que é probabilístico).

Para entender de verdade os (fascinantes) números primos, recomendo, para quem está com tempo, a leitura deste trabalho.

Um abs.

Depois volto aqui e posto sobre os números primos com questões relacionadas aos algoritmos para obtê-los e toda a mística que os envolvem.
Até mais.

(P.S. – Um pequeno desafio a meus alunos – bem fácil, diga-se – é implementar em C o algoritmo do teste de primalidade AKS e me enviar!)

terça-feira, 24 abril, 2012 at 1:18 am Deixe um comentário

Aulas e Listas de Exercícios de Estrutura de Dados e de Fundamentos de Programação e Algoritmos

Caros alunos. Desculpem pela demora (de 1 dia) para postar as aulas e as listas de exercícios.

A turma de Estrutura de Dados está ainda na Lista de exercícios 01. Para baixá-la clique aqui. Não esqueçam de acrescentar os 10 programas escritos em sala de aula que estão no slide 53 da Aula 01. Para baixar a Aula 01 Completa e Revisada (versão 2.0), clique aqui.

A turma de Fundamentos de Programação e Algoritmos já está na lista de exercícios 02. Para baixá-la, clique aqui. Para baixar o conteúdo completo da Aula 02, clique aqui. Para baixar as Notas da Aula 02 basta clicar aqui.

A data máxima para entrega de ambas as listas é dia 20/04/2012, próxima sexta-feira, portanto, não se atrasem. Aproveitem o fim de semana para resolver todos os exercícios. Qualquer dúvida, basta contatar o professor. Abs e até a próxima semana.

sábado, 14 abril, 2012 at 1:40 am Deixe um comentário

Volta às aulas com Estrutura de Dados

A primeira aula com a turma de Sistemas de Informação, 3º. Período.Turma 21620111, disciplina Estrutura de Dados foi proveitosa. Apresentações, plano de aula, metodologia, avaliação e introdução à disciplina de forma bem tranquila e simpática por parte dos alunos. Agradeço também à recepção, ao bom humor e à oportunidade de ministrar conteúdo tão importante para a formação profissional. Um abraço a todos.

Link para o arquivo da primeira parte da Aula 01: clique aqui

Link para o FAQ de carreiras da Blizzard citado na aula (e que mostra que C/C++ anda vivíssimo): http://us.blizzard.com/pt-br/company/careers/faq.html

Por que estudar C/C++? http://cpp.drgibbs.com.br/home/porque-estudar-c

Link do CodeBlocks: http://sourceforge.net/projects/codeblocks/files/Binaries/10.05/Windows/codeblocks-10.05mingw-setup.exe

Link do Dev-C++:  http://www.baixaki.com.br/download/dev-c-.htm

É caros amigos, voltei à sala de aula, este ambiente onde me sinto tão à vontade. Por caminhos estranhos me foi dada a oportunidade de ensinar programação em C aos jovens pupilos do Curso de Sistemas de Informação da Uninorte. A primeira disciplina será Algoritmos e Linguagens de Programação e a segunda, a de hoje, Estrutura de Dados. Fiquei, de certa forma, feliz, pois quem me conhece sabe o quanto amo a sala de aula, a oportunidade de ensinar e aprender com o dia-a-dia dos alunos. Conhecer pessoas e ajudá-las a trilhar o caminho profissional que tanto almejam, isso sim, como diz certo comercial, não tem preço. Um abraço e amanhã tem mais.

segunda-feira, 2 abril, 2012 at 11:50 pm Deixe um comentário


Follow Computador de papel: o conteúdo da forma on WordPress.com

Feeds

direto do Twitter

O Computador de Papel

O computador de papel nada mais é do que a tentativa de "humanizar" o computador, trazê-lo para a fantasia lúdica da realidade, fazê-lo compreendido pelos milhares que o usam, mas não o entendem. Nasceu de minhas viagens intelectuais defronte da tela de fósforo um dia em que ele retrucou-me: decifra-me ou te devoro. Para não ser devorado, ousei decifrá-lo. É também onde posto minhas aulas, meus trabalhos, minhas impressões de um pouco de nada sobre coisa nenhuma. É o local onde falo das minhas paixões, entre elas, a música, o cinema, a TI e a ciência. É um espaço de discussão sobre a realidade do computador, sua influência, seus avanços, o exercício do óbvio que é mostrar a sua importância no e para o mundo. Tem o estilo de seu criador, acelerado, com um tom sempre professoral, tresloucado, por vezes verborrágico, insano, nevrálgico, sem arroubos literários, atônito e contemplativo diante da realidade, apaixonado, livre, feito para mostrar que a TI é antes de tudo, feita por gente!

Estatísticas do blog

  • 116,118 cliques e contando...

Agenda de posts

outubro 2016
S T Q Q S S D
« jun    
 12
3456789
10111213141516
17181920212223
24252627282930
31  

@edkallenn

Houve um erro ao recuperar imagens do Instagram. Uma tentativa será refeita em poucos minutos.