Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Microsoft Surface Pro 12 è il 2 in 1 più compatto e silenzioso
Microsoft Surface Pro 12 è il 2 in 1 più compatto e silenzioso
Basato su piattaforma Qualcomm Snapdragon X Plus a 8 core, il nuovo Microsoft Surface Pro 12 è un notebook 2 in 1 molto compatto che punta sulla facilità di trasporto, sulla flessibilità d'uso nelle differenti configurazioni, sul funzionamento senza ventola e sull'ampia autonomia lontano dalla presa di corrente
Recensione REDMAGIC Astra Gaming Tablet: che spettacolo di tablet!
Recensione REDMAGIC Astra Gaming Tablet: che spettacolo di tablet!
Il REDMAGIC Astra Gaming Tablet rappresenta una rivoluzione nel gaming portatile, combinando un display OLED da 9,06 pollici a 165Hz con il potente Snapdragon 8 Elite e un innovativo sistema di raffreddamento Liquid Metal 2.0 in un form factor compatto da 370 grammi. Si posiziona come il tablet gaming più completo della categoria, offrendo un'esperienza di gioco senza compromessi in mobilità.
Dopo un mese, e 50 foto, cosa abbiamo capito della nuova Nintendo Switch 2
Dopo un mese, e 50 foto, cosa abbiamo capito della nuova Nintendo Switch 2
Dopo un mese di utilizzo intensivo e l'analisi di oltre 50 scatti, l'articolo offre una panoramica approfondita di Nintendo Switch 2. Vengono esaminate le caratteristiche che la definiscono, con un focus sulle nuove funzionalità e un riepilogo dettagliato delle specifiche tecniche che ne determinano le prestazioni
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 11-05-2021, 18:28   #1
zabnicola
Member
 
Iscritto dal: Nov 2020
Messaggi: 75
Da struttura albero binario di ricerca a matrice/tabella. Come

Qualcuno sa spiegarmi come un albero binario di ricerca puo essere stampato in forma di tabella quindi a matrice a array multidimensionale.
Premetto che secondo me sono concetti diversi. Ma nei database esiste una rappresentazione tabellare dei dati e una in albero binario di ricerca.

Non trovo e capisco la corrispondenza tra i due.

Ultima modifica di zabnicola : 12-05-2021 alle 16:51.
zabnicola è offline   Rispondi citando il messaggio o parte di esso
Old 13-05-2021, 10:39   #2
zabnicola
Member
 
Iscritto dal: Nov 2020
Messaggi: 75
Ho un array di 15 elements che lo suddivido in 3 righe * 5 colonne inizializzato cosi:
array[0] = 0
array[1] = 1
array[2] = 2
.
.
.
array[13] = 13
array[14] = 14

aggiungo tutti gli elementi nel BST, albero binario di ricerca. Come si stampa un BST affinchè mi stampi le celle in ordine se queste sono inserite nell'albero in modo sparso?
quale visita dovrei usare: in ordine, pre ordine o post ordine?
zabnicola è offline   Rispondi citando il messaggio o parte di esso
Old 13-05-2021, 11:23   #3
wingman87
Senior Member
 
Iscritto dal: Nov 2005
Messaggi: 2773
Se visualizzi mentalmente (o su carta) un albero binario di ricerca, ogni nodo contiene nel ramo sinistro tutti i valori minori del nodo corrente e nel ramo destro tutti quelli maggiori.

Se devi stampare i valori in ordine quindi devi stampare prima il ramo sinistro, poi il nodo stesso e infine il ramo destro.

La domanda del tuo primo post non mi è chiara, provo a rispondere sulla questione dei database. Cerco di farla semplice per rendere tutto più comprensibile, in realtà ci sarebbero molti dettagli in più da considerare ma la sostanza di fondo non cambia.

Nei database i dati sono salvati in forma tabellare, record dopo record.
Senza meccanismi aggiuntivi, per cercare un record dovresti scorrerli tutti uno a uno e verificare se il record che stai controllando ti interessa o meno.
Per rendere più efficienti le operazioni di ricerca si possono costruire degli indici che sono appunto alberi di ricerca in cui ogni nodo contiene il valore indicizzato e un riferimento al record.
Ad esempio se tu hai una tabella anagrafica di persone con all'interno nome, cognome, indirizzo, eccetera, potresti creare un indice sul campo cognome. Allora il tuo albero di ricerca conterrà un nodo per ogni cognome e all'interno dello stesso nodo ci sarà il riferimento al record corrispondente. Quando esegui una ricerca per cognome, invece di scorrerti tutti i record uno a uno, esegui una ricerca sull'albero e quando trovi una corrispondenza hai subito il riferimento al record completo.
wingman87 è offline   Rispondi citando il messaggio o parte di esso
Old 13-05-2021, 12:41   #4
zabnicola
Member
 
Iscritto dal: Nov 2020
Messaggi: 75
Quote:
Originariamente inviato da wingman87 Guarda i messaggi
Se visualizzi mentalmente (o su carta) un albero binario di ricerca, ogni nodo contiene nel ramo sinistro tutti i valori minori del nodo corrente e nel ramo destro tutti quelli maggiori.

Se devi stampare i valori in ordine quindi devi stampare prima il ramo sinistro, poi il nodo stesso e infine il ramo destro.

La domanda del tuo primo post non mi è chiara, provo a rispondere sulla questione dei database. Cerco di farla semplice per rendere tutto più comprensibile, in realtà ci sarebbero molti dettagli in più da considerare ma la sostanza di fondo non cambia.

Nei database i dati sono salvati in forma tabellare, record dopo record.
Senza meccanismi aggiuntivi, per cercare un record dovresti scorrerli tutti uno a uno e verificare se il record che stai controllando ti interessa o meno.
Per rendere più efficienti le operazioni di ricerca si possono costruire degli indici che sono appunto alberi di ricerca in cui ogni nodo contiene il valore indicizzato e un riferimento al record.
Ad esempio se tu hai una tabella anagrafica di persone con all'interno nome, cognome, indirizzo, eccetera, potresti creare un indice sul campo cognome. Allora il tuo albero di ricerca conterrà un nodo per ogni cognome e all'interno dello stesso nodo ci sarà il riferimento al record corrispondente. Quando esegui una ricerca per cognome, invece di scorrerti tutti i record uno a uno, esegui una ricerca sull'albero e quando trovi una corrispondenza hai subito il riferimento al record completo.
grazie per la risposta. In parte mi hai risposto. Quindi utilizzeresti il BST solo per creare degli indici sui campi della tabella anagrafica. Ma serve anche a qualcuno altro questo discorso? comunque.

Ho di recente creato in C una tabella che si puo ridimensionare a piacere in righe e colonne di diversi tipi: char*, int, float.
Se volessi proseguire con l'esperimento del database scritto in C devo fare delle JOIN Prendiamo come esempio persona e libro: persona[3][5]; libro[6][5];

N libri sono di una persona.
Faccio un operazione di JOIN tra persona e libri cercando due titoli di libri per vedere chi li ha.
Quindi se seleziono i nomi "linguaggio c fondamenti" e "il piccolo principe" mi restituisce
rispettivamente gli utenti zabit e bigendian.

1 | zabit | linguaggio c fondamenti
2 | bigendian | il piccolo principe

Come si realizza il prodotto cartesiano tra persona e libro utilizzando la matrice?

come vedi queste operazioni se rappresento tutto con le matrici cioè vettori non risultano semplici o comode. Ce un altro modo?
zabnicola è offline   Rispondi citando il messaggio o parte di esso
Old 13-05-2021, 15:24   #5
wingman87
Senior Member
 
Iscritto dal: Nov 2005
Messaggi: 2773
Secondo me non è semplice e comodo perché è intrinsecamente un'operazione abbastanza complessa e inoltre farlo in C lo è ancora di più perché il linguaggio non ha molti costrutti per semplificare il codice.

Potresti definire il risultato del join di 2 tabelle A e B con una matrice di 2 colonne: la prima colonna contiene il puntatore al record della tabella A e la seconda colonna contiene il puntatore al record di B.
Poi quando vuoi selezionare particolari colonne delle due tabelle lo fai tramite i puntatori.

Ma tu stai usando gli array per le colonne perché vuoi che la struttura sia dinamica? Perché se la struttura è ben definita puoi usare delle struct che sono molto più comode e leggibili.
wingman87 è offline   Rispondi citando il messaggio o parte di esso
Old 13-05-2021, 16:46   #6
zabnicola
Member
 
Iscritto dal: Nov 2020
Messaggi: 75
Quote:
Originariamente inviato da wingman87 Guarda i messaggi
Ma tu stai usando gli array per le colonne perché vuoi che la struttura sia dinamica? Perché se la struttura è ben definita puoi usare delle struct che sono molto più comode e leggibili.
Per la struttura della tabella dinamica non è un problema.
Ho implementato il codice per avere una tabella in C che puo essere ridimensionata a piacere. Alla fine si accede come "se fosse statica" ossia table[2][4].

Cosi ho una tabella A accessibile con tableA[2][4] e un'altra tabella B accessibile anch'essa con tableB[0][1]. tabella A ha 3 righe e 5 colonne, la tabella B ha 6 righe e 7 colonne. Mettere in Join senza alcuna selezione significa fare prima riga per tutte le righe dell'altra tabella, seconda riga per tutte le righe dell'altra tabella e mostrare le colonne della tabella sia di A,B. Quindi dovrei creare una terza tabella che ha 18 righe e 12 colonne, copiando tutte le colonne della prima riga di A con la prima riga di B, della prima riga di A con la seconda di B, con la prima riga di A con la terza di B fino alla sesta di B.
zabnicola è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Microsoft Surface Pro 12 è il 2 in 1 più compatto e silenzioso Microsoft Surface Pro 12 è il 2 in 1 pi&u...
Recensione REDMAGIC Astra Gaming Tablet: che spettacolo di tablet! Recensione REDMAGIC Astra Gaming Tablet: che spe...
Dopo un mese, e 50 foto, cosa abbiamo capito della nuova Nintendo Switch 2 Dopo un mese, e 50 foto, cosa abbiamo capito del...
Gigabyte Aero X16 Copilot+ PC: tanta potenza non solo per l'IA Gigabyte Aero X16 Copilot+ PC: tanta potenza non...
vivo X200 FE: il top di gamma si è fatto tascabile? vivo X200 FE: il top di gamma si è fatto ...
DJI Neo a 159€ è il mini drone pe...
Robot aspirapolvere DREAME D10 Plus Gen ...
A 109€ ha costretto Amazon a nuove scort...
Sbaraglia la concorrenza Intel, questo m...
Giappone all'attacco: ecco il primo wafe...
Cinema in Italia, svolta storica: arriva...
AMD, il bivio: vale la pena restare su A...
TikTok rilascia gratis il suo font uffic...
Netflix porta l'AI sul set: effetti spec...
Pawnix sono le bizzarre (ma utili) cuffi...
Zuckerberg non testimonierà: salt...
SPID usato per anni con un documento ann...
I migliori produttori di tecnologia? Fac...
Il padre di The Elder Scrolls ha un male...
NIO lancia la nuova Onvo: batteria scamb...
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:57.


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