Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Lenovo Legion Go 2: Ryzen Z2 Extreme e OLED 8,8'' per spingere gli handheld gaming PC al massimo
Lenovo Legion Go 2: Ryzen Z2 Extreme e OLED 8,8'' per spingere gli handheld gaming PC al massimo
Lenovo Legion Go 2 è la nuova handheld PC gaming con processore AMD Ryzen Z2 Extreme (8 core Zen 5/5c, GPU RDNA 3.5 16 CU) e schermo OLED 8,8" 1920x1200 144Hz. È dotata anche di controller rimovibili TrueStrike con joystick Hall effect e una batteria da 74Wh. Rispetto al dispositivo che l'ha preceduta, migliora ergonomia e prestazioni a basse risoluzioni, ma pesa 920g e costa 1.299€ nella configurazione con 32GB RAM/1TB SSD e Z2 Extreme
AWS re:Invent 2025: inizia l'era dell'AI-as-a-Service con al centro gli agenti
AWS re:Invent 2025: inizia l'era dell'AI-as-a-Service con al centro gli agenti
A re:Invent 2025, AWS mostra un’evoluzione profonda della propria strategia: l’IA diventa una piattaforma di servizi sempre più pronta all’uso, con agenti e modelli preconfigurati che accelerano lo sviluppo, mentre il cloud resta la base imprescindibile per governare dati, complessità e lock-in in uno scenario sempre più orientato all’hybrid cloud
Cos'è la bolla dell'IA e perché se ne parla
Cos'è la bolla dell'IA e perché se ne parla
Si parla molto ultimamente di "bolla dell'intelligenza artificiale", ma non è sempre chiaro perché: l'IA è una tecnologia molto promettente e che ha già cambiato molte cose dentro e fuori le aziende, ma ci sono enormi aspettative che stanno gonfiando a dismisura i valori delle azioni e distorcendo il mercato. Il che, com'è facile intuire, può portare a una ripetizione della "bolla dotcom", e forse anche di quella dei mutui subprime. Vediamo perché
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 26-11-2012, 16:17   #1
diegoves
Junior Member
 
Iscritto dal: Oct 2009
Messaggi: 18
Esercizio su alberi binari triangolari

Salve a tutti! Ho appena fatto un compitino di dati e algoritmi, con questo esercizio all'interno:
"Scrivere una funzione ricorsiva che, passato come parametro un albero binario T, verifichi se è triangolare. Usare solo variabili locali d'appoggio, no array o altre strutture. Non si può modificare l'albero. L'interfaccia albero binario ha come metodi: root(), isEmpty(), hasLeft(), left(), hasRight(), right()" (quindi niente riguardante l'altezza dell'albero, il numero di nodi ecc ecc).
Come fare?
Cercando un po' su internet non ho trovato una effettiva definizione di albero triangolare, ma comunque è semplice: è un albero binario con tutti i livelli completi, quindi i suoi nodi sono in numero una potenza di 2 meno 1, e l'ultimo livello L dell'albero contiene 2^L nodi esterni.



Essendo ricorsiva ho pensato di visitare l'albero, e conteggiare un "+1" se la ricorsione scende a sinistra, e "-1" se scende a destra, se finita la ricorsione il conteggio è a 0 allora risulta triangolare, cioè in questa maniera:



ma sfortunatamente non basta, perché in questo caso verifica semplicemente se i nodi aventi figli ne hanno esattamente 2...!! Ovvero così:



Qualche consiglio su come farlo?
diegoves è offline   Rispondi citando il messaggio o parte di esso
Old 01-12-2012, 09:13   #2
diegoves
Junior Member
 
Iscritto dal: Oct 2009
Messaggi: 18
Nessuno sa darmi una mano?
diegoves è offline   Rispondi citando il messaggio o parte di esso
Old 01-12-2012, 14:38   #3
__ZERO_UNO__
Member
 
L'Avatar di __ZERO_UNO__
 
Iscritto dal: Jul 2009
Città: Milano
Messaggi: 270
Codice:
def triangle_h(T, d)
 if empty?(T) return 0;
 if (has_children?(T)) d += 1
 return 1 + triangle_h(left(T)) + triangle_h(right(T))
end

def triangle?(T, d)
 return triangle_h(T, d) == pow(2, d + 1) - 1
end


depth = 0
verdict = triangle?(T, depth)

if (verdict)
 print("It's a fantastic triangle tree!");
else
 print("It's a common tree :(");
Forse funziona.
La funzione restituisce il numero di nodi e calcola la massima profondità(il numero di archi dalla radice ad una foglia).
__________________

AMD PII x4 955 BE | Sapphire HD4850 Vapor-X 1 GB | Samsung SpinPoint F1 500GB | Samsung EcoGreen F4 2TB
Gigabyte GA-MA790FXT-UD5P | Fractal Design Define R3 USB3.0 Titanium Grey | CORSAIR 650W CMPSU-650TX
Noctua U12P SE2 | 2 x 2GB Kingston 1333 MHz | Samsung SyncMaster P2450 | Samsung SyncMaster T200

Ultima modifica di __ZERO_UNO__ : 01-12-2012 alle 14:43.
__ZERO_UNO__ è offline   Rispondi citando il messaggio o parte di esso
Old 02-12-2012, 11:18   #4
Vincenzo1968
Bannato
 
Iscritto dal: Mar 2008
Città: Villabate(PA)
Messaggi: 2515
Edit

Ultima modifica di Vincenzo1968 : 02-12-2012 alle 11:23. Motivo: codice errato
Vincenzo1968 è offline   Rispondi citando il messaggio o parte di esso
Old 02-12-2012, 13:50   #5
Vincenzo1968
Bannato
 
Iscritto dal: Mar 2008
Città: Villabate(PA)
Messaggi: 2515
La mia soluzione:

Codice:
int isTriangular(Tree *head)
{
    int leftHeight = -1;
    int rightHeight = -1;

	if( !head )
		return 0;

	if( !head->left && !head->right )
		return 1;

	if( !head->left || !head->right )
		return -1;

	leftHeight = isTriangular(head->left);
	rightHeight = isTriangular(head->right);

	if( leftHeight < 0 || rightHeight < 0 || leftHeight != rightHeight )
		return -1;

	return leftHeight + 1;
}
La funzione restituisce -1 se l'albero non è triangolare; altrimenti restituisce l'altezza.

Questo è il programma di prova:

Codice:
#include <stdio.h>
#include <malloc.h>

#define MAX_STACK 512

//int MemoriaAllocata = 0;
//int MemoriaDeallocata = 0;

typedef struct tagTree
{
	int data;
	struct tagTree *left;
	struct tagTree *right;
} Tree;

Tree *NewNode(int info);
void FreeTree(Tree *head);

int IsTriangular(Tree *head);

Tree *NewNode(int info)
{
	Tree *r;

	r = (Tree *) malloc(sizeof(Tree));

	if( !r )
	{
		printf("Memoria insufficiente.\n");
		return NULL;
	}

	//MemoriaAllocata += sizeof(Tree);

	r->data = info;
	r->left = NULL;
	r->right = NULL;

	return r;
}

void FreeTree(Tree *head)
{
	Tree *temp1, *temp2;

	Tree *stack[MAX_STACK];
	int top;

	top = 0;
 
	if ( head == NULL )
		return;

	temp1 = temp2 = head;

	while ( temp1 != NULL )
	{
		for(; temp1->left != NULL; temp1 = temp1->left)
			stack[top++] = temp1;

		while ( (temp1 != NULL) && (temp1->right == NULL || temp1->right == temp2) )
		{
			temp2 = temp1;
			free(temp2);
			//MemoriaDeallocata += sizeof(Tree);
			if ( top == 0 )
				return;
			temp1 = stack[--top];
		}

		stack[top++] = temp1;
		temp1 = temp1->right;
	}
}

int isTriangular(Tree *head)
{
    int leftHeight = -1;
    int rightHeight = -1;

	if( !head )
		return 0;

	if( !head->left && !head->right )
		return 1;

	if( !head->left || !head->right )
		return -1;

	leftHeight = isTriangular(head->left);
	rightHeight = isTriangular(head->right);

	if( leftHeight < 0 || rightHeight < 0 || leftHeight != rightHeight )
		return -1;

	return leftHeight + 1;
}

int main()
{
	Tree *pTree1 = NULL;
	Tree *pTree2 = NULL;

	pTree1 = NewNode(1);
	pTree1->left = NewNode(2);
	pTree1->right = NewNode(3);
	pTree1->left->left = NewNode(4);
	pTree1->left->right = NewNode(5);
	pTree1->right->left = NewNode(6);
	pTree1->right->right = NewNode(7);
	pTree1->left->left->left = NewNode(8);
	pTree1->left->left->right = NewNode(9);
	pTree1->left->right->left = NewNode(10);
	pTree1->left->right->right = NewNode(11);
	pTree1->right->left->left = NewNode(12);
	pTree1->right->left->right = NewNode(13);
	pTree1->right->right->left = NewNode(14);
	pTree1->right->right->right = NewNode(15);
	

	pTree2 = NewNode(1);
	pTree2->left = NewNode(2);
	pTree2->right = NewNode(3);
	pTree2->left->left = NewNode(4);
	pTree2->left->right = NewNode(5);
	pTree2->right->left = NewNode(6);
	pTree2->right->right = NewNode(7);
	pTree2->left->left->left = NewNode(8);
	pTree2->left->left->right = NewNode(9);
	pTree2->left->right->left = NewNode(10);
	pTree2->left->right->right = NewNode(11);


	if ( isTriangular(pTree1) != -1 )
		printf("\nL'albero 1 e' triangolare.\n");
	else
		printf("\nL'albero 1 non e' triangolare\n");

	if ( isTriangular(pTree2) != -1 )
		printf("\nL'albero 2 e' triangolare.\n");
	else
		printf("\nL'albero 2 non e' triangolare\n");

	FreeTree(pTree1);
	FreeTree(pTree2);

	//printf("\nMemoria allocata   : %d\nMemoria deallocata : %d\n\n", MemoriaAllocata, MemoriaDeallocata);

	return 0;
}

Ultima modifica di Vincenzo1968 : 02-12-2012 alle 14:03. Motivo: ottimizzato codice
Vincenzo1968 è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Lenovo Legion Go 2: Ryzen Z2 Extreme e OLED 8,8'' per spingere gli handheld gaming PC al massimo Lenovo Legion Go 2: Ryzen Z2 Extreme e OLED 8,8'...
AWS re:Invent 2025: inizia l'era dell'AI-as-a-Service con al centro gli agenti AWS re:Invent 2025: inizia l'era dell'AI-as-a-Se...
Cos'è la bolla dell'IA e perché se ne parla Cos'è la bolla dell'IA e perché se...
BOOX Palma 2 Pro in prova: l'e-reader diventa a colori, e davvero tascabile BOOX Palma 2 Pro in prova: l'e-reader diventa a ...
FRITZ!Repeater 1700 estende la rete super-veloce Wi-Fi 7 FRITZ!Repeater 1700 estende la rete super-veloce...
Cloud sovrano: l'approccio di Broadcom c...
HONOR conferma l'arrivo in Italia di Mag...
La Cina sotto pressione impone maniglie ...
OpenAI integra le app in ChatGPT per tra...
NVIDIA sarebbe pronta a tagliare la prod...
Prezzo minimo storico per iPhone 16 Pro:...
Riot Games scopre una falla nei BIOS che...
Beats in super offerta su Amazon: aurico...
Batterie elettriche, Samsung SDI e Stell...
Clivet presenta Fullness, la pompa di ca...
SpaceX lancerà 167 razzi spaziali...
Yakuza Kiwami 3 e Dark Ties protagonisti...
Privacy a rischio: ecco la VPN che regis...
SpaceX ha annunciato che un satellite St...
ASUSTOR presenta i nuovi NAS Lockerstor ...
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: 04:06.


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