Torna indietro   Hardware Upgrade Forum > Software > Programmazione

ASUS NUC 15 Pro e NUC 15 Pro+, mini PC che fondono completezza e duttilità
ASUS NUC 15 Pro e NUC 15 Pro+, mini PC che fondono completezza e duttilità
NUC 15 Pro e NUC 15 Pro+ sono i due nuovi mini-PC di casa ASUS pensati per uffici e piccole medie imprese. Compatti, potenti e pieni di porte per la massima flessibilità, le due proposte rispondono in pieno alle esigenze attuali e future grazie a una CPU con grafica integrata, accompagnata da una NPU per la gestione di alcuni compiti AI in locale.
Cybersecurity: email, utenti e agenti IA, la nuova visione di Proofpoint
Cybersecurity: email, utenti e agenti IA, la nuova visione di Proofpoint
Dal palco di Proofpoint Protect 2025 emerge la strategia per estendere la protezione dagli utenti agli agenti IA con il lancio di Satori Agents, nuove soluzioni di governance dei dati e partnership rafforzate che ridisegnano il panorama della cybersecurity
Hisense A85N: il ritorno all’OLED è convincente e alla portata di tutti
Hisense A85N: il ritorno all’OLED è convincente e alla portata di tutti
Dopo alcuni anni di assenza dai cataloghi dei suoi televisori, Hisense riporta sul mercato una proposta OLED che punta tutto sul rapporto qualità prezzo. Hisense 55A85N è un televisore completo e versatile che riesce a convincere anche senza raggiungere le vette di televisori di altra fascia (e altro prezzo)
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 04-05-2005, 15:03   #1
71104
Bannato
 
L'Avatar di 71104
 
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
[C, alberi binari, liste] problema

realizzare una funzione (una sola!) che presi in input un albero binario e una lista verifica che l'altezza dell'albero sia minore della lunghezza della lista.
questo era un eserciuìzio di un esonero di un corso di Programmazione 2; voi come fareste?
naturalmente il fatto che sia esplicitamente specificato di usare una sola funzione lascia intendere che per calcolare l'altezza dell'albero si debba usare un algoritmo iterativo.
come al solito, io la soluzione la so già ma pongo ugualmente la sfida 1) per vedere come se la cava cionci (spero che accetti la sfida), e 2) per confrontare le vostre soluzioni con la mia; ah, e anche 3) per avere una maggiore certezza di non aver scritto troppe cazzate a quell'esonero

Ultima modifica di 71104 : 04-05-2005 alle 15:07.
71104 è offline   Rispondi citando il messaggio o parte di esso
Old 04-05-2005, 18:54   #2
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Perchè non può essere ricorsivo
Comunque ho visto solo ora...domani ci provo...
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 04-05-2005, 21:15   #3
71104
Bannato
 
L'Avatar di 71104
 
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
Quote:
Originariamente inviato da cionci
Perchè non può essere ricorsivo
ok, può anche essere ricorsivo, ma deve comunque essere una sola funzione; e cmq il prof. l'ha anche detto che possibilmente doveva essere iterativo (considera che in genere gli algoritmi iterativi sono preferibili a quelli ricorsivi).
71104 è offline   Rispondi citando il messaggio o parte di esso
Old 04-05-2005, 21:21   #4
Manugal
Senior Member
 
L'Avatar di Manugal
 
Iscritto dal: Jan 2001
Città: Villanova di Guidonia (RM)
Messaggi: 1079
Ma guarda un pò.........

Anch'io avevo il compito B oggi sai? L'ho fatto un pò alla mia maniera infatti non so se è giusto spero di averlo passato l'ho fatti tutti.

Io mandato una lista e un albero in input e poi ho fatto lo scorrimento dell'albero ricorsivamente sul sottoalbero sinistro e destro e ho aumentato un contatore chiamato cntalbero. Poi ho iniziato a scorrere gli elementi della lista e anche lì ho usato un contatore chiamato cntlista. Alla fine ho semplicemente confrontato i contatori e il più piccolo ha restituito VERO.
Manugal è offline   Rispondi citando il messaggio o parte di esso
Old 04-05-2005, 21:49   #5
71104
Bannato
 
L'Avatar di 71104
 
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
Quote:
Originariamente inviato da Manugal
Ma guarda un pò.........

Anch'io avevo il compito B oggi sai? L'ho fatto un pò alla mia maniera infatti non so se è giusto spero di averlo passato l'ho fatti tutti.
LOL
li ho fatti tutti anche io ma penso di aver toppato il bonus (vabbè, niente bonus x me ).

cmq mezzo Dipartimento di Informatica della Sapienza viene qui su HwUpgrade... mi sembra che fosse Andrea Cosentino l'altro che si era iscritto qualche mese fa; tu chi sei?
71104 è offline   Rispondi citando il messaggio o parte di esso
Old 05-05-2005, 07:52   #6
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
L'albero è bilanciato ?
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 05-05-2005, 08:36   #7
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Lo suppongo non bilanciato e che sia memorizzato nella struttura classica con figlioSX e figlioDX...
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 05-05-2005, 09:59   #8
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Fatto:
Codice:
struct list {
	int info;
	struct list *next;
};

typedef struct list lista;


struct alb {
	int info;
	struct alb *sx;
	struct alb *dx;
};

typedef struct alb albero;

struct list_alb {
	albero *corrente;
	int visitato;
	int alt;
	struct list_alb *sx;
	struct list_alb *dx;
	struct list_alb *prev;
};

typedef struct list_alb lista_alb;

/*ritorna 1 se è minore, 0 altrimenti*/
int confronta(albero *a, lista *l)
{
	int lun_lista = 1;
	int lun_albero = 1;
	lista_alb *la;
	lista_alb *cur;
	lista_alb *tmp;

	if(!a && l) return 1;
	if(a && !l) return 0;

	while(l->next)
	{
		l = l->next;
		lun_lista++;
	}

	cur = la = (lista_alb *)malloc(sizeof(lista_alb));
	cur->prev = cur->dx = cur->sx = NULL;

	cur->corrente = a;
	cur->alt = 1;
	cur->visitato = 0;

	do {

		if((!cur->corrente->dx && !cur->corrente->sx) || cur->visitato == 2)
		{
			cur->visitato = 2;
			if(cur->alt > lun_albero)
				lun_albero = cur->alt;
			
			if(cur->prev) 
			{
				tmp = cur;
				cur = cur->prev;
				cur->visitato++;
                free(tmp);
			}
			continue;
		}

		switch(cur->visitato)
		{
		case 0:
			if(cur->corrente->sx)
			{
				tmp = (lista_alb *)malloc(sizeof(lista_alb));
				tmp->alt = cur->alt + 1;
				tmp->visitato = 0;
				tmp->prev = cur;
				tmp->corrente = cur->corrente->sx;
				tmp->sx = tmp->dx = NULL;
				cur->sx = tmp;
			}
			if(cur->corrente->dx)
			{
				tmp = (lista_alb *)malloc(sizeof(lista_alb));
				tmp->alt = cur->alt + 1;
				tmp->visitato = 0;
				tmp->prev = cur;
				tmp->corrente = cur->corrente->dx;
				tmp->sx = tmp->dx = NULL;
				cur->dx = tmp;
			}
			if(!cur->corrente->dx)
			{
				cur->visitato++;
				cur = cur->sx;
			}
			else
				cur = cur->dx;
			break;
		case 1:
			if(cur->sx) cur = cur->sx;
			else cur->visitato++;
			break;
		}

	} while(la->visitato < 2);
	free(la);
	return (lun_albero < lun_lista) ? 1 : 0;
}
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 05-05-2005, 11:58   #9
71104
Bannato
 
L'Avatar di 71104
 
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
Quote:
Originariamente inviato da cionci
Fatto:[...]
vedo che hai usato dei nodi d'appoggio che sono una fusione tra quelli dell'albero e quelli della lista; inoltre vedo che questi nodi contengono un flag (visitato) che risolve il problema dell'assenza dello stack durante la visita dell'albero (cioè permette di fare un algoritmo iterativo anziché ricorsivo); complimenti, ottima soluzione!
io ho fatto diversamente: per rimediare all'assenza dello stack durante la visita dell'albero ho usato una variabile d'appoggio (chiamiamola "provenienza") che ogni volta che il nodo corrente si setta su un'altra posizione, mi indica da dove "proviene" il nodo corrente, cioè se la posizione precedente a quella corrente era il padre, il figlio sx o il figlio dx del nodo corrente; ho fatto tutto dentro un ciclo, più o meno così:

Codice:
typedef struct _TNODE {  // tree node
    int data;
    struct _TNODE *p, *l, *r;
} TNODE, *PTNODE;

//...

int h = 0;  // altezza dell'albero
int i = 0;  // contatore altezza
PTNODE n = ...; //n viene inizializzato alla radice dell'albero
while (n) {
	switch (provenienza) {
	case 0:  // n prima era il padre
		if (n->l) {
			provenienza = 0;
			n = n->l;
			if (++i > h) h = i;
			break;
		}
		else {
			provenienza = 1;
		}
	case 1:  // n prima era il figlio sinistro
		if (n->r) {
			provenienza = 0;
			n = n->r;
			if (++i > h) h = i;
			break;
		}
		else {
			provenienza = 2;
		}
	case 2:  // n prima era il figlio destro
		if (n->p) {
			if (n == n->p->l) {
				provenienza = 1;
			}
			else {
				provenienza = 2;
			}
			n = n->p;
			i--;
		}
		break;
	}
}
ho usato alberi doppiamente linkati (cioè ogni nodo conosce anche il padre) altrimenti non ne uscivo fuori ^^' il prof. ha detto che andava bene.

PS: cmq si, l'albero non doveva essere supposto bilanciato (altrimenti era na cazzata bastava scendere su tutti i left o su tutti i right e contare finché non trovavi NULL in pratica diventava il conteggio di due liste).
71104 è offline   Rispondi citando il messaggio o parte di esso
Old 05-05-2005, 12:02   #10
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Se era doppiamente linkato era più facile...infatti ho costruito proprio quella struttura per permettermi di andare avanti ed indietro nell'albero...
cionci è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


ASUS NUC 15 Pro e NUC 15 Pro+, mini PC che fondono completezza e duttilità ASUS NUC 15 Pro e NUC 15 Pro+, mini PC che fondo...
Cybersecurity: email, utenti e agenti IA, la nuova visione di Proofpoint Cybersecurity: email, utenti e agenti IA, la nuo...
Hisense A85N: il ritorno all’OLED è convincente e alla portata di tutti Hisense A85N: il ritorno all’OLED è convi...
Recensione Borderlands 4, tra divertimento e problemi tecnici Recensione Borderlands 4, tra divertimento e pro...
TCL NXTPAPER 60 Ultra: lo smartphone che trasforma la lettura da digitale a naturale TCL NXTPAPER 60 Ultra: lo smartphone che trasfor...
Il web libero è morto, il pap&agr...
Il meglio dei robot a basso costo: Lefan...
Laureati in informatica senza lavoro, ne...
Una valanga di contenuti già annu...
Molti nemici... molto successo? Questo C...
Fotocamere Galaxy S26: poche differenze ...
Opera Neon: il nuovo browser AI agentico...
Collasso digitale alle porte? Quali sono...
Qualcomm 'schiaccia' Arm in tribunale: v...
Meta spinge sull'indipendenza da NVIDIA:...
Spotify rivoluziona la sua guida: Daniel...
Sora 2: la seconda generazione del model...
Nuovo obiettivo FE 100mm F2.8 Macro GM O...
Steelseries Arctis Nova Elite: le prime ...
30 anni di PlayStation da indossare: arr...
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: 08:08.


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