Torna indietro   Hardware Upgrade Forum > Software > Programmazione

NZXT H9 Flow RGB+, Kraken Elite 420 e F140X: abbiamo provato il tris d'assi di NZXT
NZXT H9 Flow RGB+, Kraken Elite 420 e F140X: abbiamo provato il tris d'assi di NZXT
Nelle ultime settimane abbiamo provato tre delle proposte top di gamma di NZXT nelle categorie case, dissipatori e ventole. Rispettivamente, parliamo dell'H9 Flow RGB+, Kraken Elite 420 e F140X. Si tratta, chiaramente, di prodotti di fascia alta che si rivolgono agli utenti DIY che desiderano il massimo per la propria build. Tuttavia, mentre i primi due dispositivi mantengono questa direzione, le ventole purtroppo hanno mostrato qualche tallone d'Achille di troppo
ASUS ROG Swift OLED PG34WCDN recensione: il primo QD-OLED RGB da 360 Hz
ASUS ROG Swift OLED PG34WCDN recensione: il primo QD-OLED RGB da 360 Hz
ASUS ROG Swift OLED PG34WCDN è il primo monitor gaming con pannello QD-OLED Gen 5 a layout RGB Stripe Pixel e 360 Hz su 34 pollici: lo abbiamo misurato con sonde colorimetriche e NVIDIA LDAT. Ecco tutti i dati
Recensione Nothing Phone (4a) Pro: finalmente in alluminio, ma dal design sempre unico
Recensione Nothing Phone (4a) Pro: finalmente in alluminio, ma dal design sempre unico
Nothing Phone (4a) Pro cambia pelle: l'alluminio unibody sostituisce la trasparenza integrale, portando una solidità inedita. Sotto il cofano troviamo uno Snapdragon 7 Gen 4 che spinge forte, mentre il display è quasi da top dig amma. Con un teleobiettivo 3.5x e la Glyph Matrix evoluta, è la prova di maturità di Carl Pei. C'è qualche compromesso, ma a 499EUR la sostanza hardware e la sua unicità lo rendono un buon "flagship killer" in salsa 2026
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 02-06-2011, 18:12   #1
e-commerce84
Senior Member
 
Iscritto dal: Feb 2009
Messaggi: 700
[Python] Cosa fà con questa istruzione?

Ciao,
il professore usa Python per gli algoritmi del corso di algoritmi e strutture dati ma non avendo mai avuto esperienza diretta con questo linguaggio ho qualche difficoltà a capire cosa fà questa istruzione:

Codice:
d = [[[V for u in V] for v in V] for k in range (-1 , n)]
In pratica che stà facendo?

Grazie
Andrea
e-commerce84 è offline   Rispondi citando il messaggio o parte di esso
Old 02-06-2011, 18:25   #2
cdimauro
Senior Member
 
L'Avatar di cdimauro
 
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
Devi dire al tuo professore che le list comprehension (si chiamano così le espressioni fra parentesi quadre) devono essere comprensibili.

Nello specifico, leggendo dalla più esterna alla più interna, viene creata una lista di n + 1 elementi (avrebbe potuto scrivere range(0, n + 1): sarebbe stato più comprensibile! A meno che non si tratti di un esame, e allora avrei scelto anche di peggio ).

Ogni elemento di questa lista è costituito a sua volta da una lista (quella "di mezzo"), con un numero di elementi pari a quelli contenuti nel vettore V.

A sua volta, quest'ultima lista è costituita da una lista (quella più interna) con un numero di elementi pari a quelli... contenuti nel vettore V.

Con un esempio si capisce meglio:
Codice:
>>> V = [0, 1, 2, 3]
>>> n = 10
>>> d = [[[V for u in V] for v in V] for k in range (-1 , n)]
>>> d
0: [[[[0, 1, 2, 3], [0, 1, 2, 3], [0, 1, 2, 3], [0, 1, 2, 3]],
  [[0, 1, 2, 3], [0, 1, 2, 3], [0, 1, 2, 3], [0, 1, 2, 3]],
  [[0, 1, 2, 3], [0, 1, 2, 3], [0, 1, 2, 3], [0, 1, 2, 3]],
  [[0, 1, 2, 3], [0, 1, 2, 3], [0, 1, 2, 3], [0, 1, 2, 3]]],
 [[[0, 1, 2, 3], [0, 1, 2, 3], [0, 1, 2, 3], [0, 1, 2, 3]],
  [[0, 1, 2, 3], [0, 1, 2, 3], [0, 1, 2, 3], [0, 1, 2, 3]],
  [[0, 1, 2, 3], [0, 1, 2, 3], [0, 1, 2, 3], [0, 1, 2, 3]],
  [[0, 1, 2, 3], [0, 1, 2, 3], [0, 1, 2, 3], [0, 1, 2, 3]]],
 [[[0, 1, 2, 3], [0, 1, 2, 3], [0, 1, 2, 3], [0, 1, 2, 3]],
  [[0, 1, 2, 3], [0, 1, 2, 3], [0, 1, 2, 3], [0, 1, 2, 3]],
  [[0, 1, 2, 3], [0, 1, 2, 3], [0, 1, 2, 3], [0, 1, 2, 3]],
  [[0, 1, 2, 3], [0, 1, 2, 3], [0, 1, 2, 3], [0, 1, 2, 3]]],
 [[[0, 1, 2, 3], [0, 1, 2, 3], [0, 1, 2, 3], [0, 1, 2, 3]],
  [[0, 1, 2, 3], [0, 1, 2, 3], [0, 1, 2, 3], [0, 1, 2, 3]],
  [[0, 1, 2, 3], [0, 1, 2, 3], [0, 1, 2, 3], [0, 1, 2, 3]],
  [[0, 1, 2, 3], [0, 1, 2, 3], [0, 1, 2, 3], [0, 1, 2, 3]]],
 [[[0, 1, 2, 3], [0, 1, 2, 3], [0, 1, 2, 3], [0, 1, 2, 3]],
  [[0, 1, 2, 3], [0, 1, 2, 3], [0, 1, 2, 3], [0, 1, 2, 3]],
  [[0, 1, 2, 3], [0, 1, 2, 3], [0, 1, 2, 3], [0, 1, 2, 3]],
  [[0, 1, 2, 3], [0, 1, 2, 3], [0, 1, 2, 3], [0, 1, 2, 3]]],
 [[[0, 1, 2, 3], [0, 1, 2, 3], [0, 1, 2, 3], [0, 1, 2, 3]],
  [[0, 1, 2, 3], [0, 1, 2, 3], [0, 1, 2, 3], [0, 1, 2, 3]],
  [[0, 1, 2, 3], [0, 1, 2, 3], [0, 1, 2, 3], [0, 1, 2, 3]],
  [[0, 1, 2, 3], [0, 1, 2, 3], [0, 1, 2, 3], [0, 1, 2, 3]]],
 [[[0, 1, 2, 3], [0, 1, 2, 3], [0, 1, 2, 3], [0, 1, 2, 3]],
  [[0, 1, 2, 3], [0, 1, 2, 3], [0, 1, 2, 3], [0, 1, 2, 3]],
  [[0, 1, 2, 3], [0, 1, 2, 3], [0, 1, 2, 3], [0, 1, 2, 3]],
  [[0, 1, 2, 3], [0, 1, 2, 3], [0, 1, 2, 3], [0, 1, 2, 3]]],
 [[[0, 1, 2, 3], [0, 1, 2, 3], [0, 1, 2, 3], [0, 1, 2, 3]],
  [[0, 1, 2, 3], [0, 1, 2, 3], [0, 1, 2, 3], [0, 1, 2, 3]],
  [[0, 1, 2, 3], [0, 1, 2, 3], [0, 1, 2, 3], [0, 1, 2, 3]],
  [[0, 1, 2, 3], [0, 1, 2, 3], [0, 1, 2, 3], [0, 1, 2, 3]]],
 [[[0, 1, 2, 3], [0, 1, 2, 3], [0, 1, 2, 3], [0, 1, 2, 3]],
  [[0, 1, 2, 3], [0, 1, 2, 3], [0, 1, 2, 3], [0, 1, 2, 3]],
  [[0, 1, 2, 3], [0, 1, 2, 3], [0, 1, 2, 3], [0, 1, 2, 3]],
  [[0, 1, 2, 3], [0, 1, 2, 3], [0, 1, 2, 3], [0, 1, 2, 3]]],
 [[[0, 1, 2, 3], [0, 1, 2, 3], [0, 1, 2, 3], [0, 1, 2, 3]],
  [[0, 1, 2, 3], [0, 1, 2, 3], [0, 1, 2, 3], [0, 1, 2, 3]],
  [[0, 1, 2, 3], [0, 1, 2, 3], [0, 1, 2, 3], [0, 1, 2, 3]],
  [[0, 1, 2, 3], [0, 1, 2, 3], [0, 1, 2, 3], [0, 1, 2, 3]]],
 [[[0, 1, 2, 3], [0, 1, 2, 3], [0, 1, 2, 3], [0, 1, 2, 3]],
  [[0, 1, 2, 3], [0, 1, 2, 3], [0, 1, 2, 3], [0, 1, 2, 3]],
  [[0, 1, 2, 3], [0, 1, 2, 3], [0, 1, 2, 3], [0, 1, 2, 3]],
  [[0, 1, 2, 3], [0, 1, 2, 3], [0, 1, 2, 3], [0, 1, 2, 3]]]]
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro
@LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro
Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys
cdimauro è offline   Rispondi citando il messaggio o parte di esso
Old 03-06-2011, 16:08   #3
e-commerce84
Senior Member
 
Iscritto dal: Feb 2009
Messaggi: 700
Ciao,
intanto mille grazie
no non si tratta di un esame ma fà parte del listato dell'algoritmo di Floyd-Roy-Warshall che risolve il problema dell'All Pairs Shortest Path (dato un grafo G, calcola i cammini minimi tra tutte le coppie di nodi)

Mi sono però appena accorto però di aver scritto una cavolata, facendo copia e incolla dal PDF delle dispense un carattere si è sminchiato e da simbolo matematico di infinito è diventato V.

In realtà volevo scrivere:

Codice:
n = len(G) 				# n contiene il NUMERO DI NODI in G
	V = range(n)				# V è l'insieme dei noidi del grafo G che sono ordinati da 0 ad n
	
	
	D = [[[INFINITO for u in V] for v in V] for k in range(-1, n)]		# D è la MATRICE DELLE DISTANZE TRA 2 NODI u e v al PASSO k
Vediamo però se ho capito bene il tuo ragionamento:
Ho una lista interna di (n+1) elementi (che vanno da indice -1 ad indice n), al suo interno ho una lista di n elementi (perchè V è un insieme di n elementi) al cui interno vi è un'altra lista di n elementi)

Ogni elemento della lista più interna è inizializzato ad INFINITO

In pratica da quello che ho capito potrei vedere questa struttura dati costituita da 3 liste una dentro l'altra come una matrice tridimensionale?

Tale matrice nell'algoritmo è la matrice che rappresenta le distanze tra due nodi: u,v al passo k dell'algoritmo (l'algoritmo itera k=n volte prima di restituire il risultato finale con i pesi di tutti gli shortest path tra tutte le coppie di nodi del grafo) ed usa la tecnica della programmazione dinamica per cui il risultato al passo k dipende dalla situazione al passo (k-1). Alla fine dell'algoritmo avrò una matrice d[n][u][v] che mi dice quanto mi costa il cammino minimo tra ogni coppia di nodi u e v.

Se ti diletti anche di algoritmi questo è il codice pseudo Python (perchè in realtà il simbolo di infinito è trattato a livello di pseudo codice e forse anche qualcos'altro) che descrive l'algoritmo per intero commentato:

Codice:
# Algoritmo che ricevuto un grafo G calcola la lunghezza dei cammini minimi tra tutte le coppie dei suoi nodi
def floydroywarshall(G):	

	n = len(G) 				# n contiene il NUMERO DI NODI in G
	V = range(n)				# V è l'insieme dei noidi del grafo G che sono ordinati da 0 ad n
	
	
	D = [[[INFINITO for u in V] for v in V] for k in range(-1, n)]		# D è la MATRICE DELLE DISTANZE TRA 2 NODI u e v al PASSO k	
	# P è la MATRICE DEI PREDECESSORI AL PASSO k: In posizione P[k][v][u] si trova il predecessore del nodo u su di uno shortest path che parte dal nodo v al passo k (su un cammino k-vincolato)
	P = [[[INFINITO for u in V] for v in V] for k in range(-1, n)]
	
	# Per ogni elemento nella matrice che rappresenta il grafo G. Stò inizializzando la matrice di partenza (con indice k=-1)
	for u in V:
		for v in V:
			if G[u][v] != - INFINITO:			# Se esiste un arco pesato che connette direttamente il nodo u con il nodo v
				D[-1][u][v] = G[u][v]		# Mette in D[-1][u][v] il peso di quell'arco
				P[-1][u][v] = u				# Il predecessore di v su di uno shortest path 0-vincolato (shortest path senza nodi intermedi) che parte da u è proprio u
	
	# Inizio ad iterare sulla matrice per calcolare i vari cammini k-vincolati (cammini con nodi interni presi da un insieme {0,1,....,k}, quando k == n l'algoritmo termina ed avrò trovato i cammini minimi
	for k in V:
		for u in V:
			for v in V:
				# Se mi conviene mantenere il vecchio cammino (k-1) vincolato (con nodi interni presi da {0,1,...,(k-1)})
				if D[k-1][u][v] = G[u][v] < D[k-1][u][k] + D[k-1][k][v]:
						D[k][u][v] = D[k-1][u][v]				# La distanza al passo k-esimo è la stessa rispetto alla distanza al passo (k-1)-esimo
						P[k][u][v] = P[k-1][u][v]				# Il predecessore di v in uno shortest path k-vincolatto che parte da u è lo stesso dello stesso shortest path (k-1) vincolato
				
				# Se invece mi conviene passare per il k-esimo nodo
				else:
					# Aggiorno la distanza dello shortest path k-vincolato sommando la somma del costo del cammino (k-1) vincolato che da u arriva a k e del costo del cammino (k-1) vincolato che da
					# k arriva a v
					D[k][u][v] = D[k-1][u][k] + D[k-1][k][v]
					# Il nuovo predecessore di v su uno shortest path k-vincolato che parte da u equivale al predecessore di v su uno shortest path (k-1) vincolato che parte da k
					P[k][u][v] = P[k-1][k][v]
					
	return P[n-1]
Ho capito bene cosa stà facendo il professore?

Grazie mille
Andrea
e-commerce84 è offline   Rispondi citando il messaggio o parte di esso
Old 08-07-2011, 07:47   #4
cdimauro
Senior Member
 
L'Avatar di cdimauro
 
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
Scusa per il ritardo, ma sono stato parecchio incasinato questo mese.

Sì, mi sembra tutto corretto.
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro
@LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro
Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys
cdimauro è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


NZXT H9 Flow RGB+, Kraken Elite 420 e F140X: abbiamo provato il tris d'assi di NZXT NZXT H9 Flow RGB+, Kraken Elite 420 e F140X: abb...
ASUS ROG Swift OLED PG34WCDN recensione: il primo QD-OLED RGB da 360 Hz ASUS ROG Swift OLED PG34WCDN recensione: il prim...
Recensione Nothing Phone (4a) Pro: finalmente in alluminio, ma dal design sempre unico Recensione Nothing Phone (4a) Pro: finalmente in...
WoW: Midnight, Blizzard mette il primo, storico mattone per l'housing e molto altro WoW: Midnight, Blizzard mette il primo, storico ...
Ecovacs Goat O1200 LiDAR Pro: la prova del robot tagliaerba con tagliabordi integrato Ecovacs Goat O1200 LiDAR Pro: la prova del robot...
CAS Space ha lanciato per la prima volta...
Qualcomm boccia Samsung: i futuri chip S...
Il razzo spaziale cinese Tianlong-3 di S...
Samsung cambia i piani: aumenta la produ...
TSMC non si ferma più: fatturato ...
Xiaomi porta in Italia il nuovo Redmi A7...
Mercato smartphone: Q1 2026 positivo (+1...
YouTube punta sull'AI: gli utenti potran...
Il prossimo chip a 2 nm di Samsung punte...
Due smartphone REDMAGIC sono stati rimos...
La beta della One UI 8.5 è ora di...
Addio al Pannello di Controllo di Window...
Il chip N1 di NVIDIA per i laptop del fu...
YouTube Premium costerà di pi&ugr...
I nuovi Samsung Galaxy A57 5G e A37 5G a...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 20:52.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v