{"id":54389,"date":"2019-12-25T00:00:00","date_gmt":"2019-12-24T21:00:00","guid":{"rendered":"https:\/\/prohoster.info\/blog\/blog_prohoster\/indeksiruemoe-binarnoe-derevo"},"modified":"2020-02-18T14:02:23","modified_gmt":"2020-02-18T11:02:23","slug":"indeksiruemoe-binarnoe-derevo","status":"publish","type":"post","link":"https:\/\/prohoster.info\/it\/blog\/administrirovanie\/indeksiruemoe-binarnoe-derevo","title":{"rendered":"Albero binario indicizzato","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Albero binario indicizzato\" src=\"\/wp-content\/uploads\/2019\/12\/8ceb987e007db02de04d29f33185e8ec.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Mi \u00e8 stata proposta un'attivit\u00e0 del seguente tipo. \u00c8 necessario implementare un contenitore per la memorizzazione dei dati che fornisca le seguenti funzionalit\u00e0: <\/p>\n<p><\/p>\n<ul>\n<li>inserire un nuovo elemento<\/li>\n<li>rimuovere un elemento per numero di sequenza<\/li>\n<li>ottenere un elemento per numero di sequenza<\/li>\n<li>i dati vengono memorizzati in ordine<\/li>\n<\/ul>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p>I dati vengono costantemente aggiunti e rimossi, la struttura deve garantire una rapida velocit\u00e0 di funzionamento. Inizialmente ho cercato di realizzare una cosa simile utilizzando i contenitori standard di <strong>std<\/strong>. Questo approccio non ha avuto successo e ho capito che dovevo implementare qualcosa da solo. L'unica idea che mi \u00e8 venuta in mente \u00e8 stata quella di utilizzare un albero binario di ricerca. Poich\u00e9 soddisfa il requisito di rapida inserzione, rimozione e memorizzazione dei dati in ordine. Restava solo da ideare come indicizzare tutti gli elementi e riequilibrare gli indici quando l'albero cambia.<\/p>\n<p><\/p>\n<pre><code class=\"cpp\">struct node_s {    \n    data_t data;\n\n    uint64_t weight; \/\/ peso del nodo\n\n    node_t *left;\n    node_t *right;\n\n    node_t *parent;\n};<\/code><\/pre>\n<p><\/p>\n<p>Nell'articolo ci saranno pi\u00f9 immagini e teoria che codice. Il codice potr\u00e0 essere visualizzato seguendo il link qui sotto.<\/p>\n<p><\/p>\n<h2 id=\"ves\">Peso<\/h2>\n<p><\/p>\n<p>Per questo, l'albero ha subito una piccola modifica, \u00e8 stata aggiunta un'informazione aggiuntiva sul <strong>peso<\/strong> del nodo. Il peso del nodo \u00e8 <strong>il numero di discendenti di questo nodo<\/strong> + <strong>1<\/strong> (peso di un elemento singolo).<\/p>\n<p><\/p>\n<p>Funzione per ottenere il peso del nodo:<\/p>\n<p><\/p>\n<pre><code class=\"cpp\">uint64_t bntree::get_child_weight(node_t *node) {\n    if (node) {\n        return node-&gt;weight;\n    }\n\n    return 0;\n}<\/code><\/pre>\n<p><\/p>\n<p>Il peso della foglia \u00e8 quindi pari a <strong>0<\/strong>.<\/p>\n<p><\/p>\n<p>Passiamo ora a una rappresentazione visiva di un esempio di tale albero. <strong>In nero<\/strong> sar\u00e0 mostrata la chiave del nodo (il valore non sar\u00e0 mostrato, poich\u00e9 non \u00e8 necessario), <strong>in rosso<\/strong> \u2014 il peso del nodo, <strong>in verde<\/strong> \u2014 l'indice del nodo.<\/p>\n<p><\/p>\n<p>Quando l'albero \u00e8 vuoto, il suo peso \u00e8 pari a 0. Aggiungiamo il suo elemento radice:<\/p>\n<p>\n<img decoding=\"async\" alt=\"Albero binario indicizzato\" src=\"\/wp-content\/uploads\/2019\/12\/2d4145039daee26582910556a40d2a5c.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Il peso dell'albero diventa 1, il peso dell'elemento radice \u00e8 1. Il peso dell'elemento radice \u00e8 il peso dell'albero.<\/p>\n<p><\/p>\n<p>Aggiungiamo ancora alcuni elementi:<\/p>\n<p>\n<img decoding=\"async\" alt=\"Albero binario indicizzato\" src=\"\/wp-content\/uploads\/2019\/12\/803cc4a65aa3d8a2fcb20fe325351cfa.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<img decoding=\"async\" alt=\"Albero binario indicizzato\" src=\"\/wp-content\/uploads\/2019\/12\/0aa12f41b822b4bb1e9fadb7564dc461.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<img decoding=\"async\" alt=\"Albero binario indicizzato\" src=\"\/wp-content\/uploads\/2019\/12\/8566df9404037e92f53b315bc3304016.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<img decoding=\"async\" alt=\"Albero binario indicizzato\" src=\"\/wp-content\/uploads\/2019\/12\/1847e6ddffdb28d0a6d9a4949ebb5f80.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Ogni volta che viene aggiunto un nuovo elemento, scendiamo nei nodi in basso e aumentiamo il contatore del peso di ciascun nodo attraversato. Quando viene creato un nuovo nodo, gli viene assegnato un peso <strong>1<\/strong>. Se esiste gi\u00e0 un nodo con questa chiave, sovrascriviamo il valore e risaliamo verso l'alto fino alla radice annullando le modifiche ai pesi di tutti i nodi attraversati.<br \/>\nSe viene rimossa un nodo, scendiamo e decretiamo i pesi dei nodi attraversati. <\/p>\n<p><\/p>\n<h2 id=\"indeksy\">Indici<\/h2>\n<p><\/p>\n<p>Ora passiamo a come indicizzare i nodi. I nodi non memorizzano il proprio indice, questo viene calcolato in base al peso dei nodi. Se memorizzassero il proprio indice, sarebbe necessario <strong>O(n)<\/strong> tempo per aggiornare gli indici di tutti i nodi dopo ogni modifica dell'albero.<br \/>\nPassiamo a una rappresentazione visiva. Il nostro albero \u00e8 vuoto, aggiungiamo il primo nodo:<\/p>\n<p>\n<img decoding=\"async\" alt=\"Albero binario indicizzato\" src=\"\/wp-content\/uploads\/2019\/12\/8a3b176f318cd077b1cf50ddf232e0da.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Il primo nodo ha indice <strong>0<\/strong>, e ora ci sono due casi possibili. Nel primo l'indice dell'elemento radice cambier\u00e0, nel secondo rimarr\u00e0 invariato.<\/p>\n<p>\n<img decoding=\"async\" alt=\"Albero binario indicizzato\" src=\"\/wp-content\/uploads\/2019\/12\/cb863be8f42385d3bbb2f46700a8cff3.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Alla radice il sottoalbero sinistro pesa 1.<\/p>\n<p><\/p>\n<p>Secondo caso:<\/p>\n<p>\n<img decoding=\"async\" alt=\"Albero binario indicizzato\" src=\"\/wp-content\/uploads\/2019\/12\/35eec59a81fc8b056c7e91daa3ee508e.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>L'indice della radice non \u00e8 cambiato, poich\u00e9 il peso del suo sottoalbero sinistro \u00e8 rimasto 0.<\/p>\n<p><\/p>\n<p>Come si calcola l'indice di un nodo, \u00e8 il peso del suo sottoalbero sinistro + il numero passato dal genitore. Che numero \u00e8 questo? \u00c8 il contatore degli indici, inizialmente vale <strong>0<\/strong>, poich\u00e9 la radice non ha genitore. Dopodich\u00e9, tutto dipende da dove scendiamo, al figlio sinistro o destro. Se al sinistro, il contatore non aumenta. Se al destro, aggiungiamo l'indice del nodo corrente.<\/p>\n<p>\n<img decoding=\"async\" alt=\"Albero binario indicizzato\" src=\"\/wp-content\/uploads\/2019\/12\/d328174370ef52c646d8689cce977302.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Ad esempio, come viene calcolato l'indice dell'elemento con chiave 8 (figlio destro della radice). \u00c8 &#171;Indice della radice&#187; + &#171;peso del sott'albero sinistro del nodo con chiave 8&#187; + &#171;1&#187; == 3 + 2 + 1 == <strong>6<\/strong><br \/>\nL'indice dell'elemento con chiave 6 sar\u00e0 &#171;Indice della radice&#187; + 1 == 3 + 1 == <strong>4<\/strong><\/p>\n<p><\/p>\n<p>Pertanto, per ottenere o eliminare un elemento per indice \u00e8 necessario un tempo <strong>O(log n)<\/strong>, poich\u00e9 per ottenere l'elemento desiderato dobbiamo prima trovarlo (scendere dalla radice a questo elemento).<\/p>\n<p><\/p>\n<h2 id=\"glubina\">Profondit\u00e0<\/h2>\n<p><\/p>\n<p>Sulla base del peso \u00e8 possibile calcolare anche la profondit\u00e0 dell'albero. Necessaria per il bilanciamento.<br \/>\nPer questo il peso del nodo corrente deve essere arrotondato al primo numero in potenza di 2 maggiore o uguale a tale peso e prendere il logaritmo binario di esso. In questo modo otterremo la profondit\u00e0 dell'albero, a condizione che sia bilanciato. L'albero viene bilanciato dopo l'inserimento di un nuovo elemento. Non tratter\u00f2 la teoria su come bilanciare gli alberi. Nei codici sorgente \u00e8 presente la funzione di bilanciamento.<\/p>\n<p><\/p>\n<p>Codice per il passaggio del peso alla profondit\u00e0.<\/p>\n<p><\/p>\n<pre><code class=\"cpp\">\/*\n * \u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u043f\u0435\u0440\u0432\u043e\u0435 \u0447\u0438\u0441\u043b\u043e \u0432 \u0441\u0442\u0435\u043f\u0435\u043d\u0438 2, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0431\u043e\u043b\u044c\u0448\u0435 \u0438\u043b\u0438 \u0440\u043e\u0432\u043d\u043e x\n *\/\nuint64_t bntree::cpl2(uint64_t x) {\n    x = x - 1;\n    x = x | (x &gt;&gt; 1);\n    x = x | (x &gt;&gt; 2);\n    x = x | (x &gt;&gt; 4);\n    x = x | (x &gt;&gt; 8);\n    x = x | (x &gt;&gt; 16);\n    x = x | (x &gt;&gt; 32);\n\n    return x + 1;\n}\n\n\/*\n * \u0414\u0432\u043e\u0438\u0447\u043d\u044b\u0439 \u043b\u043e\u0433\u0430\u0440\u0438\u0444\u043c \u043e\u0442 \u0447\u0438\u0441\u043b\u0430\n *\/\nlong bntree::ilog2(long d) {\n    int result;\n    std::frexp(d, &amp;result);\n    return result - 1;\n}\n\n\/*\n * \u0412\u0435\u0441 \u043a \u0433\u043b\u0443\u0431\u0438\u043d\u0435\n *\/\nuint64_t bntree::weight_to_depth(node_t *p) {\n    if (p == NULL) {\n        return 0;\n    }\n\n    if (p-&gt;weight == 1) {\n        return 1;\n    } else if (p-&gt;weight == 2) {\n        return 2;\n    }\n\n    return this-&gt;ilog2(this-&gt;cpl2(p-&gt;weight));\n}<\/code><\/pre>\n<p><\/p>\n<h2 id=\"itogi\">Conclusioni<\/h2>\n<p><\/p>\n<ul>\n<li>l'inserimento di un nuovo elemento avviene in <strong>O(log n)<\/strong><\/li>\n<li>l'eliminazione di un elemento per numero di ordine avviene in <strong>O(log n)<\/strong><\/li>\n<li>l'ottenimento di un elemento per numero di ordine avviene in <strong>O(log n)<\/strong><\/li>\n<\/ul>\n<p><\/p>\n<p>Velocit\u00e0 <strong>O(log n)<\/strong> paghiamo per il fatto che tutti i dati sono memorizzati in ordine. <\/p>\n<p><\/p>\n<p>Non so dove possa essere utile una struttura di questo tipo. \u00c8 solo un esercizio per capire meglio come funzionano gli alberi. Grazie per l'attenzione.<\/p>\n<p><\/p>\n<h2 id=\"ssylki\">Link<\/h2>\n<p><\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/dvjdjvu\/bntree\">Codice sorgente dell'albero<\/a><\/noindex><\/li>\n<\/ul>\n<p><\/p>\n<p>Il progetto contiene dati di test per verificare la velocit\u00e0 di esecuzione. L'albero viene riempito <strong>1000000<\/strong> di elementi. E avviene un'eliminazione, un'inserzione e un'ottenzione sequenziale degli elementi <strong>1000000<\/strong> una volta. Vale a dire <strong>3000000<\/strong> operazioni. Il risultato si \u00e8 rivelato piuttosto buono, circa 8 secondi.<\/p>\n<p>Fonte: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/481372\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u041f\u043e\u043f\u0430\u043b\u0430\u0441\u044c \u043c\u043d\u0435 \u0437\u0430\u0434\u0430\u0447\u0430 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0433\u043e \u0432\u0438\u0434\u0430. \u041d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440 \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445 \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0432\u0430\u044e\u0449\u0438\u0439 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b: \u0432\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043d\u043e\u0432\u044b\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u0443\u0434\u0430\u043b\u0438\u0442\u044c \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u043f\u043e \u043f\u043e\u0440\u044f\u0434\u043a\u043e\u0432\u043e\u043c\u0443 \u043d\u043e\u043c\u0435\u0440\u0443 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u043f\u043e \u043f\u043e\u0440\u044f\u0434\u043a\u043e\u0432\u043e\u043c\u0443 \u043d\u043e\u043c\u0435\u0440\u0443 \u0434\u0430\u043d\u043d\u044b\u0435 \u0445\u0440\u0430\u043d\u044f\u0442\u0441\u044f \u0432 \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u043c \u0432\u0438\u0434\u0435 \u0414\u0430\u043d\u043d\u044b\u0435 \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0438 \u0443\u0434\u0430\u043b\u044f\u044e\u0442\u0441\u044f, \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u0434\u043e\u043b\u0436\u043d\u0430 \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0432\u0430\u0442\u044c \u0431\u044b\u0441\u0442\u0440\u0443\u044e \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u044b. \u0421\u043d\u0430\u0447\u0430\u043b\u0430 \u043f\u044b\u0442\u0430\u043b\u0441\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0442\u0430\u043a\u0443\u044e \u0432\u0435\u0449\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0435 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u044b \u0438\u0437 std. \u042d\u0442\u043e\u0442 \u043f\u0443\u0442\u044c \u043d\u0435 [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-54389","post","type-post","status-publish","format-standard","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.1.1 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u041f\u043e\u043f\u0430\u043b\u0430\u0441\u044c \u043c\u043d\u0435 \u0437\u0430\u0434\u0430\u0447\u0430 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0433\u043e \u0432\u0438\u0434\u0430.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/it\/blog\/administrirovanie\/indeksiruemoe-binarnoe-derevo\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.1.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"it_IT\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u0418\u043d\u0434\u0435\u043a\u0441\u0438\u0440\u0443\u0435\u043c\u043e\u0435 \u0431\u0438\u043d\u0430\u0440\u043d\u043e\u0435 \u0434\u0435\u0440\u0435\u0432\u043e | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u041f\u043e\u043f\u0430\u043b\u0430\u0441\u044c \u043c\u043d\u0435 \u0437\u0430\u0434\u0430\u0447\u0430 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0433\u043e \u0432\u0438\u0434\u0430.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/it\/blog\/administrirovanie\/indeksiruemoe-binarnoe-derevo\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2019-12-24T21:00:00+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-02-18T11:02:23+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Albero binario indicizzato | ProHoster","description":"Ho ricevuto un compito della seguente natura.","canonical_url":"https:\/\/prohoster.info\/it\/blog\/administrirovanie\/indeksiruemoe-binarnoe-derevo","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"it_IT","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u0418\u043d\u0434\u0435\u043a\u0441\u0438\u0440\u0443\u0435\u043c\u043e\u0435 \u0431\u0438\u043d\u0430\u0440\u043d\u043e\u0435 \u0434\u0435\u0440\u0435\u0432\u043e | ProHoster","og:description":"\u041f\u043e\u043f\u0430\u043b\u0430\u0441\u044c \u043c\u043d\u0435 \u0437\u0430\u0434\u0430\u0447\u0430 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0433\u043e \u0432\u0438\u0434\u0430.","og:url":"https:\/\/prohoster.info\/it\/blog\/administrirovanie\/indeksiruemoe-binarnoe-derevo","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2019-12-24T21:00:00+00:00","article:modified_time":"2020-02-18T11:02:23+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"54389","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":"2026-01-24 11:11:41","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 20:07:24","updated":"2026-01-24 11:11:41","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/posts\/54389","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/comments?post=54389"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/posts\/54389\/revisions"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/media?parent=54389"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/categories?post=54389"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/tags?post=54389"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}