Python De La Matrice De Rotation
Je suis donc la mise en œuvre d'un bloc de swap algorithme en python.
L'algorithme que je suis est-ce:
Initialiser Un = arr[0..j-1] et B = arr[d..n-1]
1) effectuer les opérations suivantes jusqu'à ce que la taille de A est égale à la taille de B
a) Si l'Une est plus courte, diviser B en Bl et Br tels que Br est de même
la longueur A. Swap Un et Br à changer ABlBr en BrBlA. Maintenant
est à sa place définitive, afin de se reproduire sur des morceaux de B.
b) Si A est plus, diviser en Al et Ar, tels que Al est de même
la longueur B Swap Al et B pour le changer AlArB en BArAl. Maintenant B
est à sa place définitive, afin de se reproduire sur des morceaux de A.
2), Enfin, quand A et B sont de taille égale, bloc d'échange.
Le même algorithme a été implémenté en C sur ce site, des La Matrice De Rotation
Mon code python pour le même est
a = [1,2,3,4,5,6,7,8]
x = 2
n = len(a)
def rotate(a,x):
n = len(a)
if x == 0 or x == n:
return a
if x == n -x:
print(a)
for i in range(x):
a[i], a[(i-x+n) % n] = a[(i-x+n) % n], a[i]
print(a)
return a
if x < n-x:
print(a)
for i in range(x):
a[i], a[(i-x+n) % n] = a[(i-x+n) % n], a[i]
print(a)
rotate(a[:n-x],x)
else:
print(a)
for i in range(n-x):
a[i], a[(i-(n-x) + n) % n] = a[(i-(n-x) + n) % n] , a[i]
print(a)
rotate(a[n-x:], n-x)
rotate(a,x)
print(a)
J'obtiens le droit des valeurs à chaque étape, mais les récursive appel de fonction ne retourne pas le résultat escompté, et je n'arrive pas à comprendre la cause. Quelqu'un peut m'expliquer quel est le problème avec ma récursivité ? et que peut-être la solution de rechange possible.
Vous devez vous connecter pour publier un commentaire.
Vous pouvez faire pivoter une liste en Python à l'aide d'un deque:
Ou avec la liste des tranches:
Noter que la convention de signe est opposé avec deque.faire pivoter vs tranches.
Si vous voulez une fonction qui a la même convention de signe:
Pour numpy, il suffit d'utiliser np.rouleau
Ou vous pouvez utiliser un numpy version de la même
rotate
ci-dessus (encore une fois noter la différence de signe vsnp.roll
):np.concatenate((a[n:],a[:n]))
np.concatenate( ( a[n:], a[:n] ) )
semble 10 fois plus vite 🙂Un simple et de sténographie syntaxe de la matrice de rotation en Python est
Exemple:
nous donne
[5,1,2,3,4]
Avez-vous réellement besoin de mettre en œuvre le bloc de swap ou vous êtes simplement à la recherche pour faire pivoter le tableau? En python, vous pouvez faire de la CW et CWW rotations à l'aide de
et
J'ai trouvé un problème que j'avais besoin de Droite et de Gauche, des rotations pour les grandes valeurs de k (où k est le nombre de rotations), donc, j'ai mis en œuvre les fonctions suivantes quelle que soit la taille de k.
Droit de Rotation Circulaire (de gauche à droite: 1234 -> 4123):
Gauche Rotation Circulaire (de droite à gauche: 1234 -> 2341):
Sources:
J'attends que lorsque vous passez une tranche de un à votre appel récursif, vous n'êtes pas en passant de la même variable de plus. Essayer de passer une dans son intégralité et de la partie supérieure /inférieure limites de votre tranche comme des arguments supplémentaires à votre fonction.
Par exemple envisager de cette fonction:
J'ai juste essayé la suivante:
Où vous pouvez voir la modification de la tranche n'a pas été retenue par l'ensemble
Par curiosité, quels résultats obtenez-vous & quels résultats attendez-vous?
vous pouvez utiliser ce code pour rotation à gauche en python tableau