{"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 indicizzabile","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Albero binario indicizzabile\" src=\"\/wp-content\/uploads\/2019\/12\/8ceb987e007db02de04d29f33185e8ec.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Mi \u00e8 stata proposta una sfida di questo tipo. \u00c8 necessario implementare un contenitore per la memorizzazione dei dati che garantisca la seguente funzionalit\u00e0: <\/p>\n<p><\/p>\n<ul>\n<li>inserire un nuovo elemento<\/li>\n<li>rimuovere un elemento per numero di indice<\/li>\n<li>ottenere un elemento per numero di indice<\/li>\n<li>i dati sono memorizzati in ordine<\/li>\n<\/ul>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p>I dati vengono aggiunti e rimossi continuamente, la struttura deve garantire una velocit\u00e0 di funzionamento rapida. Inizialmente ho cercato di realizzare qualcosa del genere utilizzando i contenitori standard di <strong>std<\/strong>. Questo approccio non ha avuto successo e ho capito che dovevo implementare qualcosa di personalizzato. L'unica cosa che mi \u00e8 venuta in mente \u00e8 stata usare un albero binario di ricerca. Poich\u00e9 soddisfa il requisito di rapida inserzione, rimozione e memorizzazione dei dati in ordine. Resta solo da trovare un modo per indicizzare tutti gli elementi e aggiornare 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 tramite il link in fondo.<\/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 supplementare sul <strong>peso<\/strong> nodo. Il peso del nodo \u00e8 <strong>il numero di discendenti di questo nodo<\/strong> + <strong>1<\/strong> (peso di un singolo elemento).<\/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>Per una foglia, il peso \u00e8 quindi <strong>0<\/strong>.<\/p>\n<p><\/p>\n<p>Passiamo ora alla rappresentazione visiva di un esempio di tale albero. <strong>In nero<\/strong> verr\u00e0 mostrata la chiave del nodo (il valore non verr\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 0. Aggiungiamo l'elemento radice:<\/p>\n<p>\n<img decoding=\"async\" alt=\"Albero binario indicizzabile\" 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 altri elementi:<\/p>\n<p>\n<img decoding=\"async\" alt=\"Albero binario indicizzabile\" src=\"\/wp-content\/uploads\/2019\/12\/803cc4a65aa3d8a2fcb20fe325351cfa.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<img decoding=\"async\" alt=\"Albero binario indicizzabile\" src=\"\/wp-content\/uploads\/2019\/12\/0aa12f41b822b4bb1e9fadb7564dc461.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<img decoding=\"async\" alt=\"Albero binario indicizzabile\" src=\"\/wp-content\/uploads\/2019\/12\/8566df9404037e92f53b315bc3304016.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<img decoding=\"async\" alt=\"Albero binario indicizzabile\" 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 attraverso i nodi e aumentiamo il contatore del peso di ciascun nodo attraversato. Quando si crea un nuovo nodo, gli viene assegnato un peso <strong>1<\/strong>. Se un nodo con questa chiave esiste gi\u00e0, sovrascriveremo il valore e torneremo indietro fino alla radice, annullando le modifiche ai pesi di tutti i nodi che abbiamo attraversato.<br \/>\nSe si elimina un nodo, scendiamo e decrementiamo i pesi dei nodi attraversati. <\/p>\n<p><\/p>\n<h2 id=\"indeksy\">Indici<\/h2>\n<p><\/p>\n<p>Passiamo ora a come indicizzare i nodi. I nodi non memorizzano esplicitamente il proprio indice, esso viene calcolato in base al peso dei nodi. Se memorizzassero il proprio indice, ci vorrebbe del tempo per aggiornare gli indici di tutti i nodi dopo ogni modifica dell'albero. <strong>O(n)<\/strong> Per passare a una rappresentazione visiva. Il nostro albero \u00e8 vuoto, aggiungiamo il primo nodo:<br \/>\nIl primo nodo ha indice<\/p>\n<p>\n<img decoding=\"async\" alt=\"Albero binario indicizzabile\" src=\"\/wp-content\/uploads\/2019\/12\/8a3b176f318cd077b1cf50ddf232e0da.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>, e ora si possono presentare due casi. Nel primo, l'indice dell'elemento radice cambier\u00e0, nel secondo non cambier\u00e0. <strong>0<\/strong>La radice ha un sottoalbero sinistro con peso 1.<\/p>\n<p>\n<img decoding=\"async\" alt=\"Albero binario indicizzabile\" src=\"\/wp-content\/uploads\/2019\/12\/cb863be8f42385d3bbb2f46700a8cff3.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Secondo caso:<\/p>\n<p><\/p>\n<p>L'indice della radice non \u00e8 cambiato, poich\u00e9 il peso del suo sottoalbero sinistro \u00e8 rimasto 0.<\/p>\n<p>\n<img decoding=\"async\" alt=\"Albero binario indicizzabile\" src=\"\/wp-content\/uploads\/2019\/12\/35eec59a81fc8b056c7e91daa3ee508e.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Come viene calcolato l'indice di un nodo, \u00e8 il peso del suo sottoalbero sinistro pi\u00f9 il numero passato dal genitore. Cos'\u00e8 questo numero?, Questo \u00e8 il contatore degli indici, inizialmente \u00e8 uguale a<\/p>\n<p><\/p>\n<p>, poich\u00e9 la radice non ha genitori. Successivamente, tutto dipende da dove scendiamo, a sinistra o a destra. Se a sinistra, non si aggiunge nulla al contatore. Se a destra, si aggiunge l'indice del nodo corrente. <strong>0<\/strong>Ad esempio, come viene calcolato l'indice dell'elemento con chiave 8 (figlio destro della radice). \u00c8 \"Indice della radice\" + \"peso del sottoalbero sinistro del nodo con chiave 8\" + \"1\" == 3 + 2 + 1 =<\/p>\n<p>\n<img decoding=\"async\" alt=\"Albero binario indicizzabile\" 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 la chiave 8 (il figlio destro della radice). Questo \u00e8 \u00abIndice della radice\u00bb + \u00abpeso del sottoalbero sinistro del nodo con la chiave 8\u00bb + \u00ab1\u00bb == 3 + 2 + 1 == <strong>6<\/strong><br \/>\nL'indice dell'elemento con la chiave 6 sar\u00e0 \u00abIndice della radice\u00bb + 1 == 3 + 1 == <strong>4<\/strong><\/p>\n<p><\/p>\n<p>Di conseguenza, per ottenere, rimuovere un elemento all'indice richiede tempo <strong>O(log n)<\/strong>, poich\u00e9 per ottenere l'elemento desiderato dobbiamo prima trovarlo (scendere dalla radice fino a quell'elemento).<\/p>\n<p><\/p>\n<h2 id=\"glubina\">Profondit\u00e0<\/h2>\n<p><\/p>\n<p>Sulla base del peso si pu\u00f2 anche calcolare la profondit\u00e0 dell'albero. Necessaria per il bilanciamento.<br \/>\nPer fare ci\u00f2, il peso dell'attuale nodo deve essere arrotondato al primo numero in potenza di 2 che \u00e8 maggiore o uguale al peso dato e prendere il logaritmo binario di esso. In questo modo otteniamo la profondit\u00e0 dell'albero, a condizione che sia bilanciato. L'albero si bilancia dopo l'inserimento di un nuovo elemento. Non fornir\u00f2 la teoria su come bilanciare gli alberi. Nelle codifiche sorgente \u00e8 presentata la funzione di bilanciamento.<\/p>\n<p><\/p>\n<p>Codice per convertire il peso in 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\">Risultati<\/h2>\n<p><\/p>\n<ul>\n<li>l'inserimento di un nuovo elemento avviene in <strong>O(log n)<\/strong><\/li>\n<li>la rimozione di un elemento per numero di ordine avviene in <strong>O(log n)<\/strong><\/li>\n<li>il recupero 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>Dove possa essere utile una tale struttura, non lo so. \u00c8 semplicemente un esercizio per comprendere 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>Nel progetto sono presenti dati di test per verificare la velocit\u00e0 di esecuzione. L'albero viene popolato <strong>1000000<\/strong> elementi. E avviene l'eliminazione sequenziale, l'inserimento e l'ottenimento degli elementi <strong>1000000<\/strong> volte. Cio\u00e8 <strong>3000000<\/strong> operazioni. Il risultato si \u00e8 rivelato piuttosto buono ~ 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.0.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.0.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 di questo tipo.","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}]}}