Difference between revisions of "Contagem"

From Logic Wiki
Jump to navigation Jump to search
(Created page with "\usepackage{amsmath} A contagem é fundamental para o estudo da matemática discreta, a complexidade de algoritmos, combinatórios, e alguns ramos da álgebra tais como a teor...")
 
Line 1: Line 1:
\usepackage{amsmath}
 
 
A contagem é fundamental para o estudo da matemática discreta, a complexidade de algoritmos, combinatórios, e alguns ramos da álgebra tais como a teoria do grupo finito. Este capítulo apresenta uma variedade de técnicas que estão disponíveis no Maple para contar uma coleção diversa de objetos discretos, incluindo combinações e permutações de conjuntos finitos. Objetos podem ser contados usando fórmulas ou outros algoritmos, ou listando-os e observando diretamente o tamanho da lista. A última abordagem por um número de procedimentos Maple que pode ser usado para gerar estruturas combinatórias.
 
A contagem é fundamental para o estudo da matemática discreta, a complexidade de algoritmos, combinatórios, e alguns ramos da álgebra tais como a teoria do grupo finito. Este capítulo apresenta uma variedade de técnicas que estão disponíveis no Maple para contar uma coleção diversa de objetos discretos, incluindo combinações e permutações de conjuntos finitos. Objetos podem ser contados usando fórmulas ou outros algoritmos, ou listando-os e observando diretamente o tamanho da lista. A última abordagem por um número de procedimentos Maple que pode ser usado para gerar estruturas combinatórias.
  
Line 15: Line 14:
 
Claro, também existem muitas outras funções que não se encaixam neste esquema.
 
Claro, também existem muitas outras funções que não se encaixam neste esquema.
  
===1. Funções Maple relevantes===
+
==='''1. Funções Maple relevantes'''===
  
 
O pacote “combinat” contém muitas funções pertinentes à contagem e geração de estruturas combinatórias. A lista de funções neste pacote é:
 
O pacote “combinat” contém muitas funções pertinentes à contagem e geração de estruturas combinatórias. A lista de funções neste pacote é:
Line 58: Line 57:
 
Se nós não fornecemos o segundo argumento, todas as combinações possíveis de todos os tamanhos possíveis são consideradas.
 
Se nós não fornecemos o segundo argumento, todas as combinações possíveis de todos os tamanhos possíveis são consideradas.
  
'''''numbcomb([apple, apple, orange]);'''''<br />
+
'''''numbcomb([apple, apple, orange]);<br />'''''<br />
 
'''''choose([apple, apple, orange]);'''''
 
'''''choose([apple, apple, orange]);'''''
  
 
Nós também podemos escolher combinações aleatórias.
 
Nós também podemos escolher combinações aleatórias.
  
'''''randcomb([chocolate, vanilla, cookiedough],2);'''''
+
'''''randcomb([chocolate, vanilla, cookiedough],2);'''''<br />
 
'''''randcomb(5,3);'''''
 
'''''randcomb(5,3);'''''
  
Line 70: Line 69:
 
Usando ''combstruct'', nós resolveríamos os problemas acima da seguinte forma:
 
Usando ''combstruct'', nós resolveríamos os problemas acima da seguinte forma:
  
'''''count(Combination([apple,orange,pear]),size=2);'''''
+
'''''count(Combination([apple,orange,pear]),size=2);'''''<br />
'''''allstructs(Combination([apple,orange,pear]), size=2);'''''
+
'''''allstructs(Combination([apple,orange,pear]), size=2);'''''<br />
 
'''''draw(Combination([chocolate,vanilla,cookiedough]),size=2);'''''
 
'''''draw(Combination([chocolate,vanilla,cookiedough]),size=2);'''''
  
Line 83: Line 82:
  
 
Quando '''n''' e '''r''' são inteiros não negativos e '''''<math>r \leq n</math>''''', ''binomial'' e ''numbcomb'' se comportam de forma idêntica. O procedimento ''binomial'' é mais geral, e expande a definição dos coeficientes binomiais. Não vamos discutir seu uso mais geral aqui.
 
Quando '''n''' e '''r''' são inteiros não negativos e '''''<math>r \leq n</math>''''', ''binomial'' e ''numbcomb'' se comportam de forma idêntica. O procedimento ''binomial'' é mais geral, e expande a definição dos coeficientes binomiais. Não vamos discutir seu uso mais geral aqui.
 +
 +
==='''2. Mais funções combinatórias'''===
 +
 +
Nesta seção, vamos discutir algumas funções combinatórias, úteis na contagem, que surgem como coeficientes de certos polinomiais.
 +
 +
===='''2.1. Coeficientes binomiais'''====
 +
 +
Os coeficientes binomiais que são coeficientes do polinomial <math>(a+b)^n</math> quando este é expandido.
 +
 +
'''''for n from 1 to 7 do'''''<br />
 +
'''''        sort(expand((a + b)^n));'''''<br />
 +
'''''od;''''''
 +
 +
Esses números podem ser acessados diretamente no Maple usando a função “binomial” da biblioteca Maple.
 +
 +
'''''for n from 1 to 7 do'''''<br />
 +
'''''        seq(binomial(n, k), k = 0..n);'''''<br />
 +
'''''od;'''''
 +
 +
O valor do binomial(n, k) é o coeficiente do termo binomial <math>a^kb^{n-k}</math> (que é igual ao coeficiente de <math>a^{n-k}b^k</math>) na expansão de <math>(a+b)^n</math>.
 +
Dados argumentos numéricos, “binomial” resulta em um número.
 +
 +
'''''binomial(100,53);'''''
 +
 +
Entretanto, se é dado um argumento simbólico, “binomial” retorna indeterminado.
 +
 +
'''''n := 'n': # clear values'''''<br />
 +
'''''k := 'k': # from n and k'''''<br />
 +
'''''binomial(n, 9);'''''
 +
 +
Você pode expressar isso como uma função racional da variável “n” chamando “expand”.
 +
 +
'''''expand(%);'''''
 +
 +
Entretanto, isso funciona apenas se no máximo um dos argumentos for simbólico.
 +
 +
'''''binomial(n, k);'''''<br />
 +
'''''expand(%);'''''
 +
 +
Para determinar a definição, nos termos de fatoriais, você pode usar o comando multifacetado “convert”.
 +
 +
'''''convert(binomial(n, k), factorial);'''''
 +
 +
O procedimento “convert” é uma utilidade de conversão de propósito geral que pode ser usado para transformar expressões de uma forma para outra, equivalente. Aqui, transforma uma instrução simbólica envolvendo a chamada do procedimento “binomial”, para uma equivalente expressada usando fatoriais. Devido a “convert” aceitar uma grande variedade de tipos de argumentos, sua documentação é espalhada sobre muitas das páginas de ajuda online.Mas um bom lugar para começar a encontrar mais sobre “convert”, é a página principal de ajuda para este comando, acessada digitando “?convert”. Essa facilidade pode ser usada para provar identidades combinatórias envolvendo os coeficientes binomiais. Um pouco de cuidado é necessário, entretanto, para levar em conta o grau de avaliação que é realizado a cada passo, deixa coisas que são iguais não serem reconhecidas como tais. Por exemplo, essa identidade famosa <math>\binom{n}{k} = \binom{n}{n-k}</math> pode ser provada da seguinte forma.
 +
 +
'''''left := binomial(n, k);'''''<br />
 +
'''''right := binomial(n, n - k);'''''
 +
 +
Queremos provar a esquerda e a direita são iguais. Note que
 +
 +
'''''evalb(left = right);'''''
 +
 +
isso ocorre porque esquerda e direita foram avaliadas de forma insuficiente até o momento. Para superar esta falta de reconhecimento, nós usamos “convert”.
 +
 +
'''''left := convert(left, factorial);'''''<br />
 +
'''''right := convert(right, factorial);'''''<br />
 +
'''''evalb(left = right);'''''
 +
 +
Geralmente existe uma certa quantidade de adivinhação envolvida em coagir expressões simbólicas para a forma que é útil para um dado problema. Maple é designado para permitir que você facilmente experimente com expressões, para que você possa descobrir a forma certa para uma aplicação particular.

Revision as of 17:47, 8 December 2015

A contagem é fundamental para o estudo da matemática discreta, a complexidade de algoritmos, combinatórios, e alguns ramos da álgebra tais como a teoria do grupo finito. Este capítulo apresenta uma variedade de técnicas que estão disponíveis no Maple para contar uma coleção diversa de objetos discretos, incluindo combinações e permutações de conjuntos finitos. Objetos podem ser contados usando fórmulas ou outros algoritmos, ou listando-os e observando diretamente o tamanho da lista. A última abordagem por um número de procedimentos Maple que pode ser usado para gerar estruturas combinatórias.

A maioria dos procedimentos Maple relevantes a este capítulo pertence em um ou dois pacotes. O pacote “combinat” é a parte padrão da versão da biblioteca 3Maple.

Um novo pacote “combstruct” está disponível como uma biblioteca compartilhada para MapleV, versão 3, e é um pacote padrão da versão 4. Você pode acessar os serviços oferecidos por qualquer um desses pacotes usando o comando “with” para carregá-lo na sua sessão Maple. (Se você está usando Maple V, versão 3, você também deve colocar with(share) antes de digitar with(combstruct)).

É útil saber que o pacote combstruct, enquanto provê uma grande variedade de procedimentos, organiza algumas das funções básicas em grupos relacionados a um objeto combinatório particular (como, por exemplo, combinações ou partições). Para muitos tipos de objetos combinatórios, existem procedimentos Maple para fazer as seguintes operações.

  1. Você pode construir todos os objetos daquele tipo associado a um inteiro dado. Ao procedimento para fazer isso é geralmente dado um nome refletindo o tipo de objeto. (Por exemplo, “permute” and “partitions”.)
  2. Você pode contar todos os objetos daquele tipo associado a um inteiro dado. Aqueles procedimentos geralmente começão com a string “numb” e são completados por uma abreviaçãodo tipo de objeto sendo contado. (Por exemplo, “numbperm” e “numbpart”.)
  3. Você pode gerar um objeto aleatório daquele tipo associado a um inteiro dado. Uma abreviação do tipo de objeto sendo gerado, prefixado com a string “rand” é como essas rotinas são normalmente nomeadas. (Por exemplo, “randperm” e “randpart”.)


Claro, também existem muitas outras funções que não se encaixam neste esquema.

1. Funções Maple relevantes

O pacote “combinat” contém muitas funções pertinentes à contagem e geração de estruturas combinatórias. A lista de funções neste pacote é:

with(combinat);

Existe outro pacote, “combstruct”, disponível no Maple V, versão 4, que também lida com estruturas combinatórias. A maior parte do que este pacote faz está além do escopo deste livro, mas algumas de suas funções expandem o que o pacote “combinat” faz. O pacote “combstruct” fornece funções “interstructs”.

count Para contar o número de objetos de um dado tamanho
draw Para gerar um objeto aleatório de um dado tamanho
allstructs Para gerar todos os objetos de um dado tamanho
iterstructs Para gerar a “próxima” estrutura de um dado tamanho

As estruturas relevantes que “combstruct” pode lidar são permutação, combinação/subconjunto, partição.

Para acessar os serviços fornecidos pelo pacote “combstruct”, digite:

with(combstruct);

Se você estiver usando a versão 3 do Maple, primeiramente você terá que utilizar o comando “with(share)”, já que o pacote “combstruct” é parte da biblioteca na versão 3.

As funções no pacote “combinat” para combinações são “numbcomb”, “choose”, e “randcomb”. Este é o número de formas de escolher duas frutas a partir de uma maçã, uma laranja e uma pera.

numbcomb([apple, orange, pear], 2);

Aqui estão as possíveis escolhas:

choose([apple, orange, pear], 2);

A função “numbcomb” conta o número de combinações (ou r-combinações) de um conjunto. A função “choose” lista as combinações. Portanto sempre existirão elementos “numbcomb” listados por “choose”.

nops(%);

E se tivermos duas maçãs e nenhuma pêra (um exemplo com elementos indistinguíveis):

numbcomb([apple, apple, orange],2);

Com as escolhas:

choose([apple, apple, orange],2);

Se nós não fornecemos o segundo argumento, todas as combinações possíveis de todos os tamanhos possíveis são consideradas.

numbcomb([apple, apple, orange]);

choose([apple, apple, orange]);

Nós também podemos escolher combinações aleatórias.

randcomb([chocolate, vanilla, cookiedough],2);
randcomb(5,3);

Neste exemplo, o 5 representa o conjunto .

Usando combstruct, nós resolveríamos os problemas acima da seguinte forma:

count(Combination([apple,orange,pear]),size=2);
allstructs(Combination([apple,orange,pear]), size=2);
draw(Combination([chocolate,vanilla,cookiedough]),size=2);

Coeficientes binomiais podem ser calculados tanto chamando a função numbcomb como um inteiro como primeiro argumento,

numbcomb(10,5);

ou nós podemos calcular , usando a função binomial. Então nós resolvemos o exemplo 7 na seção 4.3 da seguinte forma:

binomial(10,5);

Quando n e r são inteiros não negativos e , binomial e numbcomb se comportam de forma idêntica. O procedimento binomial é mais geral, e expande a definição dos coeficientes binomiais. Não vamos discutir seu uso mais geral aqui.

2. Mais funções combinatórias

Nesta seção, vamos discutir algumas funções combinatórias, úteis na contagem, que surgem como coeficientes de certos polinomiais.

2.1. Coeficientes binomiais

Os coeficientes binomiais que são coeficientes do polinomial quando este é expandido.

for n from 1 to 7 do
sort(expand((a + b)^n));
od;'

Esses números podem ser acessados diretamente no Maple usando a função “binomial” da biblioteca Maple.

for n from 1 to 7 do
seq(binomial(n, k), k = 0..n);
od;

O valor do binomial(n, k) é o coeficiente do termo binomial (que é igual ao coeficiente de ) na expansão de . Dados argumentos numéricos, “binomial” resulta em um número.

binomial(100,53);

Entretanto, se é dado um argumento simbólico, “binomial” retorna indeterminado.

n := 'n': # clear values
k := 'k': # from n and k
binomial(n, 9);

Você pode expressar isso como uma função racional da variável “n” chamando “expand”.

expand(%);

Entretanto, isso funciona apenas se no máximo um dos argumentos for simbólico.

binomial(n, k);
expand(%);

Para determinar a definição, nos termos de fatoriais, você pode usar o comando multifacetado “convert”.

convert(binomial(n, k), factorial);

O procedimento “convert” é uma utilidade de conversão de propósito geral que pode ser usado para transformar expressões de uma forma para outra, equivalente. Aqui, transforma uma instrução simbólica envolvendo a chamada do procedimento “binomial”, para uma equivalente expressada usando fatoriais. Devido a “convert” aceitar uma grande variedade de tipos de argumentos, sua documentação é espalhada sobre muitas das páginas de ajuda online.Mas um bom lugar para começar a encontrar mais sobre “convert”, é a página principal de ajuda para este comando, acessada digitando “?convert”. Essa facilidade pode ser usada para provar identidades combinatórias envolvendo os coeficientes binomiais. Um pouco de cuidado é necessário, entretanto, para levar em conta o grau de avaliação que é realizado a cada passo, deixa coisas que são iguais não serem reconhecidas como tais. Por exemplo, essa identidade famosa pode ser provada da seguinte forma.

left := binomial(n, k);
right := binomial(n, n - k);

Queremos provar a esquerda e a direita são iguais. Note que

evalb(left = right);

isso ocorre porque esquerda e direita foram avaliadas de forma insuficiente até o momento. Para superar esta falta de reconhecimento, nós usamos “convert”.

left := convert(left, factorial);
right := convert(right, factorial);
evalb(left = right);

Geralmente existe uma certa quantidade de adivinhação envolvida em coagir expressões simbólicas para a forma que é útil para um dado problema. Maple é designado para permitir que você facilmente experimente com expressões, para que você possa descobrir a forma certa para uma aplicação particular.