{"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\/de\/blog\/administrirovanie\/indeksiruemoe-binarnoe-derevo","title":{"rendered":"Indexierbarer bin\u00e4rer Baum","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Indexierbarer bin\u00e4rer Baum\" src=\"\/wp-content\/uploads\/2019\/12\/8ceb987e007db02de04d29f33185e8ec.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Ich habe eine Aufgabe dieser Art bekommen. Es ist notwendig, einen Datenspeicherkontainer zu implementieren, der die folgenden Funktionen bietet: <\/p>\n<p><\/p>\n<ul>\n<li>ein neues Element einf\u00fcgen<\/li>\n<li>ein Element nach seiner Reihenfolge entfernen<\/li>\n<li>ein Element nach seiner Reihenfolge abrufen<\/li>\n<li>Die Daten werden in sortierter Form gespeichert<\/li>\n<\/ul>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p>Daten werden st\u00e4ndig hinzugef\u00fcgt und entfernt, die Struktur muss eine schnelle Arbeitsgeschwindigkeit gew\u00e4hrleisten. Zuerst versuchte ich, so etwas mit den Standardcontainern aus <strong>std<\/strong>zu realisieren. Dieser Weg war nicht erfolgreich, und mir wurde klar, dass ich etwas selbst implementieren musste. Das Einzige, was mir in den Sinn kam, war die Verwendung eines bin\u00e4ren Suchbaums. Da dieser die Anforderungen an schnelles Einf\u00fcgen, L\u00f6schen und die Speicherung der Daten in sortierter Form erf\u00fcllt. Es blieb nur zu \u00fcberlegen, wie man alle Elemente indizieren und die Indizes aktualisieren kann, wenn sich der Baum \u00e4ndert.<\/p>\n<p><\/p>\n<pre><code class=\"cpp\">struct node_s {    \n    data_t data;\n\n    uint64_t weight; \/\/ Gewicht des Knotens\n\n    node_t *left;\n    node_t *right;\n\n    node_t *parent;\n};<\/code><\/pre>\n<p><\/p>\n<p>Im Artikel wird es mehr Bilder und Theorie als Code geben. Den Code k\u00f6nnen Sie \u00fcber den Link unten einsehen.<\/p>\n<p><\/p>\n<h2 id=\"ves\">Gewicht<\/h2>\n<p><\/p>\n<p>Daf\u00fcr wurde der Baum einer kleinen Modifikation unterzogen, wobei zus\u00e4tzliche Informationen \u00fcber <strong>das Gewicht<\/strong> des Knotens hinzugef\u00fcgt wurden. Das Gewicht eines Knotens ist <strong>die Anzahl der Nachkommen dieses Knotens<\/strong> + <strong>1<\/strong> (das Gewicht eines einzelnen Elements).<\/p>\n<p><\/p>\n<p>Funktion zur Ermittlung des Gewichts eines Knotens:<\/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>Ein Blatt hat entsprechend ein Gewicht von <strong>0<\/strong>.<\/p>\n<p><\/p>\n<p>Als N\u00e4chstes gehen wir zu einer anschaulichen Darstellung eines solchen Baumes \u00fcber. <strong>In Schwarz<\/strong> wird der Schl\u00fcssel des Knotens angezeigt (der Wert wird nicht angezeigt, da dies nicht notwendig ist), <strong>in Rot<\/strong> - das Gewicht des Knotens, <strong>in Gr\u00fcn<\/strong> - der Index des Knotens.<\/p>\n<p><\/p>\n<p>Wenn der Baum leer ist, betr\u00e4gt sein Gewicht 0. F\u00fcgen wir ihm das Wurzelelement hinzu:<\/p>\n<p>\n<img decoding=\"async\" alt=\"Indexierbarer bin\u00e4rer Baum\" src=\"\/wp-content\/uploads\/2019\/12\/2d4145039daee26582910556a40d2a5c.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Das Gewicht des Baumes wird 1, das Gewicht des Wurzelelements betr\u00e4gt 1. Das Gewicht des Wurzelelements ist das Gewicht des Baumes.<\/p>\n<p><\/p>\n<p>F\u00fcgen wir noch einige Elemente hinzu:<\/p>\n<p>\n<img decoding=\"async\" alt=\"Indexierbarer bin\u00e4rer Baum\" src=\"\/wp-content\/uploads\/2019\/12\/803cc4a65aa3d8a2fcb20fe325351cfa.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<img decoding=\"async\" alt=\"Indexierbarer bin\u00e4rer Baum\" src=\"\/wp-content\/uploads\/2019\/12\/0aa12f41b822b4bb1e9fadb7564dc461.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<img decoding=\"async\" alt=\"Indexierbarer bin\u00e4rer Baum\" src=\"\/wp-content\/uploads\/2019\/12\/8566df9404037e92f53b315bc3304016.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<img decoding=\"async\" alt=\"Indexierbarer bin\u00e4rer Baum\" src=\"\/wp-content\/uploads\/2019\/12\/1847e6ddffdb28d0a6d9a4949ebb5f80.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Jedes Mal, wenn ein neues Element hinzugef\u00fcgt wird, gehen wir durch die Knoten nach unten und erh\u00f6hen den Gewichtsz\u00e4hler jedes durchlaufenen Knotens. Beim Erstellen eines neuen Knotens wird ihm ein Gewicht zugewiesen. <strong>1<\/strong>Wenn ein Knoten mit diesem Schl\u00fcssel bereits existiert, wird der Wert \u00fcberschrieben, und wir gehen r\u00fcckw\u00e4rts bis zur Wurzel und machen die Gewicht\u00e4nderungen aller Knoten, die wir durchlaufen haben, r\u00fcckg\u00e4ngig.<br \/>\nWenn ein Knoten gel\u00f6scht wird, gehen wir nach unten und dekrementieren die Gewichte der durchlaufenen Knoten. <\/p>\n<p><\/p>\n<h2 id=\"indeksy\">Indizes<\/h2>\n<p><\/p>\n<p>Jetzt kommen wir dazu, wie man die Knoten indiziert. Knoten speichern ihren Index nicht direkt; dieser wird auf Basis des Gewichts der Knoten berechnet. Wenn sie ihren Index speichern w\u00fcrden, w\u00e4re das n\u00f6tig, <strong>O(n)<\/strong> an Zeit, um die Indizes aller Knoten nach jeder \u00c4nderung des Baums zu aktualisieren.<br \/>\nLassen Sie uns zu einer anschaulichen Darstellung \u00fcbergehen. Unser Baum ist leer, f\u00fcgen wir den ersten Knoten hinzu:<\/p>\n<p>\n<img decoding=\"async\" alt=\"Indexierbarer bin\u00e4rer Baum\" src=\"\/wp-content\/uploads\/2019\/12\/8a3b176f318cd077b1cf50ddf232e0da.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Der erste Knoten hat den Index <strong>0<\/strong>, und jetzt sind zwei F\u00e4lle m\u00f6glich. Im ersten Fall \u00e4ndert sich der Index des Wurzelelements, im zweiten Fall bleibt er unver\u00e4ndert.<\/p>\n<p>\n<img decoding=\"async\" alt=\"Indexierbarer bin\u00e4rer Baum\" src=\"\/wp-content\/uploads\/2019\/12\/cb863be8f42385d3bbb2f46700a8cff3.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Das linke Teilbaum des Wurzelknotens wiegt 1.<\/p>\n<p><\/p>\n<p>Zweiter Fall:<\/p>\n<p>\n<img decoding=\"async\" alt=\"Indexierbarer bin\u00e4rer Baum\" src=\"\/wp-content\/uploads\/2019\/12\/35eec59a81fc8b056c7e91daa3ee508e.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Der Index des Wurzelknotens hat sich nicht ge\u00e4ndert, da das Gewicht seines linken Teilbaums 0 geblieben ist.<\/p>\n<p><\/p>\n<p>Wie der Index eines Knotens berechnet wird, ist das Gewicht seines linken Teilbaums + die von dem Elternteil \u00fcbergebene Zahl. Was ist das f\u00fcr eine Zahl?, Es ist der Z\u00e4hler der Indizes, der anfangs gleich <strong>0<\/strong>, da der Wurzelknoten keinen Elternteil hat. Danach h\u00e4ngt alles davon ab, ob wir zum linken Kind oder zum rechten Kind hinabsteigen. Wenn wir zum linken Kinden gehen, wird nichts zum Z\u00e4hler hinzugef\u00fcgt. Wenn wir zum rechten gehen, addieren wir den Index des aktuellen Knotens.<\/p>\n<p>\n<img decoding=\"async\" alt=\"Indexierbarer bin\u00e4rer Baum\" src=\"\/wp-content\/uploads\/2019\/12\/d328174370ef52c646d8689cce977302.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Zum Beispiel, wie der Index des Elements mit dem Schl\u00fcssel 8 (rechter Kind des Wurzelknotens) berechnet wird. Das ist der \u201eIndex der Wurzel\u201c + \u201eGewicht des linken Unterbaums des Knotens mit dem Schl\u00fcssel 8\u201c + \u201e1\u201c == 3 + 2 + 1 == <strong>6<\/strong><br \/>\nDer Index des Elements mit dem Schl\u00fcssel 6 wird sein: \u201eIndex der Wurzel\u201c + 1 == 3 + 1 = <strong>4<\/strong><\/p>\n<p><\/p>\n<p>Daher ben\u00f6tigt man, um ein Element nach Index zu bekommen oder zu entfernen, Zeit <strong>O(log n)<\/strong>, da wir zuerst das ben\u00f6tigte Element finden m\u00fcssen (vom Wurzelknoten bis zu diesem Element hinabsteigen).<\/p>\n<p><\/p>\n<h2 id=\"glubina\">Tiefe<\/h2>\n<p><\/p>\n<p>Basierend auf dem Gewicht kann auch die Tiefe des Baumes berechnet werden. Dies ist notwendig f\u00fcr die Balance.<br \/>\nHierf\u00fcr muss das Gewicht des aktuellen Knotens auf die n\u00e4chste Potenz von 2 aufgerundet werden, die gr\u00f6\u00dfer oder gleich dem gegebenen Gewicht ist, und der Bin\u00e4rlogarithmus davon genommen werden. So erhalten wir die Tiefe des Baumes, vorausgesetzt, er ist balanciert. Der Baum wird nach dem Einf\u00fcgen eines neuen Elements balanciert. Die Theorie, wie man B\u00e4ume balanciert, werde ich nicht erl\u00e4utern. Im Quellcode ist eine Balancierungsfunktion dargestellt.<\/p>\n<p><\/p>\n<p>Code zur Anpassung des Gewichts an die Tiefe.<\/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\">Ergebnisse<\/h2>\n<p><\/p>\n<ul>\n<li>Das Einf\u00fcgen eines neuen Elements geschieht in <strong>O(log n)<\/strong><\/li>\n<li>Das Entfernen eines Elements nach fortlaufender Nummer geschieht in <strong>O(log n)<\/strong><\/li>\n<li>Das Abrufen eines Elements nach fortlaufender Nummer geschieht in <strong>O(log n)<\/strong><\/li>\n<\/ul>\n<p><\/p>\n<p>Geschwindigkeit <strong>O(log n)<\/strong> zahlen wir daf\u00fcr, dass alle Daten in sortierter Form gespeichert werden. <\/p>\n<p><\/p>\n<p>Wo eine solche Struktur n\u00fctzlich sein k\u00f6nnte, wei\u00df ich nicht. Es ist einfach eine \u00dcbung, um noch einmal zu verstehen, wie B\u00e4ume funktionieren. Danke f\u00fcr Ihre Aufmerksamkeit.<\/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\">Quellcode des Baumes<\/a><\/noindex><\/li>\n<\/ul>\n<p><\/p>\n<p>Das Projekt enth\u00e4lt Testdaten zur \u00dcberpr\u00fcfung der Arbeitsgeschwindigkeit. Der Baum wird mit <strong>1000000<\/strong> Elementen gef\u00fcllt. Es erfolgen nacheinander L\u00f6sch-, Einf\u00fcge- und Abrufoperationen von Elementen. <strong>1000000<\/strong> Mal. Das hei\u00dft, <strong>3000000<\/strong> Operationen. Das Ergebnis erwies sich als durchaus akzeptabel ~ 8 Sekunden.<\/p>\n<p>Quelle: <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\/de\/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=\"de_DE\" \/>\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\/de\/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\udd47Indexiertes bin\u00e4res Baumdiagramm | ProHoster","description":"Ich hatte die folgende Aufgabe.","canonical_url":"https:\/\/prohoster.info\/de\/blog\/administrirovanie\/indeksiruemoe-binarnoe-derevo","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"de_DE","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\/de\/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\/de\/wp-json\/wp\/v2\/posts\/54389","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/comments?post=54389"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/posts\/54389\/revisions"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/media?parent=54389"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/categories?post=54389"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/tags?post=54389"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}