{"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\/sv\/blog\/administrirovanie\/indeksiruemoe-binarnoe-derevo","title":{"rendered":"Indexerat bin\u00e4rt tr\u00e4d","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Indexerat bin\u00e4rt tr\u00e4d\" src=\"\/wp-content\/uploads\/2019\/12\/8ceb987e007db02de04d29f33185e8ec.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Jag st\u00f6tte p\u00e5 en uppgift av f\u00f6ljande slag. Det \u00e4r n\u00f6dv\u00e4ndigt att implementera en datalagringsbeh\u00e5llare som tillhandah\u00e5ller f\u00f6ljande funktionalitet: <\/p>\n<p><\/p>\n<ul>\n<li>l\u00e4gg till ett nytt element<\/li>\n<li>ta bort ett element efter dess ordningsnummer<\/li>\n<li>h\u00e4mta ett element efter dess ordningsnummer<\/li>\n<li>data lagras i sorterad ordning<\/li>\n<\/ul>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p>Data l\u00e4ggs st\u00e4ndigt till och tas bort, strukturen m\u00e5ste s\u00e4kerst\u00e4lla snabb hastighet. I b\u00f6rjan f\u00f6rs\u00f6kte jag implementera n\u00e5got s\u00e5dant med hj\u00e4lp av standardbeh\u00e5llare fr\u00e5n <strong>std<\/strong>. Den v\u00e4gen var inte framg\u00e5ngsrik, och jag kom till insikten att jag beh\u00f6vde implementera n\u00e5got sj\u00e4lv. Det enda som kom i minnet var att anv\u00e4nda ett bin\u00e4rt s\u00f6ktr\u00e4d. Eftersom det uppfyller kraven f\u00f6r snabb inl\u00e4ggning, borttagning och lagring av data i sorterad ordning. Nu \u00e5terstod bara att lista ut hur man ska indexera alla element och r\u00e4kna om indexen n\u00e4r tr\u00e4det f\u00f6r\u00e4ndras.<\/p>\n<p><\/p>\n<pre><code class=\"cpp\">struct node_s {    \n    data_t data;\n\n    uint64_t weight; \/\/ nodens vikt\n\n    node_t *left;\n    node_t *right;\n\n    node_t *parent;\n};<\/code><\/pre>\n<p><\/p>\n<p>I artikeln kommer det att vara fler bilder och teori \u00e4n kod. Koden kan ses via l\u00e4nken nedan.<\/p>\n<p><\/p>\n<h2 id=\"ves\">Vikt<\/h2>\n<p><\/p>\n<p>F\u00f6r detta utsattes tr\u00e4det f\u00f6r en liten modifiering, ytterligare information om <strong>vikt<\/strong> noden. Vikten av en nod \u00e4r <strong>antalet efterkommande av denna nod<\/strong> + <strong>1<\/strong> (vikten av en enda enhet).<\/p>\n<p><\/p>\n<p>Funktionen f\u00f6r att f\u00e5 nodens vikt:<\/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>F\u00f6r ett blad \u00e4r vikten d\u00e4rf\u00f6r lika med <strong>0<\/strong>.<\/p>\n<p><\/p>\n<p>L\u00e5t oss nu g\u00e5 vidare till en visuell representation av ett exempel p\u00e5 ett s\u00e5dant tr\u00e4d. <strong>Med svart<\/strong> f\u00e4rg kommer nyckeln p\u00e5 noden att visas (v\u00e4rdet visas inte, eftersom det inte \u00e4r n\u00f6dv\u00e4ndigt), <strong>med r\u00f6d<\/strong> \u2014 nodens vikt, <strong>med gr\u00f6n<\/strong> \u2014 nodens index.<\/p>\n<p><\/p>\n<p>N\u00e4r tr\u00e4det \u00e4r tomt \u00e4r dess vikt 0. L\u00e5t oss l\u00e4gga till rootelementet:<\/p>\n<p>\n<img decoding=\"async\" alt=\"Indexerat bin\u00e4rt tr\u00e4d\" src=\"\/wp-content\/uploads\/2019\/12\/2d4145039daee26582910556a40d2a5c.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Vikten av tr\u00e4det blir 1, vikten av rootelementet \u00e4r 1. Vikten av rootelementet \u00e4r vikt f\u00f6r tr\u00e4det.<\/p>\n<p><\/p>\n<p>L\u00e5t oss l\u00e4gga till n\u00e5gra fler element:<\/p>\n<p>\n<img decoding=\"async\" alt=\"Indexerat bin\u00e4rt tr\u00e4d\" src=\"\/wp-content\/uploads\/2019\/12\/803cc4a65aa3d8a2fcb20fe325351cfa.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<img decoding=\"async\" alt=\"Indexerat bin\u00e4rt tr\u00e4d\" src=\"\/wp-content\/uploads\/2019\/12\/0aa12f41b822b4bb1e9fadb7564dc461.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<img decoding=\"async\" alt=\"Indexerat bin\u00e4rt tr\u00e4d\" src=\"\/wp-content\/uploads\/2019\/12\/8566df9404037e92f53b315bc3304016.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<img decoding=\"async\" alt=\"Indexerat bin\u00e4rt tr\u00e4d\" src=\"\/wp-content\/uploads\/2019\/12\/1847e6ddffdb28d0a6d9a4949ebb5f80.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Varje g\u00e5ng ett nytt element l\u00e4ggs till, g\u00e5r vi ner genom noderna och \u00f6kar viktv\u00e4rdet f\u00f6r varje passerad nod. N\u00e4r en ny nod skapas f\u00e5r den vikten <strong>1<\/strong>. Om en nod med en s\u00e5dan nyckel redan finns, skriver vi om v\u00e4rdet och g\u00e5r tillbaka upp till roten, vilket \u00e5terst\u00e4ller viktv\u00e4rdena f\u00f6r alla de noder vi passerat.<br \/>\nOm en nod tas bort, g\u00e5r vi ner\u00e5t och minskar vikten f\u00f6r de passerade noderna. <\/p>\n<p><\/p>\n<h2 id=\"indeksy\">Index<\/h2>\n<p><\/p>\n<p>L\u00e5t oss nu g\u00e5 vidare till hur man indexerar noder. Noderna lagrar uppenbarligen inte sitt index, utan det ber\u00e4knas utifr\u00e5n nodernas vikt. Om de skulle lagra sitt index skulle det kr\u00e4va <strong>O(n)<\/strong> tid f\u00f6r att uppdatera indexen f\u00f6r alla noder efter varje \u00e4ndring av tr\u00e4det.<br \/>\nVi g\u00e5r vidare till en visuell representation. V\u00e5rt tr\u00e4d \u00e4r tomt, vi l\u00e4gger till den f\u00f6rsta noden:<\/p>\n<p>\n<img decoding=\"async\" alt=\"Indexerat bin\u00e4rt tr\u00e4d\" src=\"\/wp-content\/uploads\/2019\/12\/8a3b176f318cd077b1cf50ddf232e0da.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Den f\u00f6rsta noden har index <strong>0<\/strong>, och nu finns det tv\u00e5 m\u00f6jliga fall. I det f\u00f6rsta fallet kommer rotnodens index att \u00e4ndras, i det andra kommer det inte att f\u00f6r\u00e4ndras.<\/p>\n<p>\n<img decoding=\"async\" alt=\"Indexerat bin\u00e4rt tr\u00e4d\" src=\"\/wp-content\/uploads\/2019\/12\/cb863be8f42385d3bbb2f46700a8cff3.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Roten har ett v\u00e4nster deltr\u00e4d med vikten 1.<\/p>\n<p><\/p>\n<p>Det andra fallet:<\/p>\n<p>\n<img decoding=\"async\" alt=\"Indexerat bin\u00e4rt tr\u00e4d\" src=\"\/wp-content\/uploads\/2019\/12\/35eec59a81fc8b056c7e91daa3ee508e.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Indexet f\u00f6r roten har inte \u00e4ndrats, eftersom vikten av dess v\u00e4nstra deltr\u00e4d f\u00f6rblev 0.<\/p>\n<p><\/p>\n<p>Hur indexet f\u00f6r en nod ber\u00e4knas, \u00e4r vikten av dess v\u00e4nstra deltr\u00e4d plus det tal som ges av f\u00f6r\u00e4ldern. Vad \u00e4r det h\u00e4r talet? Det \u00e4r indexr\u00e4knaren, som initialt \u00e4r <strong>0<\/strong>, eftersom roten inte har n\u00e5gon f\u00f6r\u00e4lder. Sedan beror allt p\u00e5 om vi g\u00e5r ner till v\u00e4nster barn eller h\u00f6ger. Om vi g\u00e5r till v\u00e4nster, s\u00e5 l\u00e4ggs inget till indexr\u00e4knaren. Om vi g\u00e5r till h\u00f6ger, d\u00e5 l\u00e4gger vi till indexet f\u00f6r den aktuella noden.<\/p>\n<p>\n<img decoding=\"async\" alt=\"Indexerat bin\u00e4rt tr\u00e4d\" src=\"\/wp-content\/uploads\/2019\/12\/d328174370ef52c646d8689cce977302.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Till exempel hur ber\u00e4knas indexet f\u00f6r elementet med nyckel 8 (h\u00f6ger barn till roten). Det \u00e4r \"Rotens index\" + \"vikten av det v\u00e4nstra deltr\u00e4det med noden som har nyckel 8\" + \"1\" == 3 + 2 + 1 == <strong>6<\/strong><br \/>\nIndexet f\u00f6r elementet med nyckel 6 blir \"Rotens index\" + 1 == 3 + 1 == <strong>4<\/strong><\/p>\n<p><\/p>\n<p>F\u00f6ljaktligen, f\u00f6r att f\u00e5, ta bort ett element efter index kr\u00e4vs tid <strong>O(log n)<\/strong>, eftersom f\u00f6r att f\u00e5 det \u00f6nskade elementet m\u00e5ste vi f\u00f6rst hitta det (g\u00e5 ner fr\u00e5n roten till detta element).<\/p>\n<p><\/p>\n<h2 id=\"glubina\">Djup<\/h2>\n<p><\/p>\n<p>Utifr\u00e5n vikten kan man ocks\u00e5 ber\u00e4kna djupet p\u00e5 tr\u00e4det. Detta beh\u00f6vs f\u00f6r balansering.<br \/>\nF\u00f6r detta m\u00e5ste vikten av den aktuella noden avrundas till det f\u00f6rsta talet som \u00e4r en potens av 2 som \u00e4r st\u00f6rre \u00e4n eller lika med den angivna vikten och ta den bin\u00e4ra logaritmen av det. P\u00e5 s\u00e5 s\u00e4tt f\u00e5r vi djupet p\u00e5 tr\u00e4det, under f\u00f6ruts\u00e4ttning att det \u00e4r balanserat. Tr\u00e4det balanseras efter att en ny nod har lagts till. Jag kommer inte att ge teorin om hur man balanserar tr\u00e4d. I k\u00e4llkoderna presenteras en balansfunktion.<\/p>\n<p><\/p>\n<p>Kod f\u00f6r att konvertera vikt till djup.<\/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\">Sammanfattning<\/h2>\n<p><\/p>\n<ul>\n<li>ins\u00e4ttning av en ny nod sker p\u00e5 <strong>O(log n)<\/strong><\/li>\n<li>borttagning av ett element enligt ordningsnummer sker p\u00e5 <strong>O(log n)<\/strong><\/li>\n<li>h\u00e4mtning av ett element enligt ordningsnummer sker p\u00e5 <strong>O(log n)<\/strong><\/li>\n<\/ul>\n<p><\/p>\n<p>Hastighet <strong>O(log n)<\/strong> vi betalar f\u00f6r att alla data lagras i sorterad ordning. <\/p>\n<p><\/p>\n<p>Jag vet inte var en s\u00e5dan struktur kan vara anv\u00e4ndbar. Det \u00e4r bara en uppgift f\u00f6r att f\u00f6rst\u00e5 hur tr\u00e4d fungerar. Tack f\u00f6r uppm\u00e4rksamheten.<\/p>\n<p><\/p>\n<h2 id=\"ssylki\">L\u00e4nkar<\/h2>\n<p><\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/dvjdjvu\/bntree\">K\u00e4llkoden f\u00f6r tr\u00e4det<\/a><\/noindex><\/li>\n<\/ul>\n<p><\/p>\n<p>Projektet inneh\u00e5ller testdata f\u00f6r att kontrollera hastigheten. Tr\u00e4det fylls med <strong>1000000<\/strong> element. Det sker sekventiell borttagning, ins\u00e4ttning och h\u00e4mtning av element <strong>1000000<\/strong> g\u00e5ng. Det vill s\u00e4ga <strong>3000000<\/strong> operationer. Resultatet visade sig vara ganska bra ~ 8 sekunder.<\/p>\n<p>K\u00e4lla: <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.4 - 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\/sv\/blog\/administrirovanie\/indeksiruemoe-binarnoe-derevo\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.4\" \/>\n\t\t<meta property=\"og:locale\" content=\"sv_SE\" \/>\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\/sv\/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\udd47Indexerat bin\u00e4rt tr\u00e4d | ProHoster","description":"Jag st\u00f6tte p\u00e5 en uppgift av f\u00f6ljande typ.","canonical_url":"https:\/\/prohoster.info\/sv\/blog\/administrirovanie\/indeksiruemoe-binarnoe-derevo","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"sv_SE","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\/sv\/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\/sv\/wp-json\/wp\/v2\/posts\/54389","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/comments?post=54389"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/posts\/54389\/revisions"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/media?parent=54389"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/categories?post=54389"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/tags?post=54389"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}