Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Recensione HONOR Magic V6: spessore record e super batteria. È lui il fold da battere?
Recensione HONOR Magic V6: spessore record e super batteria. È lui il fold da battere?
HONOR Magic V6 è arrivato in Italia a 2.299,90 euro con una promessa precisa: unire 4 mm di spessore da aperto (8,75 mm chiuso nel modello White, 9 mm negli altri colori) a una batteria da 6.660 mAh, la più capiente mai vista su un pieghevole. Lo abbiamo usato per oltre una settimana in versione Red 16/512 GB per capire se lo Snapdragon 8 Elite Gen 5 tiene testa alla concorrenza anche fuori dai benchmark ufficiali
Redmi Pad 2 9.7: ampio display, economico e peso contenuto, ma qualche limite nelle prestazioni
Redmi Pad 2 9.7: ampio display, economico e peso contenuto, ma qualche limite nelle prestazioni
Redmi Pad 2 9.7 punta su un display ampio e fluido, una batteria capace di accompagnare l'uso quotidiano senza ansie da ricarica e un prezzo accessibile, a partire da 179,90 euro per la versione con 64 GB di storage. Lo Snapdragon 6s 4G Gen 2 e i 4 GB di RAM della configurazione più diffusa frenano però chi cerca reattività e multitasking spinto: ecco il bilancio dopo due settimane di prova diretta
Peugeot Polygon Concept: ecco il futuro delle utilitarie
Peugeot Polygon Concept: ecco il futuro delle utilitarie
Polygon è la concept car di Peugeot che mostra il futuro delle soluzioni del segmento B: tra design compatti e innovativi affiancati da dimensioni compatte uno scherzo dalla manovrabilità incredibile per le manovre a bassa velocità
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 08-12-2012, 11:45   #1
mame83
Member
 
Iscritto dal: Nov 2010
Messaggi: 71
[C] albero 4 figli verificare se è un ABR considerando nodi a due a due

Ciao , ho il seguente problema in C: dato un albero definito in questo modo:
typedef struct nodo
{
int info;
struct nodo *left1;
struct nodo *left2;
struct nodo *right1;
struct nodo *right2;
} nod;

devo verificare se l abero è un ABR rispetto alla somma dei nodi left1 e left2 e alla somma dei nodi right1 e right2.

codice:

void visita(nod *radice, int *min, int *risp , int *somma)
{
if (radice != NULL)
{
visita(radice->left1,min,risp,somma);
*somma= *somma+radice->info;
visita(radice->left2,min,risp,somma);
if (radice->info != *somma)
*somma=radice->info+ *somma;
if (*min < *somma)
{
*min = *somma;
printf("\n aggiorniamo min %d \n",*min);

}
else
{
*risp = 1;
printf("aggiorniamo risp %d \n",*risp);
}
somma=0;
visita(radice->right1,min,risp,somma);
visita(radice->right2,min,risp,somma);
}
}

int isBst(nod *root)/*0 se abr 1 NO - FUNZIONE PRINCIPALE- */
{
int min = INT_MIN;
int ok = 0;
int somma = 0;
visita(root,&min,&ok,&somma);
printf("valore di ok e' %d \n",ok);
if (ok == 0)
return 0;
else
return 1;
}



La funzione prinicipale è isBst, all interno richiamo visita inizializzando min al minimo intero, somma e ok a 0.
In output mi restituisce sempre 1 cioe che non è un abr. Ragazzi non so piu come fare
Spero che qualcuno mi aiuti, grazie in anticipo
mame83 è offline   Rispondi citando il messaggio o parte di esso
Old 08-12-2012, 15:36   #2
mame83
Member
 
Iscritto dal: Nov 2010
Messaggi: 71
Spero di aver spiegato bene qual è il problema
. HELP HELP!!!!!!!!
mame83 è offline   Rispondi citando il messaggio o parte di esso
Old 08-12-2012, 15:54   #3
demos88
Senior Member
 
Iscritto dal: Nov 2004
Città: Padova
Messaggi: 2342
Ehm... mi sento un po' ignorante nel domandarlo... ma cos'è un ABR tree?
Intendi Albero Rosso-Nero (Red Black Tree)? Tra le varie sigle di alberi che ho studiato, l'ABR non mi dice nulla

edit: o intendi Albero Binario di Ricerca?
Comunque se il tuo albero è binario, perchè hai quattro puntatori ad altri nodi in ogni nodo (4 nodi figli?)?
__________________
CPU Ryzen 5900X @ 4,7Ghz + Thermalright Phantom Spirit 120 SE / MB Asus X470-F Gaming / RAM 2x16GB DDR4 Corsair 3600 CL16 / VGA Sapphire RX 7900 XT Nitro+ / SSD Crucial T500 1TB + Samsung 970 Pro 512GB + Sandisk 960GB Ultra II / PSU FSP Hydro G PRO 1000W / Headset Kingston HyperX Flight

Ultima modifica di demos88 : 08-12-2012 alle 16:02.
demos88 è offline   Rispondi citando il messaggio o parte di esso
Old 08-12-2012, 16:26   #4
mame83
Member
 
Iscritto dal: Nov 2010
Messaggi: 71
per ABR si intende un albero binario di ricerca cioe i nodi che stanno a sinistra sono minori o uguali della radice e quelli di destra maggiore. Nel caso in questione i nodi left1+ left2 devono essere minori o uguali della radice e right1 + right2 maggiori della radice.
mame83 è offline   Rispondi citando il messaggio o parte di esso
Old 09-12-2012, 09:54   #5
Vincenzo1968
Bannato
 
Iscritto dal: Mar 2008
Città: Villabate(PA)
Messaggi: 2515
Prova con le soluzioni di Nick Parlante(esercizi 13 e 14):

http://cslibrary.stanford.edu/110/BinaryTrees.html

Ovviamente devi adattare il codice alla struttura del tuo albero.
Vincenzo1968 è offline   Rispondi citando il messaggio o parte di esso
Old 10-12-2012, 08:46   #6
mame83
Member
 
Iscritto dal: Nov 2010
Messaggi: 71
ma io con un albero binario lo so fare . Con un albero a 4 figli è piu difficile
ALBERO BINARIO faccio in questo modo:
Codice:
int isBST2(nod *root, int min, int max)
{
  
  if (root == NULL) 
     return 0;
  
  if (root->info > min && root->info <= max &&
       isBST2(root->sinistro, min, root->info) == 0 &&
       isBST2(root->destro, root->info, max) == 0) 
     return 0;
  else 
     return 1;
}

int isBst(nod *root)/*0 se abr 1 NO*/
{
 if (isBST2(root,INT_MIN,INT_MAX) == 0)/*minimo intero e massimo intero gia
                                         assegnati di default*/
   {
    printf("l albero e' un ABR \n");
    return 0;
   } 
 else
   {
    printf("l albero non e' un ABR \n");
    return 1;  
   }
Come devo modificarlo in un albero a 4 figli???
mame83 è offline   Rispondi citando il messaggio o parte di esso
Old 10-12-2012, 09:37   #7
Vincenzo1968
Bannato
 
Iscritto dal: Mar 2008
Città: Villabate(PA)
Messaggi: 2515
Quote:
Originariamente inviato da mame83 Guarda i messaggi
ma io con un albero binario lo so fare . Con un albero a 4 figli è piu difficile
ALBERO BINARIO faccio in questo modo:
Codice:
int isBST2(nod *root, int min, int max)
{
  
  if (root == NULL) 
     return 0;
  
  if (root->info > min && root->info <= max &&
       isBST2(root->sinistro, min, root->info) == 0 &&
       isBST2(root->destro, root->info, max) == 0) 
     return 0;
  else 
     return 1;
}

int isBst(nod *root)/*0 se abr 1 NO*/
{
 if (isBST2(root,INT_MIN,INT_MAX) == 0)/*minimo intero e massimo intero gia
                                         assegnati di default*/
   {
    printf("l albero e' un ABR \n");
    return 0;
   } 
 else
   {
    printf("l albero non e' un ABR \n");
    return 1;  
   }
Come devo modificarlo in un albero a 4 figli???
Un albero a 4 figli non è un albero binario. Un albero binario è un albero con, al più, due figli. Il tuo è un albero m-ario(leggasi "emme ario" non "Mario") con m = 4.

Dunque la soluzione è semplice:

Codice:
int isBST (nod *root)
{
    return 0;
}
La funzione restituisce sempre false perché l'albero non è binario e, a maggior ragione, non può essere un albero binario(BST o ABR) di ricerca.

Scherzo, più tardi vedo come si può adattare il codice per il tuo caso.
Vincenzo1968 è offline   Rispondi citando il messaggio o parte di esso
Old 10-12-2012, 10:06   #8
mame83
Member
 
Iscritto dal: Nov 2010
Messaggi: 71
il problema è andare a considerare di volta in volta la somma dei nodi left1 e left2 e la somma dei nodi right1 e right2. PS magari fosse cosi facile return 0

Cmq a parte gli scherzi spero che qualcuno mi aiuti
mame83 è offline   Rispondi citando il messaggio o parte di esso
Old 13-12-2012, 12:17   #9
mame83
Member
 
Iscritto dal: Nov 2010
Messaggi: 71
ragazzi vi prego non so piu cosa fare. qualcuno mi aiuti!!!!!!!!
mame83 è offline   Rispondi citando il messaggio o parte di esso
Old 13-12-2012, 14:45   #10
demos88
Senior Member
 
Iscritto dal: Nov 2004
Città: Padova
Messaggi: 2342
Come ti ha risposto l'utente sopra, il tuo albero non è binario, e io oserei dire nemmeno di ricerca, in quanto non è definito un ordinamento sui nodi, ma su coppie di nodi. Un albero di ricerca con nodi che hanno fino a quattro figli, è per esempio l'albero 2-4, ma è strutturalmente molto diverso dal tuo.
Così su due piedi avrei abbozzato una cosa del genere, non uso C da tempo per cui non garantisco la sintassi
Codice:
bool isOk(*nodo){
	int left = 0, right = 0;
	if (nodo->left1 != NULL){
		left += nodo->left1->info;
		if (!isOk(nodo->left1))
			return false
	}
	if (nodo->left2 != NULL){
		left += nodo->left2->info;
		if (!isOk(nodo->left2))
			return false
	}
	if (nodo->right1 != NULL){
		right += nodo->right1->info;
		if (!isOk(nodo->right1))
			return false
	}
	if (nodo->right2 != NULL){
		right += nodo->right2->info;
		if (!isOk(nodo->right2))
			return false
	}
	if (right < left)
		return false
	else
		return true
}
Concettualmente dovrebbe fare i calcoli seguendo un attraversamento inorder, per ogni nodo calcola la somma dei sinistri e dei destri e se i sinistri sommano più dei destri, ritorna false che si propaga alla prima chiamata della funzione.
Prova a vedere se funziona, non dovrebbe essere molto distante dalla soluzione, penso
__________________
CPU Ryzen 5900X @ 4,7Ghz + Thermalright Phantom Spirit 120 SE / MB Asus X470-F Gaming / RAM 2x16GB DDR4 Corsair 3600 CL16 / VGA Sapphire RX 7900 XT Nitro+ / SSD Crucial T500 1TB + Samsung 970 Pro 512GB + Sandisk 960GB Ultra II / PSU FSP Hydro G PRO 1000W / Headset Kingston HyperX Flight

Ultima modifica di demos88 : 13-12-2012 alle 14:48.
demos88 è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Recensione HONOR Magic V6: spessore record e super batteria. È lui il fold da battere? Recensione HONOR Magic V6: spessore record e sup...
Redmi Pad 2 9.7: ampio display, economico e peso contenuto, ma qualche limite nelle prestazioni Redmi Pad 2 9.7: ampio display, economico e peso...
Peugeot Polygon Concept: ecco il futuro delle utilitarie Peugeot Polygon Concept: ecco il futuro delle ut...
Reno16 Pro: il compatto di OPPO punta su fotocamera da 200MP e il nuovo Bubble! La recensione Reno16 Pro: il compatto di OPPO punta su fotocam...
 Hisense 55U7SE: tuttofare e accessibile, il MiniLED per film, sport e gioco Hisense 55U7SE: tuttofare e accessibile, il Min...
Apple riduce la produzione di iPhone 17:...
Lancio del razzo spaziale cinese Lunga M...
SpaceX Starship: Super Heavy Booster 20 ...
Questa RTX 3070 è tornata in vita...
Un ricercatore scopre uno script bash na...
Robot umanoidi teleoperati eseguono le p...
QuadRF, il gadget da 499 dollari che leg...
ChatGPT, Claude e Gemini nel mirino: cos...
Pneumatici dalla Cina, l'UE introduce da...
SpaceX vuole 100.000 satelliti in orbita...
Disney+ gratis, ma con pubblicità: l'ult...
Microsoft ammette: emissioni di CO2 su d...
Apple denuncia OpenAI e due ex dirigenti...
Asha Sharma licenzia migliaia di dipende...
25 articolazioni, pelle tattile e forza ...
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:12.


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