{"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\/nl\/blog\/administrirovanie\/indeksiruemoe-binarnoe-derevo","title":{"rendered":"Ge\u00efndexeerde binaire boom","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Ge\u00efndexeerde binaire boom\" src=\"\/wp-content\/uploads\/2019\/12\/8ceb987e007db02de04d29f33185e8ec.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Ik kreeg een taak van de volgende aard. Het is nodig om een container te implementeren die de volgende functionaliteit biedt: <\/p>\n<p><\/p>\n<ul>\n<li>voeg een nieuw element toe<\/li>\n<li>verwijder een element op volgnummer<\/li>\n<li>haal een element op op volgnummer<\/li>\n<li>gegevens worden in gesorteerde volgorde opgeslagen<\/li>\n<\/ul>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p>Gegevens worden voortdurend toegevoegd en verwijderd, de structuur moet een snelle werking garanderen. Aanvankelijk probeerde ik zo'n ding te implementeren met behulp van de standaardcontainers van <strong>std<\/strong>. Deze aanpak was niet succesvol en het besef kwam dat ik iets zelf moest implementeren. Het enige dat in me opkwam, was een binaire zoekboom te gebruiken. Aangezien deze voldoet aan de eis van snelle invoeging, verwijdering en opslag van gegevens in gesorteerde volgorde. Het enige wat resteert is uit te denken hoe alle elementen te indexeren en de indices te herberekenen wanneer de boom verandert.<\/p>\n<p><\/p>\n<pre><code class=\"cpp\">struct node_s {    \n    data_t data;\n\n    uint64_t weight; \/\/ gewicht van de knoop\n\n    node_t *left;\n    node_t *right;\n\n    node_t *parent;\n};<\/code><\/pre>\n<p><\/p>\n<p>In dit artikel zullen er meer afbeeldingen en theorie zijn dan code. De code kan aan de onderstaande link worden bekeken.<\/p>\n<p><\/p>\n<h2 id=\"ves\">Gewicht<\/h2>\n<p><\/p>\n<p>Voor dit doel heeft de boom een kleine modificatie ondergaan, waarbij extra informatie over <strong>gewicht<\/strong> van de knoop is toegevoegd. Het gewicht van de knoop is <strong>het aantal nakomelingen van deze knoop<\/strong> + <strong>1<\/strong> (gewicht van een enkel element).<\/p>\n<p><\/p>\n<p>Functie voor het verkrijgen van het gewicht van een knoop:<\/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>Bij het blad is het gewicht respectievelijk <strong>0<\/strong>.<\/p>\n<p><\/p>\n<p>Laten we nu overgaan naar een visuele voorstelling van een dergelijk kind. <strong>Zwarte<\/strong> kleur toont de sleutelnodige (de waarde wordt niet weergegeven, omdat dat niet nodig is), <strong>rood<\/strong> is het gewicht van de knoop, <strong>groen<\/strong> is de index van de knoop.<\/p>\n<p><\/p>\n<p>Wanneer de boom leeg is, is het gewicht 0. Laten we het wortelelement toevoegen:<\/p>\n<p>\n<img decoding=\"async\" alt=\"Ge\u00efndexeerde binaire boom\" src=\"\/wp-content\/uploads\/2019\/12\/2d4145039daee26582910556a40d2a5c.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Het gewicht van de boom wordt 1, het gewicht van het wortelelement is 1. Het gewicht van het wortelelement is het gewicht van de boom.<\/p>\n<p><\/p>\n<p>Laten we nog een paar elementen toevoegen:<\/p>\n<p>\n<img decoding=\"async\" alt=\"Ge\u00efndexeerde binaire boom\" src=\"\/wp-content\/uploads\/2019\/12\/803cc4a65aa3d8a2fcb20fe325351cfa.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<img decoding=\"async\" alt=\"Ge\u00efndexeerde binaire boom\" src=\"\/wp-content\/uploads\/2019\/12\/0aa12f41b822b4bb1e9fadb7564dc461.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<img decoding=\"async\" alt=\"Ge\u00efndexeerde binaire boom\" src=\"\/wp-content\/uploads\/2019\/12\/8566df9404037e92f53b315bc3304016.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<img decoding=\"async\" alt=\"Ge\u00efndexeerde binaire boom\" src=\"\/wp-content\/uploads\/2019\/12\/1847e6ddffdb28d0a6d9a4949ebb5f80.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Elke keer dat er een nieuw element wordt toegevoegd, dalen we naar beneden door de knopen en verhogen we de gewichtsteller van elke doorlopen knoop. Bij het cre\u00ebren van een nieuwe knoop krijgt deze een gewicht <strong>1<\/strong>. Als een knoop met deze sleutel al bestaat, zullen we de waarde overschrijven en terug omhoog gaan naar de wortel terwijl we de wijzigingen in de gewichten van alle knopen die we zijn gepasseerd ongedaan maken.<br \/>\nAls een knoop wordt verwijderd, dalen we naar beneden en decrementeren we de gewichten van de doorlopen knopen. <\/p>\n<p><\/p>\n<h2 id=\"indeksy\">Indexen<\/h2>\n<p><\/p>\n<p>Laten we nu bekijken hoe we knooppunten kunnen indexeren. Knooppunten bewaren duidelijk niet hun index, deze wordt berekend op basis van het gewicht van de knooppunten. Als ze hun index zouden opslaan, zou dat vereist zijn <strong>O(n)<\/strong> om tijd te nemen om de indexen van alle knooppunten bij te werken na elke wijziging in de boom.<br \/>\nLaten we overgaan tot een visuele voorstelling. Onze boom is leeg, laten we het eerste knooppunt toevoegen:<\/p>\n<p>\n<img decoding=\"async\" alt=\"Ge\u00efndexeerde binaire boom\" src=\"\/wp-content\/uploads\/2019\/12\/8a3b176f318cd077b1cf50ddf232e0da.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Het eerste knooppunt heeft de index <strong>0<\/strong>, en nu zijn er 2 mogelijke gevallen. In het eerste geval verandert de index van het wortelelement, in het tweede geval verandert deze niet.<\/p>\n<p>\n<img decoding=\"async\" alt=\"Ge\u00efndexeerde binaire boom\" src=\"\/wp-content\/uploads\/2019\/12\/cb863be8f42385d3bbb2f46700a8cff3.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>De linker subboom van de wortel weegt 1.<\/p>\n<p><\/p>\n<p>Tweede geval:<\/p>\n<p>\n<img decoding=\"async\" alt=\"Ge\u00efndexeerde binaire boom\" src=\"\/wp-content\/uploads\/2019\/12\/35eec59a81fc8b056c7e91daa3ee508e.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>De index van de wortel is niet veranderd, omdat het gewicht van zijn linker subboom 0 bleef.<\/p>\n<p><\/p>\n<p>Hoe de index van een knooppunt wordt berekend, is het gewicht van de linker subboom + een getal dat van de ouder is doorgestuurd. Wat is dit getal?, Dit is de index telling, die aanvankelijk gelijk is aan <strong>0<\/strong>, omdat de wortel geen ouder heeft. Verder hangt alles af van waar we naartoe gaan, naar het linkerkind of het rechterkind. Als het naar links is, wordt er niets aan de teller toegevoegd. Als het naar rechts is, voegen we de index van het huidige knooppunt toe.<\/p>\n<p>\n<img decoding=\"async\" alt=\"Ge\u00efndexeerde binaire boom\" src=\"\/wp-content\/uploads\/2019\/12\/d328174370ef52c646d8689cce977302.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Bijvoorbeeld, hoe de index van het element met sleutel 8 (de rechterkind van de wortel) wordt berekend. Dit is de &#171;Index van de wortel&#187; + &#171;gewicht van de linkerkind van de knoop met sleutel 8&#187; + &#171;1&#187; == 3 + 2 + 1 == <strong>6<\/strong><br \/>\nDe index van het element met sleutel 6 wordt &#171;Index van de wortel&#187; + 1 == 3 + 1 == <strong>4<\/strong><\/p>\n<p><\/p>\n<p>Bijgevolg is het vereist om tijd te hebben om een element op index te krijgen of te verwijderen <strong>O(log n)<\/strong>, omdat we het benodigde element eerst moeten vinden (van de wortel naar dit element moeten afzakken).<\/p>\n<p><\/p>\n<h2 id=\"glubina\">Diepte<\/h2>\n<p><\/p>\n<p>Op basis van het gewicht kan ook de diepte van de boom worden berekend. Dit is nodig voor de balans.<br \/>\nHiervoor moet het gewicht van het huidige knooppunt worden afgerond naar het eerste getal in de macht van 2 dat groter dan of gelijk is aan het gegeven gewicht, en daar de binaire logaritme van genomen worden. Op deze manier krijgen we de diepte van de boom, op voorwaarde dat deze in balans is. De boom wordt in balans gebracht na het invoegen van een nieuw element. Ik zal de theorie over hoe bomen in balans te brengen niet bespreken. In de broncode bevindt zich de functie voor balans.<\/p>\n<p><\/p>\n<p>Code voor het omzetten van gewicht naar diepte.<\/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\">Conclusies<\/h2>\n<p><\/p>\n<ul>\n<li>het invoegen van een nieuw element gebeurt in <strong>O(log n)<\/strong><\/li>\n<li>het verwijderen van een element op volgnummer gebeurt in <strong>O(log n)<\/strong><\/li>\n<li>het verkrijgen van een element op volgnummer gebeurt in <strong>O(log n)<\/strong><\/li>\n<\/ul>\n<p><\/p>\n<p>Snelheid <strong>O(log n)<\/strong> betalen we voor het feit dat alle gegevens in gesorteerde volgorde worden opgeslagen. <\/p>\n<p><\/p>\n<p>Waar zo'n structuur nuttig kan zijn, weet ik niet. Gewoon een oefening om nogmaals te begrijpen hoe bomen werken. Bedankt voor je aandacht.<\/p>\n<p><\/p>\n<h2 id=\"ssylki\">Links<\/h2>\n<p><\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/dvjdjvu\/bntree\">Broncode van de boom<\/a><\/noindex><\/li>\n<\/ul>\n<p><\/p>\n<p>In het project bevinden zich testgegevens om de snelheid van de werking te controleren. De boom wordt gevuld <strong>1000000<\/strong> met elementen. En er vindt een opeenvolgende verwijdering, invoegen en ophalen van elementen plaats <strong>1000000<\/strong> keer. Dat wil zeggen <strong>3000000<\/strong> bewerkingen. Het resultaat bleek heel acceptabel te zijn ~ 8 seconden.<\/p>\n<p>Bron: <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.3 - 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\/nl\/blog\/administrirovanie\/indeksiruemoe-binarnoe-derevo\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.3\" \/>\n\t\t<meta property=\"og:locale\" content=\"nl_NL\" \/>\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\/nl\/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\udd47Ge\u00efndexeerde binaire boom | ProHoster","description":"Ik kwam een taak van de volgende aard tegen.","canonical_url":"https:\/\/prohoster.info\/nl\/blog\/administrirovanie\/indeksiruemoe-binarnoe-derevo","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"nl_NL","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\/nl\/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\/nl\/wp-json\/wp\/v2\/posts\/54389","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/comments?post=54389"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/posts\/54389\/revisions"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/media?parent=54389"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/categories?post=54389"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/tags?post=54389"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}