/ / які можливі перестановки 8 цифр - пітон, перестановка

Які можливі перестановки з 8 цифр - python, permutation

Мені потрібно знати, які можливі перестановки 8 цифр за правилами мого коду python:

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")

Відповіді:

2 для відповіді № 1

Їх багато.

  • Комбінації з 123 для 2 цифр складають 12, 13, 23.
  • Пермутації 123 для 2 цифр складають 12, 13, 21, 23, 31, 32.

Комбінації є меншою кількістю, тому що замовлення не має значення. Ваш код виглядає так, як вам потрібен принаймні один номер або букву у 8-значній комбінації, тому вам потрібна сума:

  • Комбінації по 1 розряду по 7 літер.
  • Комбінації по 2 цифри по 6 комбінацій букв.
    тощо ...
  • Комбінації по 7 цифр по 1 комбінації.

Пермутації повинні бути 62 літери / цифри, прийняті за один раз, за ​​вирахуванням всіх літерних перестановок з 52 літер, прийнятих 8 за раз, за ​​вирахуванням всіх числових перестановок 10 чисел, прийнятих 8 за раз.

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))

Вихід:

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

Спроба генерувати всі ці комбінації або перестановки в списку в пам'яті, як це робиться вашим кодом, не є гарною ідеєю.


1 для відповіді № 2

Для відома, я не думаю, що ви ставите правильне питання.

Я не дам вам повної відповіді, тому що для обчислення цього потрібно вічно. Поставити її в перспективі, наскільки велике це число. Перестановка з 8 чисел від 0 ~ 9 дорівнює: 1.814.400

Починаючи з: (0, 1, 2, 3, 4, 5, 6, 7), закінчуючись на (9, 8, 7, 6, 5, 4, 3, 2)

Ви можете продемонструвати, скільки перестановок 8 існує у всіх літерах ASCII з номерами від 0 до 9, використовуючи це:

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

Але це займе ДУЖЕ, аби показати, наскільки великим є це число:

Я пробіг його пару хвилин, і це було більше 1.500.000.000 (1.5 мільярдів).

Крім того, ваш код не має особливого сенсу. Чому потрібно розраховувати таке велике число? Чому вам потрібно записати його у файл (це, напевно, займе вічно / закінчиться пам'ять і / або пробіл). Спробуйте розробити те, що ви хочете.