J'ai écrit un code pour compter le nombre de polygones pouvant être créés à partir des bâtonnets donnés (ie: longueurs).Coincé à TIME COMPLEXITY, J'ai besoin d'une solution moins complexe pour générer des polygones à partir d'une liste donnée de longueur d'arête
pour les bâtonnets = [2, 3, 4, 5, 6], la sortie doit être polygonsCount (sticks) = 13.
Voici les polygones qui peuvent être obtenus à partir des clés avec longueurs 2, 3, 4, 5, et 6:
(2, 3, 4); (3, 4, 5); (2, 4, 5); (2, 5, 6); (3, 4, 6); (3, 5, 6); (4, 5, 6); (2, 3, 4, 5); (2, 3, 4, 6); (2, 3, 5, 6); (2, 4, 5, 6); (3, 4, 5, 6); (2, 3, 4, 5, 6);
le programme fonctionne bien mais, en raison de la complexité du temps qu'il traverse le temps limite pour les listes supérieures.
D'abord j'ai généré un ensemble de puissance des listes données de bâtons. J'ai essayé d'éviter [] à tous les sous-ensembles d'éléments [x, x] - 2, mais j'ai échoué, aussi, je ne pense pas que cela réduira la complexité temporelle. Ensuite, je vérifie les polygones possibles. Mais je reçois la limite de temps. Voici le code:
def powersetGenerator(sticks,blankSet):
if sticks ==[]:
yield blankSet
else:
for item in powersetGenerator(sticks[1:],blankSet+[sticks[0]]):
yield item
for item in powersetGenerator(sticks[1:],blankSet):
yield item
def possiblePolygons(array):
sumOfAll = sum(array)
longestSide = max(array)
return longestSide < sumOfAll - longestSide
def polygonsCount(sticks):
powerset = list(powersetGenerator(sticks,[]))
count = 0
for index in range(len(powerset)):
if len(powerset[index])>=3 and possiblePolygons(powerset[index]) == 1:
count=(count+1)%((10**9) + 7)
return count
L'ensemble de puissances de calcul est O (2 ** n). Vous devriez le faire sans powerset. – Harry
** Comment? ** Je n'en ai aucune idée! – Ibrahim
@Ibrahim Tous les bâtons sont-ils de longueur différente comme dans votre exemple? Si oui, cela faciliterait le problème. – VPfB