Hiérarchie, ordre, combinaison (dupliquée) en Python / Ruby / PHP / Golang (Go)

Calculez le nombre de modèles d'échelle, d'ordre et de combinaison (en double) dans Python / Ruby / PHP / Golang (Go)

Le nombre de modèles d'échelle, d'ordre et de combinaison requis pour calculer la probabilité. python a itertools Référence: étude de l'ordre, de la combinaison et du produit direct par itertools, qui vous permet de créer des modèles. De plus, Golang utilise sa propre méthode pour créer des motifs, comme indiqué dans Cas comme celui-ci. Ici, une méthode simple pour calculer le nombre de chaque motif est décrite respectivement dans Python3, Ruby, PHP et GoLang.

Factorielle

Produit de la multiplication séquentielle d'entiers consécutifs de 1 à un certain nombre. Par exemple, le nombre total d'arrangements lors de la disposition de cinq cartes décrites de 1 à 5 dans une rangée peut être calculé par la formule suivante.

5! = 5\times4\times3\times2\times1 = 120

Permutation

Dans l'exemple au moment de l'annulation, on a supposé que les 5 cartes étaient toutes utilisées, mais lorsque 3 cartes sont utilisées (la duplication n'est pas autorisée), il peut être calculé par la formule suivante.

{}_5\mathrm{ P }_3 = 5\times4\times3 = 60

Dupliquer la séquence

Ici, lorsque la duplication est autorisée, c'est comme suit.

5^3 = 125

Dans le code Python3, utilisez simplement l'opérateur algébrique (**). Dans Golang, une méthode comme math.Pow (5,3).

Combinaison

Dans le cas de la commande, la commande a été prise en considération, mais si la commande n'est pas prise en considération, par exemple, le nombre lorsque 3 types (le même type n'est pas autorisé) sont sélectionnés parmi 5 types de fruits peut être calculé par la formule suivante.

{}_5\mathrm{ C }_3 = \frac{5\times4\times3}{3\times2\times1} = 10

Combinaison répétée

Lors de la combinaison, il était censé sélectionner 3 types parmi 5 types de fruits sans permettre la duplication, mais autoriser le même type et sélectionner 3 types de fruits (3 ou plus de chacun des 5 types de fruits) S'il y en a), il peut être calculé par la formule suivante. Je pense que la formule «H» signifie «homogène».

{}_5\mathrm{ H }_3 = {}_{5+3-1}\mathrm{ C }_3 = \frac{7\times6\times5}{3\times2\times1} = 35

Code source

J'ai essayé de le réaliser avec Python3 et GoLang respectivement. Cependant, pour des raisons de commodité, la "permutation" est définie en premier et l'ordre des doublons est décrit à la fin.

Python3

import functools as ft


def permutation(n, k):
    if k > n:
        return 0
    elif 0 < k <= n:
        return ft.reduce(lambda x, y:x * y, [n - v for v in range(k)])
    else:
        return 1


def factorial(n):
    return permutation(n, n - 1)


def combination(n, k):
    return int(permutation(n, k) / factorial(k))


def homogeneous(n, k):
    return combination(n + k - 1, k)

if __name__ == '__main__':
    print(permutation(5, 3))
    print(factorial(5))
    print(combination(5, 3))
    print(homogeneous(5, 3))
    print(5 ** 3)

Résultat de sortie


60
120
10
35
125

Ruby2.4

def permutation(n, k)
  if k > n
    0
  elsif 0 < k && k <= n then ((n - k + 1)..n).inject(:*)
  else 1
  end
end

def factorial(n)
  permutation(n, n - 1)
end

def combination(n, k)
  (permutation(n, k) / factorial(k)).to_i
end

def homogeneous(n, k)
  combination(n + k - 1, k)
end

p permutation(5, 3)
p factorial(5)
p combination(5,3)
p homogeneous(5, 3)
p 5**3

Résultat de sortie


60
120
10
35
125

PHP7.1

<?php

function permutation(int $n, int $k) : int {
    if ($k > $n) return 0;
    elseif (0 < $k && $k <= $n) 
        return array_reduce(range($n - $k + 1, $n), function ($c, $v) { return $c *= $v; }, 1);
    else return 1;
}

function factorial(int $n) : int {
    return permutation($n, $n - 1);
}

function combination(int $n, int $k) : int {
    return intval(permutation($n, $k) / factorial($k));
}

function homogeneous(int $n, int $k) : int {
    return combination($n + $k - 1, $k);
}

print(permutation(5, 3). PHP_EOL);
print(factorial(5). PHP_EOL);
print(combination(5, 3). PHP_EOL);
print(homogeneous(5, 3). PHP_EOL);
print(5 ** 3);

Résultat de sortie


60
120
10
35
125

Golang

package main;

import (
    "fmt"
    "math"
)

func permutation(n int, k int) int {
    v := 1
    if 0 < k && k <= n {
        for i := 0; i < k; i++ {
            v *= (n - i)
        }
    } else if k > n {
        v = 0
    }
    return v
}

func factorial(n int) int {
    return permutation(n, n - 1)
}

func combination(n int, k int) int {
    return permutation(n, k) / factorial(k)
}

func homogeneous(n int, k int) int {
    return combination(n + k - 1, k)
}

func main () {
    fmt.Printf("%v\n", permutation(5, 3))
    fmt.Printf("%v\n", factorial(5))
    fmt.Printf("%v\n", combination(5, 3))
    fmt.Printf("%v\n", homogeneous(5, 3))
    fmt.Printf("%v\n", math.Pow(5, 3))
}

Résultat de sortie


60
120
10
35
125

Autre

Dans la combinaison de chevauchement, on suppose qu'il y a 3 fruits ou plus dans chacun des 5 types, mais s'il y a une limite supérieure telle que 2 chacun, elle ne peut être dérivée par aucune des méthodes ci-dessus, il est donc nécessaire de considérer le principe d'inclusion. y a-t-il. Cette idée est tout à fait applicable, par exemple, il est possible de calculer le nombre lorsque les dés sont secoués trois fois et le nombre total de lancers est de douze. Lier les fruits à cet exemple de dés est synonyme du nombre de 12 fruits prélevés sur chacun des 6 fruits de 3 types. Voir ici pour savoir comment trouver cette limite supérieure de combinaisons en double avec Python3 et Go.

Recommended Posts

Hiérarchie, ordre, combinaison (dupliquée) en Python / Ruby / PHP / Golang (Go)
Combinaisons qui se chevauchent avec des limites supérieures en Python / Ruby / PHP / Golang (Go)
Combinaison de regroupement en Python / Ruby / PHP / Golang (Go)
Gérer les nombres premiers avec Python / Ruby / PHP / Golang (Go)
Combinaison avec duplication en Python
Trouvez l'ordre / la combinaison en Python
Réaliser un générateur PHP / Python avec Golang / Ruby
[Résumé du scraping] | Python Node.js PHP Ruby Go VBA | Scraping Yahoo Top en 6 langues
GNU GLOBAL (gtags) + α dans Go, Ruby, Python
Comment gérer JSON en Ruby, Python, JavaScript, PHP
Java VS PHP VS Python VS Ruby
À propos de Perl, Python, PHP, Ruby
Combiné avec ordinal en Python
Hello World dans divers langages [Python / PHP / Java / Perl / Ruby]
Différences entre Ruby et Python dans la portée
Grande différence dans les performances de ruby, python, httpd
Exemple PHP / Python / Ruby frappant l'API Path
[Itertools.permutations] Comment créer une séquence en Python
Obtention d'informations d'identification AWS temporaires en PHP, Python
Référence du fichier INI en Python ou Ruby
[Grammaire de base] Différences entre Ruby / Python / PHP
Énumérer les combinaisons en double (C ++) → Ajouter du code Python
Essayez quelque chose comme Python for-else dans Ruby
Traitement des interdictions en double dans la banque de données GAE / Python
Comment écrire Ruby to_s en Python
Différences dans le traitement des chaînes entre Python, Ruby, JS et PHP (combinaison et expansion de variables)