transposition in-place (suite)
On peut s'affranchir du stockage des positions si on peut disposer d'un marqueur sur les cases du tableau.
Exemple: Supposons qu'on ne traite QUE des nombres >=0.
On peut alors utiliser les valeurs du tableau elles-mêmes pour marquer les positions transposées.
Voici un exemple où on ajoute une colonne de zéros à droite.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
| L=[1, 2, 3, 4 ,5 ,6]
def affiche (L,m,n):
for i in range(0,m):
for j in range(0,n):
print L[i*n+j],
print "\n"
def transpose (L,m,n):
for k in range (0,m*n):
if L[k]>=0:
i=k/n
j=k%n
h=j*m+i
r=-L[k]-1
L[k]=-L[h]-1
L[h]=r
G.append(k)
G.append(h)
for k in range (0,m*n):
L[k]=-L[k]-1
def main():
global L
affiche (L,3,2)
transpose(L,3,2)
L=L+[0]*3
transpose(L,3,3)
affiche(L,3,3)
if __name__ == '__main__':
main() |