/ / jakie są możliwe permutacje 8 cyfr - python, permutacja

jakie są możliwe permutacje 8 cyfr - python, permutacja

Muszę wiedzieć, jakie są możliwe permutacje 8 cyfr zgodnie z zasadami mojego kodu Pythona:

import itertools
import time
import string

numbers = set(range(10))
letters = set(string.ascii_letters)
mylist=[]
start=time.time()

comb = ([x for x in itertools.combinations([0,1,2,3,4,5,6,7,8,9,"a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"], 8)
if set(x) & letters and set(x) & numbers])

f=open("data.txt","w")
f.write("%s" % comb)
f.close()

end=time.time()
diff=end-start

print ("Se obtuvieron {} combinaciones.".format(len(comb)))
print ("En un tiempo total de:",diff,"segundos")

Odpowiedzi:

2 dla odpowiedzi № 1

Jest ich dużo. Aby było jasne:

  • Kombinacje 123 na 2 cyfry to 12, 13, 23.
  • Permutacje 123 na 2 cyfry to 12, 13, 21, 23, 31, 32.

Kombinacje to mniejszy numer, ponieważ zamówienie nie ma znaczenia. Twój kod wygląda na to, że potrzebujesz co najmniej jednej cyfry lub litery w swojej 8-cyfrowej kombinacji, więc potrzebujesz sumy:

  • Kombinacje kombinacji jednocyfrowych kombinacji 7 liter.
  • Kombinacje 2 cyfr kombinacji 6 liter.
    itp...
  • Kombinacje 7 cyfr kombinacji 1 liter.

Permutacje powinny składać się z 62 liter / cyfr po 8 na raz, minus permutacje wszystkich liter składające się z 52 liter, po 8 na raz, minus permutacje wszystkich liczb równe 10 cyfrom po 8 na raz.

from math import factorial as f

def P(n,k):
return f(n)//f(n-k)

def C(n,k):
return f(n)//f(n-k)//f(k)

letters = 52
numbers = 10
length = 8
combinations = sum(C(numbers,i) * C(letters,length-i) for i in range(1,length))
print("Combinations: {:20,}".format(combinations))

permutations = P(letters+numbers,length) - P(letters,length) - P(numbers,length)
print("Permutations: {:20,}".format(permutations))

Wydajność:

Combinations:        2,628,560,350
Permutations:  105,983,553,312,000

Próba wygenerowania wszystkich tych kombinacji lub permutacji na liście w pamięci, jak robi twój kod, nie jest dobrym pomysłem.


1 dla odpowiedzi nr 2

Dla przypomnienia, nie sądzę, że zadajesz właściwe pytanie. Mówisz permutację, ale twój kod używa kombinacji, to są różne rzeczy.

Nie udzielę ci kompletnej odpowiedzi, ponieważ obliczenie tego zajęłoby całą wieczność. Aby pokazać, jak duża jest ta liczba. Permutacja 8 liczb od 0 do 9 to: 1.814.400

Począwszy od: (0, 1, 2, 3, 4, 5, 6, 7), kończących się na (9, 8, 7, 6, 5, 4, 3, 2)

Możesz pokazać, ile permutacji 8 istnieje we wszystkich literach ASCII z liczbami od 0 do 9, używając:

mylist = range(10)
mylist.extend(ascii_letters)
i = 0
for n in permutations(mylist,8):
i += 1

Ale zajmie to BARDZO DŁUGO, aby pokazać, jak duża jest ta liczba:

Uruchomiłem go na kilka minut i było to ponad 1.500.000.000. (1,5 miliarda)

Twój kod też nie ma większego sensu. Dlaczego musisz obliczyć taki duży numer? Dlaczego musisz zapisać go do pliku (prawdopodobnie zajmie to zawsze / zabraknie pamięci i / lub spacji). Spróbuj opracować, co chcesz.