Torna indietro   Hardware Upgrade Forum > Software > Programmazione

ASUS ProArt 1, un PC completo ad altissime prestazioni per creator e non solo
ASUS ProArt 1, un PC completo ad altissime prestazioni per creator e non solo
ProArt è un marchio di ASUS che strizza l'occhio a professionisti e creator. Un ecosistema fatto di tanti componenti che si fondono nell'ASUS ProArt 1, un PC assemblato da NEXT in un elegante e ampio case ProArt PA602 al cui interno troviamo un Core i9-14900K raffreddato a liquido (ProArt LC 420) e una GeForce RTX 4080 SUPER piuttosto compatta.
OPPO Reno11 F 5G: vuole durare più di tutti! La recensione
OPPO Reno11 F 5G: vuole durare più di tutti! La recensione
OPPO Reno11 F 5G è uno smartphone medio gamma capace di guardare al futuro. Sì, perché l’azienda lo propone con alcuni punti di forza tutti indirizzati ad un’esperienza più duratura come il cambio della batteria in garanzia entro 4 anni. Ecco come si comporta
DJI Avata 2: il drone FPV accessibile ancora più sicuro e divertente
DJI Avata 2: il drone FPV accessibile ancora più sicuro e divertente
A poco più di un anno e mezzo dal primo lancio, DJI rinnova il suo drone FPV accessibile e presenta il nuovo DJI Avata 2, aggiungendo anche un nuovo visore e un nuovo radiocomando. Il colosso cinese dei droni continua nella scia dei rinnovi precedenti, aggiornando la fotocamera, ma soprattutto offrendo interessanti miglioramenti sulla parte avionica e agli accessori
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: 2745
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: 2745
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


ASUS ProArt 1, un PC completo ad altissime prestazioni per creator e non solo ASUS ProArt 1, un PC completo ad altissime prest...
OPPO Reno11 F 5G: vuole durare più di tutti! La recensione OPPO Reno11 F 5G: vuole durare più di tut...
DJI Avata 2: il drone FPV accessibile ancora più sicuro e divertente DJI Avata 2: il drone FPV accessibile ancora pi&...
Hollyland Lark M2: il microfono wireless sempre più piccolo e potente Hollyland Lark M2: il microfono wireless sempre ...
MSI Titan 18 HX A14V, il notebook ad alte prestazioni con un prezzo esagerato MSI Titan 18 HX A14V, il notebook ad alte presta...
Quest nelle scuole: il visore di realt&a...
Mars Sample Return: slitta la missione N...
Verso hard disk da 120 TB: la ricerca di...
Iron Man e Black Panther: i nuovi giochi...
Anche Bill Gates è preoccupato pe...
Novità per Fortinet: arriva una n...
Acquistare un videogioco digitale non vu...
Vivi la finale di UEFA Champions League ...
Arrivano in Italia HUAWEI Band 9 e la se...
La sicurezza informatica è legata...
CPU Intel Core Ultra nei notebook HUAWEI...
Xiaomi e Leica portano una nuova prospet...
Il prezzo di questo super TV Samsung TV ...
Secondo l'ex Presidente di Blizzard i gi...
Febbre da radiazioni: raddoppiano i gioc...
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: 05:31.


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