{"id":468230,"date":"2025-07-22T15:02:01","date_gmt":"2025-07-22T15:02:01","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=468230"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=468230","title":{"rendered":"<span>pg_dphyp: \u0443\u0447\u0438\u043c PostgreSQL \u0441\u043e\u0435\u0434\u0438\u043d\u044f\u0442\u044c \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u043f\u043e-\u0434\u0440\u0443\u0433\u043e\u043c\u0443<\/span>"},"content":{"rendered":"<div><!--[--><!--]--><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p>\u041f\u0440\u0438\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e!<\/p>\n<p>\u0412 \u00ab\u0422\u0430\u043d\u0442\u043e\u0440 \u041b\u0430\u0431\u0441\u00bb \u044f \u0440\u0430\u0431\u043e\u0442\u0430\u044e \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u043c \u0421\u0423\u0411\u0414 \u0438 \u0437\u0430\u043a\u043e\u043d\u043e\u043c\u0435\u0440\u043d\u043e \u0443\u0432\u043b\u0435\u043a\u0430\u044e\u0441\u044c \u0431\u0430\u0437\u0430\u043c\u0438 \u0434\u0430\u043d\u043d\u044b\u0445. \u041a\u0430\u043a-\u0442\u043e \u0440\u0430\u0437 \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u043f\u0440\u043e\u043b\u0438\u0441\u0442\u044b\u0432\u0430\u043d\u0438\u044f <a href=\"https:\/\/www.redbook.io\/\" rel=\"noopener noreferrer nofollow\">\u043a\u0440\u0430\u0441\u043d\u043e\u0439 \u043a\u043d\u0438\u0433\u0438<\/a> \u0432\u043e \u043c\u043d\u0435 \u0447\u0442\u043e-\u0442\u043e \u0449\u0435\u043b\u043a\u043d\u0443\u043b\u043e, \u0438 \u044f \u0437\u0430\u0445\u043e\u0442\u0435\u043b \u0433\u043b\u0443\u0431\u0436\u0435 \u043f\u043e\u0438\u0437\u0443\u0447\u0430\u0442\u044c \u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0449\u0438\u043a. \u042f \u0443\u0433\u043b\u0443\u0431\u0438\u043b\u0441\u044f \u0432 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u044b \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0439 \u0442\u0430\u0431\u043b\u0438\u0446 \u0438 \u043d\u0430\u0442\u043a\u043d\u0443\u043b\u0441\u044f \u043d\u0430 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c DPhyp, \u043a\u043e\u0442\u043e\u0440\u044b\u0439, \u043a\u0430\u043a \u043e\u043a\u0430\u0437\u0430\u043b\u043e\u0441\u044c, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 \u043c\u043d\u043e\u0433\u0438\u0435 \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 (\u0438 \u043d\u0435 \u043e\u0447\u0435\u043d\u044c) \u0431\u0430\u0437\u044b \u0434\u0430\u043d\u043d\u044b\u0445. \u0421\u0442\u0430\u043b\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e \u2014 \u0430 \u0435\u0441\u0442\u044c \u043b\u0438 \u0442\u0430\u043a\u043e\u0435 \u0432 PostgreSQL? \u041a \u0443\u0434\u0438\u0432\u043b\u0435\u043d\u0438\u044e, \u043e\u043a\u0430\u0437\u0430\u043b\u043e\u0441\u044c \u0447\u0442\u043e \u043d\u0435\u0442. \u041d\u0443, \u0430 \u0435\u0441\u043b\u0438 \u0447\u0435\u0433\u043e-\u0442\u043e \u043d\u0435\u0442, \u043d\u0430\u0434\u043e \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0441\u0430\u043c\u0438\u043c.<\/p>\n<p>\u042d\u0442\u0430 \u0441\u0442\u0430\u0442\u044c\u044f \u043d\u0435 \u043e DPhyp \u043a\u0430\u043a \u0442\u0430\u043a\u043e\u0432\u043e\u043c, \u0430 \u043e \u0442\u043e\u043c, \u0441 \u0447\u0435\u043c \u043c\u043d\u0435 \u043f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u0441\u0442\u043e\u043b\u043a\u043d\u0443\u0442\u044c\u0441\u044f \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0433\u043e \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f \u0434\u043b\u044f PostgreSQL. \u041d\u043e \u0432\u043d\u0430\u0447\u0430\u043b\u0435 \u2014 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0435 \u0432\u0432\u0435\u0434\u0435\u043d\u0438\u0435.<\/p>\n<h3>\u0410\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u044b \u0440\u0430\u0431\u043e\u0442\u044b \u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0449\u0438\u043a\u043e\u0432 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432<\/h3>\n<p>\u041f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0449\u0438\u043a \u0432 \u0431\u0430\u0437\u0430\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u2014 \u043f\u043e\u0436\u0430\u043b\u0443\u0439, \u0441\u0430\u043c\u044b\u0439 \u0441\u043b\u043e\u0436\u043d\u044b\u0439 \u0438 \u0432\u0430\u0436\u043d\u044b\u0439 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 \u0441\u0438\u0441\u0442\u0435\u043c\u044b, \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u0435\u0441\u043b\u0438 \u043c\u044b \u0433\u043e\u0432\u043e\u0440\u0438\u043c \u043e \u0442\u0435\u0440\u0430\u0431\u0430\u0439\u0442\u0430\u0445 \u0434\u0430\u043d\u043d\u044b\u0445. \u041d\u0435\u0432\u0430\u0436\u043d\u043e, \u043d\u0430\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0431\u044b\u0441\u0442\u0440\u043e\u0435 \u0436\u0435\u043b\u0435\u0437\u043e \u0441\u0442\u043e\u0438\u0442 \u0432 \u0441\u0435\u0440\u0432\u0435\u0440\u043d\u043e\u0439: \u0435\u0441\u043b\u0438 \u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0449\u0438\u043a \u043e\u0448\u0438\u0431\u0441\u044f \u0438 \u043d\u0430\u0447\u0430\u043b \u0432\u043c\u0435\u0441\u0442\u043e \u0438\u043d\u0434\u0435\u043a\u0441\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u0441\u043a\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435, \u2014 \u0432\u0441\u0451, \u0438\u0437\u0432\u043e\u043b\u044c\u0442\u0435 \u043f\u0440\u0438\u0439\u0442\u0438 \u0437\u0430 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u043c \u0447\u0435\u0440\u0435\u0437 \u043d\u0435\u0434\u0435\u043b\u044e. \u0412 \u044d\u0442\u043e\u043c \u0441\u043b\u043e\u0436\u043d\u043e\u043c \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0435 \u043c\u043e\u0436\u043d\u043e \u0432\u044b\u0434\u0435\u043b\u0438\u0442\u044c \u044f\u0434\u0440\u043e: \u043f\u0435\u0440\u0435\u0431\u043e\u0440 JOIN&#8217;\u043e\u0432. \u041f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u0439 \u0432\u044b\u0431\u043e\u0440 \u043f\u043e\u0440\u044f\u0434\u043a\u0430 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f \u0442\u0430\u0431\u043b\u0438\u0446 \u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u043d\u0430 \u0441\u0442\u043e\u0438\u043c\u043e\u0441\u0442\u044c \u0432\u0441\u0435\u0433\u043e \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u043d\u0430\u0438\u0431\u043e\u043b\u044c\u0448\u0435\u0435 \u0432\u043b\u0438\u044f\u043d\u0438\u0435. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0432\u043e\u0442 \u0442\u0430\u043a\u043e\u0439 \u0437\u0430\u043f\u0440\u043e\u0441&#8230;<\/p>\n<pre><code class=\"sql\">SELECT * FROM t1  JOIN t2 ON t1.x = t2.x JOIN t3 ON t2.x = t3.x JOIN t4 ON t3.x = t4.x; <\/code><\/pre>\n<p>&#8230;\u0438\u043c\u0435\u0435\u0442 14 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0445 \u043a\u043e\u043c\u0431\u0438\u043d\u0430\u0446\u0438\u0439 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0439 \u0442\u0430\u0431\u043b\u0438\u0446. \u0412 \u043e\u0431\u0449\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u2014 \u044d\u0442\u043e \u0447\u0438\u0441\u043b\u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0445 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0439 \u0431\u0438\u043d\u0430\u0440\u043d\u043e\u0433\u043e \u0434\u0435\u0440\u0435\u0432\u0430 \u0438\u0437 <code>N<\/code> \u0443\u0437\u043b\u043e\u0432, \u0433\u0434\u0435 \u043f\u043e\u0434 \u0443\u0437\u043b\u0430\u043c\u0438 \u043f\u043e\u043d\u0438\u043c\u0430\u044e\u0442\u0441\u044f \u0442\u0430\u0431\u043b\u0438\u0446\u044b, <a href=\"https:\/\/ru.wikipedia.org\/wiki\/%D0%A7%D0%B8%D1%81%D0%BB%D0%B0_%D0%9A%D0%B0%D1%82%D0%B0%D0%BB%D0%B0%D0%BD%D0%B0\" rel=\"noopener noreferrer nofollow\">\u0447\u0438\u0441\u043b\u043e \u041a\u0430\u0442\u0430\u043b\u0430\u043d\u0430<\/a>, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0434\u043b\u044f 7 \u0442\u0430\u0431\u043b\u0438\u0446 \u0443\u0436\u0435 \u0440\u0430\u0432\u043d\u043e 429, \u0430 \u0434\u043b\u044f 8 \u2014 1430. \u0421\u0442\u043e\u0438\u0442 \u043b\u0438 \u0433\u043e\u0432\u043e\u0440\u0438\u0442\u044c, \u0447\u0442\u043e \u0441 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u043c\u043e\u043c\u0435\u043d\u0442\u0430 \u0447\u0438\u0441\u043b\u043e \u044d\u0442\u043e \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u043d\u0430\u0441\u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0433\u0440\u043e\u043c\u043d\u044b\u043c, \u0447\u0442\u043e \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0439\u0442\u0438 \u043e\u043f\u0442\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0439 \u043f\u043b\u0430\u043d \u043f\u0440\u043e\u0441\u0442\u044b\u043c \u043f\u0435\u0440\u0435\u0431\u043e\u0440\u043e\u043c \u043a\u043e\u043c\u0431\u0438\u043d\u0430\u0446\u0438\u0439?<\/p>\n<p>\u0422\u043e, \u043a\u0430\u043a \u043c\u044b \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u043c\u0441\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u043f\u0435\u0440\u0435\u0431\u043e\u0440, \u0438 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442 <s>\u043d\u0430\u0448 \u043b\u0430\u0433\u0435\u0440\u044c<\/s> \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0443 \u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0449\u0438\u043a\u0430: top-down \u0438\u043b\u0438 bottom-up. \u041f\u043e\u0434\u0445\u043e\u0434 top-down \u2014 \u044d\u0442\u043e \u043f\u043e\u0434\u0445\u043e\u0434 &#171;\u0441\u0432\u0435\u0440\u0445\u0443 \u0432\u043d\u0438\u0437&#187; (\u0435\u0433\u043e \u0435\u0449\u0435 \u043d\u0430\u0437\u044b\u0432\u0430\u044e\u0442 goal-oriented, \u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u043c \u043d\u0430 \u0446\u0435\u043b\u044c). \u041c\u044b \u0437\u0430\u0445\u043e\u0434\u0438\u043c \u0432 \u043a\u043e\u0440\u0435\u043d\u044c, \u043f\u043e\u043d\u0438\u043c\u0430\u0435\u043c \u0435\u0433\u043e &#171;\u0446\u0435\u043b\u044c&#187; (\u0435\u0441\u0442\u044c \u043b\u0438 \u0433\u0440\u0443\u043f\u043f\u0438\u0440\u043e\u0432\u043a\u0430 \u0438\u043b\u0438 \u0444\u0438\u043b\u044c\u0442\u0440\u0430\u0446\u0438\u044f, \u0447\u0442\u043e \u043d\u0430 \u0432\u044b\u0445\u043e\u0434\u0435 \u0438 \u0442.\u0434.) \u0438 \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0430\u043d\u0438\u0438 \u044d\u0442\u043e\u0433\u043e \u0441\u043e\u0437\u0434\u0430\u0435\u043c \u043f\u043b\u0430\u043d \u0437\u0430\u043f\u0440\u043e\u0441\u0430. \u041f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432\u043e\u043c \u0437\u0434\u0435\u0441\u044c \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0442\u043e, \u0447\u0442\u043e \u0443 \u043d\u0430\u0441 \u043d\u0430 \u0440\u0443\u043a\u0430\u0445 \u0435\u0441\u0442\u044c \u043f\u043e\u043b\u043d\u044b\u0439 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442 \u0438 \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0435\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c. \u041f\u0440\u0438\u043c\u0435\u0440\u043e\u043c \u043c\u043e\u0436\u0435\u0442 \u0441\u043b\u0443\u0436\u0438\u0442\u044c \u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0449\u0438\u043a (\u0433\u0440\u0443\u0431\u043e \u0433\u043e\u0432\u043e\u0440\u044f, \u044d\u0442\u043e \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430) cascades, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0432 Microsoft SQL Server: \u043e\u043d \u0441 \u043b\u0435\u0433\u043a\u043e\u0441\u0442\u044c\u044e \u043c\u043e\u0436\u0435\u0442 \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0430\u0442\u044c \u0443\u0437\u043b\u044b \u0433\u0440\u0430\u0444\u0430 \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u043f\u043e\u0434 GROUP-BY, \u0447\u0435\u0433\u043e \u0434\u0440\u0443\u0433\u043e\u0439 \u043f\u043e\u0434\u0445\u043e\u0434 \u0431\u0435\u0437 \u043f\u043e\u043c\u043e\u0449\u0438 \u0441\u043e \u0441\u0442\u043e\u0440\u043e\u043d\u044b \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 (\u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430 \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u0430\u0433\u0430\u0435\u0442 \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u043d\u0430\u0431\u043e\u0440 \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u0439 \u0434\u043b\u044f \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f).<\/p>\n<p>Bottom-up (&#171;\u0441\u043d\u0438\u0437\u0443 \u0432\u0432\u0435\u0440\u0445&#187;) \u2014 \u044d\u0442\u043e \u043f\u0440\u043e\u0442\u0438\u0432\u043e\u043f\u043e\u043b\u043e\u0436\u043d\u044b\u0439 \u043b\u0430\u0433\u0435\u0440\u044c, \u0433\u0434\u0435 \u0432\u043d\u0430\u0447\u0430\u043b\u0435 \u043f\u043b\u0430\u043d\u0438\u0440\u0443\u044e\u0442 \u0432\u0441\u0435 JOIN&#8217;\u044b \u0438 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0442\u043e\u043c &#171;\u043d\u0430\u0432\u0435\u0448\u0438\u0432\u0430\u044e\u0442&#187; \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0443\/\u0433\u0440\u0443\u043f\u043f\u0438\u0440\u043e\u0432\u043a\u0443 \u0438 \u0434\u0440\u0443\u0433\u0438\u0435 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u044b. \u042d\u0442\u043e\u0442 \u043f\u043e\u0434\u0445\u043e\u0434 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u0432\u043e \u043c\u043d\u043e\u0433\u0438\u0445 \u0421\u0423\u0411\u0414, \u0432\u043a\u043b\u044e\u0447\u0430\u044f PostgreSQL. \u0415\u0433\u043e \u043f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432\u043e \u2014 \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u0443\u0435\u043c\u043e\u0441\u0442\u044c, \u0442\u0430\u043a \u043a\u0430\u043a \u043e\u043d \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043e\u0433\u0440\u043e\u043c\u043d\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e JOIN&#8217;\u043e\u0432. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0432 \u0441\u0442\u0430\u0442\u044c\u0435 <a href=\"https:\/\/db.in.tum.de\/~radke\/papers\/hugejoins.pdf\" rel=\"noopener noreferrer nofollow\">Adaptive Optimization of Very Large Join Queries<\/a> \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d \u043f\u043e\u0434\u0445\u043e\u0434, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u0441 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u043c\u0438 \u0442\u044b\u0441\u044f\u0447\u0430\u043c\u0438 \u0442\u0430\u0431\u043b\u0438\u0446, \u043a\u043e\u043c\u0431\u0438\u043d\u0438\u0440\u0443\u044f \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0440\u0430\u0437\u043d\u044b\u0445 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u043e\u0432. \u0412 \u043f\u0440\u0438\u043c\u0435\u0440 \u0432 \u0441\u0442\u0430\u0442\u044c\u0435 \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442\u0441\u044f SAP, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0438\u0437-\u0437\u0430 \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0439 \u0432\u043d\u0443\u0442\u0440\u0438 \u0434\u0440\u0443\u0433\u0438\u0445 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0439 \u043c\u043e\u0436\u0435\u0442 \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0437\u0430\u043f\u0440\u043e\u0441, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0449\u0438\u0439 \u0442\u044b\u0441\u044f\u0447\u0438 \u043e\u0431\u044b\u0447\u043d\u044b\u0445 \u0442\u0430\u0431\u043b\u0438\u0446.<\/p>\n<p>\u0410\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u043e\u0432 bottom-up \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043c\u043d\u043e\u0433\u043e. \u0420\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043a\u0440\u0430\u0442\u043a\u043e \u0442\u0435, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u0432 PostgreSQL.<\/p>\n<h4>DPsize<\/h4>\n<p>\u0412\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0430 \u0440\u0430\u0441\u0441\u0432\u0435\u0442\u0430 \u0420\u0421\u0423\u0411\u0414 \u043d\u0438\u043a\u0442\u043e \u0434\u043e \u043a\u043e\u043d\u0446\u0430 \u043d\u0435 \u043f\u043e\u043d\u0438\u043c\u0430\u043b, \u043a\u0430\u043a \u0432\u0441\u0435 \u0434\u043e\u043b\u0436\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c, \u0438 \u0434\u0435\u043b\u0430\u043b\u0438 \u043a\u0442\u043e \u043a\u0430\u043a \u0443\u043c\u0435\u0435\u0442. \u0422\u043e\u0433\u0434\u0430 \u043f\u043e\u044f\u0432\u0438\u043b\u0441\u044f \u043f\u0435\u0440\u0432\u044b\u0439 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0434\u043b\u044f \u043f\u043e\u0438\u0441\u043a\u0430 \u043f\u043e\u0440\u044f\u0434\u043a\u0430 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0439. \u0421\u0435\u0433\u043e\u0434\u043d\u044f \u0432\u0441\u0435 (\u043a\u0430\u043a \u043c\u0438\u043d\u0438\u043c\u0443\u043c, \u0432 \u0441\u0442\u0430\u0442\u044c\u044f\u0445) \u043d\u0430\u0437\u044b\u0432\u0430\u044e\u0442 \u0435\u0433\u043e DPsize.<\/p>\n<blockquote>\n<p>\u0412\u0441\u043f\u043e\u043c\u043d\u0438\u043c, \u0447\u0442\u043e \u0442\u0430\u043a\u043e\u0435 \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u0435. \u041d\u0430 \u0440\u0430\u0431\u043e\u0442\u0435 \u0441 \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u044f\u043c\u0438 \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0430 \u0440\u0435\u043b\u044f\u0446\u0438\u043e\u043d\u043d\u0430\u044f \u0430\u043b\u0433\u0435\u0431\u0440\u0430, \u0438 \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u0435 \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0437\u0432\u0430\u0442\u044c \u043f\u0440\u043e\u0441\u0442\u044b\u043c \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u043e\u043c \u0434\u0430\u043d\u043d\u044b\u0445 \u0441\u043e \u0441\u0432\u043e\u0435\u0439 \u0441\u0445\u0435\u043c\u043e\u0439 (\u0430\u0442\u0440\u0438\u0431\u0443\u0442\u0430\u043c\u0438). \u0421\u0430\u043c\u044b\u0439 \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u043f\u0440\u0438\u043c\u0435\u0440 \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u044f \u2013 \u0442\u0430\u0431\u043b\u0438\u0446\u0430, \u043d\u043e \u0434\u0440\u0443\u0433\u043e\u0439 \u0432\u0430\u0436\u043d\u044b\u0439 \u043f\u0440\u0438\u043c\u0435\u0440 \u2014 \u044d\u0442\u043e <code>JOIN<\/code>, \u0442.\u043a. \u043f\u043e \u0444\u0430\u043a\u0442\u0443 \u043e\u043d \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f\u043c (\u0434\u0430\u0435\u0442 \u043a\u043e\u0440\u0442\u0435\u0436\u0438 \u0438 \u0435\u0441\u0442\u044c \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u044b). \u0414\u0430\u043b\u0435\u0435 \u044f \u0431\u0443\u0434\u0443 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0442\u0435\u0440\u043c\u0438\u043d &#171;\u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u0435&#187;, \u043d\u043e \u0442\u0430\u043c, \u0433\u0434\u0435 \u0432\u0430\u0436\u043d\u043e \u043f\u043e\u0434\u0447\u0435\u0440\u043a\u043d\u0443\u0442\u044c \u0440\u0430\u0437\u043b\u0438\u0447\u0438\u0435, \u0431\u0443\u0434\u0443 \u0433\u043e\u0432\u043e\u0440\u0438\u0442\u044c &#171;\u0442\u0430\u0431\u043b\u0438\u0446\u0430&#187;.<\/p>\n<\/blockquote>\n<p>\u0418\u0434\u0435\u044f DPsize \u043f\u0440\u043e\u0441\u0442\u0430: \u0447\u0442\u043e\u0431\u044b \u0441\u043e\u0437\u0434\u0430\u0442\u044c JOIN \u0438\u0437 <code>i<\/code> \u0442\u0430\u0431\u043b\u0438\u0446 \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u0439, \u043d\u0443\u0436\u043d\u043e \u0441\u043e\u0435\u0434\u0438\u043d\u0438\u0442\u044c \u0434\u0440\u0443\u0433\u0438\u0435 \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432 \u0441\u0443\u043c\u043c\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u0442\u0430\u0431\u043b\u0438\u0446 \u0434\u0430\u0434\u0443\u0442 \u044d\u0442\u043e\u0442 <code>i<\/code>. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0434\u043b\u044f <code>4<\/code> \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0441\u043e\u0435\u0434\u0438\u043d\u0438\u0442\u044c <code>1<\/code> \u0438 <code>3<\/code>, <code>2<\/code> \u0438 <code>2<\/code>. \u0421\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u0432 \u044d\u0442\u043e\u043c \u0438 \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435, \u043a\u043e\u0433\u0434\u0430 \u043e\u0442\u0432\u0435\u0442 \u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e \u0448\u0430\u0433\u0430 \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u043e\u0442 \u043e\u0442\u0432\u0435\u0442\u0430 \u043f\u0440\u043e\u0448\u043b\u044b\u0445, \u043d\u0443 \u0430 \u0431\u0430\u0437\u043e\u0439 \u0432\u044b\u0441\u0442\u0443\u043f\u0430\u044e\u0442 \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u044f \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u043c <code>1<\/code>, \u0442\u043e \u0435\u0441\u0442\u044c \u043e\u0431\u044b\u0447\u043d\u044b\u0435 \u0442\u0430\u0431\u043b\u0438\u0446\u044b. \u0410\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u043d\u0435\u043f\u043b\u043e\u0445\u043e \u0441\u0435\u0431\u044f \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u043d\u0430 OLTP-\u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0435, \u043a\u043e\u0433\u0434\u0430 \u0442\u0430\u0431\u043b\u0438\u0446 \u043c\u0430\u043b\u043e, \u0438 \u0434\u0430\u0435\u0442 \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043e\u043f\u0442\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0435 \u043f\u043b\u0430\u043d\u044b \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432, \u0430 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u043d\u0430\u0447\u0438\u043d\u0430\u044e\u0442\u0441\u044f, \u043a\u043e\u0433\u0434\u0430 \u0442\u0430\u0431\u043b\u0438\u0446 \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u043c\u043d\u043e\u0433\u043e.<\/p>\n<p>\u041a\u0430\u043a \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u043c\u0435\u0442\u0438\u0442\u044c, \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u044d\u0442\u043e\u0433\u043e \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430 \u2014 \u044d\u043a\u0441\u043f\u043e\u043d\u0435\u043d\u0446\u0438\u0430\u043b\u044c\u043d\u0430\u044f, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u043d\u0430 \u043a\u0430\u0436\u0434\u043e\u043c \u043f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u043c \u0448\u0430\u0433\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u0435\u0449\u0435 \u0431\u043e\u043b\u044c\u0448\u0435 \u043f\u0430\u0440 \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u0439. \u0420\u0430\u0437\u043d\u044b\u0435 \u0421\u0423\u0411\u0414 \u0431\u043e\u0440\u044e\u0442\u0441\u044f \u0441 \u044d\u0442\u0438\u043c \u043f\u043e-\u0440\u0430\u0437\u043d\u043e\u043c\u0443, \u0432 PostgreSQL \u0441\u0442\u0430\u043b\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u0440\u0443\u0433\u043e\u0439 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c.<\/p>\n<h4>GEQO<\/h4>\n<p>GEQO (Genetic Query Optimizer) \u2014 \u044d\u0442\u043e \u0433\u0435\u043d\u0435\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u043f\u043e\u0438\u0441\u043a\u0430 \u043e\u043f\u0442\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043f\u043b\u0430\u043d\u0430 \u0437\u0430\u043f\u0440\u043e\u0441\u0430. \u0415\u0441\u043b\u0438 \u0432\u044b \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0435\u0442\u0435 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0432 PostgreSQL \u0437\u0430\u043f\u0440\u043e\u0441 \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u043d\u0430 12 \u0442\u0430\u0431\u043b\u0438\u0446, \u0430 \u043f\u043e\u0442\u043e\u043c \u043d\u0430 13, \u0442\u043e \u0443\u0434\u0438\u0432\u0438\u0442\u0435\u0441\u044c, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0437\u0430\u0442\u0440\u0430\u0447\u0435\u043d\u043d\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u0441\u043d\u0438\u0437\u0438\u043b\u043e\u0441\u044c \u0441 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u0441\u0435\u043a\u0443\u043d\u0434 \u0434\u043e \u043f\u043e\u0447\u0442\u0438 <em>\u0434\u0435\u0441\u044f\u0442\u0438 \u043c\u0438\u043b\u043b\u0438\u0441\u0435\u043a\u0443\u043d\u0434<\/em>. \u041f\u043e\u0447\u0435\u043c\u0443? \u0414\u0435\u043b\u043e \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u044d\u0442\u043e \u0440\u0430\u043d\u0434\u043e\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c, \u0435\u0433\u043e \u0440\u0430\u0431\u043e\u0442\u0443 \u043c\u043e\u0436\u043d\u043e \u043e\u043f\u0438\u0441\u0430\u0442\u044c \u0442\u0430\u043a: \u0432\u043d\u0430\u0447\u0430\u043b\u0435 \u0441\u0442\u0440\u043e\u0438\u043c <em>\u0445\u043e\u0442\u044c \u043a\u0430\u043a\u043e\u0439-\u043d\u0438\u0431\u0443\u0434\u044c<\/em> \u043f\u043b\u0430\u043d \u0437\u0430\u043f\u0440\u043e\u0441\u0430, \u0430 \u0437\u0430\u0442\u0435\u043c \u043f\u0440\u043e\u0432\u043e\u0434\u0438\u043c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0439 (\u044d\u0442\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442\u0441\u044f \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0435\u0439), \u0432 \u043a\u0430\u0436\u0434\u043e\u0439 \u0438\u0437 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u043e \u043c\u0435\u043d\u044f\u0435\u043c \u043a\u0430\u043a\u0438\u0435-\u043d\u0438\u0431\u0443\u0434\u044c \u0443\u0437\u043b\u044b, \u0438 \u0432 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0443\u044e \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u044e \u0438\u0434\u0435\u0442 \u043f\u043b\u0430\u043d \u0441 \u043b\u0443\u0447\u0448\u0435\u0439 \u0441\u0442\u043e\u0438\u043c\u043e\u0441\u0442\u044c\u044e. \u041e\u0442\u0441\u044e\u0434\u0430 \u0438 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 &#171;\u0433\u0435\u043d\u0435\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439&#187; \u0432\u0432\u0438\u0434\u0443 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u0432 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435 \u043f\u043e\u043a\u043e\u043b\u0435\u043d\u0438\u0435 (\u0438\u0442\u0435\u0440\u0430\u0446\u0438\u044e) \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u044f\u0442 \u0441\u0438\u043b\u044c\u043d\u0435\u0439\u0448\u0438\u0435 (\u0442\u043e \u0435\u0441\u0442\u044c \u0432 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u2014 \u0441\u0430\u043c\u044b\u0435 \u0434\u0435\u0448\u0435\u0432\u044b\u0435).<\/p>\n<h3>DPhyp<\/h3>\n<p>\u041f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u043c \u043a \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u0442\u0435\u043c\u0435 \u2014 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0443 DPhyp. DPhyp \u2014 \u044d\u0442\u043e \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u0431\u043e\u0440\u0430 JOIN&#8217;\u043e\u0432, \u0435\u0433\u043e \u043e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u0438\u0434\u0435\u044f \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u0441\u0430\u043c \u0437\u0430\u043f\u0440\u043e\u0441 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0443\u043a\u0430\u0437\u0430\u043d\u0438\u044f \u043d\u0430 \u0442\u043e, \u043a\u0430\u043a \u0434\u043e\u043b\u0436\u043d\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442\u044c \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435 \u0442\u0430\u0431\u043b\u0438\u0446. \u0422\u0430\u043a \u043f\u043e\u0447\u0435\u043c\u0443 \u0431\u044b \u0435\u0433\u043e \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c? \u041e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u2014 \u0432 \u0441\u0430\u043c\u043e\u043c \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0438 \u0437\u0430\u043f\u0440\u043e\u0441\u0430. \u0420\u0430\u043d\u0435\u0435 \u044f \u0443\u043f\u043e\u043c\u044f\u043d\u0443\u043b, \u0447\u0442\u043e \u0437\u0430\u043f\u0440\u043e\u0441 \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0432 \u0432\u0438\u0434\u0435 \u0433\u0440\u0430\u0444\u0430, \u043d\u043e \u043c\u043e\u0436\u043d\u043e \u043b\u0438 \u0442\u0430\u043a \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0434\u043b\u044f \u0446\u0435\u043b\u0435\u0439 \u043f\u0435\u0440\u0435\u0431\u043e\u0440\u0430 JOIN&#8217;\u043e\u0432? \u0427\u0442\u043e\u0431\u044b \u043f\u043e\u043d\u044f\u0442\u044c, \u0432 \u0447\u0435\u043c \u0442\u0440\u0443\u0434\u043d\u043e\u0441\u0442\u044c, \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440 \u0438\u0437 \u0441\u0442\u0430\u0442\u044c\u0438:<\/p>\n<pre><code class=\"sql\">SELECT * FROM R1, R2, R3, R4, R5, R6 WHERE R1.x = R2.x AND R2.x = R3.x AND R4.x = R5.x AND R5.x = R6.x AND       R1.x + R2.x + R3.x = R4.x + R5.x + R6.x <\/code><\/pre>\n<p>\u0414\u0430, \u0432\u0438\u0434\u0438\u043c, \u0447\u0442\u043e \u0435\u0441\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e <em>\u044f\u0432\u043d\u043e<\/em> \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u043d\u044b\u0445 \u043c\u0435\u0436\u0434\u0443 \u0441\u043e\u0431\u043e\u0439 \u0442\u0430\u0431\u043b\u0438\u0446 \u2014 \u0434\u043b\u044f \u043d\u0438\u0445 \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0440\u0435\u0431\u0440\u0430 \u0432 \u043d\u0430\u0448\u0435\u043c \u0433\u0440\u0430\u0444\u0435 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, <code>R1 - R2<\/code>), \u043d\u043e \u0447\u0442\u043e \u0434\u0435\u043b\u0430\u0442\u044c \u0441 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u043c \u043f\u0440\u0435\u0434\u0438\u043a\u0430\u0442\u043e\u043c, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e \u0444\u0430\u043a\u0442\u0443 \u0441\u043e\u0435\u0434\u0438\u043d\u044f\u0435\u0442 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0430 \u0442\u0430\u0431\u043b\u0438\u0446? \u042d\u0442\u0443 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443 \u0438 \u0440\u0435\u0448\u0430\u0435\u0442 DPhyp \u2014 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f (DP), \u043e\u0441\u043d\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043d\u0430 <em>\u0433\u0438\u043f\u0435\u0440\u0433\u0440\u0430\u0444\u0430\u0445<\/em> (hyp \u2014 hypergraph). \u041f\u0443\u0433\u0430\u0442\u044c\u0441\u044f \u043d\u0435 \u0441\u0442\u043e\u0438\u0442, \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u0430\u0433\u0430\u044e, \u0447\u0442\u043e \u0432\u044b \u0437\u043d\u0430\u043a\u043e\u043c\u044b \u0441 \u043e\u0431\u044b\u0447\u043d\u044b\u043c \u0433\u0440\u0430\u0444\u043e\u043c \u2014 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e\u043c \u0443\u0437\u043b\u043e\u0432, \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u043d\u044b\u0445 \u043c\u0435\u0436\u0434\u0443 \u0441\u043e\u0431\u043e\u0439 \u0440\u0435\u0431\u0440\u0430\u043c\u0438, \u0430 \u0432\u043e\u0442 \u0433\u0438\u043f\u0435\u0440\u0433\u0440\u0430\u0444 \u2014 \u044d\u0442\u043e \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u0433\u0438\u043f\u0435\u0440\u0443\u0437\u043b\u043e\u0432, \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u043d\u044b\u0445 \u043c\u0435\u0436\u0434\u0443 \u0441\u043e\u0431\u043e\u0439 \u0433\u0438\u043f\u0435\u0440\u0440\u0435\u0431\u0440\u0430\u043c\u0438:<\/p>\n<ul>\n<li>\n<p>\u0433\u0438\u043f\u0435\u0440\u0443\u0437\u0435\u043b (hypernode) \u2014 \u044d\u0442\u043e <em>\u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e<\/em> \u043e\u0431\u044b\u0447\u043d\u044b\u0445 <em>\u0443\u0437\u043b\u043e\u0432;<\/em><\/p>\n<\/li>\n<li>\n<p>\u0433\u0438\u043f\u0435\u0440\u0440\u0435\u0431\u0440\u043e (hyperedge) \u2014 \u044d\u0442\u043e \u0440\u0435\u0431\u0440\u043e, \u0441\u043e\u0435\u0434\u0438\u043d\u044f\u044e\u0449\u0435\u0435 2 <em>\u0433\u0438\u043f\u0435\u0440\u0443\u0437\u043b\u0430<\/em>.<\/p>\n<\/li>\n<\/ul>\n<p>\u0412 \u0437\u0430\u043f\u0440\u043e\u0441\u0435 \u0438\u0437 \u043f\u0440\u0438\u043c\u0435\u0440\u0430 \u0443 \u043d\u0430\u0441 \u0438\u043c\u0435\u044e\u0442\u0441\u044f \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0433\u0438\u043f\u0435\u0440\u0440\u0435\u0431\u0440\u0430:<\/p>\n<ol>\n<li>\n<p><code>{R1} - {R2}<\/code><\/p>\n<\/li>\n<li>\n<p><code>{R2} - {R3}<\/code><\/p>\n<\/li>\n<li>\n<p><code>{R4} - {R5}<\/code><\/p>\n<\/li>\n<li>\n<p><code>{R5} - {R6}<\/code><\/p>\n<\/li>\n<li>\n<p><code>{R1, R2, R3} - {R4, R5, R6}<\/code><\/p>\n<\/li>\n<\/ol>\n<p>\u0415\u0441\u043b\u0438 \u0432 \u0433\u0438\u043f\u0435\u0440\u0443\u0437\u043b\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u043d\u043e \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u0435, \u0442\u043e \u0435\u0433\u043e \u043d\u0430\u0437\u044b\u0432\u0430\u044e\u0442 <em>\u043f\u0440\u043e\u0441\u0442\u044b\u043c \u0433\u0438\u043f\u0435\u0440\u0443\u0437\u043b\u043e\u043c<\/em>. \u0410\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u043e \u0435\u0441\u043b\u0438 \u0433\u0438\u043f\u0435\u0440\u0440\u0435\u0431\u0440\u043e \u0441\u043e\u0435\u0434\u0438\u043d\u044f\u0435\u0442 \u0434\u0432\u0430 \u043f\u0440\u043e\u0441\u0442\u044b\u0445 \u0433\u0438\u043f\u0435\u0440\u0443\u0437\u043b\u0430, \u0442\u043e \u044d\u0442\u043e <em>\u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u0433\u0438\u043f\u0435\u0440\u0443\u0437\u0435\u043b<\/em>. \u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u043f\u0435\u0440\u0432\u044b\u0435 \u0447\u0435\u0442\u044b\u0440\u0435 \u0438\u0437 \u043f\u0435\u0440\u0435\u0447\u043d\u044f \u2014\u043f\u0440\u043e\u0441\u0442\u044b\u0435 \u0433\u0438\u043f\u0435\u0440\u0440\u0435\u0431\u0440\u0430.<\/p>\n<p>\u0427\u0442\u043e\u0431\u044b \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043f\u043b\u0430\u043d \u0434\u043b\u044f \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0430 \u0438\u0437 <code>i<\/code> \u0443\u0437\u043b\u043e\u0432, \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u043e\u0431\u043e\u0439\u0442\u0438 \u0443\u0436\u0435 \u043d\u0435 \u0432\u0441\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0435 \u043f\u0430\u0440\u044b, \u0434\u0430\u044e\u0449\u0438\u0435 <code>i<\/code> \u0432 \u0441\u0443\u043c\u043c\u0435, \u0430 \u0432\u0441\u0435 \u043f\u0430\u0440\u044b \u0433\u0438\u043f\u0435\u0440\u0443\u0437\u043b\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432 \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0438 \u0434\u0430\u044e\u0442 \u0442\u043e \u0436\u0435 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e. \u0422\u0430\u043a\u0430\u044f \u043f\u0430\u0440\u0430 \u2014 \u044d\u0442\u043e \u043f\u0430\u0440\u0430 \u0438\u0437 \u0434\u0432\u0443\u0445 \u043d\u0435\u043f\u0435\u0440\u0435\u0441\u0435\u043a\u0430\u044e\u0449\u0438\u0445\u0441\u044f \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432: <code>connected subgraph<\/code> (csg, \u043f\u043e\u0434\u0433\u0440\u0430\u0444) \u0438 <code>connected complement<\/code> (cmp, \u0434\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435). \u042d\u0442\u0438 \u0430\u0431\u0431\u0440\u0435\u0432\u0438\u0430\u0442\u0443\u0440\u044b \u0431\u0443\u0434\u0443\u0442 \u0447\u0430\u0441\u0442\u043e \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u0442\u044c\u0441\u044f \u0432 \u0441\u0442\u0430\u0442\u044c\u0435.<\/p>\n<p>\u0427\u0442\u043e\u0431\u044b \u0432\u0441\u0435 \u0437\u0430\u0440\u0430\u0431\u043e\u0442\u0430\u043b\u043e \u043e\u043f\u0442\u0438\u043c\u0430\u043b\u044c\u043d\u043e, \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0432\u0432\u0435\u0441\u0442\u0438 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0435 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0435 \u2014 \u043f\u043e\u0440\u044f\u0434\u043e\u043a \u0443\u0437\u043b\u043e\u0432. \u041d\u0430\u0434 \u0443\u0437\u043b\u0430\u043c\u0438 (\u0442.\u0435. \u0442\u0430\u0431\u043b\u0438\u0446\u0430\u043c\u0438) \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u0435 \u043f\u043e\u0440\u044f\u0434\u043a\u0430, \u0433\u0440\u0443\u0431\u043e \u0433\u043e\u0432\u043e\u0440\u044f, \u043e\u043d\u0438 \u0434\u043e\u043b\u0436\u043d\u044b \u0431\u044b\u0442\u044c \u043f\u0440\u043e\u043d\u0443\u043c\u0435\u0440\u043e\u0432\u0430\u043d\u044b (\u043d\u0443\u043c\u0435\u0440\u0430\u0446\u0438\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0447\u0430\u0449\u0435 \u0432\u0441\u0435\u0433\u043e) \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u0442\u043e\u043c \u043c\u044b \u043c\u043e\u0433\u043b\u0438 \u0438\u0445 \u0441\u0440\u0430\u0432\u043d\u0438\u0442\u044c \u0438 \u043e\u0442\u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c. \u0427\u0442\u043e\u0431\u044b \u043f\u043e\u043d\u044f\u0442\u044c \u0437\u0430\u0447\u0435\u043c, \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u044f\u0434\u0440\u043e \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430 \u2014 \u0441\u043e\u0441\u0435\u0434\u0441\u0442\u0432\u043e.<\/p>\n<p>\u0412 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u0440\u0430\u0431\u043e\u0442\u044b \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430 \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0430 \u043e\u0442 \u043e\u0434\u043d\u043e\u0433\u043e \u0433\u0438\u043f\u0435\u0440\u0443\u0437\u043b\u0430 \u043a \u0434\u0440\u0443\u0433\u043e\u043c\u0443 \u043c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u0441\u043e\u0441\u0435\u0434\u0435\u0439 (neighborhood). \u0412 \u0441\u0442\u0430\u0442\u044c\u0435 \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u043c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435, \u043d\u043e \u043f\u0440\u043e\u0449\u0435 \u0432\u0441\u0435\u0433\u043e \u0441\u043a\u0430\u0437\u0430\u0442\u044c, \u0447\u0442\u043e \u0441\u043e\u0441\u0435\u0434\u0438 \u0434\u043b\u044f \u043a\u0430\u043a\u043e\u0433\u043e-\u043b\u0438\u0431\u043e \u0433\u0438\u043f\u0435\u0440\u0443\u0437\u043b\u0430 \u2014 \u044d\u0442\u043e \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u0434\u0440\u0443\u0433\u0438\u0445 \u0434\u043e\u0441\u0442\u0438\u0436\u0438\u043c\u044b\u0445 \u0443\u0437\u043b\u043e\u0432. \u0422\u0430\u043a\u0436\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f, \u0447\u0442\u043e\u0431\u044b \u044d\u0442\u043e \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u0431\u044b\u043b\u043e \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u043c, \u0432 \u043f\u0440\u043e\u0442\u0438\u0432\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u043e\u0434\u043d\u0438 \u0438 \u0442\u0435 \u0436\u0435 \u0443\u0437\u043b\u044b \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0440\u0430\u0437. \u0412\u043e\u0442 \u0442\u0443\u0442 \u0438 \u043d\u0443\u0436\u0435\u043d \u043f\u043e\u0440\u044f\u0434\u043e\u043a \u2014 \u043a\u043e\u0433\u0434\u0430 \u0434\u043b\u044f \u043d\u0430\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u044f \u0441\u043e\u0441\u0435\u0434\u0435\u0439 \u043c\u044b \u043e\u0431\u0445\u043e\u0434\u0438\u043c \u0440\u0435\u0431\u0440\u0430, \u0442\u043e \u0432 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0442\u043e\u043b\u044c\u043a\u043e <em>\u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u0442\u0435\u043b\u044f<\/em> \u0433\u0438\u043f\u0435\u0440\u0443\u0437\u043b\u0430, \u0435\u0433\u043e <em>\u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442<\/em>. \u0414\u0430\u043b\u044c\u0448\u0435 \u043d\u0443\u0436\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c, \u0447\u0442\u043e \u0434\u0440\u0443\u0433\u0438\u0435 \u0440\u0435\u0431\u0440\u0430 \u043d\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442 \u0443\u0436\u0435 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0435 \u0443\u0437\u043b\u044b. \u041f\u043e\u0441\u043b\u0435\u0434\u043d\u044f\u044f \u0432\u0430\u0436\u043d\u0430\u044f \u0434\u0435\u0442\u0430\u043b\u044c \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430 \u2014 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u043e\u0435 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e (excluded set). \u0412 DPsize \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438 \u0438\u0442\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u043e \u0434\u043e\u043f\u043e\u043b\u043d\u044f\u044e\u0449\u0438\u043c \u043f\u0430\u0440\u0430\u043c \u043c\u044b \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u043c \u043d\u0435 \u0441 0, \u0430 \u0441\u043e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0433\u043e \u0438\u043d\u0434\u0435\u043a\u0441\u0430, \u0438\u043b\u0438 \u0432 \u043f\u0440\u043e\u0442\u0438\u0432\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043f\u043e\u043f\u044b\u0442\u0430\u0435\u043c\u0441\u044f \u0441\u043e\u0435\u0434\u0438\u043d\u0438\u0442\u044c \u0441\u0435\u0431\u044f \u0441 \u0441\u043e\u0431\u043e\u0439 \u0436\u0435, \u0430 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u0430\u0440\u044b \u2014 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0434\u0432\u0430\u0436\u0434\u044b. \u0417\u0434\u0435\u0441\u044c \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0442\u0430 \u0436\u0435 \u0438\u0434\u0435\u044f, \u043c\u044b \u0432\u0435\u0434\u0435\u043c \u0443\u0447\u0435\u0442 \u0443\u0437\u043b\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0435 \u0441\u0442\u043e\u0438\u0442 \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0442\u044c (\u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u044b\u0445) \u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c \u044d\u0442\u043e \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0432\u0435\u0437\u0434\u0435, \u0434\u0430\u0436\u0435 \u043f\u0440\u0438 \u043d\u0430\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u0438 \u0441\u043e\u0441\u0435\u0434\u0435\u0439. \u0411\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f \u044d\u0442\u043e\u043c\u0443 \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043d\u0435 \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0442\u044c \u043e\u0434\u043d\u043e \u0438 \u0442\u043e \u0436\u0435 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u0434\u0432\u0430\u0436\u0434\u044b.<\/p>\n<p>\u041e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u043b\u043e\u0433\u0438\u043a\u0430 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430 \u0432 \u0441\u0442\u0430\u0442\u044c\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0430 \u043f\u044f\u0442\u044c\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u044f\u043c\u0438, \u0430 \u044f\u0434\u0440\u043e \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430 \u0432\u043a\u0440\u0430\u0442\u0446\u0435 \u043c\u043e\u0436\u043d\u043e \u043e\u043f\u0438\u0441\u0430\u0442\u044c \u0442\u0430\u043a: \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u043d\u0430\u0439\u0442\u0438 csg-cmp \u043f\u0430\u0440\u0443, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0432 \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0438 \u0434\u0430\u0435\u0442 \u0432\u0435\u0441\u044c \u0437\u0430\u043f\u0440\u043e\u0441, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043f\u043e\u0438\u0441\u043a\u0430 \u0441\u043e\u0441\u0435\u0434\u0435\u0439 \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u043e\u0447\u0435\u0440\u0435\u0434\u043d\u043e\/\u0440\u0435\u043a\u0443\u0440\u0441\u0438\u0432\u043d\u043e \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u0442\u044c\u0441\u044f csg \u0438 cmp. \u0412\u043e\u043f\u0440\u043e\u0441 \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u0442\u043e\u043c, \u0441 \u0447\u0435\u0433\u043e \u043d\u0430\u0447\u0430\u0442\u044c. \u041e\u0442\u0432\u0435\u0442 \u0437\u0434\u0435\u0441\u044c \u0442\u0430\u043a\u043e\u0439 \u2014 \u043c\u044b \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u043c \u0438\u0442\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043f\u043e \u0432\u0441\u0435\u043c \u0443\u0437\u043b\u0430\u043c \u043d\u0430\u0447\u0438\u043d\u0430\u044f <em>\u0441 \u043a\u043e\u043d\u0446\u0430<\/em>, \u0430 \u043f\u0440\u0438 \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u043c \u0432\u044b\u0437\u043e\u0432\u0435 \u0432 <em>excluded<\/em> \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c \u0432\u0441\u0435 \u0443\u0437\u043b\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u0435\u043d\u044c\u0448\u0435 \u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e. \u0412 \u0438\u0442\u043e\u0433\u0435 \u043c\u044b \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u043c \u0441 \u043f\u0440\u043e\u0441\u0442\u043e\u0433\u043e \u0433\u0438\u043f\u0435\u0440\u0443\u0437\u043b\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0438\u043a\u0442\u043e \u043d\u0435 \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u043b, \u0430 \u0437\u0430\u0442\u0435\u043c \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u0432\u043d\u043e \u0435\u0433\u043e \u0440\u0430\u0441\u0448\u0438\u0440\u044f\u0435\u043c \u0438 \u043d\u0430\u0445\u043e\u0434\u0438\u043c cmp \u0434\u043b\u044f \u043d\u0435\u0433\u043e \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0441\u043e\u0441\u0435\u0434\u0435\u0439.<\/p>\n<p>\u0421\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u0442\u0435\u043f\u0435\u0440\u044c \u043d\u0435\u0442\u0440\u0443\u0434\u043d\u043e \u043f\u043e\u043d\u044f\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u0438:<\/p>\n<ul>\n<li>\n<p><code>Solve<\/code> \u2014 \u0432\u0445\u043e\u0434\u043d\u0430\u044f \u0442\u043e\u0447\u043a\u0430 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430. \u0418\u0442\u0435\u0440\u0438\u0440\u0443\u0435\u043c\u0441\u044f \u043f\u043e \u043f\u0440\u043e\u0441\u0442\u044b\u043c \u0433\u0438\u043f\u0435\u0440\u0443\u0437\u043b\u0430\u043c \u0441 \u043a\u043e\u043d\u0446\u0430 \u0438 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u043c <code>EmitCsg<\/code> \u0438 <code>EnumerateCsgRecursive<\/code>;<\/p>\n<\/li>\n<li>\n<p><code>EmitCsg<\/code> \u2014 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u0443\u0436\u0435 <em>\u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439<\/em> csg, \u0434\u043b\u044f \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043d\u0430\u0445\u043e\u0434\u0438\u0442 \u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0438\u0439 cmp, \u0430 \u0437\u0430\u0442\u0435\u043c \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442 <code>EmitCsgCmp<\/code> \u0438\/\u0438\u043b\u0438 <code>EnumerateCmpRecursive<\/code>;<\/p>\n<\/li>\n<li>\n<p><code>EmitCsgRecursive<\/code> \u2014 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 csg, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0440\u0430\u0441\u0448\u0438\u0440\u044f\u0435\u0442 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0441\u043e\u0441\u0435\u0434\u0435\u0439, \u0437\u0430\u0442\u0435\u043c \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442 <code>EmitCsg<\/code> \u0438\/\u0438\u043b\u0438 <code>EnumerateCsgRecursive<\/code>;<\/p>\n<\/li>\n<li>\n<p><code>EnumerateCmpRecursive<\/code> \u2014 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 <em>\u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439<\/em> csg \u0438 cmp, \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0441\u043e\u0441\u0435\u0434\u0435\u0439 \u0440\u0430\u0441\u0448\u0438\u0440\u044f\u0435\u0442 cmp, \u0437\u0430\u0442\u0435\u043c \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442 <code>EmitCsgCmp<\/code> \u0438\/\u0438\u043b\u0438 <code>EnumerateCmpRecursive<\/code>;<\/p>\n<\/li>\n<li>\n<p><code>EmitCsgCmp<\/code> \u2014 \u0441\u043e\u0437\u0434\u0430\u0435\u0442 \u0433\u043e\u0442\u043e\u0432\u044b\u0439 \u043f\u043b\u0430\u043d \u0434\u043b\u044f <em>\u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445<\/em> csg \u0438 cmp.<\/p>\n<\/li>\n<\/ul>\n<p>\u041e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u0438\u0434\u0435\u044f \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430 \u043f\u043e\u043d\u044f\u0442\u043d\u0430, \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043f\u0440\u0438\u043c\u0435\u0440\u0430 \u0432 \u0441\u0442\u0430\u0442\u044c\u0435 \u0442\u0430\u043a\u0436\u0435 \u0435\u0441\u0442\u044c \u043f\u043e\u0448\u0430\u0433\u043e\u0432\u0430\u044f \u0438\u043b\u043b\u044e\u0441\u0442\u0440\u0430\u0446\u0438\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430 \u0434\u043b\u044f \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u0438\u0437 \u043f\u0440\u0438\u043c\u0435\u0440\u0430:<\/p>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/\/post_images\/c19\/678\/8ae\/c196788ae92c3187cae1a138525d8f2f.png\" alt=\"\u0422\u0440\u0435\u0439\u0441\u0438\u043d\u0433 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430 \u0434\u043b\u044f \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u0438\u0437 \u043f\u0440\u0438\u043c\u0435\u0440\u0430\" sizes=\"(max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/\/post_images\/c19\/678\/8ae\/c196788ae92c3187cae1a138525d8f2f.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/\/post_images\/c19\/678\/8ae\/c196788ae92c3187cae1a138525d8f2f.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u0422\u0440\u0435\u0439\u0441\u0438\u043d\u0433 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430 \u0434\u043b\u044f \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u0438\u0437 \u043f\u0440\u0438\u043c\u0435\u0440\u0430<\/figcaption><\/div>\n<\/figure>\n<p>\u0412\u043e\u0442 \u0447\u0442\u043e \u0437\u0434\u0435\u0441\u044c \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442:<\/p>\n<ol>\n<li>\n<p>\u0418\u0442\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0432 \u043e\u0431\u0440\u0430\u0442\u043d\u043e\u043c \u043f\u043e\u0440\u044f\u0434\u043a\u0435, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u043c \u0441 \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u044f <code>R6<\/code> (\u0441\u0430\u043c\u044b\u0439 \u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u043f\u043e \u0438\u043d\u0434\u0435\u043a\u0441\u0443), \u043d\u043e \u0434\u043b\u044f \u043d\u0435\u0433\u043e \u0441\u043e\u0441\u0435\u0434\u0435\u0439 \u043d\u0435\u0442, \u0442\u0430\u043a \u043a\u0430\u043a \u0432\u0441\u0435 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u0443\u0437\u043b\u044b \u043d\u0430\u0445\u043e\u0434\u044f\u0442\u0441\u044f \u0432 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u043e\u043c \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0435.<\/p>\n<\/li>\n<li>\n<p>\u041f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u043c \u043a <code>R5<\/code>.<\/p>\n<\/li>\n<li>\n<p>\u0414\u043b\u044f \u043d\u0435\u0433\u043e \u043d\u0430\u0448\u043b\u0438 \u0441\u043e\u0441\u0435\u0434\u0430 <code>R6<\/code> \u0438 \u0441\u043e\u0437\u0434\u0430\u0435\u043c \u0438\u0437 \u043d\u0435\u0433\u043e cmp <code>{R6}<\/code>.<\/p>\n<\/li>\n<li>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u0435\u043c \u0441\u0430\u043c csg \u0434\u043e <code>{R5, R6}<\/code>.<\/p>\n<\/li>\n<li>\n<p>\u041f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u043c \u043a <code>R4<\/code>.<\/p>\n<\/li>\n<li>\n<p>\u0414\u043b\u044f \u043d\u0435\u0433\u043e \u0435\u0441\u0442\u044c \u0441\u043e\u0441\u0435\u0434 <code>{R5}<\/code>, \u0434\u043b\u044f \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0441\u043e\u0437\u0434\u0430\u0435\u043c cmp <code>{R5}<\/code>.<\/p>\n<\/li>\n<li>\n<p>\u041f\u043e\u0441\u043b\u0435 \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u0435\u043c \u044d\u0442\u043e\u0442 cmp \u0434\u043e <code>{R5, R6}<\/code>, \u0442\u0430\u043a \u043a\u0430\u043a <code>R6<\/code> \u2014 \u0441\u043e\u0441\u0435\u0434 <code>R5<\/code>.<\/p>\n<\/li>\n<li>\n<p>\u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c\u0441\u044f \u043a \u0448\u0435\u0441\u0442\u043e\u0439 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0438 \u0438 \u0432\u043c\u0435\u0441\u0442\u043e cmp \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u0435\u043c \u0441\u0430\u043c csg \u0434\u043e <code>{R4, R5}<\/code>.<\/p>\n<\/li>\n<li>\n<p>\u0414\u043b\u044f \u0443\u0436\u0435 \u044d\u0442\u043e\u0433\u043e \u043f\u043e\u0434\u0433\u0440\u0430\u0444\u0430 \u043c\u044b \u043d\u0430\u0448\u043b\u0438 cmp <code>{R6}<\/code>.<\/p>\n<\/li>\n<li>\n<p>\u0423\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u0435\u043c csg <code>{R4, R5}<\/code> \u0434\u043e <code>{R4, R5, R6}<\/code>.<\/p>\n<\/li>\n<li>\n<p>\u041f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u043c \u043a <code>R3<\/code> (\u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u044b\u0445 <code>{R1, R2}<\/code>), \u043d\u043e \u0434\u043b\u044f \u043d\u0435\u0433\u043e \u0441\u043e\u0441\u0435\u0434\u0435\u0439 \u043d\u0435\u0442, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443: <\/p>\n<ul>\n<li>\n<p>\u0412\u0441\u0435 \u0433\u0438\u043f\u0435\u0440\u0443\u0437\u043b\u044b, \u0441 \u043a\u043e\u0442\u043e\u0440\u044b\u043c\u0438 \u0435\u0441\u0442\u044c \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435 \u0447\u0435\u0440\u0435\u0437 \u043f\u0440\u043e\u0441\u0442\u044b\u0435 \u0433\u0438\u043f\u0435\u0440\u0440\u0435\u0431\u0440\u0430 (<code>R1<\/code>, <code>R2<\/code>), \u043b\u0435\u0436\u0430\u0442 \u0432\u043e \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0435 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u044b\u0445;<\/p>\n<\/li>\n<li>\n<p>\u041f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u0442\u0435\u043b\u044c \u043b\u0435\u0432\u043e\u0439 \u0432\u0435\u0440\u0448\u0438\u043d\u044b \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0433\u043e \u0441\u043b\u043e\u0436\u043d\u043e\u0433\u043e \u0433\u0438\u043f\u0435\u0440\u0440\u0435\u0431\u0440\u0430 (<code>min({R1, R2, R3}) = R1<\/code>) \u0442\u043e\u0436\u0435 \u043b\u0435\u0436\u0438\u0442 \u0432 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0435 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u044b\u0445.<\/p>\n<\/li>\n<\/ul>\n<\/li>\n<li>\n<p>\u041f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u043c \u043a <code>R2<\/code>.<\/p>\n<\/li>\n<li>\n<p>\u0414\u043b\u044f \u043d\u0435\u0433\u043e \u0435\u0441\u0442\u044c \u0441\u043e\u0441\u0435\u0434 <code>R3<\/code>, \u0434\u043b\u044f \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0441\u043e\u0437\u0434\u0430\u0435\u043c cmp.<\/p>\n<\/li>\n<li>\n<p>\u0423\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u0435\u043c \u0441\u0430\u043c csg \u0434\u043e <code>{R2, R3}<\/code>.<\/p>\n<\/li>\n<li>\n<p>\u041f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u043c \u043a <code>R1<\/code>.<\/p>\n<\/li>\n<li>\n<p>\u0414\u043b\u044f \u043d\u0435\u0433\u043e \u0435\u0441\u0442\u044c \u0441\u043e\u0441\u0435\u0434 <code>{R2}<\/code>, \u0434\u043b\u044f \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0438 \u0441\u043e\u0437\u0434\u0430\u0435\u043c cmp.<\/p>\n<\/li>\n<li>\n<p>\u0414\u043b\u044f \u0441\u0430\u043c\u043e\u0433\u043e <code>R2<\/code> \u0435\u0441\u0442\u044c \u0441\u043e\u0441\u0435\u0434 <code>R3<\/code> \u2014 \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u0435\u043c cmp.<\/p>\n<\/li>\n<li>\n<p>\u0423\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u0435\u043c \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043f\u043e\u0434\u0433\u0440\u0430\u0444 <code>{R1}<\/code> \u0434\u043e <code>{R1, R2}<\/code> (\u0441\u043e\u0441\u0435\u0434).<\/p>\n<\/li>\n<li>\n<p>\u0414\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0438\u0432\u0448\u0435\u0433\u043e\u0441\u044f \u043f\u043e\u0434\u0433\u0440\u0430\u0444\u0430 \u0435\u0441\u0442\u044c \u0441\u043e\u0441\u0435\u0434 <code>R3<\/code> (\u0432\u044b\u0432\u0435\u043b\u0438 \u0438\u0437 \u0441\u043e\u0441\u0435\u0434\u0441\u0442\u0432\u0430 \u0441 <code>R2<\/code>).<\/p>\n<\/li>\n<li>\n<p>\u0423\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u0435\u043c \u043f\u043e\u0434\u0433\u0440\u0430\u0444 <code>{R1, R2}<\/code> \u0434\u043e <code>{R1, R2, R3}<\/code> \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u044d\u0442\u043e\u0433\u043e \u0441\u043e\u0441\u0435\u0434\u0430.<\/p>\n<\/li>\n<li>\n<p>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0435 \u0441\u043b\u043e\u0436\u043d\u043e\u0435 \u0433\u0438\u043f\u0435\u0440\u0440\u0435\u0431\u0440\u043e \u0438 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0441\u043e\u0441\u0435\u0434\u0430 \u0434\u043b\u044f <code>{R1, R2, R3}<\/code> \u2014 \u044d\u0442\u043e <code>{R4}<\/code>, \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u0442\u0435\u043b\u044c \u043f\u0440\u0430\u0432\u043e\u0439 \u0432\u0435\u0440\u0448\u0438\u043d\u044b <code>{R4, R5, R6}<\/code>. \u0421\u043e\u0437\u0434\u0430\u0435\u043c \u0434\u043b\u044f \u043d\u0435\u0433\u043e cmp.<\/p>\n<\/li>\n<li>\n<p>\u0423\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u0435\u043c cmp \u0434\u043e <code>{R4, R5}<\/code> \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043f\u0440\u043e\u0441\u0442\u043e\u0433\u043e \u0441\u043e\u0441\u0435\u0434\u0430.<\/p>\n<\/li>\n<li>\n<p>\u0415\u0449\u0435 \u0440\u0430\u0437 \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u0435\u043c cmp, \u0443\u0436\u0435 \u0434\u043e <code>{R4, R5, R6}<\/code>.<\/p>\n<\/li>\n<li>\n<p>\u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c\u0441\u044f \u043a \u0448\u0430\u0433\u0443 20 \u0438 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u043c \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u0442\u044c \u043f\u043e\u0434\u0433\u0440\u0430\u0444: \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c <code>{R4}<\/code>.<\/p>\n<\/li>\n<li>\n<p>\u0417\u0430\u0442\u0435\u043c \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c <code>{R5}<\/code>.<\/p>\n<\/li>\n<li>\n<p>\u041d\u0430\u043a\u043e\u043d\u0435\u0446 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c <code>{R6}<\/code>. \u0422\u0435\u043f\u0435\u0440\u044c csg \u0440\u0430\u0432\u0435\u043d \u0432\u0441\u0435\u043c\u0443 \u0433\u0438\u043f\u0435\u0440\u0433\u0440\u0430\u0444\u0443 \u0438 \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0437\u0430\u043a\u043e\u043d\u0447\u0438\u0442\u044c.<\/p>\n<\/li>\n<\/ol>\n<p>\u0410\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0445\u043e\u0440\u043e\u0448\u0438\u0439, \u0430 \u043c\u043e\u0436\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0435\u0433\u043e \u0432 PostgreSQL? \u0414\u0430, \u0438 \u0432\u0441\u0435\u0433\u0434\u0430 \u0431\u044b\u043b\u043e \u043c\u043e\u0436\u043d\u043e! \u0414\u043b\u044f \u044d\u0442\u043e \u0438 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 <code>join_search_hook<\/code> \u2014 \u0442\u043e\u0447\u043a\u0430, \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0449\u0430\u044f \u043f\u043e\u0434\u043c\u0435\u043d\u0438\u0442\u044c \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u043f\u0435\u0440\u0435\u0431\u043e\u0440\u0430 JOIN&#8217;\u043e\u0432.<\/p>\n<h3>\u0420\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435 pg_dphyp<\/h3>\n<p>\u0418\u0434\u0435\u044f \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u044d\u0442\u043e\u0433\u043e \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f \u043f\u0440\u0438\u0448\u043b\u0430 \u043a\u043e \u043c\u043d\u0435 \u0441\u043f\u043e\u043d\u0442\u0430\u043d\u043d\u043e: \u044f \u0438\u0437\u0443\u0447\u0430\u043b \u0440\u0430\u0437\u043d\u044b\u0435 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u044b JOIN&#8217;\u043e\u0432 \u0438 \u043d\u0430\u0442\u043a\u043d\u0443\u043b\u0441\u044f \u043d\u0430 \u043d\u0435\u0433\u043e. \u041f\u043e\u0438\u0441\u043a \u0432 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442\u0435 \u043d\u0435 \u0434\u0430\u043b \u043d\u0438\u0447\u0435\u0433\u043e \u0442\u0430\u043a\u043e\u0433\u043e \u0434\u043b\u044f PostgreSQL, \u0438 \u044f \u043f\u043e\u043d\u044f\u043b, \u0447\u0442\u043e \u043d\u0430\u0434\u043e \u0434\u0435\u043b\u0430\u0442\u044c \u0441\u0430\u043c\u043e\u043c\u0443. \u041a\u043e\u043c\u0443 \u0443\u0436\u0435 \u0441\u0440\u0430\u0437\u0443 \u0445\u043e\u0447\u0435\u0442\u0441\u044f \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043d\u0430 \u0442\u043e, \u0447\u0442\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c, <a href=\"https:\/\/github.com\/TantorLabs\/pg_dphyp\" rel=\"noopener noreferrer nofollow\">\u0432\u043e\u0442 \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0439<\/a>. \u0412 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0435 \u044f\u0434\u0440\u0430 \u0440\u0430\u0431\u043e\u0442\u044b \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430 \u044f \u043d\u0435 \u043f\u0440\u0438\u043d\u0435\u0441 \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u043e\u0432\u043e\u0433\u043e, \u0434\u0430\u0436\u0435 \u043d\u0430\u043e\u0431\u043e\u0440\u043e\u0442, \u0431\u043e\u043b\u044c\u0448\u0435 \u043a\u043e\u043f\u0438\u043f\u0430\u0441\u0442\u0438\u043b \u0443 \u0434\u0440\u0443\u0433\u0438\u0445. \u041f\u0435\u0440\u0435\u0434 \u0442\u0435\u043c \u043a\u0430\u043a \u043f\u0440\u0438\u0441\u0442\u0443\u043f\u0438\u0442\u044c \u043a \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0441\u0432\u043e\u0435\u0433\u043e, \u044f \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u043b \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0432 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u0421\u0423\u0411\u0414, \u0432 \u0447\u0430\u0441\u0442\u043d\u043e\u0441\u0442\u0438, YDB, MySQL \u0438 DuckDB. \u0415\u0441\u043b\u0438 \u043a\u0442\u043e-\u0442\u043e \u0445\u043e\u0447\u0435\u0442 \u0438\u0437\u0443\u0447\u0438\u0442\u044c DPhyp \u043f\u043e \u043a\u043e\u0434\u0443 \u2014 \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u044e \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043d\u0430 <a href=\"https:\/\/github.com\/ydb-platform\/ydb\/blob\/c23202bc294cf703741f1ea6ac30786578a58920\/ydb\/library\/yql\/dq\/opt\/dq_opt_dphyp_solver.h\" rel=\"noopener noreferrer nofollow\">\u043a\u043e\u0434 YDB<\/a> \u2014 \u0447\u0438\u0441\u0442\u044b\u0439 \u0438 \u043f\u043e\u043d\u044f\u0442\u043d\u044b\u0439, \u043e\u0447\u0435\u043d\u044c \u043b\u0435\u0433\u043a\u043e \u0447\u0438\u0442\u0430\u0442\u044c. \u041d\u043e \u0441\u0430\u043c \u044f \u043d\u0430\u0447\u0430\u043b \u043d\u0435 \u0441 YDB, \u0430 \u0441 MySQL, \u0438 \u0432\u043e\u0442 \u0432 \u043d\u0451\u043c \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0430 \u0438 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u0430, \u0441\u0440\u0430\u0437\u0443 \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u0442\u044c\u0441\u044f \u043d\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0441\u044f, \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u044f\u043c \u0438 \u0441 \u0438\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u044b\u043c \u043f\u043e\u043d\u0438\u043c\u0430\u043d\u0438\u0435\u043c \u0441\u0430\u043c\u043e\u0433\u043e DPhyp.<\/p>\n<p>\u0412 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u044f \u0441\u0442\u0430\u0440\u0430\u043b\u0441\u044f \u0431\u044b\u0442\u044c \u0431\u043b\u0438\u0436\u0435 \u043a \u0441\u0442\u0430\u0442\u044c\u0435 \u0438 \u0434\u0435\u043b\u0430\u0442\u044c \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u0438 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u2014 \u0442\u0430\u043a\u0438\u0435 \u0436\u0435, \u043a\u0430\u043a \u0438 \u0432 \u0441\u0442\u0430\u0442\u044c\u0435. \u041d\u043e \u0445\u043e\u0442\u044f \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u0432 \u044f\u0434\u0440\u0435 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430 \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043d\u0435\u0442, \u043e\u043d\u0438 \u0435\u0441\u0442\u044c \u043d\u0430 \u0443\u0440\u043e\u0432\u043d\u0435 \u043f\u0440\u0438\u043d\u044f\u0442\u0438\u044f \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0445 \u0440\u0435\u0448\u0435\u043d\u0438\u0439, \u0438 \u043f\u0435\u0440\u0432\u043e\u0435 \u0438\u0437 \u043d\u0438\u0445 \u043a\u0430\u0441\u0430\u0435\u0442\u0441\u044f \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432.<\/p>\n<h4>\u041f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432<\/h4>\n<p>\u041c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0430 \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f &#171;\u043b\u043e\u0448\u0430\u0434\u043a\u043e\u0439&#187; \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430, \u043b\u0435\u0436\u0430\u0442 \u0432 \u043e\u0441\u043d\u043e\u0432\u0435 \u0432\u0441\u0435 \u0435\u0433\u043e \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u0438. \u0420\u0430\u0437\u043d\u044b\u0435 \u0421\u0423\u0411\u0414 \u0434\u0435\u043b\u0430\u044e\u0442 \u044d\u0442\u043e \u043f\u043e-\u0440\u0430\u0437\u043d\u043e\u043c\u0443, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440:<\/p>\n<ul>\n<li>\n<p>DuckDB \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 <a href=\"https:\/\/github.com\/duckdb\/duckdb\/blob\/73f85abbbdd38555ef7afa08090dfb4b10120df8\/src\/include\/duckdb\/optimizer\/join_order\/join_relation.hpp#L24\" rel=\"noopener noreferrer nofollow\">\u0447\u0438\u0441\u043b\u0430 \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e \u0438 \u0445\u0440\u0430\u043d\u0438\u0442 \u0438\u0445 \u0432 \u043c\u0430\u0441\u0441\u0438\u0432\u0435<\/a>;<\/p>\n<\/li>\n<li>\n<p>YDB &#8212; <a href=\"https:\/\/github.com\/ydb-platform\/ydb\/blob\/c23202bc294cf703741f1ea6ac30786578a58920\/ydb\/library\/yql\/dq\/opt\/dq_opt_join_cost_based.cpp#L341\" rel=\"noopener noreferrer nofollow\"><code>std::bitset&lt;&gt;<\/code><\/a>;<\/p>\n<\/li>\n<li>\n<p>MySQL &#8212; <a href=\"https:\/\/github.com\/mysql\/mysql-server\/blob\/ff05628a530696bc6851ba6540ac250c7a059aa7\/sql\/join_optimizer\/node_map.h#L40\" rel=\"noopener noreferrer nofollow\">\u043f\u0440\u043e\u0441\u0442\u043e\u0435 8-\u0431\u0430\u0439\u0442\u043d\u043e\u0435 \u0447\u0438\u0441\u043b\u043e<\/a>.<\/p>\n<\/li>\n<\/ul>\n<p>\u041a\u0442\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0441 PostgreSQL, \u0437\u043d\u0430\u0435\u0442, \u0447\u0442\u043e \u0442\u0430\u043c \u0438\u043c\u0435\u0435\u0442\u0441\u044f <a href=\"https:\/\/github.com\/postgres\/postgres\/blob\/62a47aea1d8d8ea36e63fe6dd3d9891452a3f968\/src\/include\/nodes\/bitmapset.h#L49\" rel=\"noopener noreferrer nofollow\">\u0441\u0432\u043e\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0430 \u2014 <code>Bitmapset<\/code><\/a>. \u041e\u043d\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043f\u043e\u0432\u0441\u0435\u043c\u0435\u0441\u0442\u043d\u043e \u0438 \u0447\u0430\u0441\u0442\u043e \u0434\u043b\u044f \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f ID \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u0439. \u041a\u0430\u0437\u0430\u043b\u043e\u0441\u044c \u0431\u044b, &#171;\u0431\u0435\u0440\u0438, \u0440\u0430\u0437 \u0434\u0430\u044e\u0442&#187;, \u043d\u043e \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439 \u043d\u0430\u0434 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0430\u043c\u0438 \u2014 \u043e\u0433\u0440\u043e\u043c\u043d\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e, \u0430 <code>Bitmapset<\/code> \u0441\u043e\u0437\u0434\u0430\u0435\u0442 \u043d\u043e\u0432\u0443\u044e \u043a\u043e\u043f\u0438\u044e \u043a\u0430\u0436\u0434\u044b\u0439 \u0440\u0430\u0437 \u043a\u043e\u0433\u0434\u0430 \u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f, \u0442\u043e \u0435\u0441\u0442\u044c, \u044d\u0442\u043e \u043b\u0438\u0448\u043d\u0438\u0435 \u0430\u043b\u043b\u043e\u043a\u0430\u0446\u0438\u0438 \u043f\u0430\u043c\u044f\u0442\u0438. \u0412 PostgreSQL \u044d\u0442\u0430 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u0447\u0430\u0441\u0442\u043e \u043d\u0435 \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u0435\u0442, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u043f\u043e\u0441\u043b\u0435 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f <code>Bitmapset<\/code> \u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u0440\u0435\u0434\u043a\u043e, \u043d\u043e \u043d\u0435 \u0432 \u043c\u043e\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435, \u0438 \u044d\u0442\u043e \u043d\u0435 \u043a\u0440\u0438\u0442\u0438\u0447\u043d\u043e. \u041f\u0440\u043e\u0431\u043b\u0435\u043c\u0443 \u044f \u0440\u0435\u0448\u0438\u043b, \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0432 \u0441\u0440\u0430\u0437\u0443 \u0434\u0432\u0430 \u043f\u043e\u0434\u0445\u043e\u0434\u0430, \u2014 \u0441\u043e\u0437\u0434\u0430\u043b \u0434\u0432\u0430 \u0444\u0430\u0439\u043b\u0430, \u0433\u0434\u0435 \u0432 \u043e\u0434\u043d\u043e\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b <code>bitmapword<\/code> (\u0432\u043e\u0441\u044c\u043c\u0438\u0431\u0430\u0439\u0442\u043d\u043e\u0435 \u0447\u0438\u0441\u043b\u043e, \u043a\u0430\u043a \u0432 MySQL), \u0430 \u0432 \u0434\u0440\u0443\u0433\u043e\u043c \u2014 <code>Bitmapset<\/code> \u0434\u043b\u044f \u0441\u043b\u043e\u0436\u043d\u044b\u0445 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432. \u041d\u043e \u044d\u0442\u043e \u043f\u0440\u043e\u0438\u0437\u043e\u0448\u043b\u043e \u0432 \u0441\u0430\u043c\u043e\u043c \u043d\u0430\u0447\u0430\u043b\u0435 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438, \u043a\u043e\u0433\u0434\u0430 \u044f \u0435\u0449\u0435 \u043d\u0435 \u043e\u0441\u043e\u0431\u043e \u043f\u043e\u043d\u0438\u043c\u0430\u043b \u0442\u043e\u043d\u043a\u043e\u0441\u0442\u0435\u0439 \u0440\u0430\u0431\u043e\u0442\u044b \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0447\u0435\u0440\u0435\u0437 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u043d\u0430 \u0444\u0430\u0439\u043b \u0441 <code>Bitmapset<\/code> \u044f &#171;\u0437\u0430\u0431\u0438\u043b&#187; (\u0440\u0435\u0448\u0438\u043b \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u043f\u043e\u0437\u0436\u0435), \u0430 \u043f\u043e\u0442\u043e\u043c \u0438 \u0441\u043e\u0432\u0441\u0435\u043c \u0443\u0434\u0430\u043b\u0438\u043b. \u0421\u0435\u0439\u0447\u0430\u0441 \u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0430 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0447\u0438\u0441\u043b\u0430, \u0438 \u043f\u0440\u043e\u0431\u043b\u0435\u043c \u044d\u0442\u043e \u043d\u0435 \u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442, \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u0441\u043e \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e\u043c \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u044e\u0442\u0441\u044f \u043f\u0440\u043e\u0441\u0442\u044b\u043c\u0438 \u0431\u0438\u0442\u043e\u0432\u044b\u043c\u0438 <code>|<\/code>, <code>&amp;<\/code> \u0438 <code>~<\/code>. \u041d\u043e \u0435\u0441\u0442\u044c \u0438 \u0435\u0449\u0435 \u043f\u0430\u0440\u0430 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0432\u0430\u0436\u043d\u0430 \u0434\u043b\u044f \u0441\u0430\u043c\u043e\u0433\u043e \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0438\u0442\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430\u043c \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0430 \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f \u0441\u043e\u0441\u0435\u0434\u0435\u0439. \u0422\u0430\u043a\u0438\u0445 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439 \u043c\u043d\u043e\u0433\u043e, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u044f \u0432\u044b\u043d\u0435\u0441 \u0438\u0445 \u0432 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 <a href=\"https:\/\/github.com\/TantorLabs\/pg_dphyp\/blob\/b5406651b8f95743042be847b38c06b75bd23670\/simplebms.h\" rel=\"noopener noreferrer nofollow\">\u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u0447\u043d\u044b\u0439 \u0444\u0430\u0439\u043b<\/a>.<\/p>\n<p>\u0414\u0440\u0443\u0433\u0430\u044f \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u0430\u044f \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044f \u2014 \u0438\u0442\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u043e \u0432\u0441\u0435\u043c \u043f\u043e\u0434\u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0430\u043c, \u044d\u0442\u043e \u043d\u0443\u0436\u043d\u043e \u0434\u043b\u044f \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f csg\/cmp. \u0422\u0430\u043a \u043a\u0430\u043a \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u2014 \u044d\u0442\u043e \u0447\u0438\u0441\u043b\u043e, \u0442\u043e \u0438 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044f \u043f\u0440\u043e\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u0441 \u0447\u0438\u0441\u043b\u043e\u043c. \u0412 MySQL \u044d\u0442\u043e \u0440\u0435\u0448\u0438\u043b\u0438 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0431\u0438\u0442\u043e\u0432\u043e\u0433\u043e \u0442\u0440\u044e\u043a\u0430 <code>(init - state) &amp; state<\/code>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u0440\u0438 \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e\u043c \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u0438 \u0432\u0435\u0434\u0435\u0442 \u0441\u0435\u0431\u044f \u043a\u0430\u043a \u0438\u043d\u043a\u0440\u0435\u043c\u0435\u043d\u0442, \u043d\u043e \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u0438\u0437\u043c\u0435\u043d\u044f\u044e\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0431\u0438\u0442\u044b \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0430. \u042d\u0442\u0443 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e \u044f <a href=\"https:\/\/github.com\/TantorLabs\/pg_dphyp\/blob\/b5406651b8f95743042be847b38c06b75bd23670\/pg_dphyp.c#L541\" rel=\"noopener noreferrer nofollow\">\u0432\u0437\u044f\u043b \u0441\u0435\u0431\u0435<\/a>. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0434\u043b\u044f \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0430 <code>01010010<\/code> \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u043c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u043f\u043e\u0434\u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0430:<\/p>\n<pre><code>00000010    001 00010000    010 00010010    011 01000000    100 01000010    101 01010000    110 01010010    111 <\/code><\/pre>\n<p>\u0421\u043b\u0435\u0432\u0430 \u2014 \u0441\u0430\u043c\u043e \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e, \u0430 \u0441\u043f\u0440\u0430\u0432\u0430 \u2014 \u0435\u0433\u043e \u0431\u0438\u0442\u043e\u0432\u0430\u044f \u043c\u0430\u0441\u043a\u0430. \u0422\u0430\u043a \u043a\u0430\u043a \u043c\u044b \u0438\u0442\u0435\u0440\u0438\u0440\u0443\u0435\u043c\u0441\u044f \u0438\u043d\u043a\u0440\u0435\u043c\u0435\u043d\u0442\u043e\u043c, \u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0441\u043a\u0430\u0437\u0430\u0442\u044c, \u0447\u0442\u043e \u044d\u0442\u0430 \u0431\u0438\u0442\u043e\u0432\u0430\u044f \u043c\u0430\u0441\u043a\u0430 \u0432 \u0447\u0438\u0441\u043b\u043e\u0432\u043e\u043c \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0438 \u0442\u0430\u043a\u0436\u0435 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0435\u0442 \u0438 \u043d\u043e\u043c\u0435\u0440 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0438. \u0414\u0430\u043b\u0435\u0435 \u044d\u0442\u043e \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e \u0431\u0443\u0434\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0447\u0430\u0441\u0442\u043e.<\/p>\n<h4>DP-\u0442\u0430\u0431\u043b\u0438\u0446\u0430<\/h4>\n<p>DPhyp \u2014 \u044d\u0442\u043e \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f, \u0438 \u0443 \u043d\u0435\u0433\u043e \u0435\u0441\u0442\u044c \u0441\u0432\u043e\u044f \u0442\u0430\u0431\u043b\u0438\u0446\u0430 \u0434\u043b\u044f \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u043d\u0438\u044f \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f. \u0415\u0441\u043b\u0438 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043d\u0430 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0438\u0437 \u0441\u0442\u0430\u0442\u044c\u0438, \u0442\u043e \u0432\u0438\u0434\u043d\u043e, \u0447\u0442\u043e \u044d\u0442\u0430 \u0442\u0430\u0431\u043b\u0438\u0446\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0433\u043e\u0442\u043e\u0432\u044b\u0445 \u043f\u043b\u0430\u043d\u043e\u0432. \u0412 PostgreSQL \u0434\u043b\u044f \u0433\u043e\u0442\u043e\u0432\u044b\u0445 \u043f\u043b\u0430\u043d\u043e\u0432 (\u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0439 \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u0439) \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 <code>RelOptInfo<\/code>, \u0438 <em>\u043e\u043d\u0430 \u0443\u0436\u0435 \u0445\u0440\u0430\u043d\u0438\u0442\u0441\u044f \u0432 \u0445\u044d\u0448-\u0442\u0430\u0431\u043b\u0438\u0446\u0435<\/em>. \u0412\u0440\u043e\u0434\u0435 \u0431\u044b &#171;\u0432\u043e\u0442 \u0438 \u0445\u043e\u0440\u043e\u0448\u043e&#187;, \u043d\u0435 \u043d\u0430\u0434\u043e \u0434\u0443\u043c\u0430\u0442\u044c \u043e \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0438 \u0441\u0432\u043e\u0435\u0439, \u043d\u043e \u043d\u0435\u0442. \u041f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0443\u0436\u0435 \u0432 \u0441\u0430\u043c\u043e\u043c PostgreSQL, \u0430 \u0442\u043e\u0447\u043d\u0435\u0435, \u0435\u0433\u043e \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0435 <code>FULL JOIN<\/code>. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0442\u0438\u043f\u0430 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0439 \u0441\u0435\u0439\u0447\u0430\u0441 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u0435\u0434\u0438\u043a\u0430\u0442 \u0440\u0430\u0432\u0435\u043d\u0441\u0442\u0432\u0430, \u0430 \u0432 \u043a\u043e\u0434\u0435, \u043a\u043e\u0433\u0434\u0430 \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u0435\u0442\u0441\u044f \u0442\u0430\u043a\u043e\u0439 \u043f\u0440\u0435\u0434\u0438\u043a\u0430\u0442, \u0432\u0441\u0435 \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u044f \u0432 \u043b\u0435\u0432\u043e\u0439 \u0438 \u043f\u0440\u0430\u0432\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u043f\u043e\u043f\u0430\u0434\u0430\u044e\u0442 \u0432 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0435 \u0441\u043f\u0438\u0441\u043a\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u043b\u0430\u043d\u0438\u0440\u0443\u044e\u0442\u0441\u044f <em>\u043d\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e<\/em>. \u042d\u0442\u043e \u043f\u0440\u0438\u0447\u0438\u043d\u0430, \u043f\u043e \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0434\u043b\u044f \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0445 \u0442\u0430\u0431\u043b\u0438\u0446 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0441\u0432\u043e\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u0438\u043d\u0434\u0435\u043a\u0441\u0430\u0446\u0438\u0438 (\u0442\u043e \u0435\u0441\u0442\u044c \u0438\u043d\u0434\u0435\u043a\u0441\u044b \u0443\u0437\u043b\u043e\u0432 DPhyp \u043d\u0435 \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0442 \u0438\u043d\u0434\u0435\u043a\u0441\u0430\u043c \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u0439). \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0434\u0430\u0436\u0435 \u0435\u0441\u043b\u0438 \u044f \u0431\u0443\u0434\u0443 \u043d\u0430 \u0432\u0440\u0435\u043c\u044f \u043f\u0440\u0435\u0432\u0440\u0430\u0449\u0430\u0442\u044c <code>bitmapword<\/code> \u0432 <code>Bitmapset<\/code>, \u0447\u0442\u043e \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u0435\u0449\u0435 \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u043f\u0430\u043c\u044f\u0442\u0438, \u0442\u043e \u043d\u0435 \u0441\u043c\u043e\u0433\u0443 \u044d\u0442\u043e\u0433\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c, \u0435\u0441\u043b\u0438 \u0438\u043d\u0434\u0435\u043a\u0441\u044b \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u0439 \u043f\u0440\u0435\u0432\u044b\u0448\u0430\u044e\u0442 64 (\u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0434\u043b\u044f \u0432\u043e\u0441\u044c\u043c\u0438\u0431\u0430\u0439\u0442\u043d\u043e\u0433\u043e \u0447\u0438\u0441\u043b\u0430).<\/p>\n<p>\u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0434\u043b\u044f \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0441\u0432\u043e\u044f DP-\u0442\u0430\u0431\u043b\u0438\u0446\u0430. \u041f\u043e \u0444\u0430\u043a\u0442\u0443, \u044d\u0442\u043e \u0445\u044d\u0448-\u0442\u0430\u0431\u043b\u0438\u0446\u0430 \u2014 <code>HTAB *<\/code>, \u0447\u0430\u0441\u0442\u044c PostgreSQL. \u041e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u044c \u0435\u0435 \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u0432 \u043d\u0435\u0439 \u0445\u0440\u0430\u043d\u0438\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u043d\u0430 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430, \u0430 \u0435\u0435 \u043a\u043b\u044e\u0447 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430 \u0434\u043e\u043b\u0436\u0435\u043d \u0445\u0440\u0430\u043d\u0438\u0442\u0441\u044f \u0432 \u043d\u0430\u0447\u0430\u043b\u0435 \u044d\u0442\u043e\u0439 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b. \u0418\u0437-\u0437\u0430 \u044d\u0442\u043e\u0433\u043e \u0431\u044b\u043b\u0430 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0430 \u0435\u0449\u0435 \u043e\u0434\u043d\u0430 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 <code>HyperNode<\/code>, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0433\u0438\u043f\u0435\u0440\u0443\u0437\u0435\u043b. \u041d\u043e \u0441\u0435\u0439\u0447\u0430\u0441 \u044d\u0442\u043e \u043d\u0435 \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u0430\u0440\u0430 \u0438\u0437 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0430 \u0443\u0437\u043b\u043e\u0432 \u0438 \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u044f \u2014 \u0432 \u043d\u0435\u0439 \u0445\u0440\u0430\u043d\u044f\u0442\u0441\u044f \u0438 \u0434\u0440\u0443\u0433\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0435.<\/p>\n<h4>\u041f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u0435 \u0433\u0440\u0430\u0444\u0430<\/h4>\n<p>\u0414\u0440\u0443\u0433\u0430\u044f \u043d\u0435 \u043c\u0435\u043d\u0435\u0435 \u0432\u0430\u0436\u043d\u0430\u044f \u0437\u0430\u0434\u0430\u0447\u0430 \u2014 \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u0435 \u0441\u0430\u043c\u043e\u0433\u043e \u0433\u0440\u0430\u0444\u0430. \u041f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u0432 \u043e\u0442\u043b\u0438\u0447\u0438\u0435 \u043e\u0442 YDB \u0438\u043b\u0438 MySQL, \u0431\u0430\u043b\u043e\u043c \u044f \u043d\u0435 \u043f\u0440\u0430\u0432\u043b\u044e \u0438 \u0434\u043e\u043b\u0436\u0435\u043d \u043f\u043e\u0434\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0442\u044c\u0441\u044f \u043f\u043e\u0434 \u0441\u0430\u043c\u0443 \u0411\u0414. \u0421 \u043e\u0434\u043d\u043e\u0439 \u0441\u0442\u043e\u0440\u043e\u043d\u044b, \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u0432\u0440\u043e\u0434\u0435 \u043d\u0435\u0442, \u044f \u043c\u043e\u0433\u0443 \u043f\u0440\u043e\u0439\u0442\u0438\u0441\u044c \u043f\u043e \u0432\u0441\u0435\u043c \u043f\u0440\u0435\u0434\u0438\u043a\u0430\u0442\u0430\u043c, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u043c \u0432 \u0437\u0430\u043f\u0440\u043e\u0441\u0435, \u0438 \u0438\u0437 \u043d\u0438\u0445 \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0440\u0435\u0431\u0440\u0430. \u0421\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u0441\u0435\u0439\u0447\u0430\u0441 \u044d\u0442\u043e \u0442\u0430\u043a \u0438 \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u0442\u0441\u044f. \u041d\u043e \u0434\u044c\u044f\u0432\u043e\u043b \u043a\u0440\u043e\u0435\u0442\u0441\u044f \u0432 \u0434\u0435\u0442\u0430\u043b\u044f\u0445.<\/p>\n<p>\u0418\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u0434\u043b\u044f \u044d\u0442\u043e\u0439 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u043c\u043d\u0435 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0431\u0440\u0430\u0442\u044c \u0438\u0437 \u0442\u0440\u0435\u0445 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u043c\u0435\u0441\u0442:<\/p>\n<ol>\n<li>\n<p><code>PlannerInfo-&gt;join_info_list<\/code> \u2014 \u0441\u043f\u0438\u0441\u043e\u043a \u0438\u0437 non-INNER JOIN \u0443\u0441\u043b\u043e\u0432\u0438\u0439.<\/p>\n<\/li>\n<li>\n<p><code>RelOptInfo-&gt;joinclauses<\/code> \u2014 \u0441\u043f\u0438\u0441\u043e\u043a \u0438\u0437 \u043f\u0440\u0435\u0434\u0438\u043a\u0430\u0442\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 \u0431\u043e\u043b\u044c\u0448\u0435 \u043e\u0434\u043d\u043e\u0433\u043e \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u044f, \u0442\u043e \u0435\u0441\u0442\u044c \u043f\u043e \u0444\u0430\u043a\u0442\u0443 \u044d\u0442\u043e JOIN-\u0443\u0441\u043b\u043e\u0432\u0438\u0435.<\/p>\n<\/li>\n<li>\n<p><code>PlannerInfo-&gt;eq_classes<\/code> \u2014 \u0441\u043f\u0438\u0441\u043e\u043a \u043a\u043b\u0430\u0441\u0441\u043e\u0432 \u044d\u043a\u0432\u0438\u0432\u0430\u043b\u0435\u043d\u0442\u043d\u043e\u0441\u0442\u0438 (\u0434\u0430\u043b\u0435\u0435).<\/p>\n<\/li>\n<\/ol>\n<p>\u041f\u0435\u0440\u0432\u043e\u0435 \u2014 \u0441\u0430\u043c\u043e\u0435 \u043f\u0440\u043e\u0441\u0442\u043e\u0435. \u042d\u0442\u043e\u0442 \u0441\u043f\u0438\u0441\u043e\u043a \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0430\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u044e\u0442 \u0440\u0430\u0437\u043d\u044b\u0435 \u043d\u0435 INNER (\u0442. \u0435. LEFT\/RIGHT\/FULL \u0438 \u0442.\u0434.) JOIN&#8217;\u044b. \u0412 \u043d\u0435\u043c \u0435\u0441\u0442\u044c \u0434\u0432\u0435 \u043f\u0430\u0440\u044b \u0447\u0430\u0441\u0442\u0435\u0439: \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f \u0438 \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0435, \u043d\u0443\u0436\u043d\u044b\u0435 \u0434\u043b\u044f \u043d\u0435\u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0433\u043e \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f. \u041d\u0430 \u0432\u0441\u044f\u043a\u0438\u0439 \u0441\u043b\u0443\u0447\u0430\u0439 \u044f \u0441\u043e\u0437\u0434\u0430\u044e \u0433\u0438\u043f\u0435\u0440\u0440\u0435\u0431\u0440\u043e \u0434\u043b\u044f \u043e\u0431\u0435\u0438\u0445 \u043f\u0430\u0440. \u041f\u0440\u043e \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u0442\u043e\u0436\u0435 \u043d\u0430\u0434\u043e \u0441\u043a\u0430\u0437\u0430\u0442\u044c. \u0412\u0442\u043e\u0440\u043e\u0435 \u0438\u043c\u0435\u0435\u0442 \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0441 \u0442\u043e\u0447\u043a\u0438 \u0437\u0440\u0435\u043d\u0438\u044f <em>\u0441\u0430\u043c\u043e\u0433\u043e \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f<\/em> \u2014 \u043e\u043d\u043e \u043c\u043e\u0436\u0435\u0442 \u043d\u0435 \u0431\u044b\u0442\u044c \u0431\u0438\u043d\u0430\u0440\u043d\u044b\u043c, \u0430 \u043c\u043e\u0436\u0435\u0442 \u0438 \u0431\u044b\u0442\u044c, \u043d\u043e \u043f\u043e \u043e\u0431\u0435\u0438\u043c \u0441\u0442\u043e\u0440\u043e\u043d\u0430\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043e\u0434\u043d\u043e \u0438 \u0442\u043e \u0436\u0435 \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u0435. \u0414\u043b\u044f \u0442\u0430\u043a\u0438\u0445 \u043c\u043e\u043c\u0435\u043d\u0442\u043e\u0432 \u044f \u0434\u043e\u0431\u0430\u0432\u0438\u043b \u0441\u0432\u043e\u0435 \u043f\u043e\u043d\u044f\u0442\u0438\u0435 \u2014 cross join set (cjs). \u041f\u043e \u0444\u0430\u043a\u0442\u0443 \u044d\u0442\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0434\u043e\u043b\u0436\u043d\u044b \u0441\u043e\u0435\u0434\u0438\u043d\u0438\u0442\u044c\u0441\u044f \u043c\u0435\u0436\u0434\u0443 \u0441\u043e\u0431\u043e\u0439. \u0414\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u044f \u0432 cjs \u044f \u0441\u043e\u0437\u0434\u0430\u044e \u043f\u0440\u043e\u0441\u0442\u044b\u0435 \u0440\u0435\u0431\u0440\u0430 (\u043a\u0430\u0436\u0434\u044b\u0439 \u0441 \u043a\u0430\u0436\u0434\u044b\u043c). \u042d\u0442\u043e \u0440\u0435\u0448\u0430\u0435\u0442 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u043a\u0430\u043a\u0438\u0435-\u0442\u043e \u043f\u0440\u0435\u0434\u0438\u043a\u0430\u0442\u044b \u043c\u043e\u0433\u0443\u0442 \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c. DPsize, \u0442\u043e\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432 PostgreSQL \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e, \u0440\u0435\u0448\u0430\u0435\u0442 \u044d\u0442\u043e \u0437\u0430 \u0441\u0447\u0435\u0442 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442 \u043a\u0430\u0436\u0434\u0443\u044e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u0443\u044e \u043f\u0430\u0440\u0443.<\/p>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c 3 \u2014 \u043a\u043b\u0430\u0441\u0441\u044b \u044d\u043a\u0432\u0438\u0432\u0430\u043b\u0435\u043d\u0442\u043d\u043e\u0441\u0442\u0438. \u041a\u043b\u0430\u0441\u0441 \u044d\u043a\u0432\u0438\u0432\u0430\u043b\u0435\u043d\u0442\u043d\u043e\u0441\u0442\u0438 \u2014 \u044d\u0442\u043e \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c PostgreSQL, \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043e\u043d \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442, \u0447\u0442\u043e \u043a\u0430\u043a\u0438\u0435-\u0442\u043e \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0440\u0430\u0432\u043d\u044b \u0434\u0440\u0443\u0433 \u0434\u0440\u0443\u0433\u0443. \u042d\u0442\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f\u0445. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0432 <code>ORDER BY<\/code> \u0438\u043b\u0438 <code>GROUP BY<\/code> \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0438\u043c\u0435\u043d\u043d\u043e \u043a\u043b\u0430\u0441\u0441\u043e\u043c \u044d\u043a\u0432\u0438\u0432\u0430\u043b\u0435\u043d\u0442\u043d\u043e\u0441\u0442\u0438 (\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u0432\u044b\u0440\u043e\u0436\u0434\u0435\u043d\u043d\u044b\u043c, \u0441 \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u043c \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u043c). \u041d\u043e \u0441\u0435\u0439\u0447\u0430\u0441 \u043d\u0435 \u043e\u0431 \u044d\u0442\u043e\u043c, \u0430 \u0442\u043e\u043c, \u043a\u0430\u043a \u044d\u0442\u043e \u0441\u0442\u0440\u0435\u043b\u044f\u0435\u0442. \u0422\u0430\u043a\u0438\u0435 \u043a\u043b\u0430\u0441\u0441\u044b \u044d\u043a\u0432\u0438\u0432\u0430\u043b\u0435\u043d\u0442\u043d\u043e\u0441\u0442\u0438 \u043f\u043e\u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f, \u043a\u043e\u0433\u0434\u0430 \u0432 \u0437\u0430\u043f\u0440\u043e\u0441\u0435 \u0438\u043c\u0435\u044e\u0442\u0441\u044f \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0440\u0430\u0432\u0435\u043d\u0441\u0442\u0432\u0430, \u043f\u0440\u0438\u0447\u0435\u043c \u0434\u0430\u0436\u0435 \u043e\u0434\u043d\u043e\u0433\u043e \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043a\u043b\u0430\u0441\u0441\u0430 \u044d\u043a\u0432\u0438\u0432\u0430\u043b\u0435\u043d\u0442\u043d\u043e\u0441\u0442\u0438. \u041a\u0430\u043a \u0443\u0436\u0435 \u043c\u043e\u0436\u043d\u043e \u0434\u043e\u0433\u0430\u0434\u0430\u0442\u044c\u0441\u044f, \u043e\u043d\u0438 \u0442\u0430\u043a\u0436\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u0434\u043b\u044f JOIN&#8217;\u043e\u0432. \u041a\u043e\u0433\u0434\u0430 \u044f \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u044e \u043a\u043b\u0430\u0441\u0441 \u044d\u043a\u0432\u0438\u0432\u0430\u043b\u0435\u043d\u0442\u043d\u043e\u0441\u0442\u0438 \u0441 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u043c\u0438 \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u044f\u043c\u0438, \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u0433\u0438\u043f\u0435\u0440\u0440\u0435\u0431\u0440\u0430 \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0439 \u043f\u0430\u0440\u044b. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u043e\u0434\u043e\u0431\u043d\u044b\u0435 \u0437\u0430\u043f\u0440\u043e\u0441\u044b \u0441 \u043e\u0434\u043d\u0438\u043c\u0438 \u0440\u0430\u0432\u0435\u043d\u0441\u0442\u0432\u043e\u043c \u043f\u043e\u0434 \u043a\u0430\u043f\u043e\u0442\u043e\u043c \u043f\u0440\u0435\u0432\u0440\u0430\u0449\u0430\u044e\u0442\u0441\u044f \u0432 \u043a\u043b\u0438\u043a\u0443.<\/p>\n<blockquote>\n<p>\u041a\u043b\u0438\u043a\u0430 \u2014 \u044d\u0442\u043e \u0433\u0440\u0430\u0444, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0432\u0441\u0435 \u0443\u0437\u043b\u044b \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u044b \u0434\u0440\u0443\u0433 \u0441 \u0434\u0440\u0443\u0433\u043e\u043c.<\/p>\n<\/blockquote>\n<p>\u0414\u043b\u044f \u043f\u0440\u0438\u043c\u0435\u0440\u0430 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0442\u0430\u043a\u043e\u0439 \u0437\u0430\u043f\u0440\u043e\u0441:<\/p>\n<pre><code class=\"sql\">SELECT * FROM t1           JOIN t2 ON t1.x = t2.x AND t1.y &gt; t2.y          JOIN t3 ON t1.x + t2.x = t3.x     LEFT JOIN t4 ON t4.x = t3.x; <\/code><\/pre>\n<p>\u041e\u043d \u0441\u043e\u0447\u0435\u0442\u0430\u0435\u0442:<\/p>\n<ul>\n<li>\n<p>\u043a\u043b\u0430\u0441\u0441\u044b \u044d\u043a\u0432\u0438\u0432\u0430\u043b\u0435\u043d\u0442\u043d\u043e\u0441\u0442\u0438 <code>{t1.x, t2.x}<\/code> \u0438 <code>{t1.x + t2.x, t3.x}<\/code>;<\/p>\n<\/li>\n<li>\n<p>\u043f\u0440\u0435\u0434\u0438\u043a\u0430\u0442 JOIN <code>t1.y &gt; t2.y<\/code>;<\/p>\n<\/li>\n<li>\n<p>\u043e\u0441\u043e\u0431\u044b\u0439 JOIN-\u043f\u0440\u0435\u0434\u0438\u043a\u0430\u0442 <code>t4.x = t3.x<\/code>.<\/p>\n<\/li>\n<\/ul>\n<p>\u0418\u0437 \u043d\u0438\u0445 \u0431\u0443\u0434\u0443\u0442 \u0441\u043e\u0437\u0434\u0430\u043d\u044b \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0433\u0438\u043f\u0435\u0440\u0440\u0435\u0431\u0440\u0430:<\/p>\n<ul>\n<li>\n<p><code>{t1} - {t2}<\/code><\/p>\n<\/li>\n<li>\n<p><code>{t3} - {t1, t2}<\/code><\/p>\n<\/li>\n<li>\n<p><code>{t3} - {t4}<\/code><\/p>\n<\/li>\n<\/ul>\n<h4>\u041d\u0435\u0441\u0432\u044f\u0437\u043d\u044b\u0435 \u043f\u043e\u0434\u0433\u0440\u0430\u0444\u044b<\/h4>\n<p>\u0418\u0437 \u0432\u044b\u0448\u0435\u0441\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u0433\u043e \u0432\u044b\u0442\u0435\u043a\u0430\u0435\u0442 \u0435\u0449\u0435 \u043e\u0434\u043d\u0430 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430. \u0427\u0442\u043e \u0431\u0443\u0434\u0435\u0442, \u0435\u0441\u043b\u0438 \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0438 \u043d\u0435\u0441\u0432\u044f\u0437\u043d\u044b\u0439 \u0433\u0440\u0430\u0444 (\u0442\u043e \u0435\u0441\u0442\u044c \u043b\u0435\u0441)? \u0412 \u0442\u0430\u043a\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u0441\u043c\u043e\u0436\u0435\u0442 \u0441\u0434\u0435\u043b\u0430\u0442\u044c. \u0422\u043e\u0447\u043d\u0435\u0435, \u043e\u043d \u0441\u043e\u0437\u0434\u0430\u0441\u0442 \u043f\u043b\u0430\u043d \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0433\u0440\u0430\u0444\u0430 \u0432 \u043b\u0435\u0441\u0443, \u043d\u043e \u0434\u043b\u044f <em>\u0432\u0441\u0435\u0433\u043e<\/em> \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u0443\u0436\u0435 \u043d\u0435 \u0441\u043c\u043e\u0436\u0435\u0442. \u041f\u0440\u0438\u0447\u0435\u043c \u044d\u0442\u0430 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u044f\u0432\u0438\u0442\u044c\u0441\u044f \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0438\u0437-\u0437\u0430 <code>CROSS JOIN<\/code> \u0438\u043b\u0438 <code>,<\/code>, \u043d\u043e \u0438 \u0438\u0437-\u0437\u0430 \u0432\u043d\u0435\u0448\u043d\u0438\u0445 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u043f\u043e\u0434\u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432. \u041f\u0440\u0438\u0432\u0435\u0434\u0443 \u043f\u0440\u0438\u043c\u0435\u0440:<\/p>\n<pre><code class=\"sql\">SELECT * FROM t1 WHERE t1.x IN      (SELECT t2.x FROM t2, t3 WHERE t2.x = t1.x AND t3.x = t1.x); <\/code><\/pre>\n<p>\u0412 \u044d\u0442\u043e\u043c \u043f\u043e\u0434\u0437\u0430\u043f\u0440\u043e\u0441\u0435 <code>t1.x<\/code> \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u043c, \u043d\u043e \u043d\u0430 \u0432\u044b\u0445\u043e\u0434\u0435 \u0432 \u0433\u0440\u0430\u0444\u0435 \u0443 \u043d\u0430\u0441 \u043b\u0435\u0441, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0434\u043b\u044f <code>t1<\/code> \u0432 \u043f\u043e\u0434\u0437\u0430\u043f\u0440\u043e\u0441\u0435 \u043d\u0435\u0442 \u0438\u043d\u0434\u0435\u043a\u0441\u0430. \u041c\u043e\u0436\u043d\u043e \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0441\u0435\u0431\u0435 \u0438 \u0431\u043e\u043b\u0435\u0435 \u0441\u043b\u043e\u0436\u043d\u044b\u0435 \u0437\u0430\u043f\u0440\u043e\u0441\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043e\u0433\u0443\u0442 \u0443\u043f\u0430\u0441\u0442\u044c \u0442\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c. \u0412\u043e\u043e\u0431\u0449\u0435 \u044d\u0442\u043e \u044f \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u043b, \u043a\u043e\u0433\u0434\u0430 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u043b <code>\\d<\/code> (\u0447\u0442\u043e\u0431\u044b \u043e\u0442\u043e\u0431\u0440\u0430\u0437\u0438\u0442\u044c \u0432\u0441\u0435 \u0442\u0430\u0431\u043b\u0438\u0446\u044b) \u0432 <code>psql<\/code>, \u0438 \u043e\u043a\u0430\u0437\u0430\u043b\u043e\u0441\u044c, \u0447\u0442\u043e \u0442\u0430\u043c \u0431\u044b\u043b \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u044b\u0439 \u0437\u0430\u043f\u0440\u043e\u0441. \u0421 \u043e\u0434\u043d\u043e\u0439 \u0441\u0442\u043e\u0440\u043e\u043d\u044b, \u043d\u0430 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0435 \u043d\u0435\u0441\u0432\u044f\u0437\u043d\u044b\u0435 \u0433\u0440\u0430\u0444\u044b \u2014 \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0440\u0435\u0434\u043a\u043e\u0435 \u044f\u0432\u043b\u0435\u043d\u0438\u0435, \u0447\u0442\u043e\u0431\u044b \u0442\u0440\u0430\u0442\u0438\u0442\u044c \u0440\u0435\u0441\u0443\u0440\u0441\u044b \u0434\u043b\u044f \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0435\u043d\u0438\u044f \u043f\u043e\u0434\u043e\u0431\u043d\u043e\u0433\u043e, \u0441 \u0434\u0440\u0443\u0433\u043e\u0439 \u2014 \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043f\u043e\u0442\u0440\u0430\u0442\u0438\u0442\u044c \u043b\u0438\u0448\u043d\u0435\u0435 \u0432\u0440\u0435\u043c\u044f (\u043f\u0440\u043e\u0441\u0442\u043e \u0443\u0434\u0432\u043e\u0438\u0442\u044c \u0432\u0440\u0435\u043c\u044f \u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0431\u0435\u0437 \u043f\u043e\u043b\u0435\u0437\u043d\u043e\u0439 \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0438). \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0440\u0435\u0448\u0435\u043d\u0438\u0435, \u043a\u0430\u043a \u043f\u043e\u0441\u0442\u0443\u043f\u0430\u0442\u044c, \u044f \u043e\u0442\u0434\u0430\u043b \u043d\u0430 \u043e\u0442\u043a\u0443\u043f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f\u043c.<\/p>\n<p>\u0415\u0441\u0442\u044c \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 <code>pg_dphyp.cj_strategy<\/code>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0442\u044c \u0442\u0440\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f:<\/p>\n<ul>\n<li>\n<p><code>no<\/code> \u2013 \u0435\u0441\u043b\u0438 \u043d\u0435 \u0441\u043c\u043e\u0433\u043b\u0438 \u043f\u043e\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u043f\u043b\u0430\u043d, \u0442\u043e \u0432\u044b\u0437\u0432\u0430\u0442\u044c DPsize\/GEQO;<\/p>\n<\/li>\n<li>\n<p><code>pass<\/code> \u2013 \u0435\u0441\u043b\u0438 \u043d\u0435 \u0441\u043c\u043e\u0433\u043b\u0438 \u043f\u043e\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u043f\u043b\u0430\u043d, \u0442\u043e \u0441\u043e\u0431\u0440\u0430\u0442\u044c \u0432\u0441\u0435 \u0433\u043e\u0442\u043e\u0432\u044b\u0435 \u043f\u043b\u0430\u043d\u044b \u043d\u0435\u0441\u0432\u044f\u0437\u043d\u044b\u0445 \u0434\u0435\u0440\u0435\u0432\u044c\u0435\u0432 \u0438 \u043e\u0442\u0434\u0430\u0442\u044c DPsize\/GEQO \u043d\u0430 \u0444\u0438\u043d\u0430\u043b\u044c\u043d\u0443\u044e \u0434\u043e\u0440\u0430\u0431\u043e\u0442\u043a\u0443;<\/p>\n<\/li>\n<li>\n<p><code>detect<\/code> \u2013 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u0433\u0438\u043f\u0435\u0440\u0440\u0435\u0431\u0440\u0430 \u0434\u043b\u044f \u043d\u0435\u0441\u0432\u044f\u0437\u043d\u044b\u0445 \u0433\u0440\u0430\u0444\u043e\u0432 \u043f\u0435\u0440\u0435\u0434 \u043d\u0430\u0447\u0430\u043b\u043e\u043c \u0440\u0430\u0431\u043e\u0442\u044b.<\/p>\n<\/li>\n<\/ul>\n<p>\u041f\u0435\u0440\u0432\u044b\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043b\u0438\u0448\u043d\u0438\u043c, \u043d\u043e \u043d\u0430 \u0434\u0435\u043b\u0435 \u044d\u0442\u043e \u043d\u0435 \u0442\u0430\u043a, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u043f\u043b\u0430\u043d\u044b, \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u044b\u0435 \u0434\u043b\u044f \u044d\u0442\u0438\u0445 \u043f\u043e\u0434\u0433\u0440\u0430\u0444\u043e\u0432, \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u043d\u0435\u043e\u043f\u0442\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u043c\u0438 \u0432\u0432\u0438\u0434\u0443 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u043c\u0435\u0436\u0434\u0443 \u043d\u0435\u0441\u0432\u044f\u0437\u043d\u044b\u043c\u0438 \u043f\u043e\u0434\u0433\u0440\u0430\u0444\u0430\u043c\u0438 \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u043d\u0435\u044f\u0432\u043d\u044b\u0435 \u0441\u0432\u044f\u0437\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043e\u0433\u043b\u0438 \u0431\u044b \u043f\u043e\u043c\u043e\u0447\u044c \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043e\u043f\u0442\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0439 \u043f\u043b\u0430\u043d. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0438 \u0444\u0438\u043d\u0430\u043b\u044c\u043d\u044b\u0439 \u043f\u043b\u0430\u043d \u0442\u043e\u0436\u0435 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043d\u0435\u043e\u043f\u0442\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u043c.<\/p>\n<p>\u041e\u0441\u0442\u0430\u0435\u0442\u0441\u044f \u0432\u043e\u043f\u0440\u043e\u0441: \u043a\u0430\u043a \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u044c \u043d\u0435\u0441\u0432\u044f\u0437\u043d\u044b\u0435 \u0433\u0440\u0430\u0444\u044b? \u041e\u0442\u0432\u0435\u0442 \u043d\u0430 \u043f\u043e\u0432\u0435\u0440\u0445\u043d\u043e\u0441\u0442\u0438 \u2014 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e <a href=\"https:\/\/github.com\/TantorLabs\/pg_dphyp\/blob\/b5406651b8f95743042be847b38c06b75bd23670\/pg_dphyp.c#L953\" rel=\"noopener noreferrer nofollow\">\u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430 Union-Set<\/a>. \u0414\u043b\u044f \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u0430\u044f \u0432\u0435\u0440\u0441\u0438\u044f \u0441 \u0440\u0430\u043d\u0436\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u0438 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435\u043c \u043b\u0438\u0434\u0435\u0440\u0430 \u0443 \u043e\u0431\u0435\u0438\u0445 \u0447\u0430\u0441\u0442\u0435\u0439.<\/p>\n<h4>\u0425\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u0433\u0438\u043f\u0435\u0440\u0440\u0451\u0431\u0435\u0440<\/h4>\n<p>\u0415\u0449\u0435 \u043e\u0434\u043d\u0430 \u0437\u0430\u0434\u0430\u0447\u0430 \u2014 \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u0433\u0438\u043f\u0435\u0440\u0433\u0440\u0430\u0444\u0430. \u0413\u0440\u0430\u0444 \u043c\u043e\u0436\u043d\u043e \u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0432 \u0432\u0438\u0434\u0435 \u0441\u043f\u0438\u0441\u043a\u0430 \u0440\u0435\u0431\u0435\u0440, \u0430 \u043c\u043e\u0436\u043d\u043e \u0442\u0430\u0431\u043b\u0438\u0446\u0435\u0439 \u0441\u043c\u0435\u0436\u043d\u043e\u0441\u0442\u0438. \u041d\u043e \u0434\u043b\u044f \u0433\u0438\u043f\u0435\u0440\u0433\u0440\u0430\u0444\u0430 \u043e\u0441\u0442\u0430\u0435\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0435\u0440\u0432\u044b\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0442\u0430\u0431\u043b\u0438\u0446\u0443 \u0441\u043c\u0435\u0436\u043d\u043e\u0441\u0442\u0438 \u0434\u043b\u044f \u0433\u0438\u043f\u0435\u0440\u0440\u0435\u0431\u0435\u0440 (\u044d\u0442\u043e \u043d\u0435 1 \u044d\u043b\u0435\u043c\u0435\u043d\u0442, \u0430 \u0446\u0435\u043b\u043e\u0435 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e).<\/p>\n<p>\u0425\u043e\u0440\u043e\u0448\u043e, \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u043b\u0438\u0441\u044c, \u043d\u043e \u043c\u043e\u0436\u043d\u043e \u043b\u0438 \u043f\u0440\u0438\u043c\u0435\u043d\u0438\u0442\u044c \u043a\u0430\u043a\u0438\u0435-\u043d\u0438\u0431\u0443\u0434\u044c \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438? \u0414\u0430, \u043c\u043e\u0436\u043d\u043e. \u041f\u043e\u0447\u0442\u0438 \u0443 \u0432\u0441\u0435\u0445 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0439 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, <a href=\"https:\/\/github.com\/ydb-platform\/ydb\/blob\/c23202bc294cf703741f1ea6ac30786578a58920\/ydb\/library\/yql\/dq\/opt\/dq_opt_join_hypergraph.h#L84\" rel=\"noopener noreferrer nofollow\">YDB<\/a> \u0438 <a href=\"https:\/\/github.com\/mysql\/mysql-server\/blob\/ff05628a530696bc6851ba6540ac250c7a059aa7\/sql\/join_optimizer\/hypergraph.h#L69\" rel=\"noopener noreferrer nofollow\">MySQL<\/a>) \u0434\u043b\u044f \u043f\u0440\u043e\u0441\u0442\u044b\u0445 \u0433\u0438\u043f\u0435\u0440\u0440\u0435\u0431\u0435\u0440 \u0435\u0441\u0442\u044c \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044f. \u041d\u0430\u043f\u043e\u043c\u043d\u044e \u0435\u0449\u0435 \u0440\u0430\u0437, \u0447\u0442\u043e \u0443 \u043f\u0440\u043e\u0441\u0442\u043e\u0433\u043e \u0433\u0438\u043f\u0435\u0440\u0440\u0435\u0431\u0440\u0430 \u043f\u043e \u043e\u0431\u0435\u0438\u043c \u0441\u0442\u043e\u0440\u043e\u043d\u0430\u043c \u043d\u0430\u0445\u043e\u0434\u044f\u0442\u0441\u044f \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0430 \u0438\u0437 \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0433\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430. \u042d\u0442\u0430 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044f \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u043c\u044b \u0445\u0440\u0430\u043d\u0438\u043c \u0432\u0441\u0435 \u0443\u0437\u043b\u044b, \u0441 \u043a\u043e\u0442\u043e\u0440\u044b\u043c\u0438 \u043d\u0430\u0441 \u0441\u0432\u044f\u0437\u044b\u0432\u0430\u044e\u0442 \u043f\u0440\u043e\u0441\u0442\u044b\u0435 \u0433\u0438\u043f\u0435\u0440\u0440\u0435\u0431\u0440\u0430, \u0432 \u043e\u0434\u043d\u043e\u043c \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u043c \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0435. \u0414\u0430\u043b\u0435\u0435 \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u0440\u0430\u0431\u043e\u0442\u044b \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u0443\u044e \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044e \u0434\u043b\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0441\u0440\u0430\u0437\u0443 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u0440\u0435\u0431\u0435\u0440. \u0422\u0430\u043a\u043e\u0435 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u0447\u0430\u0441\u0442\u043e \u043d\u0430\u0437\u044b\u0432\u0430\u044e\u0442 <code>simple neighborhood<\/code>, \u0434\u0443\u043c\u0430\u044e, \u043f\u043e\u043d\u044f\u0442\u043d\u043e, \u043f\u043e\u0447\u0435\u043c\u0443. \u042f \u0442\u043e\u0436\u0435 \u0432\u0437\u044f\u043b \u0441\u0435\u0431\u0435 \u044d\u0442\u0443 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044e, \u043d\u043e \u043f\u043e\u0448\u0435\u043b \u0447\u0443\u0442\u044c \u0434\u0430\u043b\u044c\u0448\u0435, \u0438 \u0445\u0440\u0430\u043d\u044e \u044d\u0442\u043e\u0442 <code>simple neighborhood<\/code> \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0433\u0438\u043f\u0435\u0440\u0443\u0437\u043b\u0430 (\u0432 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0435 <code>HyperNode<\/code>). \u042d\u0442\u043e \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0443\u043f\u0440\u043e\u0449\u0430\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0443, \u0442\u0430\u043a \u043a\u0430\u043a \u043d\u0435 \u043d\u0443\u0436\u043d\u043e \u0442\u0440\u0430\u0442\u0438\u0442\u044c \u0432\u0440\u0435\u043c\u044f \u043d\u0430 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u0438\u0442\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u043e \u0443\u0437\u043b\u0430\u043c, \u0430 \u043c\u0435\u0441\u0442\u0430 \u043e\u043d \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442 \u0432\u0441\u0435\u0433\u043e 8 \u0431\u0430\u0439\u0442.<\/p>\n<p>\u041f\u043e \u0441\u043b\u043e\u0436\u043d\u044b\u043c \u0433\u0438\u043f\u0435\u0440\u0440\u0435\u0431\u0440\u0430\u043c \u2014 \u0442\u043e\u0436\u0435 \u043d\u0435 \u0431\u0435\u0437 \u0437\u0430\u043c\u0435\u0447\u0430\u043d\u0438\u0439. \u0420\u0430\u043d\u0435\u0435 \u044f \u0441\u043a\u0430\u0437\u0430\u043b, \u0447\u0442\u043e \u0434\u043b\u044f \u043e\u0434\u043d\u043e\u0433\u043e \u0438 \u0442\u043e\u0433\u043e \u0436\u0435 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0432 \u0442\u0435\u043a\u0441\u0442\u0435 \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0441\u043e\u0437\u0434\u0430\u043d\u043e \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u043e\u0432 <code>RestrictInfo<\/code> (\u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0432 \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u043c \u043a\u043e\u0434\u0435), \u043d\u043e \u0441 \u0440\u0430\u0437\u043d\u044b\u043c \u043d\u0430\u0431\u043e\u0440\u043e\u043c \u0438\u043d\u0434\u0435\u043a\u0441\u043e\u0432 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0445 \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u0439. \u0422\u043e\u0433\u0434\u0430 \u0436\u0435 \u044f \u0438 \u0441\u043a\u0430\u0437\u0430\u043b, \u0447\u0442\u043e \u043d\u0435 \u043c\u043e\u0433\u0443 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u044d\u0442\u0438 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0438\u043d\u0434\u0435\u043a\u0441\u044b, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u043c\u043e\u0433\u0443 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u0434\u0443\u0431\u043b\u0438\u043a\u0430\u0442\u043e\u0432. \u0421 \u044d\u0442\u0438\u043c \u044f \u0440\u0435\u0448\u0438\u043b \u0431\u043e\u0440\u043e\u0442\u044c\u0441\u044f \u043e\u0431\u044b\u0447\u043d\u043e\u0439 <a href=\"https:\/\/github.com\/ashenBlade\/pg_dphyp\/blob\/0cdc5b410d3bce41398a6646c576cca77994b6e3\/pg_dphyp.c#L1096\" rel=\"noopener noreferrer nofollow\">\u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u043e\u0439<\/a>: \u0432\u0441\u0435 \u0440\u0435\u0431\u0440\u0430 \u044f \u0445\u0440\u0430\u043d\u044e \u0432 \u043e\u0442\u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u043c \u0432\u0438\u0434\u0435, \u0438 \u0435\u0441\u043b\u0438 \u043f\u0440\u0438 \u0432\u0441\u0442\u0430\u0432\u043a\u0435 \u043d\u0430\u0445\u043e\u0436\u0443 \u0440\u0430\u0432\u043d\u043e\u0435 \u0440\u0435\u0431\u0440\u043e, \u0442\u043e \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u0434\u0435\u043b\u0430\u044e (\u043d\u0435 \u0432\u0441\u0442\u0430\u0432\u043b\u044f\u044e).<\/p>\n<h4>\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043f\u043b\u0430\u043d\u0430<\/h4>\n<p>\u042d\u0442\u0430 \u0441\u0442\u0430\u0442\u044c\u044f \u2014 \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u043e \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u043d\u0430 \u0433\u0438\u043f\u0435\u0440\u0433\u0440\u0430\u0444\u0430\u0445, \u043d\u043e \u0438 \u043f\u0440\u043e \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e\u0435 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043f\u043b\u0430\u043d\u0430. \u042d\u0442\u043e \u0432\u0430\u0436\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442, \u0442\u0430\u043a \u043a\u0430\u043a \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 JOIN-\u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u044b \u043d\u0435 \u043a\u043e\u043c\u043c\u0443\u0442\u0430\u0442\u0438\u0432\u043d\u044b (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, <code>LEFT JOIN<\/code>), \u0438 \u0435\u0441\u043b\u0438 \u044d\u0442\u043e \u043d\u0435 \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u0442\u044c, \u0442\u043e, \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u043f\u0440\u0438\u0434\u0435\u0442\u0441\u044f \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u0442\u044c \u043e\u0434\u043d\u0443 \u0438 \u0442\u0443 \u0436\u0435 \u043f\u0430\u0440\u0443 \u0434\u0432\u0430\u0436\u0434\u044b. \u041d\u043e \u044d\u0442\u043e \u0435\u0449\u0435 \u043d\u0435 \u0432\u0441\u0435. \u041d\u0430\u043f\u043e\u043c\u043d\u044e, \u0447\u0442\u043e DPsize \u043f\u043b\u043e\u0442\u043d\u043e &#171;\u0437\u0430\u0441\u0435\u043b&#187; \u0432 \u043a\u043e\u0434\u043e\u0432\u043e\u0439 \u0431\u0430\u0437\u0435 \u2014 \u043d\u0430\u0441\u0442\u043e\u043b\u044c\u043a\u043e, \u0447\u0442\u043e \u043d\u0435\u043b\u044c\u0437\u044f \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043f\u043b\u0430\u043d \u0434\u043b\u044f <code>i<\/code> \u0442\u0430\u0431\u043b\u0438\u0446 \u0431\u0435\u0437 \u043d\u0430\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u044f \u043e\u043f\u0442\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043f\u043b\u0430\u043d\u0430 \u0434\u043b\u044f \u043d\u0438\u0436\u0435\u043b\u0435\u0436\u0430\u0449\u0438\u0445.<\/p>\n<p>\u0418\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e \u044f \u0442\u0430\u043a \u0438 \u0434\u0435\u043b\u0430\u043b: \u043f\u043e\u0441\u043b\u0435 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043f\u043b\u0430\u043d\u0430 \u0432\u044b\u0437\u044b\u0432\u0430\u043b <code>set_cheapest<\/code> \u0434\u043b\u044f \u043d\u0430\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u044f \u043b\u0443\u0447\u0448\u0435\u0433\u043e \u043f\u043b\u0430\u043d\u0430, \u0438 \u0434\u0430\u043b\u044c\u0448\u0435 \u043c\u043e\u0433 \u0441\u043f\u043e\u043a\u043e\u0439\u043d\u043e \u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c <code>make_join_rel<\/code> \u0434\u043b\u044f \u0434\u0440\u0443\u0433\u0438\u0445. \u041d\u043e \u0435\u0441\u043b\u0438 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0432\u043d\u0443\u0442\u0440\u044c, \u0442\u043e \u0443\u0432\u0438\u0434\u0438\u043c, \u0447\u0442\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u0442 \u043f\u043e \u0432\u0441\u0435\u043c \u043d\u0430\u0439\u0434\u0435\u043d\u043d\u044b\u043c \u043f\u0443\u0442\u044f\u043c \u0434\u043b\u044f \u043d\u0430\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u044f \u043b\u0443\u0447\u0448\u0435\u0433\u043e, \u0442\u043e \u0435\u0441\u0442\u044c \u043f\u043e \u043c\u0435\u0440\u0435 \u0440\u0430\u0431\u043e\u0442\u044b \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u0432\u0440\u0435\u043c\u044f, \u0437\u0430\u0442\u0440\u0430\u0447\u0435\u043d\u043d\u043e\u0435 \u043d\u0430 \u0435\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435, \u0431\u0443\u0434\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0442\u044c\u0441\u044f. \u0418\u0437-\u0437\u0430 \u044d\u0442\u043e\u0433\u043e \u044f \u043f\u0435\u0440\u0435\u0448\u0435\u043b \u043d\u0430 DPsize-like \u043f\u043e\u0434\u0445\u043e\u0434. \u0414\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0433\u0438\u043f\u0435\u0440\u0443\u0437\u043b\u0430 \u044f \u0432\u0435\u0434\u0443 \u0441\u043f\u0438\u0441\u043e\u043a \u043f\u0430\u0440 \u0433\u0438\u043f\u0435\u0440\u0443\u0437\u043b\u043e\u0432-\u043a\u0430\u043d\u0434\u0438\u0434\u0430\u0442\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043e\u0433\u0443\u0442 \u0435\u0433\u043e \u0441\u043e\u0437\u0434\u0430\u0442\u044c, \u0430 \u0432 \u043a\u043e\u043d\u0446\u0435 \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u0432\u043d\u043e \u0432\u044b\u0437\u044b\u0432\u0430\u044e \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043f\u043b\u0430\u043d\u0430, \u044d\u0434\u0430\u043a\u0438\u0439 pull-\u043f\u043e\u0434\u0445\u043e\u0434. \u0414\u0430, \u0435\u0441\u0442\u044c \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e\u0441\u0442\u044c, \u0447\u0442\u043e \u0432\u043d\u0443\u0442\u0440\u0438 \u043e\u043a\u0430\u0436\u0435\u0442\u0441\u044f \u043f\u0430\u0440\u0430, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043d\u0435 \u0441\u043c\u043e\u0436\u0435\u0442 \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043f\u043b\u0430\u043d \u0437\u0430\u043f\u0440\u043e\u0441\u0430, \u0438 \u044f \u043f\u043e\u0442\u0440\u0430\u0447\u0443 \u0432\u0440\u0435\u043c\u044f \u0432\u043f\u0443\u0441\u0442\u0443\u044e, \u043d\u043e \u043d\u0430\u043a\u043b\u0430\u0434\u043d\u044b\u0435 \u0440\u0430\u0441\u0445\u043e\u0434\u044b \u043d\u0430 \u0438\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u044b\u0439 \u043f\u043e\u0434\u0445\u043e\u0434 (\u0441 \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u044b\u043c \u0432\u044b\u0437\u043e\u0432\u043e\u043c <code>set_cheapest<\/code>) \u0432\u0441\u0435 \u0436\u0435 \u0431\u043e\u043b\u044c\u0448\u0435, \u0430 \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e\u0441\u0442\u044c \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u043a\u0430\u043a\u0430\u044f-\u0442\u043e \u043f\u0430\u0440\u0430 \u0433\u0438\u043f\u0435\u0440\u0443\u0437\u043b\u043e\u0432 \u043d\u0435 \u0441\u043e\u0437\u0434\u0430\u0441\u0442 \u043f\u043e\u043b\u0435\u0437\u043d\u043e\u0433\u043e JOIN&#8217;\u0430 \u043a\u0440\u0430\u0439\u043d\u0435 \u043c\u0430\u043b\u0430 \u0438\u0437-\u0437\u0430 \u0441\u0430\u043c\u043e\u0439 \u0438\u0434\u0435\u0438 DPhyp.<\/p>\n<h3>\u041e\u043f\u0442\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u0438\u0442\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u043e \u0441\u043e\u0441\u0435\u0434\u044f\u043c<\/h3>\n<p>\u041d\u0430\u043a\u043e\u043d\u0435\u0446-\u0442\u043e \u043c\u044b \u043f\u0440\u0438\u0448\u043b\u0438 \u043a \u0441\u0430\u043c\u043e\u0439 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u2014 \u043a\u0430\u043a \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u043e\u0431\u0445\u043e\u0434\u0438\u0442\u044c \u0441\u043e\u0441\u0435\u0434\u0435\u0439. \u0412 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0435 \u043c\u043e\u0436\u043d\u043e \u0432\u044b\u0434\u0435\u043b\u0438\u0442\u044c \u0442\u0440\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u0438, \u0437\u0430\u043d\u044f\u0442\u044b\u0435 \u043f\u0435\u0440\u0435\u0431\u043e\u0440\u043e\u043c \u043f\u0430\u0440 csg\/cmp, \u0438 \u0432 \u043d\u0438\u0445 \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u0442\u044c \u0441\u043e\u0441\u0435\u0434\u0435\u0439 \u0446\u0435\u043b\u044b\u0445 \u0447\u0435\u0442\u044b\u0440\u0435 \u0440\u0430\u0437\u0430. \u0412\u0441\u0435 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u0431\u043e\u043b\u0435\u0435 \u0443\u0441\u0442\u0440\u0430\u0448\u0430\u044e\u0449\u0438\u043c, \u043a\u043e\u0433\u0434\u0430 \u043e\u0441\u043e\u0437\u043d\u0430\u0435\u0448\u044c, \u0447\u0442\u043e \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u0430\u0433\u0430\u0435\u0442 \u0438\u0442\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u043e \u0432\u0441\u0435\u043c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u043c \u043f\u043e\u0434\u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0430\u043c \u0441\u043e\u0441\u0435\u0434\u0435\u0439 (<a href=\"https:\/\/en.wikipedia.org\/wiki\/Power_set\" rel=\"noopener noreferrer nofollow\">power set<\/a> \u0431\u0435\u0437 \u043f\u0443\u0441\u0442\u043e\u0433\u043e \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0430) \u2014 \u044d\u0442\u043e <img decoding=\"async\" class=\"formula inline\" source=\"2^i\" alt=\"2^i\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/9\/91\/91c\/91c474acddeedae9e86913ee8bb17ce0.svg\" width=\"12\" height=\"12\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/9\/91\/91c\/91c474acddeedae9e86913ee8bb17ce0.svg 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/formulas\/9\/91\/91c\/91c474acddeedae9e86913ee8bb17ce0.svg 781w\" loading=\"lazy\" decode=\"async\"\/> \u043a\u043e\u043c\u0431\u0438\u043d\u0430\u0446\u0438\u0439.<\/p>\n<p>\u0414\u0430, \u043c\u044b \u0434\u043e\u0431\u0430\u0432\u0438\u043b\u0438 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044e \u043f\u0440\u043e\u0441\u0442\u043e\u0433\u043e \u0441\u043e\u0441\u0435\u0434\u0441\u0442\u0432\u0430 (simple neighborhood), \u043d\u043e \u0432\u0441\u0435 \u0436\u0435 \u043d\u0430\u043c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0432\u0441\u0435 \u0443\u0437\u043b\u044b \u0432 \u043f\u043e\u0434\u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0430\u0445 (\u043a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u0435\u0441\u0442\u044c \u0438 \u043e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u0447\u0430\u0441\u0442\u044c, \u043a \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u044d\u0442\u043e \u043f\u043e\u0434\u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u2014 \u0434\u043b\u044f \u043d\u0435\u0433\u043e \u0442\u043e\u0436\u0435 \u043d\u0430\u0434\u043e \u043f\u043e\u0441\u0447\u0438\u0442\u0430\u0442\u044c). \u0412\u0441\u0435\u0433\u043e \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f <img decoding=\"async\" class=\"formula inline\" source=\"\\sum_{k = 1}^{n}kC_{n}^{k}\" alt=\"\\sum_{k = 1}^{n}kC_{n}^{k}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/b\/b9\/b91\/b9124ecdfbfbdae8551f48e8fefcda7f.svg\" width=\"56\" height=\"48\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/b\/b9\/b91\/b9124ecdfbfbdae8551f48e8fefcda7f.svg 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/formulas\/b\/b9\/b91\/b9124ecdfbfbdae8551f48e8fefcda7f.svg 781w\" loading=\"lazy\" decode=\"async\"\/> \u0443\u0437\u043b\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0430\u0434\u043e \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0432 \u0441\u0443\u043c\u043c\u0435 \u0434\u043b\u044f \u0432\u0441\u0435\u0445 \u043f\u043e\u0434\u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432.<\/p>\n<blockquote>\n<p>\u041a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0440\u0430\u0437\u043d\u044b\u0445 \u043a\u043e\u043c\u0431\u0438\u043d\u0430\u0446\u0438\u0439 \u043f\u043e\u0434\u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432 \u0438\u0437 <img decoding=\"async\" class=\"formula inline\" source=\"k\" alt=\"k\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/8\/8c\/8ce\/8ce4b16b22b58894aa86c421e8759df3.svg\" width=\"12\" height=\"12\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/8\/8c\/8ce\/8ce4b16b22b58894aa86c421e8759df3.svg 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/formulas\/8\/8c\/8ce\/8ce4b16b22b58894aa86c421e8759df3.svg 781w\" loading=\"lazy\" decode=\"async\"\/> \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 <img decoding=\"async\" class=\"formula inline\" source=\"C_{n}^{k}\" alt=\"C_{n}^{k}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/a\/a4\/a4b\/a4b1204c00d8d4acd94ffd1ff7a4f5b5.svg\" width=\"16\" height=\"16\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/a\/a4\/a4b\/a4b1204c00d8d4acd94ffd1ff7a4f5b5.svg 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/formulas\/a\/a4\/a4b\/a4b1204c00d8d4acd94ffd1ff7a4f5b5.svg 781w\" loading=\"lazy\" decode=\"async\"\/>, \u043d\u043e \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043f\u043e\u0434\u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0430 \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u043c <img decoding=\"async\" class=\"formula inline\" source=\"k\" alt=\"k\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/8\/8c\/8ce\/8ce4b16b22b58894aa86c421e8759df3.svg\" width=\"12\" height=\"12\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/8\/8c\/8ce\/8ce4b16b22b58894aa86c421e8759df3.svg 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/formulas\/8\/8c\/8ce\/8ce4b16b22b58894aa86c421e8759df3.svg 781w\" loading=\"lazy\" decode=\"async\"\/> \u043d\u0443\u0436\u043d\u043e \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u043a\u0430\u0436\u0434\u044b\u0439 \u0435\u0433\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442, \u0430 \u0438\u0445 <img decoding=\"async\" class=\"formula inline\" source=\"k\" alt=\"k\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/8\/8c\/8ce\/8ce4b16b22b58894aa86c421e8759df3.svg\" width=\"12\" height=\"12\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/8\/8c\/8ce\/8ce4b16b22b58894aa86c421e8759df3.svg 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/formulas\/8\/8c\/8ce\/8ce4b16b22b58894aa86c421e8759df3.svg 781w\" loading=\"lazy\" decode=\"async\"\/>. \u0414\u0440\u0443\u0433\u0438\u043c\u0438 \u0441\u043b\u043e\u0432\u0430\u043c\u0438, \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u0432\u043e \u0432\u0441\u0435\u0445 \u043f\u043e\u0434\u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0430\u0445 \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u043c <img decoding=\"async\" class=\"formula inline\" source=\"k\" alt=\"k\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/8\/8c\/8ce\/8ce4b16b22b58894aa86c421e8759df3.svg\" width=\"12\" height=\"12\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/8\/8c\/8ce\/8ce4b16b22b58894aa86c421e8759df3.svg 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/formulas\/8\/8c\/8ce\/8ce4b16b22b58894aa86c421e8759df3.svg 781w\" loading=\"lazy\" decode=\"async\"\/> \u0440\u0430\u0432\u043d\u043e <img decoding=\"async\" class=\"formula inline\" source=\"kC_{n}^{k}\" alt=\"kC_{n}^{k}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/8\/85\/85b\/85be68da16e1bbaff7749e6c80ba8268.svg\" width=\"32\" height=\"16\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/8\/85\/85b\/85be68da16e1bbaff7749e6c80ba8268.svg 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/formulas\/8\/85\/85b\/85be68da16e1bbaff7749e6c80ba8268.svg 781w\" loading=\"lazy\" decode=\"async\"\/>.<\/p>\n<\/blockquote>\n<p>\u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043d\u0430 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u0441\u043e\u0441\u0435\u0434\u0441\u0442\u0432\u0430:<\/p>\n<p><img decoding=\"async\" class=\"formula\" source=\"E\\downarrow'(S, X) = \\{v|(u, v) \\in E, u \\subseteq S, v \\cap S = \\emptyset, v \\cap X = \\emptyset \\} \\\\E\\downarrow(S, X) = minimal\\ set: \\forall_{v\\in E\\downarrow'(S,X)} \\exists v' \\in E\\downarrow(S,X): v' \\subseteq v \\\\\\mathcal{N}(X, X) = \\cup_{v \\in E\\downarrow(S, X)} min(v)\" alt=\"E\\downarrow'(S, X) = \\{v|(u, v) \\in E, u \\subseteq S, v \\cap S = \\emptyset, v \\cap X = \\emptyset \\} \\\\E\\downarrow(S, X) = minimal\\ set: \\forall_{v\\in E\\downarrow'(S,X)} \\exists v' \\in E\\downarrow(S,X): v' \\subseteq v \\\\\\mathcal{N}(X, X) = \\cup_{v \\in E\\downarrow(S, X)} min(v)\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/3\/39\/395\/395530697cfcdb273fc762994a39eb42.svg\" width=\"488\" height=\"72\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/3\/39\/395\/395530697cfcdb273fc762994a39eb42.svg 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/formulas\/3\/39\/395\/395530697cfcdb273fc762994a39eb42.svg 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<p>\u0412\u043d\u0430\u0447\u0430\u043b\u0435 \u0441\u043e\u0437\u0434\u0430\u0435\u0442\u0441\u044f \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e <img decoding=\"async\" class=\"formula inline\" source=\"E\\downarrow'\" alt=\"E\\downarrow'\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/d\/dd\/dd2\/dd2c1b78f99c771bc834d3bdb2fdbfda.svg\" width=\"32\" height=\"16\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/d\/dd\/dd2\/dd2c1b78f99c771bc834d3bdb2fdbfda.svg 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/formulas\/d\/dd\/dd2\/dd2c1b78f99c771bc834d3bdb2fdbfda.svg 781w\" loading=\"lazy\" decode=\"async\"\/> \u2014 \u0433\u0438\u043f\u0435\u0440\u0440\u0451\u0431\u0440\u0430, \u043f\u0440\u0438\u043d\u0430\u0434\u043b\u0435\u0436\u0430\u0449\u0438\u0435 \u0442\u0435\u043a\u0443\u0449\u0435\u043c\u0443 \u0433\u0438\u043f\u0435\u0440\u0443\u0437\u043b\u0443 \u0438 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u044e\u0449\u0438\u0435 \u0437\u0430 \u0435\u0433\u043e \u043f\u0440\u0435\u0434\u0435\u043b\u044b. \u0417\u0430\u0442\u0435\u043c \u044d\u0442\u043e \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u0441\u0436\u0438\u043c\u0430\u0435\u0442\u0441\u044f \u0434\u043e \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0433\u043e, \u0438 \u0438\u0437 \u043d\u0435\u0433\u043e \u0432\u044b\u0431\u0438\u0440\u0430\u044e\u0442\u0441\u044f \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u0442\u0435\u043b\u0438 (\u043d\u0430\u0438\u043c\u0435\u043d\u044c\u0448\u0438\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b). \u0412\u0442\u043e\u0440\u043e\u0439 \u0448\u0430\u0433, \u043d\u0430\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u0435 <em>\u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0433\u043e<\/em> \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0430, \u2014 \u044d\u0442\u043e \u0441\u043b\u043e\u0436\u043d\u0430\u044f \u0432\u044b\u0447\u0438\u0441\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u0430\u044f \u0437\u0430\u0434\u0430\u0447\u0430, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0434\u043b\u044f \u0435\u0435 \u043e\u0431\u043b\u0435\u0433\u0447\u0435\u043d\u0438\u044f \u043c\u043d\u043e\u0433\u0438\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044e: \u043f\u043e \u043c\u0435\u0440\u0435 \u043e\u0431\u0445\u043e\u0434\u0430 \u0443\u0437\u043b\u043e\u0432 \u0432 \u0441\u043e\u0441\u0435\u0434\u0438 \u043f\u043e\u043f\u0430\u0434\u0430\u044e\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u0442\u0435\u043b\u0438 (\u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0435 \u0443\u0437\u043b\u044b), \u0430 \u043f\u0435\u0440\u0435\u0434 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435\u043c \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u044e\u0442, \u0447\u0442\u043e \u043e\u0447\u0435\u0440\u0435\u0434\u043d\u043e\u0439 \u0433\u0438\u043f\u0435\u0440\u0443\u0437\u0435\u043b \u043d\u0435 \u043f\u0435\u0440\u0435\u0441\u0435\u043a\u0430\u0435\u0442\u0441\u044f \u0441 \u0443\u0436\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u043d\u044b\u043c\u0438 \u0441\u043e\u0441\u0435\u0434\u044f\u043c\u0438. \u042d\u0442\u043e\u0442 \u043f\u043e\u0434\u0445\u043e\u0434 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u043a\u0430\u043a \u0441\u0430\u043c <a href=\"https:\/\/github.com\/mysql\/mysql-server\/blob\/ff05628a530696bc6851ba6540ac250c7a059aa7\/sql\/join_optimizer\/subgraph_enumeration.h#L314\" rel=\"noopener noreferrer nofollow\">MySQL<\/a>, \u0442\u0430\u043a \u0438 <a href=\"https:\/\/github.com\/ydb-platform\/ydb\/blob\/c23202bc294cf703741f1ea6ac30786578a58920\/ydb\/library\/yql\/dq\/opt\/dq_opt_dphyp_solver.h#L438\" rel=\"noopener noreferrer nofollow\">YDB<\/a>. \u0418\u043c\u0435\u0435\u0442 \u043b\u0438 \u0441\u043c\u044b\u0441\u043b \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u044d\u0442\u043e\u0442 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442? \u0412 \u043a\u043e\u0434\u0435 MySQL \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043c\u043d\u043e\u0433\u043e \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0435\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u043c\u0438 \u043e\u043d\u0438 \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u044e\u0442 \u0442\u0435 \u0438\u043b\u0438 \u0438\u043d\u044b\u0435 \u043f\u0440\u0438\u043d\u044f\u0442\u044b\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u044f (\u0447\u0430\u0449\u0435 \u0432\u0441\u0435\u0433\u043e \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0430\u043d\u0438\u0438 \u043c\u0438\u043a\u0440\u043e\u0431\u0435\u043d\u0447\u043c\u0430\u0440\u043a\u043e\u0432). \u041e\u0434\u0438\u043d \u0438\u0437 <a href=\"https:\/\/github.com\/mysql\/mysql-server\/blob\/ff05628a530696bc6851ba6540ac250c7a059aa7\/sql\/join_optimizer\/subgraph_enumeration.h#L280\" rel=\"noopener noreferrer nofollow\">\u0442\u0430\u043a\u0438\u0445 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0435\u0432<\/a> \u043d\u0430\u043f\u0438\u0441\u0430\u043d \u043a \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f \u0441\u043e\u0441\u0435\u0434\u0435\u0439 <code>FindNeighborhood<\/code>:<\/p>\n<blockquote>\n<p>&#8230;<br \/> This function accounts for roughly 20\u201370% of the total DPhyp running time, depending on the shape of the graph (~40% average across the microbenchmarks)<br \/> &#8230;<\/p>\n<\/blockquote>\n<p>\u0422\u043e \u0435\u0441\u0442\u044c \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0432\u0441\u0435 \u0432\u0440\u0435\u043c\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430 \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442 \u043b\u043e\u0433\u0438\u043a\u0430 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f \u0441\u043e\u0441\u0435\u0434\u0435\u0439, \u0438 \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0434\u0430, \u0441\u043c\u044b\u0441\u043b \u0432 \u0435\u0435 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438 \u0435\u0441\u0442\u044c. \u0414\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0443\u0441\u043a\u043e\u0440\u0438\u0442\u044c \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0435 \u0441\u043e\u0441\u0435\u0434\u0435\u0439, \u0432 MySQL \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043a\u0435\u0448\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u043e \u043f\u043e\u0434\u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0430\u043c.<\/p>\n<h4>\u041f\u043e\u0434\u0445\u043e\u0434 \u0432 MySQL<\/h4>\n<p>\u0418\u0434\u0435\u044f, \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u0430\u044f \u0432 MySQL, \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0430 \u043d\u0430 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0435 \u043f\u043e\u0434\u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u043f\u0440\u0438 \u0438\u0442\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438 \u0438\u043d\u043a\u0440\u0435\u043c\u0435\u043d\u0442\u043e\u043c. \u0415\u0441\u043b\u0438 \u043f\u0440\u0438\u0433\u043b\u044f\u0434\u0435\u0442\u044c\u0441\u044f, \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u043c\u0435\u0442\u0438\u0442\u044c, \u0447\u0442\u043e \u043f\u0440\u0438 \u0442\u0430\u043a\u043e\u043c \u043f\u043e\u0434\u0445\u043e\u0434\u0435 \u043d\u0430 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u043c \u0448\u0430\u0433\u0435 \u043c\u044b \u0447\u0430\u0441\u0442\u043e \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c <em>\u043d\u0430\u0434\u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0433\u043e \u0448\u0430\u0433\u0430<\/em>, \u0438 \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u043e\u0447\u0435\u043d\u044c \u0447\u0430\u0441\u0442\u043e (\u0431\u0443\u043a\u0432\u0430\u043b\u044c\u043d\u043e \u043a\u0430\u0436\u0434\u044b\u0439 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u0448\u0430\u0433) \u043f\u0435\u0440\u0432\u044b\u0439 \u0431\u0438\u0442 \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0442\u043e \u0432 <code>0<\/code>, \u0442\u043e \u0432 <code>1<\/code>. \u0410 \u0435\u0441\u043b\u0438 \u0435\u0433\u043e \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0438\u0437 <code>0<\/code> \u0432 <code>1<\/code>, \u0442\u043e \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u043c \u043f\u043e\u0434\u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e! \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, <code>0011100<\/code> -&gt; <code>0011101<\/code>.<\/p>\n<p>\u0421\u0440\u0430\u0437\u0443 \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u0435\u0442 \u0436\u0435\u043b\u0430\u043d\u0438\u0435 \u043f\u0440\u043e\u0441\u0442\u043e \u0432\u0437\u044f\u0442\u044c \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0445 \u0441\u043e\u0441\u0435\u0434\u0435\u0439 \u0438 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u044d\u0442\u0438\u043c \u043f\u0435\u0440\u0432\u044b\u043c \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u043c, \u043d\u043e \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u0435\u0442 \u0432\u043e\u043f\u0440\u043e\u0441 \u2014 \u0430 \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e \u043b\u0438 \u044d\u0442\u043e? \u0414\u0430, \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e. \u0415\u0441\u043b\u0438 \u043c\u044b \u0435\u0449\u0435 \u0440\u0430\u0437 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043d\u0430 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u0441\u043e\u0441\u0435\u0434\u0435\u0439 \u0438\u0437 \u0441\u0442\u0430\u0442\u044c\u0438, \u0442\u043e \u043d\u0435 \u0443\u0432\u0438\u0434\u0438\u043c \u0442\u0430\u043c \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f \u043d\u0430 \u043f\u043e\u0440\u044f\u0434\u043e\u043a \u043e\u0431\u0445\u043e\u0434\u0430 \u0443\u0437\u043b\u043e\u0432, \u0430 \u044d\u0442\u043e \u0437\u043d\u0430\u0447\u0438\u0442, \u0447\u0442\u043e \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0432\u0437\u044f\u0442\u044c \u043e\u0434\u043d\u043e \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u0438 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0435\u0449\u0435 \u043e\u0434\u043d\u0438\u043c. \u0427\u0442\u043e\u0431\u044b \u0438\u0434\u0435\u044f \u0441\u0442\u0430\u043b\u0430 \u043f\u043e\u043d\u044f\u0442\u043d\u0435\u0435, \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043f\u0440\u0438\u043c\u0435\u0440 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0438 \u043f\u043e \u043f\u043e\u0434\u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0443 \u0438\u0437 4 \u0443\u0437\u043b\u043e\u0432. \u041f\u0440\u0438\u0432\u043e\u0436\u0443 \u043f\u0440\u0438\u043c\u0435\u0440 \u0438\u0437 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u044f:<\/p>\n<pre><code>0001 0010 * 0011 0100 * 0101 0110 * 0111 1000 * 1001 1010 * 1011 1100 * 1101 1110 * 1111 <\/code><\/pre>\n<p>\u0417\u0432\u0435\u0437\u0434\u043e\u0447\u043a\u043e\u0439 \u044f \u0443\u043a\u0430\u0437\u0430\u043b \u043c\u0435\u0441\u0442\u0430, \u0432 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043d\u0430\u043c \u043f\u0440\u0438\u0434\u0435\u0442\u0441\u044f \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u0442\u044c \u0441\u043e\u0441\u0435\u0434\u0435\u0439, \u0442\u043e \u0435\u0441\u0442\u044c \u043e\u0447\u0438\u0449\u0430\u0442\u044c \u043a\u0435\u0448, \u043d\u043e \u043f\u043e\u0441\u043b\u0435 \u2014 \u043d\u0430 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u043c \u043f\u043e\u0434\u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0435 \u2014 \u043d\u0430\u043c \u0431\u0443\u0434\u0435\u0442 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u0438\u043d \u0443\u0437\u0435\u043b (\u043f\u0435\u0440\u0432\u044b\u0439). \u0415\u0441\u043b\u0438 \u0432\u0441\u0451 \u0434\u0435\u043b\u0430\u0442\u044c \u0447\u0435\u0441\u0442\u043d\u043e, \u0442\u043e \u0434\u043b\u044f \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0430 \u0440\u0430\u0437\u043c\u0435\u0440\u0430 4 \u043f\u0440\u0438\u0434\u0435\u0442\u0441\u044f \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c 32 \u0443\u0437\u043b\u0430, \u0430 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u044d\u0442\u043e\u0439 \u044d\u0432\u0440\u0438\u0441\u0442\u0438\u043a\u0438 \u2014 \u0442\u043e\u043b\u044c\u043a\u043e 20. \u0412 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0438 \u0442\u0430\u043a\u0436\u0435 \u0431\u044b\u043b\u043e \u0443\u043a\u0430\u0437\u0430\u043d\u043e, \u0447\u0442\u043e \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0442 \u043e\u043f\u0442\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0435 \u043f\u043e\u0440\u044f\u0434\u043a\u0438 \u043e\u0431\u0445\u043e\u0434\u0430 \u043f\u043e\u0434\u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0434\u0430\u0434\u0443\u0442 \u0435\u0449\u0435 \u0431\u043e\u043b\u044c\u0448\u0438\u0439 \u043f\u0440\u0438\u0440\u043e\u0441\u0442. \u0414\u043b\u044f \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0430 \u0438\u0437 \u0447\u0435\u0442\u044b\u0440\u0435\u0445 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u043e\u043d \u0431\u0443\u0434\u0435\u0442 \u0442\u0430\u043a\u0438\u043c (\u0432 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0438 \u0432 \u043a\u043e\u0434\u0435, \u043d\u0430\u0432\u0435\u0440\u043d\u043e\u0435, \u043e\u0447\u0435\u043f\u044f\u0442\u043a\u0430 \u2014 \u043f\u043e\u0441\u043b\u0435 0111 \u0438\u0434\u0435\u0442 1110, \u0447\u0442\u043e \u043d\u0435 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043e\u043f\u0442\u0438\u043c\u0430\u043b\u044c\u043d\u043e \u0432\u044b\u0447\u0438\u0441\u043b\u0438\u0442\u044c \u0441\u043e\u0441\u0435\u0434\u0435\u0439, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0437\u0434\u0435\u0441\u044c \u043c\u043e\u044f \u043f\u043e\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043d\u0430\u044f \u0432\u0435\u0440\u0441\u0438\u044f). \u0418\u0434\u0435\u044f \u043f\u0440\u043e\u0441\u0442\u0430: \u043c\u044b \u043a\u0430\u043a \u0431\u044b \u0438\u0442\u0435\u0440\u0430\u0442\u0438\u0432\u043d\u043e \u0434\u0435\u043b\u0430\u0435\u043c \u0441\u0434\u0432\u0438\u0433 \u043f\u0440\u0430\u0432\u043e\u0433\u043e (\u043f\u0435\u0440\u0432\u043e\u0433\u043e) \u0431\u0438\u0442\u0430 \u0432\u043f\u0440\u0430\u0432\u043e, \u043f\u043e\u043a\u0430 \u043e\u043d \u043d\u0435 \u0443\u043f\u0440\u0435\u0442\u0441\u044f \u0432 \u043b\u0435\u0432\u0443\u044e \u0447\u0430\u0441\u0442\u044c, \u0430 \u043a\u043e\u0433\u0434\u0430 \u044d\u0442\u0430 \u043b\u0435\u0432\u0430\u044f \u0447\u0430\u0441\u0442\u044c \u0437\u0430\u043a\u043e\u043d\u0447\u0438\u043b\u0430\u0441\u044c, \u0442\u043e \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u043c \u043d\u043e\u0432\u044b\u0439 \u0440\u0430\u0437\u0440\u044f\u0434 \u2014 \u043a\u0435\u0448 \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0435\u043c \u0432 \u043d\u0430\u0447\u0430\u043b\u0435 \u043d\u043e\u0432\u043e\u0433\u043e \u0440\u0430\u0437\u0440\u044f\u0434\u0430 \u0438\u043b\u0438 \u043a\u043e\u0433\u0434\u0430 \u044d\u0442\u043e\u0442 \u0431\u0438\u0442 \u0443\u043f\u0438\u0440\u0430\u0435\u0442\u0441\u044f \u0432 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0435\u0434\u0438\u043d\u0438\u0446:<\/p>\n<pre><code>0001  0010 * 0011  0100 * 0101 0110 * 0111 1000 * 1010 1100 1001 * 1011 1101 1110 * 1111 <\/code><\/pre>\n<p>\u0417\u0434\u0435\u0441\u044c \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0443\u0436\u0435 \u0442\u043e\u043b\u044c\u043a\u043e 15 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0439. \u041d\u0430 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0435 \u0434\u0430\u0436\u0435 \u0442\u0430\u043a\u0430\u044f \u044d\u0432\u0440\u0438\u0441\u0442\u0438\u043a\u0430 \u0441 \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u043d\u0438\u0435\u043c \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0433\u043e \u0431\u0438\u0442\u0430 \u0434\u0430\u0435\u0442 \u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043f\u0440\u0438\u0440\u043e\u0441\u0442, \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0432 2 \u0440\u0430\u0437\u0430 \u043c\u0435\u043d\u044c\u0448\u0435 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0439.<\/p>\n<p>\u0418\u0437\u0432\u0435\u0441\u0442\u0435\u043d \u043b\u0438 \u043e\u043f\u0442\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0439 \u043f\u043e\u0440\u044f\u0434\u043e\u043a \u0434\u043b\u044f \u0431\u043e\u043b\u044c\u0448\u0435\u0433\u043e \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0430? \u0414\u0430, \u043d\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u043f\u044f\u0442\u0438 (\u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442\u044c \u0437\u0434\u0435\u0441\u044c \u043d\u0435 \u0431\u0443\u0434\u0443, \u0435\u0433\u043e \u043c\u043e\u0436\u043d\u043e \u0433\u043b\u044f\u043d\u0443\u0442\u044c \u0432 \u0442\u043e\u043c \u0436\u0435 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0438). \u0415\u0441\u043b\u0438 \u043a\u0442\u043e-\u0442\u043e \u043f\u043e\u0434\u0443\u043c\u0430\u043b &#171;\u043f\u0440\u043e\u0441\u0442\u043e \u0437\u0430\u0445\u0430\u0440\u0434\u043a\u043e\u0434\u0438\u0442\u044c \u0438 \u0432\u0441\u0435&#187;, \u0442\u043e \u0443\u0432\u044b. \u041d\u0435 \u0437\u0430\u0431\u044b\u0432\u0430\u0439\u0442\u0435, \u0447\u0442\u043e \u043f\u0435\u0440\u0435\u0434 \u0432\u0430\u043c\u0438 \u0441\u0435\u0439\u0447\u0430\u0441 \u043f\u0440\u043e\u0441\u0442\u043e \u0431\u0438\u0442\u043e\u0432\u0430\u044f \u043c\u0430\u0441\u043a\u0430 \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u044b\u0445\/\u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u044b\u0445 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u0438\u0437 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0430. \u0412 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u0432 \u0431\u0438\u0442\u043e\u0432\u043e\u0439 \u043c\u0430\u0441\u043a\u0435 \u0440\u0430\u0437\u0440\u043e\u0437\u043d\u0435\u043d\u044b, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u044f \u043f\u043e \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0443 \u0438\u0437 \u0442\u0440\u0435\u0445 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 <code>00101001<\/code> \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u0442\u0430\u043a (\u0441\u043b\u0435\u0432\u0430 \u043f\u043e\u0434\u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e, \u0441\u043f\u0440\u0430\u0432\u0430 \u2014 \u044d\u0442\u0430 \u043c\u0430\u0441\u043a\u0430\/\u043d\u043e\u043c\u0435\u0440 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0438):<\/p>\n<pre><code>00000001   001 00001000   010 00001001   011 00100000   100 00100001   101 00101000   110 00101001   111 <\/code><\/pre>\n<details class=\"spoiler\">\n<summary>\u041e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0435 \u0441\u0445\u0435\u043c\u044b \u043a\u0435\u0448\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f<\/summary>\n<div class=\"spoiler__content\">\n<p>\u0421\u0445\u0435\u043c\u0430 \u043a\u0435\u0448\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0441\u043e\u0441\u0435\u0434\u0435\u0439 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u0441\u043b\u0443\u0447\u0430\u0435, \u043a\u043e\u0433\u0434\u0430 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u044b\u0445 \u0443\u0437\u043b\u043e\u0432 \u0437\u0430\u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043e. \u041f\u043e\u0434 \u044d\u0442\u043e \u0443\u0441\u043b\u043e\u0432\u0438\u0435 \u043f\u043e\u043f\u0430\u0434\u0430\u044e\u0442 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0435 \u0446\u0438\u043a\u043b\u044b \u0432 <code>Enumerate*<\/code> \u0444\u0443\u043d\u043a\u0446\u0438\u044f\u0445, \u043a\u043e\u0433\u0434\u0430 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u044b\u0445 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0441\u043e\u0441\u0435\u0434\u044f\u043c\u0438 csg\/cmp (\u0432 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0438 \u0438\u0437 \u0441\u0442\u0430\u0442\u044c\u0438 \u044d\u0442\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u0432\u043d\u043e \u0432\u044b\u0437\u044b\u0432\u0430\u044e\u0442 \u0441\u0435\u0431\u044f, \u043d\u043e \u0441 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e\u043c \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u044b\u0445 \u0443\u0437\u043b\u043e\u0432 <img decoding=\"async\" class=\"formula inline\" source=\"X \\cup \\mathcal{N}(S, X)\" alt=\"X \\cup \\mathcal{N}(S, X)\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/c\/ca\/ca9\/ca98e51d83cba0f8422287f02e895295.svg\" width=\"96\" height=\"16\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/c\/ca\/ca9\/ca98e51d83cba0f8422287f02e895295.svg 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/formulas\/c\/ca\/ca9\/ca98e51d83cba0f8422287f02e895295.svg 781w\" loading=\"lazy\" decode=\"async\"\/>, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043d\u0435 \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u043e\u0442 \u0446\u0438\u043a\u043b\u0430).<\/p>\n<p>\u041d\u043e \u0434\u043b\u044f \u043f\u0440\u0438\u0440\u043e\u0441\u0442\u0430 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0434\u0430\u0436\u0435 \u044d\u0442\u043e\u0433\u043e, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u0434\u0432\u0430 \u043c\u0435\u0441\u0442\u0430 \u043f\u0435\u0440\u0435\u0431\u043e\u0440\u0430 \u043f\u043e\u0434\u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432 \u2014 \u044d\u0442\u043e:<\/p>\n<ul>\n<li>\n<p><code>EnumerateCmpRecursive<\/code>, \u043d\u043e \u0442\u0430\u043c \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f <code>EmitCsgCmp<\/code> \u0434\u043b\u044f \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u044c \u0441\u043e\u0441\u0435\u0434\u0435\u0439 \u043d\u0435 \u043d\u0443\u0436\u043d\u043e;<\/p>\n<\/li>\n<li>\n<p><code>EnumerateCsgRecursive<\/code>, \u043d\u043e \u0432 \u043d\u0435\u043c \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f <code>EmitCsg<\/code>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u0435\u0442 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u044b\u0445 \u0443\u0437\u043b\u043e\u0432.<\/p>\n<\/li>\n<\/ul>\n<p>\u0427\u0442\u043e\u0431\u044b \u043f\u043e\u043d\u044f\u0442\u044c, \u043f\u043e\u0447\u0435\u043c\u0443 \u043d\u0435\u043b\u044c\u0437\u044f \u043a\u0435\u0448\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u043e\u0441\u0435\u0434\u0435\u0439, \u0435\u0441\u043b\u0438 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u044b\u0445 \u0443\u0437\u043b\u043e\u0432 \u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f, \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0439 \u043f\u0440\u0438\u043c\u0435\u0440. \u0412\u044b\u0437\u0432\u0430\u043d <code>EnumerateCsgRecursive<\/code> \u0441\u043e \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e\u043c <img decoding=\"async\" class=\"formula inline\" source=\"S = 000110\" alt=\"S = 000110\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/b\/b0\/b01\/b0194896cbcb244f5fa0d4d5ae7454b6.svg\" width=\"88\" height=\"12\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/b\/b0\/b01\/b0194896cbcb244f5fa0d4d5ae7454b6.svg 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/formulas\/b\/b0\/b01\/b0194896cbcb244f5fa0d4d5ae7454b6.svg 781w\" loading=\"lazy\" decode=\"async\"\/> \u0438 <img decoding=\"async\" class=\"formula inline\" source=\"X = 000111\" alt=\"X = 000111\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/7\/73\/73c\/73c53b901f164d3c2b43c476b85f7d16.svg\" width=\"88\" height=\"12\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/7\/73\/73c\/73c53b901f164d3c2b43c476b85f7d16.svg 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/formulas\/7\/73\/73c\/73c53b901f164d3c2b43c476b85f7d16.svg 781w\" loading=\"lazy\" decode=\"async\"\/>. \u0414\u043b\u044f \u043d\u0435\u0433\u043e \u0435\u0441\u0442\u044c \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u0441\u043e\u0441\u0435\u0434\u0435\u0439, \u043f\u043e \u043f\u043e\u0434\u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0430\u043c \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0431\u0443\u0434\u0435\u043c \u0438\u0442\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f, <img decoding=\"async\" class=\"formula inline\" source=\"\\mathcal{N} = 1110000\" alt=\"\\mathcal{N} = 1110000\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/3\/39\/39f\/39f160ba299a429fda426645b1508cef.svg\" width=\"104\" height=\"16\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/3\/39\/39f\/39f160ba299a429fda426645b1508cef.svg 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/formulas\/3\/39\/39f\/39f160ba299a429fda426645b1508cef.svg 781w\" loading=\"lazy\" decode=\"async\"\/> (\u0442\u043e \u0435\u0441\u0442\u044c \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f, \u0447\u0442\u043e <img decoding=\"async\" class=\"formula inline\" source=\"0001000\" alt=\"0001000\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/3\/37\/377\/3778bc401454aafa833161481233aeec.svg\" width=\"56\" height=\"12\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/3\/37\/377\/3778bc401454aafa833161481233aeec.svg 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/formulas\/3\/37\/377\/3778bc401454aafa833161481233aeec.svg 781w\" loading=\"lazy\" decode=\"async\"\/> \u043f\u043e\u043a\u0430 \u0441\u0432\u043e\u0431\u043e\u0434\u0435\u043d \u0438 \u043d\u0438\u043a\u043e\u043c\u0443 \u043d\u0435 \u043f\u0440\u0438\u043d\u0430\u0434\u043b\u0435\u0436\u0438\u0442). \u041c\u044b \u0445\u043e\u0442\u0438\u043c \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u0442\u044c \u0441\u043e\u0441\u0435\u0434\u0435\u0439 \u0438 \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043a\u0435\u0448\u0438\u0440\u0443\u0435\u043c \u0438\u0445. \u0412\u043e\u0437\u043d\u0438\u043a\u0430\u0435\u0442 \u0432\u043e\u043f\u0440\u043e\u0441 \u2014 \u0447\u0442\u043e \u043a\u0435\u0448\u0438\u0440\u043e\u0432\u0430\u0442\u044c? \u041d\u0435\u0438\u0437\u043c\u0435\u043d\u044f\u0435\u043c\u0430\u044f \u0447\u0430\u0441\u0442\u044c \u2014 \u044d\u0442\u043e <img decoding=\"async\" class=\"formula inline\" source=\"S\" alt=\"S\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/5\/5d\/5db\/5dbc98dcc983a70728bd082d1a47546e.svg\" width=\"12\" height=\"12\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/5\/5d\/5db\/5dbc98dcc983a70728bd082d1a47546e.svg 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/formulas\/5\/5d\/5db\/5dbc98dcc983a70728bd082d1a47546e.svg 781w\" loading=\"lazy\" decode=\"async\"\/>, \u043a \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u043e\u0434\u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u0441\u043e\u0441\u0435\u0434\u0435\u0439. \u0420\u0435\u0448\u0430\u0435\u043c \u0437\u0430\u043a\u0435\u0448\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0435\u0433\u043e, \u043d\u043e \u0442\u0443\u0442 \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u0435\u0442 \u0442\u0430\u043a\u0430\u044f \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044f: \u0434\u043b\u044f \u043a\u0430\u043a\u043e\u0433\u043e-\u0442\u043e \u0443\u0437\u043b\u0430 \u0435\u0441\u0442\u044c \u0433\u0438\u043f\u0435\u0440\u0440\u0435\u0431\u0440\u043e, \u043f\u0440\u0430\u0432\u0430\u044f \u0447\u0430\u0441\u0442\u044c \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e <img decoding=\"async\" class=\"formula inline\" source=\"1001000\" alt=\"1001000\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/e\/ed\/ed7\/ed7bd5bccea3317f7fc60813a25363a2.svg\" width=\"56\" height=\"12\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/e\/ed\/ed7\/ed7bd5bccea3317f7fc60813a25363a2.svg 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/formulas\/e\/ed\/ed7\/ed7bd5bccea3317f7fc60813a25363a2.svg 781w\" loading=\"lazy\" decode=\"async\"\/>. \u041a\u0430\u043a \u044d\u0442\u043e \u0440\u0435\u0431\u0440\u043e \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c? \u0418\u043c\u0435\u0435\u043c \u0434\u0432\u0430 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0445 \u0438\u0441\u0445\u043e\u0434\u0430:<\/p>\n<ul>\n<li>\n<p>\u0432 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u044b\u0445 \u0443\u0437\u043b\u043e\u0432 <em>\u043d\u0435 \u0431\u044b\u043b\u0438<\/em> \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u044b \u0432\u0441\u0435 \u0441\u043e\u0441\u0435\u0434\u0438. \u0422\u043e\u0433\u0434\u0430 \u0432 \u0441\u043e\u0441\u0435\u0434\u0438 \u0434\u043b\u044f <code>EmitCsg<\/code> \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0443\u0437\u0435\u043b <img decoding=\"async\" class=\"formula inline\" source=\"0001000\" alt=\"0001000\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/3\/37\/377\/3778bc401454aafa833161481233aeec.svg\" width=\"56\" height=\"12\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/3\/37\/377\/3778bc401454aafa833161481233aeec.svg 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/formulas\/3\/37\/377\/3778bc401454aafa833161481233aeec.svg 781w\" loading=\"lazy\" decode=\"async\"\/>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u043e\u043a\u0438\u0434\u044b\u0432\u0430\u0442\u044c\u0441\u044f \u0432\u0435\u0437\u0434\u0435. \u041d\u043e \u044d\u0442\u043e \u0437\u043d\u0430\u0447\u0438\u0442, \u0447\u0442\u043e \u0434\u043b\u044f \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0439, \u0432 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 <em>\u0443\u0447\u0430\u0441\u0442\u0432\u0443\u0435\u0442<\/em> <img decoding=\"async\" class=\"formula inline\" source=\"1000000\" alt=\"1000000\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/8\/81\/815\/8155bc545f84d9652f1012ef2bdfb6eb.svg\" width=\"56\" height=\"12\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/8\/81\/815\/8155bc545f84d9652f1012ef2bdfb6eb.svg 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/formulas\/8\/81\/815\/8155bc545f84d9652f1012ef2bdfb6eb.svg 781w\" loading=\"lazy\" decode=\"async\"\/>, \u0431\u0443\u0434\u0435\u0442 \u043d\u0430\u0440\u0443\u0448\u0435\u043d\u0430 \u043b\u043e\u0433\u0438\u043a\u0430 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f \u0441\u043e\u0441\u0435\u0434\u0435\u0439 \u0432 <code>EmitCsg<\/code>, \u0442\u0430\u043a \u043a\u0430\u043a \u044d\u0442\u043e\u0442 \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u0431\u0443\u0434\u0435\u0442 \u0432 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u043e\u043c \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0435, \u0430 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e <em>\u0440\u0435\u0431\u0440\u043e \u043d\u0435 \u0434\u043e\u043b\u0436\u043d\u043e \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u0442\u044c\u0441\u044f<\/em>;<\/p>\n<\/li>\n<li>\n<p>\u0432 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u044b\u0445 \u0443\u0437\u043b\u043e\u0432 <em>\u0431\u044b\u043b\u0438<\/em> \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u044b \u0432\u0441\u0435 \u0441\u043e\u0441\u0435\u0434\u0438. \u0422\u043e\u0433\u0434\u0430 \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u043e\u0431\u0440\u0430\u0442\u043d\u0443\u044e \u0441\u0442\u043e\u0440\u043e\u043d\u0443 \u043c\u0435\u0434\u0430\u043b\u0438 \u2014 \u0432 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u044f\u0445, \u0433\u0434\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442 <img decoding=\"async\" class=\"formula inline\" source=\"1000000\" alt=\"1000000\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/8\/81\/815\/8155bc545f84d9652f1012ef2bdfb6eb.svg\" width=\"56\" height=\"12\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/8\/81\/815\/8155bc545f84d9652f1012ef2bdfb6eb.svg 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/formulas\/8\/81\/815\/8155bc545f84d9652f1012ef2bdfb6eb.svg 781w\" loading=\"lazy\" decode=\"async\"\/> <em>\u043d\u0435 \u0443\u0447\u0430\u0441\u0442\u0432\u0443\u0435\u0442<\/em>, <em>\u0431\u0443\u0434\u0435\u0442 \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u043a\u0430\u043a\u043e\u0439-\u0442\u043e \u0443\u0437\u0435\u043b<\/em>.<\/p>\n<\/li>\n<\/ul>\n<p>\u041d\u043e \u0435\u0441\u043b\u0438 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0432 \u043a\u043e\u0434 MySQL, \u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0443\u0432\u0438\u0434\u0435\u0442\u044c, \u0447\u0442\u043e \u043e\u043d\u0438 \u0432\u0441\u0435 \u0436\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 \u043a\u0435\u0448\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435, \u043d\u043e \u043f\u043e\u0447\u0435\u043c\u0443? \u0414\u0435\u043b\u043e \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u043e\u043d\u0438 \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u044e\u0442 \u0441\u043e\u0441\u0435\u0434\u0435\u0439 \u0434\u043b\u044f \u043f\u043e\u0434\u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0430, \u0430 \u0437\u0430\u0442\u0435\u043c \u043a \u043f\u043e\u043b\u0443\u0447\u0438\u0432\u0448\u0438\u043c\u0441\u044f \u0441\u043e\u0441\u0435\u0434\u044f\u043c \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u044e\u0442 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u044b\u0435 \u0443\u0437\u043b\u044b \u0438 \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0445 \u0441\u043e\u0441\u0435\u0434\u0435\u0439. \u0418\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u044b\u0435 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u044e\u0442 \u043f\u043e \u043b\u043e\u0433\u0438\u043a\u0435 <code>Enumerate*<\/code> \u0444\u0443\u043d\u043a\u0446\u0438\u0439, \u0442\u0430\u043a \u043a\u0430\u043a \u043a \u043d\u0438\u043c \u043d\u0430 \u0432\u0445\u043e\u0434 \u043f\u0435\u0440\u0435\u0434\u0430\u044e\u0442\u0441\u044f \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u044b\u0435 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442 \u0432\u0441\u0435 \u0440\u0430\u043d\u0435\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u043d\u044b\u0435 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0430, \u0445\u043e\u0442\u044f \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u0432\u043d\u044b\u043c \u0432\u044b\u0437\u043e\u0432\u043e\u043c \u043c\u043e\u0433\u043b\u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0435 \u043f\u043e\u0434\u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u0440\u0430\u0431\u043e\u0442\u044b <code>EnumerateCsgRecursive<\/code> \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u0432\u043d\u043e \u0432\u044b\u0437\u044b\u0432\u0430\u043b \u0441\u0435\u0431\u044f \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0440\u0430\u0437, \u0438 \u043a\u0430\u0436\u0434\u044b\u0439 \u0440\u0430\u0437 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u0441\u043e\u0441\u0435\u0434\u0435\u0439 \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u043b\u043e \u0434\u0432\u0430 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430, \u043d\u043e \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u0432\u043d\u044b\u0435 \u0432\u044b\u0437\u043e\u0432\u044b \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u043b\u0438 \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u0438\u043d, \u0445\u043e\u0442\u044f \u0430\u043a\u043a\u0443\u043c\u0443\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u044b\u0435 \u0443\u0437\u043b\u044b \u2014 \u044d\u0442\u043e \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435 \u0432\u0441\u0435\u0445 \u043d\u0430\u0439\u0434\u0435\u043d\u043d\u044b\u0445 \u0441\u043e\u0441\u0435\u0434\u0435\u0439. \u0422\u043e \u0435\u0441\u0442\u044c, \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u044b\u0445 \u0443\u0437\u043b\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0430\u043c \u043f\u0435\u0440\u0435\u0434\u0430\u043b\u0438, \u043c\u043e\u0436\u0435\u0442 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u044c \u0432\u0441\u0435 \u0443\u0437\u043b\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0431\u0443\u0434\u0443\u0442 \u0432\u0430\u043b\u0438\u0434\u043d\u044b\u043c\u0438 \u0441\u043e\u0441\u0435\u0434\u044f\u043c\u0438 \u0432 <code>EmitCsg<\/code> (\u0442\u0430\u043a \u043a\u0430\u043a \u043e\u043d \u0441\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u0435\u0442 \u0442\u0435\u043a\u0443\u0449\u0438\u0435 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u044b\u0435 \u0438 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0441\u0432\u043e\u0438).<\/p>\n<p>\u041f\u0440\u0438\u043c\u0435\u0440: \u043f\u043e\u0441\u043b\u0435 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u0432\u043d\u044b\u0445 \u0432\u044b\u0437\u043e\u0432\u043e\u0432 <code>EnumerateCsgRecursive<\/code> \u0438\u043c\u0435\u0435\u0442 <img decoding=\"async\" class=\"formula inline\" source=\"S = 1010001011\" alt=\"S = 1010001011\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/e\/e6\/e6a\/e6a1fc20b79dce11a97e285bdb8c67ab.svg\" width=\"120\" height=\"12\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/e\/e6\/e6a\/e6a1fc20b79dce11a97e285bdb8c67ab.svg 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/formulas\/e\/e6\/e6a\/e6a1fc20b79dce11a97e285bdb8c67ab.svg 781w\" loading=\"lazy\" decode=\"async\"\/>, <img decoding=\"async\" class=\"formula inline\" source=\"X = 1111111111\" alt=\"X = 1111111111\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/7\/7c\/7cc\/7cc5fa919ede92bf9a64ecb251d137b0.svg\" width=\"128\" height=\"12\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/7\/7c\/7cc\/7cc5fa919ede92bf9a64ecb251d137b0.svg 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/formulas\/7\/7c\/7cc\/7cc5fa919ede92bf9a64ecb251d137b0.svg 781w\" loading=\"lazy\" decode=\"async\"\/>, \u043d\u043e \u043f\u0440\u0438 \u0432\u044b\u0437\u043e\u0432\u0435 <code>EmitCsg<\/code> \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u044b\u0445 \u0431\u0443\u0434\u0435\u0442 \u0441\u0431\u0440\u043e\u0448\u0435\u043d\u043e \u0434\u043e <img decoding=\"async\" class=\"formula inline\" source=\"X = 0000000011\" alt=\"X = 0000000011\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/d\/d2\/d2c\/d2c95ba890509f21cef7521d58548e68.svg\" width=\"128\" height=\"12\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/d\/d2\/d2c\/d2c95ba890509f21cef7521d58548e68.svg 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/formulas\/d\/d2\/d2c\/d2c95ba890509f21cef7521d58548e68.svg 781w\" loading=\"lazy\" decode=\"async\"\/> (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043d\u0430\u0438\u043c\u0435\u043d\u044c\u0448\u0438\u0439 \u0443\u0437\u0435\u043b \u044d\u0442\u043e 2). \u0422\u043e\u0433\u0434\u0430 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 <img decoding=\"async\" class=\"formula inline\" source=\"X \\\\ S = 0101110100\" alt=\"X \\\\ S = 0101110100\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/a\/ab\/abf\/abff801024cc2f7d1f5e3a02eee921e2.svg\" width=\"120\" height=\"40\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/a\/ab\/abf\/abff801024cc2f7d1f5e3a02eee921e2.svg 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/formulas\/a\/ab\/abf\/abff801024cc2f7d1f5e3a02eee921e2.svg 781w\" loading=\"lazy\" decode=\"async\"\/> \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u043e\u0441\u0442\u043e \u043e\u0437\u043d\u0430\u0447\u0430\u0442\u044c, \u0447\u0442\u043e \u043c\u044b \u043d\u0430 \u0432\u0441\u044f\u043a\u0438\u0439 \u0441\u043b\u0443\u0447\u0430\u0439 \u0445\u043e\u0442\u0438\u043c \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0442\u0435 \u0443\u0437\u043b\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0431\u044b\u043b\u0438 \u0441\u043e\u0441\u0435\u0434\u044f\u043c\u0438 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0445 \u0432\u044b\u0437\u043e\u0432\u043e\u0432, \u043d\u043e \u0432 \u0442\u0435\u043a\u0443\u0449\u0435\u0435 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e CSG \u043d\u0435 \u043f\u043e\u043f\u0430\u043b\u0438.<\/p>\n<p>\u0418\u0441\u0445\u043e\u0434\u043d\u044b\u0445 \u0441\u043e\u0441\u0435\u0434\u0435\u0439 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u044e\u0442 \u043f\u043e \u0442\u043e\u0439 \u0436\u0435 \u0441\u0430\u043c\u043e\u0439 \u043b\u043e\u0433\u0438\u043a\u0435, \u043d\u043e \u0447\u0442\u043e\u0431\u044b \u043d\u0435 \u043d\u0430\u0440\u0443\u0448\u0430\u0442\u044c \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e\u0441\u0442\u044c \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430: \u0438\u0437 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u043e\u0433\u043e \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0430 \u0443\u0434\u0430\u043b\u044f\u044e\u0442\u0441\u044f \u0432\u0441\u0435 \u0443\u0437\u043b\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0430\u0445\u043e\u0434\u044f\u0442\u0441\u044f \u0432 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u043e\u043c \u043f\u043e\u0434\u0433\u0440\u0430\u0444\u0435. \u0410\u0432\u0442\u043e\u0440\u044b \u0438\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e \u0437\u043d\u0430\u044e\u0442, \u0447\u0442\u043e \u0441\u043e\u0441\u0435\u0434\u0438, \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0435 \u0442\u0430\u043a\u0438\u043c \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u043c, \u043c\u043e\u0433\u0443\u0442 \u043d\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u044c \u0432\u0441\u0435\u0445 \u0441\u043e\u0441\u0435\u0434\u0435\u0439, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u044e\u0442 \u0432\u043e\u043e\u0431\u0449\u0435 \u0432\u0441\u0435, \u0447\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043f\u0440\u0430\u0432\u0434\u043e\u0439, \u0434\u0430\u0436\u0435 \u0435\u0441\u043b\u0438 \u044d\u0442\u043e \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u0442 \u043a \u0438\u0437\u0431\u044b\u0442\u043e\u0447\u043d\u044b\u043c \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f\u043c. \u0412\u043e\u0442 \u0447\u0430\u0441\u0442\u044c \u044d\u0442\u043e\u0433\u043e \u043a\u043e\u0434\u0430 \u0441 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u044f\u043c\u0438, \u0431\u043e\u043b\u0435\u0435 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u044e\u0449\u0438\u043c\u0438 \u043f\u0440\u0438\u0447\u0438\u043d\u044b (<code>lowest_node_idx<\/code> \u2014 \u044d\u0442\u043e \u0438\u043d\u0434\u0435\u043a\u0441 \u0443\u0437\u043b\u0430, \u0441 \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u0437\u0430\u043f\u0443\u0449\u0435\u043d\u0430 \u0442\u0435\u043a\u0443\u0449\u0430\u044f \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u044f \u0432 <code>solve<\/code>):<\/p>\n<pre><code class=\"cpp\">\/\/ EnumerateComplementsTo() resets the forbidden set, since nodes that \/\/ were forbidden under this subgraph may very well be part of the \/\/ complement. However, this also means that the neighborhood we just \/\/ computed may be incomplete; it just looks at recently-added nodes, \/\/ but there are older nodes that may have neighbors that we added to \/\/ the forbidden set (X) instead of the subgraph itself (S). However, \/\/ this is also the only time we add to the forbidden set, so we know \/\/ exactly which nodes they are! Thus, simply add our forbidden set \/\/ to the neighborhood for purposes of computing the complement. \/\/ \/\/ This behavior is tested in the SmallStar unit test. new_neighborhood |= forbidden &amp; ~TablesBetween(0, lowest_node_idx);  \/\/ This node's neighborhood is also part of the new neighborhood \/\/ it's just not added to the forbidden set yet, so we missed it in \/\/ the previous calculation). new_neighborhood |= neighborhood; <\/code><\/pre>\n<\/div>\n<\/details>\n<p>\u0414\u043b\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0441\u0432\u043e\u0435\u0433\u043e \u043e\u0434\u043d\u043e\u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043d\u043e\u0433\u043e \u043a\u0435\u0448\u0430 \u043e\u043d\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 <a href=\"https:\/\/github.com\/mysql\/mysql-server\/blob\/ff05628a530696bc6851ba6540ac250c7a059aa7\/sql\/join_optimizer\/subgraph_enumeration.h#L163\" rel=\"noopener noreferrer nofollow\">\u043a\u043b\u0430\u0441\u0441 <code>NeighborhoodCache<\/code><\/a> \u0438 \u043f\u0440\u043e\u043a\u0438\u0434\u044b\u0432\u0430\u044e\u0442 \u0435\u0433\u043e \u043f\u043e\u0447\u0442\u0438 \u0432\u0435\u0437\u0434\u0435. \u0415\u0433\u043e \u043b\u043e\u0433\u0438\u043a\u0430 \u043f\u0440\u043e\u0441\u0442\u0430: \u043f\u0435\u0440\u0435\u0434 \u043d\u0430\u0447\u0430\u043b\u043e\u043c \u043f\u043e\u0438\u0441\u043a\u0430 \u0441\u043e\u0441\u0435\u0434\u0435\u0439 \u043d\u0430\u0445\u043e\u0434\u0438\u043c \u0434\u0435\u043b\u044c\u0442\u0443 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432, \u043d\u043e \u043f\u043e \u0444\u0430\u043a\u0442\u0443 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c, \u0447\u0442\u043e \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u0431\u0438\u0442 \u0432\u044b\u0441\u0442\u0430\u0432\u043b\u0435\u043d, \u0430 \u0432 \u043a\u043e\u043d\u0446\u0435 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u043c \u0440\u0430\u0441\u0441\u0447\u0438\u0442\u0430\u043d\u043d\u044b\u0445 \u0441\u043e\u0441\u0435\u0434\u0435\u0439 \u2014 \u043d\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u0435\u0441\u043b\u0438 \u043d\u0435 \u0441\u0442\u043e\u0438\u0442 \u043f\u0435\u0440\u0432\u044b\u0439 \u0431\u0438\u0442 (\u0435\u0433\u043e \u043e\u043d\u0438 \u043d\u0430\u0437\u0432\u0430\u043b\u0438 <code>taboo bit<\/code>).<\/p>\n<p>\u041a\u0430\u043a \u0442\u043e\u043b\u044c\u043a\u043e \u044f \u043f\u043e\u043d\u044f\u043b \u0438\u0434\u0435\u044e, \u0442\u043e \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u0430\u043b \u043a\u043e\u0434 \u0441\u0435\u0431\u0435 \u043f\u043e\u0447\u0442\u0438 \u0441\u043b\u043e\u0432\u043e \u0432 \u0441\u043b\u043e\u0432\u043e, \u0442\u043e\u043b\u044c\u043a\u043e <s>\u0412\u0430\u0441\u044e \u043d\u0430 \u041f\u0435\u0442\u044e<\/s> <code>taboo<\/code> \u043d\u0430 <code>forbidden<\/code> \u043f\u043e\u043c\u0435\u043d\u044f\u043b (\u0447\u0442\u043e\u0431\u044b \u0445\u043e\u0442\u044c \u0447\u0442\u043e-\u0442\u043e \u0441\u0432\u043e\u0435 \u0431\u044b\u043b\u043e). \u041a\u043e\u0434 \u0436\u0438\u043b \u0432 \u0442\u0430\u043a\u043e\u043c \u0432\u0438\u0434\u0435 \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0434\u043e\u043b\u0433\u043e, \u0430\u0436 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043d\u0435\u0434\u0435\u043b\u044c, \u0430 \u043f\u043e\u0442\u043e\u043c \u044f \u0441\u043f\u043e\u0445\u0432\u0430\u0442\u0438\u043b\u0441\u044f \u2014 GPLv2! \u041a\u043e\u0434 MySQL \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u044f\u0435\u0442\u0441\u044f \u043f\u043e\u0434 \u043b\u0438\u0446\u0435\u043d\u0437\u0438\u0435\u0439 GPLv2, \u0430 \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u044f, \u0447\u0442\u043e \u044f \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u0430\u043b \u043f\u043e\u0447\u0442\u0438 \u0432\u0441\u0435 \u0441\u043b\u043e\u0432\u043e \u0432 \u0441\u043b\u043e\u0432\u043e (\u043d\u0430 \u0442\u043e\u0442 \u043c\u043e\u043c\u0435\u043d\u0442, \u043d\u0430\u0432\u0435\u0440\u043d\u043e\u0435, \u0435\u0449\u0435 \u0434\u0430\u0436\u0435 \u043d\u0435 \u0434\u043e \u043a\u043e\u043d\u0446\u0430 \u043f\u043e\u043d\u0438\u043c\u0430\u044f \u0441\u0430\u043c\u0443 \u0438\u0434\u0435\u044e), \u0442\u043e \u043d\u0430\u0440\u0443\u0448\u0438\u043b \u044d\u0442\u0443 \u043b\u0438\u0446\u0435\u043d\u0437\u0438\u044e: \u043c\u043e\u0439-\u0442\u043e \u043f\u0440\u043e\u0435\u043a\u0442 \u043f\u043e\u0434 MIT, \u043e\u043d\u0438 \u043d\u0435\u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u044b. \u0422\u043e\u0433\u0434\u0430 \u044f \u0432\u0441\u0442\u0430\u043b \u043f\u0435\u0440\u0435\u0434 \u0432\u043e\u043f\u0440\u043e\u0441\u043e\u043c \u2014 \u0432\u044b\u043a\u0438\u043d\u0443\u0442\u044c \u044d\u0442\u0443 \u0445\u043e\u0440\u043e\u0448\u0443\u044e \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044e \u0438 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043a\u043e\u0434 \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u044b\u043c, \u0438\u043b\u0438 \u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c, \u043d\u043e \u043f\u043e\u043c\u0435\u043d\u044f\u0442\u044c \u043b\u0438\u0446\u0435\u043d\u0437\u0438\u044e \u043d\u0430 GPLv2? \u041f\u043e \u0438\u0442\u043e\u0433\u0443 \u0432\u044b\u0431\u0440\u0430\u043b \u043f\u0435\u0440\u0432\u043e\u0435, \u0438 \u044d\u0442\u043e \u0441\u0442\u0430\u043b\u043e \u043d\u0430\u0447\u0430\u043b\u043e\u043c \u0443\u0432\u043b\u0435\u043a\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e-\u043d\u0435\u0434\u0435\u043b\u044c\u043d\u043e\u0439 \u0440\u0435\u0444\u043b\u0435\u043a\u0441\u0438\u0438 \u043e \u0442\u043e\u043c, \u043a\u0430\u043a \u043c\u043d\u0435 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u044d\u0442\u0443 \u043a\u043e\u043c\u0431\u0438\u043d\u0430\u0442\u043e\u0440\u0438\u043a\u0443.<\/p>\n<h4>\u0421\u0443\u0444\u0444\u0438\u043a\u0441\u043d\u044b\u0439 \u043a\u0435\u0448<\/h4>\n<p>\u041f\u0435\u0440\u0435\u0434\u043e \u043c\u043d\u043e\u0439 \u0441\u0442\u043e\u0438\u0442 \u0437\u0430\u0434\u0430\u0447\u0430 \u2014 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c, \u043d\u043e \u0442\u0430\u043a, \u0447\u0442\u043e\u0431\u044b \u044d\u0442\u043e \u043d\u0435 \u0431\u044b\u043b\u043e \u043a\u0430\u043b\u044c\u043a\u043e\u0439 MySQL (\u0432 \u043c\u043e\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u044d\u0442\u043e \u0432\u0430\u0436\u043d\u044b\u0439 \u0430\u0441\u043f\u0435\u043a\u0442, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043f\u043e\u0441\u043b\u0435 \u043d\u0430\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u044f \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u0447\u0430\u0441\u0442\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e \u0442\u043e\u043b\u044c\u043a\u043e \u0435\u0433\u043e). \u0421\u0430\u043c\u0430 \u0438\u0434\u0435\u044f \u044f\u0441\u043d\u0430: \u0437\u0430\u0447\u0435\u043c \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u0442\u044c \u0432\u0441\u0435 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u0441\u043e\u0441\u0435\u0434\u0435\u0439, \u0435\u0441\u043b\u0438 \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u0435\u0433\u043e \u0434\u043e\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u044d\u0442\u043e\u0439 \u0434\u0435\u043b\u044c\u0442\u043e\u0439. \u041d\u0430\u043c \u043a\u0430\u043a-\u0442\u043e \u043d\u0443\u0436\u043d\u043e \u043d\u0430\u0439\u0442\u0438 \u0442\u043e \u043b\u0438 \u0448\u0430\u0431\u043b\u043e\u043d, \u0442\u043e \u043b\u0438 \u0435\u0449\u0435 \u0447\u0442\u043e-\u0442\u043e, \u0447\u0442\u043e \u043f\u043e\u043c\u043e\u0436\u0435\u0442 \u043d\u0430\u043c \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0442\u044c \u043f\u043e\u0434\u043e\u0431\u043d\u043e\u0435 \u043f\u043e\u0434\u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e.<\/p>\n<p>\u0410 \u0447\u0442\u043e \u0435\u0441\u043b\u0438 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0441 \u0434\u0440\u0443\u0433\u043e\u0439 \u0441\u0442\u043e\u0440\u043e\u043d\u044b? \u0414\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e, \u0443 \u043d\u0430\u0448\u0435\u0433\u043e \u0441\u043f\u043e\u0441\u043e\u0431\u0430 \u0438\u0442\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u043e \u043f\u043e\u0434\u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0430\u043c \u0435\u0441\u0442\u044c \u0445\u043e\u0440\u043e\u0448\u0435\u0435 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e: \u0432\u0435\u0440\u0445\u043d\u044f\u044f \u0447\u0430\u0441\u0442\u044c (MSB) \u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u0433\u043e\u0440\u0430\u0437\u0434\u043e \u0440\u0435\u0436\u0435, \u0447\u0435\u043c \u043d\u0438\u0436\u043d\u044f\u044f (LSB). \u0422\u0430\u043a \u043f\u043e\u0447\u0435\u043c\u0443 \u0431\u044b \u043d\u0430\u043c \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u044d\u0442\u043e \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e? \u041f\u0440\u043e\u0441\u0442\u043e \u0437\u0430\u043a\u0435\u0448\u0438\u0440\u0443\u0435\u043c \u0442\u043e, \u0447\u0442\u043e \u0440\u0435\u0434\u043a\u043e \u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f! \u041d\u043e \u0447\u0442\u043e \u0442\u0430\u043a\u043e\u0435 &#171;\u0440\u0435\u0434\u043a\u043e \u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f&#187; \u043f\u043e \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443? \u0412 \u043f\u0435\u0440\u0432\u043e\u0439 \u0438\u0434\u0435\u0435 \u0437\u0430 \u044d\u0442\u0443 \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u0443 \u044f \u0432\u0437\u044f\u043b \u0437\u0430\u043c\u044b\u043a\u0430\u044e\u0449\u0438\u0435 \u0435\u0434\u0438\u043d\u0438\u0446\u044b \u2014 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0445 \u0435\u0434\u0438\u043d\u0438\u0446 (\u043f\u0440\u0438 \u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u043c \u0440\u0430\u0437\u0440\u044f\u0434\u0435) \u0432 \u0447\u0438\u0441\u043b\u0435 \u043c\u043e\u0436\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u0442\u044c\u0441\u044f, \u0442\u043e \u0435\u0441\u0442\u044c \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0434\u0441\u0447\u0438\u0442\u0430\u0442\u044c \u0441\u043e\u0441\u0435\u0434\u0435\u0439 \u0434\u043b\u044f \u044d\u0442\u043e\u0439 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438, \u0430 \u0437\u0430\u0442\u0435\u043c \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0442\u044c \u043c\u0435\u043d\u044f\u044e\u0449\u0443\u044e\u0441\u044f. \u041e\u0442\u0434\u0435\u043b\u0438\u0442\u044c \u0431\u0430\u0437\u043e\u0432\u0443\u044e (\u043d\u0435\u0438\u0437\u043c\u0435\u043d\u043d\u0443\u044e) \u0447\u0430\u0441\u0442\u044c \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u0431\u0438\u0442\u043e\u0432\u043e\u0439 \u043c\u0430\u0441\u043a\u043e\u0439, \u0430 \u0435\u0435 \u0440\u0430\u0437\u043c\u0435\u0440 \u043c\u044b \u0437\u043d\u0430\u0435\u043c (\u043f\u043e\u0434\u0441\u0447\u0438\u0442\u0430\u043b\u0438).<\/p>\n<blockquote>\n<p>\u0415\u0441\u043b\u0438 \u0432\u0441\u043f\u043e\u043c\u043d\u0438\u0442\u044c \u043e\u043f\u0442\u0438\u043c\u0430\u043b\u044c\u043d\u0443\u044e \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0438\u0442\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f, \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0435\u043d\u043d\u0443\u044e MySQL, \u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u043c\u0435\u0442\u0438\u0442\u044c, \u0447\u0442\u043e \u044d\u0442\u0430 \u0441\u0442\u0440\u0430\u0442\u0435\u0433\u0438\u044f \u0438\u0434\u0435\u0430\u043b\u044c\u043d\u043e \u043f\u043e\u0434\u0445\u043e\u0434\u0438\u0442 \u043f\u043e\u0434 \u0442\u0430\u043a\u0443\u044e \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c.<\/p>\n<\/blockquote>\n<p>\u041a\u0430\u043a \u043d\u0430\u043c \u043e\u0442\u0441\u043b\u0435\u0434\u0438\u0442\u044c \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u044d\u0442\u043e\u0439 \u0447\u0430\u0441\u0442\u0438? \u041b\u0435\u0433\u043a\u043e, \u0432\u0435\u0434\u044c \u044d\u0442\u043e \u0434\u0432\u043e\u0438\u0447\u043d\u0430\u044f \u0430\u0440\u0438\u0444\u043c\u0435\u0442\u0438\u043a\u0430: \u043f\u0440\u043e\u0441\u0442\u043e \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u0435\u043c \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0439 \u0434\u043e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u043d\u043e\u0432\u043e\u0439 <code>1<\/code>, \u0430 \u0437\u0430\u0442\u0435\u043c \u0434\u0435\u043b\u0438\u043c \u043d\u0430 2 \u0438 \u043e\u0436\u0438\u0434\u0430\u0435\u043c \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0439. \u041a\u043e\u0433\u0434\u0430 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u043d\u043e\u0432\u044b\u0439 \u0440\u0430\u0437\u0440\u044f\u0434, \u0442\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u0441\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u0435\u043c \u0441\u0447\u0435\u0442\u0447\u0438\u043a \u0438 \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u0435\u043c. \u0410\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439:<\/p>\n<ol>\n<li>\n<p>\u0418\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f: <\/p>\n<ol>\n<li>\n<p><code>nb_cache = 0<\/code> \u2014 \u0437\u0430\u043a\u0435\u0448\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0441\u043e\u0441\u0435\u0434\u0438.<\/p>\n<\/li>\n<li>\n<p><code>nb_cache_subset = 0<\/code> \u2014 \u043c\u0430\u0441\u043a\u0430 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0430, \u0434\u043b\u044f \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0445\u0440\u0430\u043d\u0438\u0442\u0441\u044f <code>nb_cache<\/code>.<\/p>\n<\/li>\n<li>\n<p><code>prev_update = 0<\/code> \u2014 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 <code>next_update<\/code>.<\/p>\n<\/li>\n<li>\n<p><code>next_update = 0<\/code> \u2014 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0439 \u0434\u043e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0433\u043e \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u043a\u0435\u0448\u0430.<\/p>\n<\/li>\n<\/ol>\n<\/li>\n<li>\n<p>\u0414\u043b\u044f \u043e\u0447\u0435\u0440\u0435\u0434\u043d\u043e\u0439 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0438 (\u043d\u0430\u0447\u0438\u043d\u0430\u044f \u0441 1): <\/p>\n<ol>\n<li>\n<p>\u0415\u0441\u043b\u0438 <code>next_update == 0<\/code>: <\/p>\n<ol>\n<li>\n<p>\u0414\u043e\u0432\u044b\u0447\u0438\u0441\u043b\u044f\u044e \u0441\u043e\u0441\u0435\u0434\u0435\u0439 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u043c \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u043c.<\/p>\n<\/li>\n<li>\n<p><code>next_update = prev_update \/ 2<\/code> \u2014 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0430\u044f \u0435\u0434\u0438\u043d\u0438\u0446\u0430 \u0432 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u043f\u043e\u044f\u0432\u0438\u0442\u0441\u044f \u0440\u043e\u0432\u043d\u043e \u0447\u0435\u0440\u0435\u0437 \u043f\u043e\u043b\u043e\u0432\u0438\u043d\u0443 \u0447\u0438\u0441\u043b\u0430 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0445 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439.<\/p>\n<\/li>\n<li>\n<p><code>prev_update = next_update<\/code> \u2014 \u044d\u0442\u043e \u043d\u0443\u0436\u043d\u043e \u0434\u043b\u044f \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0445 \u0441\u043e\u0441\u0435\u0434\u0435\u0439.<\/p>\n<\/li>\n<li>\n<p><code>nb_cache = *\u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u043d\u044b\u0435 \u0441\u0435\u0439\u0447\u0430\u0441 \u0441\u043e\u0441\u0435\u0434\u0438*<\/code>.<\/p>\n<\/li>\n<li>\n<p><code>nb_cache_subset = *\u0442\u0435\u043a\u0443\u0449\u0435\u0435 \u043f\u043e\u0434\u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e*<\/code>.<\/p>\n<\/li>\n<\/ol>\n<\/li>\n<li>\n<p>\u0415\u0441\u043b\u0438 \u0432 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0435 \u0442\u043e\u043b\u044c\u043a\u043e 1 \u044d\u043b\u0435\u043c\u0435\u043d\u0442: <\/p>\n<ol>\n<li>\n<p>\u0412\u044b\u0447\u0438\u0441\u043b\u044f\u044e \u0441\u043e\u0441\u0435\u0434\u0435\u0439 \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0433\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430.<\/p>\n<\/li>\n<li>\n<p><code>next_update = 2^*\u043d\u043e\u043c\u0435\u0440 \u0440\u0430\u0437\u0440\u044f\u0434\u0430 - 2*<\/code> \u2014 \u0441\u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0441\u0442\u0430\u043b\u043e\u0441\u044c \u0434\u043e \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0435\u0449\u0435 \u043e\u0434\u043d\u043e\u0439 \u0435\u0434\u0438\u043d\u0438\u0446\u044b \u0432 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e.<\/p>\n<\/li>\n<li>\n<p><code>prev_update = next_update<\/code>.<\/p>\n<\/li>\n<li>\n<p><code>nb_cache = *\u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u043d\u044b\u0435 \u0441\u0435\u0439\u0447\u0430\u0441 \u0441\u043e\u0441\u0435\u0434\u0438*<\/code>.<\/p>\n<\/li>\n<li>\n<p><code>nb_cache_subset = *\u0442\u0435\u043a\u0443\u0449\u0435\u0435 \u043f\u043e\u0434\u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e*<\/code>.<\/p>\n<\/li>\n<\/ol>\n<\/li>\n<li>\n<p>\u0412 \u043f\u0440\u043e\u0442\u0438\u0432\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435: <\/p>\n<ol>\n<li>\n<p>\u0418\u0437 \u043f\u043e\u0434\u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0430 \u0443\u0434\u0430\u043b\u044f\u0435\u043c \u0437\u0430\u043a\u0435\u0448\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b (\u0445\u0440\u0430\u043d\u0438\u043c \u0432 <code>nb_cache_subset<\/code>).<\/p>\n<\/li>\n<li>\n<p>\u0412\u044b\u0447\u0438\u0441\u043b\u044f\u0435\u043c \u0441\u043e\u0441\u0435\u0434\u0435\u0439 \u0441 <code>nb_cache<\/code> \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0431\u0430\u0437\u044b.<\/p>\n<\/li>\n<\/ol>\n<\/li>\n<\/ol>\n<\/li>\n<\/ol>\n<h4>\u041e\u0434\u043d\u043e\u0441\u043b\u043e\u0439\u043d\u044b\u0439 \u043a\u0435\u0448<\/h4>\n<p>\u0425\u043e\u0440\u043e\u0448\u0430\u044f \u043b\u0438 \u044d\u0442\u043e \u0438\u0434\u0435\u044f? \u041a\u0430\u043a \u043f\u043e\u0434\u0441\u043f\u043e\u0440\u044c\u0435 \u0434\u043b\u044f \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0438\u0445 \u0440\u0430\u0441\u0441\u0443\u0436\u0434\u0435\u043d\u0438\u0439 \u2014 \u0434\u0430, \u043d\u043e \u043d\u0430 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0435 \u044d\u0442\u0430 \u0441\u0445\u0435\u043c\u0430 \u043a\u0435\u0448\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0434\u0430\u0441\u0442 \u043f\u0440\u0438\u0440\u043e\u0441\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u043a\u043e\u043d\u0446\u0435, \u043a\u043e\u0433\u0434\u0430 \u0443 \u043d\u0430\u0441 \u043f\u043e\u0447\u0442\u0438 \u0432\u0441\u0435 \u0437\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u043e \u0435\u0434\u0438\u043d\u0438\u0446\u0430\u043c\u0438 (\u0442\u0430\u043a \u043a\u0430\u043a \u0441\u043f\u043e\u0441\u043e\u0431\u0430 \u0438\u0442\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u043e \u043e\u043f\u0442\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u043c \u043f\u043e\u0434\u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0430\u043c \u043d\u0435 \u043d\u0430\u0448\u0435\u043b, \u0437\u043d\u0430\u0447\u0438\u0442 \u0438\u0442\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0438\u043d\u043a\u0440\u0435\u043c\u0435\u043d\u0442\u043e\u043c).<\/p>\n<p>\u0412\u0435\u0440\u043d\u0435\u043c\u0441\u044f \u0432 \u0441\u0430\u043c\u043e\u0435 \u043d\u0430\u0447\u0430\u043b\u043e. \u041c\u044b \u043e\u0431\u0441\u0443\u0436\u0434\u0430\u043b\u0438 \u0442\u043e, \u0447\u0442\u043e \u043a\u0435\u0448\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043d\u0443\u0436\u043d\u043e \u0440\u0435\u0434\u043a\u043e \u043c\u0435\u043d\u044f\u044e\u0449\u0438\u0435\u0441\u044f \u0447\u0430\u0441\u0442\u0438. \u0417\u0430 \u044d\u0442\u0443 \u0447\u0430\u0441\u0442\u044c \u043c\u044b \u0432\u0437\u044f\u043b\u0438 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0437\u0430\u043c\u044b\u043a\u0430\u044e\u0449\u0438\u0445 \u0435\u0434\u0438\u043d\u0438\u0446. \u041e\u043d\u0430 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0440\u0435\u0434\u043a\u043e \u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f, \u043d\u043e \u0437\u0430\u043c\u0435\u0442\u0438\u043c, \u0447\u0442\u043e \u044d\u0442\u0430 \u0447\u0430\u0441\u0442\u044c \u0432\u0430\u0440\u0438\u0430\u0442\u0438\u0432\u043d\u0430, \u0442\u043e \u0435\u0441\u0442\u044c, \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u0442\u044c \u0435\u0435 \u0440\u0430\u0437\u043c\u0435\u0440. \u0422\u0435\u043f\u0435\u0440\u044c \u0441\u0434\u0435\u043b\u0430\u0435\u043c \u044d\u0442\u0443 \u0447\u0430\u0441\u0442\u044c \u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0439, \u0442\u043e \u0435\u0441\u0442\u044c \u043a\u0435\u0448\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0431\u0443\u0434\u0435\u043c \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0439 \u0441\u0443\u0444\u0444\u0438\u043a\u0441 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0430.<\/p>\n<p>\u0427\u0442\u043e \u0434\u0430\u0441\u0442 \u0431\u043e\u043b\u044c\u0448\u0438\u0439 \u043f\u0440\u0438\u0440\u043e\u0441\u0442 \u2014 \u043a\u0435\u0448\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0437\u0430\u043c\u044b\u043a\u0430\u044e\u0449\u0438\u0445 \u0435\u0434\u0438\u043d\u0438\u0446 \u0438\u043b\u0438 MSB? \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u043e\u0441\u0447\u0438\u0442\u0430\u0435\u043c \u043d\u0430 \u0442\u043e\u043c \u0436\u0435 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0435 \u0438\u0437 4 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432. \u0414\u043b\u044f \u0441\u0445\u0435\u043c\u044b \u043a\u0435\u0448\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043b\u0438\u0434\u0438\u0440\u0443\u044e\u0449\u0438\u0445 <code>1<\/code> \u043c\u044b \u0438\u043c\u0435\u0435\u043c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0443\u044e \u0441\u0445\u0435\u043c\u0443 \u0440\u0430\u0441\u0447\u0435\u0442\u0430 (\u0432\u0442\u043e\u0440\u043e\u0439 \u0441\u0442\u043e\u043b\u0431\u0435\u0446 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u043d\u043d\u044b\u0445 \u0443\u0437\u043b\u043e\u0432, \u0430 \u0437\u0432\u0435\u0437\u0434\u043e\u0447\u043a\u043e\u0439 \u043e\u0442\u043c\u0435\u0447\u0435\u043d\u044b \u043c\u0435\u0441\u0442\u0430 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u043a\u0435\u0448\u0430):<\/p>\n<pre><code>0001  1 0010  1  * 0011  2 0100  1  * 0101  2 0110  2  * 0111  1 1000  1  * 1001  1 1010  1 1011  2 1100  2  * 1101  1 1110  3  * 1111  1  <\/code><\/pre>\n<p>\u0412\u0441\u0435\u0433\u043e \u043d\u0430\u0434\u043e \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c 22 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430 \u2014 \u043d\u0430 \u0434\u0432\u0430 \u0431\u043e\u043b\u044c\u0448\u0435, \u0447\u0435\u043c \u0441\u0445\u0435\u043c\u0430 \u0441 \u0442\u0430\u0431\u0443-\u0431\u0438\u0442\u043e\u043c.<\/p>\n<p>\u0421\u043e \u0441\u0445\u0435\u043c\u043e\u0439 \u043a\u0435\u0448\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f MSB \u043d\u0430\u0434\u043e \u0432\u043d\u0430\u0447\u0430\u043b\u0435 \u043e\u0442\u0432\u0435\u0442\u0438\u0442\u044c \u043d\u0430 \u0432\u043e\u043f\u0440\u043e\u0441 \u2014 \u0430 \u0447\u0442\u043e \u0442\u0430\u043a\u043e\u0435 MSB, \u043a\u0430\u043a\u043e\u0432 \u0435\u0433\u043e \u0440\u0430\u0437\u043c\u0435\u0440? \u0412\u043e\u0437\u044c\u043c\u0435\u043c \u043c\u0430\u043b\u043e \u2014 \u0431\u0443\u0434\u0435\u043c \u043e\u0447\u0435\u043d\u044c \u043c\u043d\u043e\u0433\u043e \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u0442\u044c, \u0432\u043e\u0437\u044c\u043c\u0435\u043c \u043c\u043d\u043e\u0433\u043e \u2014 \u0431\u0443\u0434\u0435\u043c \u0447\u0430\u0441\u0442\u043e \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u0442\u044c \u044d\u0442\u043e\u0442 MSB. \u0412 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0435, \u0432\u044b\u0447\u0438\u0441\u043b\u0438\u0442\u044c \u043c\u043e\u0436\u043d\u043e \u0432\u0441\u0451, \u0442\u0430\u043a \u043a\u0430\u043a \u0442\u0443\u0442 \u0442\u0430 \u0436\u0435 \u0441\u0430\u043c\u0430\u044f \u0434\u0432\u043e\u0438\u0447\u043d\u0430\u044f \u043c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u043a\u0430. \u041d\u043e \u0434\u043b\u044f \u043d\u0430\u0433\u043b\u044f\u0434\u043d\u043e\u0441\u0442\u0438 \u0432\u043e\u0437\u044c\u043c\u0435\u043c MSB \u0440\u0430\u0432\u043d\u044b\u0439 2:<\/p>\n<pre><code>0001  1 0010  1 0011  2 0100  1  * 0101  1 0110  1 0111  2 1000  1  * 1001  1 1010  1 1011  2 1100  2  * 1101  1 1110  1 1111  2 <\/code><\/pre>\n<p>\u0422\u0443\u0442 \u0443\u0436\u0435 20 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u2014 \u0441\u0442\u043e\u043b\u044c\u043a\u043e \u0436\u0435, \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0432 \u043f\u043e\u0434\u0445\u043e\u0434\u0435 MySQL, \u043d\u043e \u043c\u0435\u043d\u044c\u0448\u0435, \u0447\u0435\u043c \u043f\u043e\u0434\u0445\u043e\u0434 \u0437\u0430\u043c\u044b\u043a\u0430\u044e\u0449\u0438\u0445 \u0435\u0434\u0438\u043d\u0438\u0446.<\/p>\n<blockquote>\n<p>\u0417\u0434\u0435\u0441\u044c \u043a\u0430\u0436\u0434\u044b\u0439 \u0440\u0430\u0437 \u043f\u0440\u0438 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0438 \u043a\u0435\u0448\u0430 \u044f \u0447\u0435\u0441\u0442\u043d\u043e \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u0440\u0430\u0441\u0441\u0447\u0438\u0442\u044b\u0432\u0430\u043b \u0441\u043e\u0441\u0435\u0434\u0435\u0439. \u0412\u044b \u043c\u043e\u0433\u043b\u0438 \u0437\u0430\u043c\u0435\u0442\u0438\u0442\u044c, \u0447\u0442\u043e \u043f\u0440\u0438 \u0440\u0430\u0441\u0447\u0435\u0442\u0435 \u0437\u0430\u043a\u0435\u0448\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u0434\u043b\u044f \u0441\u043e\u0441\u0435\u0434\u0435\u0439 \u043c\u044b \u043c\u043e\u0433\u043b\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0442\u0443 \u0436\u0435 \u0441\u0430\u043c\u0443\u044e \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044e \u0441 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u043c \u0431\u0438\u0442\u043e\u043c \u2014 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043a \u0437\u0430\u043a\u0435\u0448\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u043c \u0441\u043e\u0441\u0435\u0434\u044f\u043c \u044d\u0442\u043e\u0442 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442. \u0422\u0430\u043a\u0430\u044f \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044f \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u0442 \u0434\u043e\u0441\u0442\u0438\u0447\u044c \u0432\u0441\u0435\u0433\u043e \u043b\u0438\u0448\u044c 16 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0439, \u0447\u0442\u043e \u043d\u0430\u043c\u043d\u043e\u0433\u043e \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u0435\u0435. \u0422\u043e\u0433\u0434\u0430 \u044f \u0443\u043f\u0443\u0441\u0442\u0438\u043b \u044d\u0442\u043e\u0442 \u043c\u043e\u043c\u0435\u043d\u0442 \u0438 \u043d\u0435 \u0441\u0442\u0430\u043b \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0442\u044c, \u043d\u043e \u044d\u0442\u043e \u0431\u044b\u043b\u043e \u043a \u043b\u0443\u0447\u0448\u0435\u043c\u0443 \u2014 \u0441\u043a\u043e\u0440\u043e \u0443\u0437\u043d\u0430\u0435\u0442\u0435, \u043f\u043e\u0447\u0435\u043c\u0443.<\/p>\n<\/blockquote>\n<p>\u0421\u0445\u0435\u043c\u0430 \u0441 \u043a\u0435\u0448\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 MSB \u043f\u043e\u043a\u0430\u0437\u0430\u043b\u0430 \u0441\u0435\u0431\u044f \u043b\u0443\u0447\u0448\u0435, \u0434\u0430 \u0438 \u043a \u0442\u043e\u043c\u0443 \u0436\u0435 \u0443 \u043d\u0435\u0435 \u0435\u0441\u0442\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u043d\u0438\u044f (\u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 \u2014 \u0440\u0430\u0437\u043c\u0435\u0440 \u043a\u0435\u0448\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0439 \u0447\u0430\u0441\u0442\u0438). \u041f\u043e \u0438\u0442\u043e\u0433\u0443 \u0432\u044b\u0431\u0438\u0440\u0430\u0435\u043c \u0441\u0445\u0435\u043c\u0443 \u043a\u0435\u0448\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0441 \u043e\u0434\u043d\u0438\u043c \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u043c \u2014 MSB. \u0414\u0430\u043b\u0435\u0435 \u044d\u0442\u0443 \u043d\u0435\u0438\u0437\u043c\u0435\u043d\u044f\u0435\u043c\u0443\u044e \u0447\u0430\u0441\u0442\u044c, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u0437\u0430 \u0441\u0442\u0430\u0440\u0442\u043e\u0432\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0434\u043b\u044f \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f \u0441\u043e\u0441\u0435\u0434\u0435\u0439, \u044f \u0431\u0443\u0434\u0443 \u043d\u0430\u0437\u044b\u0432\u0430\u0442\u044c base (\u0431\u0430\u0437\u043e\u0439). \u0410\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u043d\u0435\u0439 \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0441\u0442: \u0447\u0435\u0440\u0435\u0437 \u043a\u0430\u0436\u0434\u044b\u0435 <img decoding=\"async\" class=\"formula inline\" source=\"2^{len(64 - MSB)}\" alt=\"2^{len(64 - MSB)}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/f\/f7\/f74\/f748a6d28d2a331b0974917cc2bb9c2e.svg\" width=\"88\" height=\"16\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/f\/f7\/f74\/f748a6d28d2a331b0974917cc2bb9c2e.svg 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/formulas\/f\/f7\/f74\/f748a6d28d2a331b0974917cc2bb9c2e.svg 781w\" loading=\"lazy\" decode=\"async\"\/> \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u043c \u0432 \u043a\u0435\u0448 \u044d\u0442\u0443 \u0431\u0430\u0437\u043e\u0432\u0443\u044e \u0447\u0430\u0441\u0442\u044c, \u0430 \u0437\u0430\u0442\u0435\u043c \u043f\u0440\u043e\u0441\u0442\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u043a\u0430\u043a \u0441\u0442\u0430\u0440\u0442\u043e\u0432\u0443\u044e \u0442\u043e\u0447\u043a\u0443 \u043f\u0440\u0438 \u0440\u0430\u0441\u0447\u0435\u0442\u0435 \u0441\u043e\u0441\u0435\u0434\u0435\u0439.<\/p>\n<h4>\u0414\u0432\u0443\u0445\u0441\u043b\u043e\u0439\u043d\u044b\u0439 \u043a\u0435\u0448<\/h4>\n<p>\u041f\u043e\u0433\u043e\u0434\u0438\u0442\u0435, \u043c\u044b \u0432\u0435\u0434\u044c \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u043c \u0441\u043e \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0430\u043c\u0438, \u0430 \u043b\u044e\u0431\u043e\u0435 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u043c\u043e\u0436\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0438\u0437 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0433\u043e \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435\u043c \u043e\u0434\u043d\u043e\u0433\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430! \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e <code>011010<\/code> \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0438\u0437 \u043b\u044e\u0431\u043e\u0433\u043e <code>001010<\/code>, <code>010010<\/code> \u0438\u043b\u0438 <code>011000<\/code>. \u041d\u043e \u044d\u0442\u043e \u0442\u0430\u043a\u0436\u0435 \u0437\u043d\u0430\u0447\u0438\u0442, \u0447\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0442\u0435\u043a\u0443\u0449\u0435\u0435 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u043f\u0440\u043e\u0441\u0442\u044b\u043c \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435\u043c \u0441\u0430\u043c\u043e\u0433\u043e \u043a\u0440\u0430\u0439\u043d\u0435\u0433\u043e \u0441 \u043d\u0430\u0447\u0430\u043b\u0430 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430. \u0422\u043e\u0442 \u0436\u0435 \u0438\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u044b\u0439 \u043f\u0440\u0438\u043c\u0435\u0440 \u0441 \u0442\u0430\u0431\u0443-\u0431\u0438\u0442\u043e\u043c \u2014 \u044d\u0442\u043e \u0447\u0430\u0441\u0442\u043d\u044b\u0439 \u0441\u043b\u0443\u0447\u0430\u0439, \u043a\u043e\u0433\u0434\u0430 \u043c\u044b \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u043b\u0438 \u043f\u0435\u0440\u0432\u044b\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442.<\/p>\n<p>\u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u043e\u0441\u0442\u0440\u043e\u0438\u043c \u0442\u0430\u0431\u043b\u0438\u0446\u0443 \u0438\u0437 4 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u0438 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c, \u043a\u0430\u043a \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0442\u0435\u043a\u0443\u0449\u0435\u0435 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u0438\u0437 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0433\u043e:<\/p>\n<pre><code>0000 &lt;+  &lt;+  &lt;+    ^  |   |   | 0001  |   |   |       |   |   | 0010 -+   |   |    ^      |   | 0011      |   |           |   | 0100 &lt;+  -+   |    ^  |       | 0101  |       |       |       | 0110 -+       |    ^          | 0111          |               | 1000 &lt;+  &lt;+  -+    ^  |   | 1001  |   |       |   | 1010 -+   |    ^      | 1011      |           | 1100 &lt;+  -+    ^  | 1101  |       | 1110 -+    ^ 1111 <\/code><\/pre>\n<p>\u0412\u044b \u0432\u0438\u0434\u0438\u0442\u0435 \u044d\u0442\u043e\u0442 \u043f\u0430\u0442\u0442\u0435\u0440\u043d? \u041c\u044b \u0431\u0435\u0440\u0435\u043c \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u0432 \u044f\u0447\u0435\u0439\u043a\u0435 \u043f\u043e\u0434 \u0438\u043d\u0434\u0435\u043a\u0441\u043e\u043c \u043c\u0435\u043d\u044c\u0448\u0435 \u043d\u0430\u0448\u0435\u0439 \u043d\u0430 \u043a\u0430\u043a\u0443\u044e-\u0442\u043e \u0441\u0442\u0435\u043f\u0435\u043d\u044c \u0434\u0432\u043e\u0439\u043a\u0438 \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u043a\u0430\u043a \u0431\u0430\u0437\u0443 \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0430 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435\u043c \u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e \u043a\u0440\u0430\u0439\u043d\u0435\u0433\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430. \u0427\u0442\u043e \u044d\u0442\u043e \u0437\u0430 \u0441\u0442\u0435\u043f\u0435\u043d\u044c \u0434\u0432\u043e\u0439\u043a\u0438? \u041c\u043e\u0436\u043d\u043e \u0443\u0432\u0438\u0434\u0435\u0442\u044c \u0438\u0437 \u044d\u0442\u043e\u0439 \u0436\u0435 \u0441\u0445\u0435\u043c\u044b \u2014 \u044d\u0442\u043e \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0442\u0435\u043a\u0443\u0449\u0438\u0445 \u043b\u0438\u0434\u0438\u0440\u0443\u044e\u0449\u0438\u0445 \u043d\u0443\u043b\u0435\u0439, \u0442\u043e \u0435\u0441\u0442\u044c \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u0441\u043e\u0441\u0435\u0434\u0435\u0439, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043c\u043e\u0436\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e, \u0440\u0430\u0441\u043f\u043e\u043b\u0430\u0433\u0430\u0435\u0442\u0441\u044f \u0432 <img decoding=\"async\" class=\"formula inline\" source=\"2^{zeros}\" alt=\"2^{zeros}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/e\/eb\/eba\/eba58b24cac6b5d2f283d3adda5b6fca.svg\" width=\"40\" height=\"12\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/e\/eb\/eba\/eba58b24cac6b5d2f283d3adda5b6fca.svg 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/formulas\/e\/eb\/eba\/eba58b24cac6b5d2f283d3adda5b6fca.svg 781w\" loading=\"lazy\" decode=\"async\"\/> \u0448\u0430\u0433\u0430\u0445 \u043d\u0430\u0437\u0430\u0434, \u0433\u0434\u0435 <img decoding=\"async\" class=\"formula inline\" source=\"zeros\" alt=\"zeros\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/0\/07\/077\/077effb59e9d5fcfabca678cf6da604c.svg\" width=\"40\" height=\"12\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/0\/07\/077\/077effb59e9d5fcfabca678cf6da604c.svg 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/formulas\/0\/07\/077\/077effb59e9d5fcfabca678cf6da604c.svg 781w\" loading=\"lazy\" decode=\"async\"\/> \u2014 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0442\u0435\u043a\u0443\u0449\u0438\u0445 \u043b\u0438\u0434\u0438\u0440\u0443\u044e\u0449\u0438\u0445 \u043d\u0443\u043b\u0435\u0439 \u043d\u043e\u043c\u0435\u0440\u0430 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0438.<\/p>\n<p>\u041d\u043e \u0432\u0435\u0434\u044c \u044d\u0442\u043e \u0442\u0430\u0431\u043b\u0438\u0446\u0430 \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f! \u0414\u043b\u044f \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f \u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0430 \u043c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0433\u043e \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f. \u0421\u0442\u043e\u043f, \u0438 \u0435\u0449\u0435 \u0440\u0430\u0437 \u043f\u043e\u0433\u043e\u0434\u0438\u0442\u0435! \u041d\u0435 \u0437\u043d\u0430\u0447\u0438\u0442 \u043b\u0438 \u044d\u0442\u043e, \u0447\u0442\u043e \u0434\u043b\u044f \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f \u0441\u043e\u0441\u0435\u0434\u0435\u0439 \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0438\u0437 <img decoding=\"async\" class=\"formula inline\" source=\"2^i\" alt=\"2^i\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/9\/91\/91c\/91c474acddeedae9e86913ee8bb17ce0.svg\" width=\"12\" height=\"12\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/9\/91\/91c\/91c474acddeedae9e86913ee8bb17ce0.svg 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/formulas\/9\/91\/91c\/91c474acddeedae9e86913ee8bb17ce0.svg 781w\" loading=\"lazy\" decode=\"async\"\/> \u043f\u043e\u0434\u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0430 \u043d\u0430\u043c \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0440\u043e\u0432\u043d\u043e <img decoding=\"async\" class=\"formula inline\" source=\"2^i\" alt=\"2^i\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/9\/91\/91c\/91c474acddeedae9e86913ee8bb17ce0.svg\" width=\"12\" height=\"12\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/9\/91\/91c\/91c474acddeedae9e86913ee8bb17ce0.svg 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/formulas\/9\/91\/91c\/91c474acddeedae9e86913ee8bb17ce0.svg 781w\" loading=\"lazy\" decode=\"async\"\/> \u0443\u0437\u043b\u043e\u0432? \u0414\u0430, \u0437\u043d\u0430\u0447\u0438\u0442! \u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u0432\u0441\u0435 \u043d\u0430\u0448\u0435 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0434\u0435\u043b\u0438\u0442\u044c \u043d\u0430 2 \u0447\u0430\u0441\u0442\u0438: \u0431\u0430\u0437\u043e\u0432\u0443\u044e (base), \u0433\u0434\u0435 \u043c\u044b \u0437\u0430\u043a\u0435\u0448\u0438\u0440\u043e\u0432\u0430\u043b\u0438 \u0440\u0435\u0434\u043a\u043e \u043c\u0435\u043d\u044f\u044e\u0449\u0443\u044e\u0441\u044f \u0441\u0442\u0430\u0440\u0448\u0443\u044e \u0447\u0430\u0441\u0442\u044c, \u0438 \u0442\u0430\u0431\u043b\u0438\u0447\u043d\u0443\u044e (table), \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u0435\u0442\u0441\u044f \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043d\u0430\u0448\u0435\u0439 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f. \u0412\u043e\u043f\u0440\u043e\u0441\u0430 \u043e \u0440\u0430\u0437\u043c\u0435\u0440\u0435 \u043a\u0430\u0436\u0434\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u043d\u0435 \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u0435\u0442 \u2014 table-\u0447\u0430\u0441\u0442\u044c \u0431\u0435\u0440\u0435\u0442 \u0442\u043e, \u0447\u0442\u043e \u043e\u0441\u0442\u0430\u043b\u043e\u0441\u044c: <img decoding=\"async\" class=\"formula inline\" source=\"64 - len(MSB)\" alt=\"64 - len(MSB)\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/4\/4d\/4da\/4da00a8b349661d1c656fac316a032b6.svg\" width=\"120\" height=\"16\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/4\/4d\/4da\/4da00a8b349661d1c656fac316a032b6.svg 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/formulas\/4\/4d\/4da\/4da00a8b349661d1c656fac316a032b6.svg 781w\" loading=\"lazy\" decode=\"async\"\/> (\u043b\u0438\u0431\u043e \u043d\u0430\u043e\u0431\u043e\u0440\u043e\u0442). \u041f\u043e \u0438\u0442\u043e\u0433\u0443 \u043c\u044b \u0438\u043c\u0435\u0435\u043c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c:<\/p>\n<ol>\n<li>\n<p>\u0415\u0441\u043b\u0438 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u044f \u0434\u0435\u043b\u0438\u0442\u0441\u044f \u043d\u0430 <img decoding=\"async\" class=\"formula inline\" source=\"2^{table size}\" alt=\"2^{table size}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/a\/a8\/a85\/a856bd8e00305c49dd702ec041453dab.svg\" width=\"56\" height=\"16\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/a\/a8\/a85\/a856bd8e00305c49dd702ec041453dab.svg 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/formulas\/a\/a8\/a85\/a856bd8e00305c49dd702ec041453dab.svg 781w\" loading=\"lazy\" decode=\"async\"\/>, \u0442\u043e \u0447\u0435\u0441\u0442\u043d\u043e \u0440\u0430\u0441\u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u043c \u0432\u0441\u0435\u0445 \u0441\u043e\u0441\u0435\u0434\u0435\u0439 \u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u043c \u0432 base.<\/p>\n<\/li>\n<li>\n<p>\u0412 \u043f\u0440\u043e\u0442\u0438\u0432\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435: <\/p>\n<ol>\n<li>\n<p>\u0411\u0435\u0440\u0435\u043c \u043d\u0438\u0436\u043d\u044e\u044e \u0447\u0430\u0441\u0442\u044c \u043d\u043e\u043c\u0435\u0440\u0430 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0438 (\u0431\u0438\u0442\u043e\u0432\u043e\u0439 \u043c\u0430\u0441\u043a\u043e\u0439)<\/p>\n<\/li>\n<li>\n<p>\u0421\u0447\u0438\u0442\u0430\u0435\u043c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043d\u0443\u043b\u0435\u0439 \u0438 \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u0435\u043c: <img decoding=\"async\" class=\"formula inline\" source=\"delta = 2^{zeros}\" alt=\"delta = 2^{zeros}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/5\/54\/543\/54394ecfd9a2dfcbe63b1d72b1a4326f.svg\" width=\"96\" height=\"12\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/5\/54\/543\/54394ecfd9a2dfcbe63b1d72b1a4326f.svg 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/formulas\/5\/54\/543\/54394ecfd9a2dfcbe63b1d72b1a4326f.svg 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<\/li>\n<li>\n<p>\u0411\u0435\u0440\u0435\u043c \u0441\u043e\u0441\u0435\u0434\u0435\u0439 \u0440\u043e\u0434\u0438\u0442\u0435\u043b\u044f: <img decoding=\"async\" class=\"formula inline\" source=\"table[iteration - delta]\" alt=\"table[iteration - delta]\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/3\/38\/38b\/38bbb3c64fd169ed40ad39d20318c04f.svg\" width=\"176\" height=\"16\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/3\/38\/38b\/38bbb3c64fd169ed40ad39d20318c04f.svg 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/formulas\/3\/38\/38b\/38bbb3c64fd169ed40ad39d20318c04f.svg 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<\/li>\n<li>\n<p>\u0414\u043e\u0432\u044b\u0447\u0438\u0441\u043b\u044f\u0435\u043c \u0441\u043e\u0441\u0435\u0434\u0435\u0439 \u0434\u043b\u044f \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430<\/p>\n<\/li>\n<li>\n<p>\u0421\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u043c \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0443<\/p>\n<\/li>\n<\/ol>\n<\/li>\n<\/ol>\n<p>\u0412\u043e\u0437\u043d\u0438\u043a\u0430\u0435\u0442 \u0443\u0436\u0435 \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0432\u043e\u043f\u0440\u043e\u0441: \u0430 \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043c\u044b \u0433\u043e\u0442\u043e\u0432\u044b \u043e\u0442\u0434\u0430\u0442\u044c \u043d\u0430 \u044d\u0442\u0443 \u0442\u0430\u0431\u043b\u0438\u0446\u0443? \u0414\u043b\u044f \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0432\u043e\u0441\u044c\u043c\u0438\u0431\u0430\u0439\u0442\u043d\u043e\u0435 \u0447\u0438\u0441\u043b\u043e, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0440\u0430\u0437\u043c\u0435\u0440 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0430 \u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d. \u0417\u043d\u0430\u0447\u0438\u0442, \u0434\u043b\u044f \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u0441 <img decoding=\"async\" class=\"formula inline\" source=\"i\" alt=\"i\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/8\/86\/865\/865c0c0b4ab0e063e5caa3387c1a8741.svg\" width=\"12\" height=\"12\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/8\/86\/865\/865c0c0b4ab0e063e5caa3387c1a8741.svg 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/formulas\/8\/86\/865\/865c0c0b4ab0e063e5caa3387c1a8741.svg 781w\" loading=\"lazy\" decode=\"async\"\/> \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430\u043c\u0438 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f <img decoding=\"async\" class=\"formula inline\" source=\"8 * 2^i = 2^{i + 3}\" alt=\"8 * 2^i = 2^{i + 3}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/6\/6b\/6b5\/6b5ee56822423358d37f58ef7e1298d5.svg\" width=\"96\" height=\"16\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/6\/6b\/6b5\/6b5ee56822423358d37f58ef7e1298d5.svg 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/formulas\/6\/6b\/6b5\/6b5ee56822423358d37f58ef7e1298d5.svg 781w\" loading=\"lazy\" decode=\"async\"\/> \u0431\u0430\u0439\u0442\u043e\u0432. \u0422\u0435\u043f\u0435\u0440\u044c \u043c\u043e\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0433\u0440\u0443\u0431\u044b\u0435 \u043f\u0440\u0438\u043a\u0438\u0434\u043a\u0438.<\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<th>\n<p align=\"left\">\u0420\u0430\u0437\u043c\u0435\u0440 \u0442\u0430\u0431\u043b\u0438\u0446\u044b<\/p>\n<\/th>\n<th>\n<p align=\"left\">\u0417\u0430\u043d\u0438\u043c\u0430\u0435\u043c\u0430\u044f \u043f\u0430\u043c\u044f\u0442\u044c<\/p>\n<\/th>\n<th>\n<p align=\"left\">\u0412\u0441\u0435\u0433\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432<\/p>\n<\/th>\n<th>\n<p align=\"left\">\u0418\u0442\u0435\u0440\u0430\u0446\u0438\u0439<\/p>\n<\/th>\n<th>\n<p align=\"left\">\u0421\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u043e<\/p>\n<\/th>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">2<\/p>\n<\/td>\n<td>\n<p align=\"left\">32   \u0431<\/p>\n<\/td>\n<td>\n<p align=\"left\">4<\/p>\n<\/td>\n<td>\n<p align=\"left\">3<\/p>\n<\/td>\n<td>\n<p align=\"left\">1<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">3<\/p>\n<\/td>\n<td>\n<p align=\"left\">64   \u0431<\/p>\n<\/td>\n<td>\n<p align=\"left\">12<\/p>\n<\/td>\n<td>\n<p align=\"left\">7<\/p>\n<\/td>\n<td>\n<p align=\"left\">5<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">4<\/p>\n<\/td>\n<td>\n<p align=\"left\">128  \u0431<\/p>\n<\/td>\n<td>\n<p align=\"left\">32<\/p>\n<\/td>\n<td>\n<p align=\"left\">15<\/p>\n<\/td>\n<td>\n<p align=\"left\">17<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">5<\/p>\n<\/td>\n<td>\n<p align=\"left\">256  \u0431<\/p>\n<\/td>\n<td>\n<p align=\"left\">80<\/p>\n<\/td>\n<td>\n<p align=\"left\">31<\/p>\n<\/td>\n<td>\n<p align=\"left\">49<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">6<\/p>\n<\/td>\n<td>\n<p align=\"left\">512  \u0431<\/p>\n<\/td>\n<td>\n<p align=\"left\">192<\/p>\n<\/td>\n<td>\n<p align=\"left\">63<\/p>\n<\/td>\n<td>\n<p align=\"left\">129<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">7<\/p>\n<\/td>\n<td>\n<p align=\"left\">1    \u041a\u0431<\/p>\n<\/td>\n<td>\n<p align=\"left\">448<\/p>\n<\/td>\n<td>\n<p align=\"left\">127<\/p>\n<\/td>\n<td>\n<p align=\"left\">321<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">8<\/p>\n<\/td>\n<td>\n<p align=\"left\">2    \u041a\u0431<\/p>\n<\/td>\n<td>\n<p align=\"left\">1024<\/p>\n<\/td>\n<td>\n<p align=\"left\">255<\/p>\n<\/td>\n<td>\n<p align=\"left\">769<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">9<\/p>\n<\/td>\n<td>\n<p align=\"left\">4    \u041a\u0431<\/p>\n<\/td>\n<td>\n<p align=\"left\">2304<\/p>\n<\/td>\n<td>\n<p align=\"left\">511<\/p>\n<\/td>\n<td>\n<p align=\"left\">1793<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">10<\/p>\n<\/td>\n<td>\n<p align=\"left\">8    \u041a\u0431<\/p>\n<\/td>\n<td>\n<p align=\"left\">5120<\/p>\n<\/td>\n<td>\n<p align=\"left\">1023<\/p>\n<\/td>\n<td>\n<p align=\"left\">4097<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">11<\/p>\n<\/td>\n<td>\n<p align=\"left\">16   \u041a\u0431<\/p>\n<\/td>\n<td>\n<p align=\"left\">11264<\/p>\n<\/td>\n<td>\n<p align=\"left\">2047<\/p>\n<\/td>\n<td>\n<p align=\"left\">9217<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">12<\/p>\n<\/td>\n<td>\n<p align=\"left\">32   \u041a\u0431<\/p>\n<\/td>\n<td>\n<p align=\"left\">24576<\/p>\n<\/td>\n<td>\n<p align=\"left\">4095<\/p>\n<\/td>\n<td>\n<p align=\"left\">20481<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>\u041b\u0435\u0433\u0435\u043d\u0434\u0430:<\/p>\n<ul>\n<li>\n<p>\u0420\u0430\u0437\u043c\u0435\u0440 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u2014 \u0440\u0430\u0437\u043c\u0435\u0440 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0430, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043c\u044b \u043a\u0435\u0448\u0438\u0440\u0443\u0435\u043c.<\/p>\n<\/li>\n<li>\n<p>\u0417\u0430\u043d\u0438\u043c\u0430\u0435\u043c\u0430\u044f \u043f\u0430\u043c\u044f\u0442\u044c \u2014 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043f\u0430\u043c\u044f\u0442\u0438, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442 \u0442\u0430\u0431\u043b\u0438\u0446\u0430 \u0434\u043b\u044f \u0442\u0435\u043a\u0443\u0449\u0435\u0439 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 (<img decoding=\"async\" class=\"formula inline\" source=\"2^{table\\ size + 3}\" alt=\"2^{table\\ size + 3}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/4\/4a\/4a4\/4a43496ac7ebf98fcbd98c52b230a246.svg\" width=\"72\" height=\"16\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/4\/4a\/4a4\/4a43496ac7ebf98fcbd98c52b230a246.svg 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/formulas\/4\/4a\/4a4\/4a43496ac7ebf98fcbd98c52b230a246.svg 781w\" loading=\"lazy\" decode=\"async\"\/>).<\/p>\n<\/li>\n<li>\n<p>\u0412\u0441\u0435\u0433\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u2014 \u0441\u0443\u043c\u043c\u0430 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u0438\u0437 \u0432\u0441\u0435\u0445 \u043f\u043e\u0434\u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432 (<img decoding=\"async\" class=\"formula inline\" source=\"\\sum_{k = 1}^{table\\ size}k C_{table\\ size}^{k}\" alt=\"\\sum_{k = 1}^{table\\ size}k C_{table\\ size}^{k}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/6\/6e\/6e4\/6e44be28760aa9e1edc44d5f079f095c.svg\" width=\"128\" height=\"48\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/6\/6e\/6e4\/6e44be28760aa9e1edc44d5f079f095c.svg 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/formulas\/6\/6e\/6e4\/6e44be28760aa9e1edc44d5f079f095c.svg 781w\" loading=\"lazy\" decode=\"async\"\/>).<\/p>\n<\/li>\n<li>\n<p>\u0418\u0442\u0435\u0440\u0430\u0446\u0438\u0439 \u2014 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0434\u043e\u043b\u0436\u043d\u044b \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0432 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0439 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438, \u0442\u043e\u0436\u0435 \u0441\u0430\u043c\u043e\u0435 \u0447\u0442\u043e \u0438 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0439, \u043d\u043e \u043f\u0435\u0440\u0432\u0443\u044e (\u043f\u0443\u0441\u0442\u0443\u044e) \u043d\u0435 \u0441\u0447\u0438\u0442\u0430\u0435\u043c (<img decoding=\"async\" class=\"formula inline\" source=\"2^{table\\ size} - 1\" alt=\"2^{table\\ size} - 1\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/8\/83\/83d\/83dc5bcbf57093aec666e785974b5f45.svg\" width=\"88\" height=\"16\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/8\/83\/83d\/83dc5bcbf57093aec666e785974b5f45.svg 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/formulas\/8\/83\/83d\/83dc5bcbf57093aec666e785974b5f45.svg 781w\" loading=\"lazy\" decode=\"async\"\/>).<\/p>\n<\/li>\n<li>\n<p>\u0418\u0442\u0435\u0440\u0430\u0446\u0438\u0439 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u043e \u2014 \u0440\u0430\u0437\u043d\u0438\u0446\u0430 \u043c\u0435\u0436\u0434\u0443 &#171;\u0412\u0441\u0435\u0433\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432&#187; \u0438 &#171;\u0418\u0442\u0435\u0440\u0430\u0446\u0438\u0439&#187;.<\/p>\n<\/li>\n<\/ul>\n<p>\u041a\u0430\u043a\u043e\u0439 \u0440\u0430\u0437\u043c\u0435\u0440 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u2014 \u043c\u043e\u0436\u043d\u043e \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u0442\u044c \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438 \u0438\u043b\u0438 \u043f\u0440\u043e\u0441\u0442\u043e \u0432\u044b\u0431\u0440\u0430\u0442\u044c \u043e\u043f\u0442\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043f\u043e\u0434 \u0441\u0432\u043e\u044e \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0443 \u044d\u0432\u0440\u0438\u0441\u0442\u0438\u0447\u0435\u0441\u043a\u0438. \u0427\u0442\u043e\u0431\u044b \u0434\u0430\u043b\u044c\u0448\u0435 \u0431\u044b\u043b\u043e \u043f\u0440\u043e\u0449\u0435 \u0440\u0430\u0437\u043c\u044b\u0448\u043b\u044f\u0442\u044c, \u044f \u0432\u044b\u0431\u0435\u0440\u0443 \u0440\u0430\u0437\u043c\u0435\u0440 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u0432 10 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432.<\/p>\n<details class=\"spoiler\">\n<summary>\u0423\u0432\u0435\u043b\u0438\u0447\u0435\u043d\u0438\u0435 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u0442\u043e\u043b\u044c\u043a\u043e \u0443\u043c\u0435\u043d\u044c\u0448\u0430\u0435\u0442 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0439<\/summary>\n<div class=\"spoiler__content\">\n<p>\u041c\u043d\u0435 \u0441\u0442\u0430\u043b\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e \u2014 \u0430 \u043a\u0430\u043a\u043e\u0439 \u0432\u044b\u0438\u0433\u0440\u044b\u0448 \u0434\u0430\u0435\u0442 \u0443\u0432\u0435\u043b\u0438\u0447\u0435\u043d\u0438\u0435 \u0442\u0430\u0431\u043b\u0438\u0446\u044b? \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0439, \u0435\u0441\u043b\u0438 \u0432\u043c\u0435\u0441\u0442\u043e \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u0441 <code>tbl<\/code> \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430\u043c\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c <code>tbl + 1<\/code>. \u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u0432\u043e\u0442 \u0444\u043e\u0440\u043c\u0443\u043b\u0430 \u043e\u0431\u0449\u0435\u0433\u043e \u0447\u0438\u0441\u043b\u0430 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0439. \u041f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u043c, \u0447\u0442\u043e \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043d\u0430\u0448\u0438\u0445 \u0441\u043e\u0441\u0435\u0434\u0435\u0439 (\u0442. \u0435. \u0440\u0430\u0437\u043c\u0435\u0440 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0430) \u0440\u0430\u0432\u0435\u043d <code>max<\/code>, \u0430 \u0440\u0430\u0437\u043c\u0435\u0440 \u0442\u0430\u0431\u043b\u0438\u0446\u044b <code>tbl<\/code>. \u0422\u043e\u0433\u0434\u0430, \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0439, \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0435 \u0434\u043b\u044f \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0432\u0441\u0435\u0445 \u043f\u043e\u0434\u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432 \u0441\u043e\u0441\u0435\u0434\u0435\u0439, \u0440\u0430\u0432\u043d\u044f\u0435\u0442\u0441\u044f:<\/p>\n<p><img decoding=\"async\" class=\"formula\" source=\"\\sum^{k = 0}_{max - tbl}C_{max - tbl}^{k}(2^{tbl} - 1 + k)\" alt=\"\\sum^{k = 0}_{max - tbl}C_{max - tbl}^{k}(2^{tbl} - 1 + k)\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/6\/66\/662\/662054fc9b4a6d64deee1bffd5022a8a.svg\" width=\"216\" height=\"48\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/6\/66\/662\/662054fc9b4a6d64deee1bffd5022a8a.svg 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/formulas\/6\/66\/662\/662054fc9b4a6d64deee1bffd5022a8a.svg 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<p>$$<\/p>\n<p>\u0422\u043e \u0435\u0441\u0442\u044c, \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043d\u043e\u0432\u043e\u0433\u043e <code>base<\/code> <img decoding=\"async\" class=\"formula inline\" source=\"k\" alt=\"k\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/8\/8c\/8ce\/8ce4b16b22b58894aa86c421e8759df3.svg\" width=\"12\" height=\"12\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/8\/8c\/8ce\/8ce4b16b22b58894aa86c421e8759df3.svg 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/formulas\/8\/8c\/8ce\/8ce4b16b22b58894aa86c421e8759df3.svg 781w\" loading=\"lazy\" decode=\"async\"\/> \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0439 \u0434\u043b\u044f \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f \u0435\u0433\u043e \u0441\u043e\u0441\u0435\u0434\u0435\u0439, \u0430 \u043f\u043e\u0442\u043e\u043c \u0435\u0449\u0435 <img decoding=\"async\" class=\"formula inline\" source=\"2^{tbl}\" alt=\"2^{tbl}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/2\/28\/287\/28764e6eabfad820288c21ce04de9495.svg\" width=\"24\" height=\"16\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/2\/28\/287\/28764e6eabfad820288c21ce04de9495.svg 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/formulas\/2\/28\/287\/28764e6eabfad820288c21ce04de9495.svg 781w\" loading=\"lazy\" decode=\"async\"\/> \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0439 \u0442\u0430\u0431\u043b\u0438\u0447\u043d\u044b\u0445. \u0414\u0435\u043b\u0430\u0435\u043c \u044d\u0442\u043e \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043f\u043e\u0434\u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0430 (<img decoding=\"async\" class=\"formula inline\" source=\"\\sum^{k}_{max - tbl}\" alt=\"\\sum^{k}_{max - tbl}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/3\/3b\/3b8\/3b863f7e5473d0a89156224dfd8b6782.svg\" width=\"48\" height=\"48\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/3\/3b\/3b8\/3b863f7e5473d0a89156224dfd8b6782.svg 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/formulas\/3\/3b\/3b8\/3b863f7e5473d0a89156224dfd8b6782.svg 781w\" loading=\"lazy\" decode=\"async\"\/>). \u0422\u0435\u043f\u0435\u0440\u044c \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0432\u044b\u0447\u0438\u0441\u043b\u0438\u0442\u044c \u0440\u0430\u0437\u043d\u0438\u0446\u0443 \u043c\u0435\u0436\u0434\u0443 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430\u043c\u0438 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0439 \u0434\u043b\u044f \u0442\u0435\u043a\u0443\u0449\u0435\u0439 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u0438 \u0443\u0432\u0435\u043b\u0438\u0447\u0435\u043d\u043d\u043e\u0439 \u043d\u0430 1.<\/p>\n<p><img decoding=\"async\" class=\"formula\" source=\"\\sum_{k}^{max - tbl}C_{max - tbl}^{k}(2^{tbl} - 1 + k) - \\sum_{k}^{max - tbl - 1}C_{max - tbl - 1}^{k}(2^{tbl + 1} - 1 + k) = \\\\\\sum_{k}^{max - tbl - 1}C_{max - tbl}^{k}(2^{tbl} - 1 + k) - \\sum_{k}^{max - tbl - 1}C_{max - tbl - 1}^{k}(2^{tbl + 1} - 1 + k) + C_{max - tbl}^{max - tbl}(2^{tbl} - 1 + max - tbl) = \\\\\\sum_{k}^{max - tbl - 1}(C_{max - tbl - 1}^{k} + C_{max - tbl - 1}^{k - 1})(2^{tbl} - 1 + k) - \\sum_{k}^{max - tbl - 1}C_{max - tbl - 1}^{k}(2^{tbl + 1} - 1 + k) + 2^{tbl} - 1 + max - tbl = \\\\\\sum_{k}^{max - tbl - 1}C_{max - tbl - 1}^{k}(2^{tbl} - 1 + k) + \\sum_{k}^{max - tbl - 1}C_{max - tbl - 1}^{k - 1}(2^{tbl} - 1 + k) - \\sum_{k}^{max - tbl - 1}C_{max - tbl - 1}^{k}(2^{tbl + 1} - 1 + k) + 2^{tbl} - 1 + max - tbl = \\\\\\sum_{k}^{max - tbl - 1}C_{max - tbl - 1}^{k}(2^{tbl} - 1 + k - 2^{tbl + 1} + 1 - k) + \\sum_{k}^{max - tbl - 1}C_{max - tbl - 1}^{k - 1}(2^{tbl} - 1 + k) + 2^{tbl} - 1 + max - tbl = \\\\-2^{tbl}\\sum_{k}^{max - tbl - 1}C_{max - tbl - 1}^{k} + \\sum_{k}^{max - tbl - 1}C_{max - tbl - 1}^{k - 1}(2 ^{tbl} - 1 + k) + 2^{tbl} - 1 + max - tbl = \\\\2^{tbl}(\\sum_{k}^{max - tbl - 1}C_{max - tbl - 1}^{k - 1} - \\sum_{k}^{max - tbl - 1}C_{max - tbl - 1}^{k}) + \\sum_{k}^{max - tbl - 1}C_{max - tbl - 1}^{k - 1}(2^{tbl} - 1 + k) + 2^{tbl} + max - tbl\" alt=\"\\sum_{k}^{max - tbl}C_{max - tbl}^{k}(2^{tbl} - 1 + k) - \\sum_{k}^{max - tbl - 1}C_{max - tbl - 1}^{k}(2^{tbl + 1} - 1 + k) = \\\\\\sum_{k}^{max - tbl - 1}C_{max - tbl}^{k}(2^{tbl} - 1 + k) - \\sum_{k}^{max - tbl - 1}C_{max - tbl - 1}^{k}(2^{tbl + 1} - 1 + k) + C_{max - tbl}^{max - tbl}(2^{tbl} - 1 + max - tbl) = \\\\\\sum_{k}^{max - tbl - 1}(C_{max - tbl - 1}^{k} + C_{max - tbl - 1}^{k - 1})(2^{tbl} - 1 + k) - \\sum_{k}^{max - tbl - 1}C_{max - tbl - 1}^{k}(2^{tbl + 1} - 1 + k) + 2^{tbl} - 1 + max - tbl = \\\\\\sum_{k}^{max - tbl - 1}C_{max - tbl - 1}^{k}(2^{tbl} - 1 + k) + \\sum_{k}^{max - tbl - 1}C_{max - tbl - 1}^{k - 1}(2^{tbl} - 1 + k) - \\sum_{k}^{max - tbl - 1}C_{max - tbl - 1}^{k}(2^{tbl + 1} - 1 + k) + 2^{tbl} - 1 + max - tbl = \\\\\\sum_{k}^{max - tbl - 1}C_{max - tbl - 1}^{k}(2^{tbl} - 1 + k - 2^{tbl + 1} + 1 - k) + \\sum_{k}^{max - tbl - 1}C_{max - tbl - 1}^{k - 1}(2^{tbl} - 1 + k) + 2^{tbl} - 1 + max - tbl = \\\\-2^{tbl}\\sum_{k}^{max - tbl - 1}C_{max - tbl - 1}^{k} + \\sum_{k}^{max - tbl - 1}C_{max - tbl - 1}^{k - 1}(2 ^{tbl} - 1 + k) + 2^{tbl} - 1 + max - tbl = \\\\2^{tbl}(\\sum_{k}^{max - tbl - 1}C_{max - tbl - 1}^{k - 1} - \\sum_{k}^{max - tbl - 1}C_{max - tbl - 1}^{k}) + \\sum_{k}^{max - tbl - 1}C_{max - tbl - 1}^{k - 1}(2^{tbl} - 1 + k) + 2^{tbl} + max - tbl\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/2\/21\/210\/2109546a810479afcc71d7fd88af35f5.svg\" width=\"1000\" height=\"424\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/2\/21\/210\/2109546a810479afcc71d7fd88af35f5.svg 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/formulas\/2\/21\/210\/2109546a810479afcc71d7fd88af35f5.svg 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<p>$$<\/p>\n<p>\u0415\u0441\u043b\u0438 \u0440\u0430\u0441\u043a\u0440\u043e\u0435\u043c \u0441\u0443\u043c\u043c\u044b \u043f\u043e\u0434 \u0441\u043a\u043e\u0431\u043a\u0430\u043c\u0438 \u0432 \u043f\u0435\u0440\u0432\u043e\u043c \u0441\u043b\u0430\u0433\u0430\u0435\u043c\u043e\u043c, \u0442\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u043c \u0441\u0443\u043c\u043c\u0443 \u0442\u0430\u043a\u043e\u0433\u043e \u0432\u0438\u0434\u0430: <img decoding=\"async\" class=\"formula inline\" source=\"C^0 - C^1 + C^1 - C^2 + C^2 - ...\" alt=\"C^0 - C^1 + C^1 - C^2 + C^2 - ...\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/f\/fd\/fd6\/fd630e8a0ab972d744866d7b04b361bf.svg\" width=\"232\" height=\"16\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/f\/fd\/fd6\/fd630e8a0ab972d744866d7b04b361bf.svg 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/formulas\/f\/fd\/fd6\/fd630e8a0ab972d744866d7b04b361bf.svg 781w\" loading=\"lazy\" decode=\"async\"\/>. \u041b\u0435\u0433\u043a\u043e \u0443\u0432\u0438\u0434\u0435\u0442\u044c, \u0447\u0442\u043e \u0441\u043b\u0430\u0433\u0430\u0435\u043c\u044b\u0435 \u0432\u0437\u0430\u0438\u043c\u043d\u043e \u0443\u043d\u0438\u0447\u0442\u043e\u0436\u0430\u044e\u0442\u0441\u044f, \u0438 \u043d\u0430 \u0432\u044b\u0445\u043e\u0434\u0435 \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c <img decoding=\"async\" class=\"formula inline\" source=\"C^0 - C^{max - tbl - 1} = 0\" alt=\"C^0 - C^{max - tbl - 1} = 0\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/a\/a2\/a2f\/a2f2533a76024773180afa15ace6bbd1.svg\" width=\"152\" height=\"16\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/a\/a2\/a2f\/a2f2533a76024773180afa15ace6bbd1.svg 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/formulas\/a\/a2\/a2f\/a2f2533a76024773180afa15ace6bbd1.svg 781w\" loading=\"lazy\" decode=\"async\"\/> \u2014 \u043f\u0435\u0440\u0432\u043e\u0435 \u0441\u043b\u0430\u0433\u0430\u0435\u043c\u043e\u0435 \u0440\u0430\u0432\u043d\u043e \u043d\u0443\u043b\u044e. \u0422\u043e\u0433\u0434\u0430 \u0438\u0442\u043e\u0433\u043e\u0432\u043e\u0435 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0435:<\/p>\n<p><img decoding=\"async\" class=\"formula\" source=\"\\sum_{k}^{max - tbl - 1}C_{max - tbl - 1}^{k - 1}(2^{tbl} - 1 + k) + 2^{tbl} - 1 + max - tbl = \\\\\\sum_{k}^{max - tbl - 1}C_{max - tbl - 1}^{k - 1}(2^{tbl} - 1 + k) = \\\\\\sum_{k}^{max - tbl}C_{max - tbl - 1}^{k}(2^{tbl} + k)\" alt=\"\\sum_{k}^{max - tbl - 1}C_{max - tbl - 1}^{k - 1}(2^{tbl} - 1 + k) + 2^{tbl} - 1 + max - tbl = \\\\\\sum_{k}^{max - tbl - 1}C_{max - tbl - 1}^{k - 1}(2^{tbl} - 1 + k) = \\\\\\sum_{k}^{max - tbl}C_{max - tbl - 1}^{k}(2^{tbl} + k)\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/5\/50\/502\/502239a5283dbec8f3e2d8ac44019abf.svg\" width=\"440\" height=\"176\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/5\/50\/502\/502239a5283dbec8f3e2d8ac44019abf.svg 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/formulas\/5\/50\/502\/502239a5283dbec8f3e2d8ac44019abf.svg 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<p>$$<\/p>\n<p>\u0423\u0447\u0438\u0442\u044b\u0432\u0430\u044f, \u0447\u0442\u043e <\/p>\n<p><img decoding=\"async\" class=\"formula inline\" source=\"max &gt; tbl\" alt=\"max &gt; tbl\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/f\/fa\/fac\/fac2c87148057f55a741ba31e011b64a.svg\" width=\"72\" height=\"12\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/f\/fa\/fac\/fac2c87148057f55a741ba31e011b64a.svg 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/formulas\/f\/fa\/fac\/fac2c87148057f55a741ba31e011b64a.svg 781w\" loading=\"lazy\" decode=\"async\"\/> (\u0444\u043e\u0440\u043c\u0443\u043b\u0430 \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u0430\u0433\u0430\u0435\u0442, \u0447\u0442\u043e \u043c\u044b \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u0435\u043c <img decoding=\"async\" class=\"formula inline\" source=\"tbl\" alt=\"tbl\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/e\/e6\/e6d\/e6d037be0f9413ca1751cce755f342ab.svg\" width=\"16\" height=\"12\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/e\/e6\/e6d\/e6d037be0f9413ca1751cce755f342ab.svg 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/formulas\/e\/e6\/e6d\/e6d037be0f9413ca1751cce755f342ab.svg 781w\" loading=\"lazy\" decode=\"async\"\/> \u043d\u0430 1, \u0442\u043e \u0435\u0441\u0442\u044c \u044d\u0442\u043e \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435, \u0430 \u0440\u0430\u0437\u043c\u0435\u0440 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u043d\u0435\u0442 \u0441\u043c\u044b\u0441\u043b\u0430 \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u0442\u044c \u0431\u043e\u043b\u044c\u0448\u0435 \u0440\u0430\u0437\u043c\u0435\u0440\u0430 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0430), \u0432\u0438\u0434\u0438\u043c, \u0447\u0442\u043e \u044d\u0442\u043e \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u043d\u0435\u043e\u0442\u0440\u0438\u0446\u0430\u0442\u0435\u043b\u044c\u043d\u043e, \u0442\u0430\u043a \u043a\u0430\u043a \u043d\u0435\u043e\u0442\u0440\u0438\u0446\u0430\u0442\u0435\u043b\u0435\u043d \u043a\u0430\u0436\u0434\u044b\u0439 \u0447\u043b\u0435\u043d \u044d\u0442\u043e\u0439 \u0441\u0443\u043c\u043c\u044b. <\/p>\n<\/div>\n<\/details>\n<h4>\u0422\u0440\u0435\u0445\u0441\u043b\u043e\u0439\u043d\u044b\u0439 \u043a\u0435\u0448<\/h4>\n<p>\u0418\u0442\u0430\u043a, \u043c\u044b \u043f\u0440\u0438\u0448\u043b\u0438 \u043a \u0438\u0434\u0435\u0435 \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u043d\u044b\u0445 \u0441\u043e\u0441\u0435\u0434\u0435\u0439 \u0441 \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u044b\u043c \u0435\u0435 \u0434\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435\u043c. \u041d\u0435\u043f\u043b\u043e\u0445\u043e, \u043d\u043e \u0433\u0440\u0443\u0441\u0442\u043d\u043e, \u0447\u0442\u043e \u0432 \u043a\u0435\u0448\u0435 \u0442\u043e\u043b\u044c\u043a\u043e 10 \u0443\u0437\u043b\u043e\u0432 \u2014 \u0434\u043b\u044f \u0441\u043b\u043e\u0436\u043d\u044b\u0445 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e \u043f\u0435\u0440\u0435\u0440\u0430\u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0442\u044c base. \u0414\u0430, \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0440\u0430\u0437\u043c\u0435\u0440 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u043c\u044b\u043c, \u043d\u043e \u0432 \u043b\u044e\u0431\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0441 \u043a\u0430\u043a\u043e\u0433\u043e-\u0442\u043e \u043c\u043e\u043c\u0435\u043d\u0442\u0430 \u0440\u0430\u0437\u043c\u0435\u0440 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u043c\u043e\u0436\u0435\u0442 \u0441\u0442\u0430\u0442\u044c \u043d\u0435\u043f\u043e\u0437\u0432\u043e\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0431\u043e\u043b\u044c\u0448\u0438\u043c, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0443\u0436\u0435 \u0441 15 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0442\u0430\u0431\u043b\u0438\u0446\u0430 \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u043c 256 \u041a\u0431. \u0412 \u0445\u0443\u0434\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043f\u043e\u0441\u043b\u0435 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u043f\u043e\u0434\u043e\u0431\u043d\u044b\u0445 \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u0432\u043d\u044b\u0445 \u0432\u044b\u0437\u043e\u0432\u043e\u0432 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0442\u043e\u0442 \u0436\u0435 <code>EnumerateCsgRecursive<\/code>) \u043f\u0430\u043c\u044f\u0442\u044c, \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u043d\u0430\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0434 \u0442\u0430\u0431\u043b\u0438\u0446\u044b, \u043c\u043e\u0436\u0435\u0442 \u0441\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0431\u043e\u043b\u044c\u0448\u0435 \u043c\u0435\u0433\u0430\u0431\u0430\u0439\u0442\u0430. \u0410 \u043c\u043e\u0436\u043d\u043e \u043b\u0438 \u043a\u0430\u043a-\u0442\u043e \u0435\u0449\u0435 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c? \u041c\u043e\u0436\u043d\u043e.<\/p>\n<p>\u0412\u0435\u0440\u043d\u0435\u043c\u0441\u044f \u043a \u043d\u0430\u0447\u0430\u043b\u0443. \u0412\u0441\u044f \u0438\u0434\u0435\u044f \u043a\u0435\u0448\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0432 MySQL \u043e\u0441\u043d\u043e\u0432\u044b\u0432\u0430\u043b\u0430\u0441\u044c \u043d\u0430 \u0434\u043e\u0440\u0430\u0441\u0447\u0435\u0442\u0435 \u0441\u043e\u0441\u0435\u0434\u0435\u0439 \u043f\u0435\u0440\u0432\u044b\u043c \u0443\u0437\u043b\u043e\u043c \u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0430, \u043d\u043e \u043a\u043e\u0433\u0434\u0430 \u043d\u0430\u0441\u0442\u0443\u043f\u0430\u043b \u043c\u043e\u043c\u0435\u043d\u0442 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0441\u043e\u0441\u0435\u0434\u0435\u0439 \u0434\u043b\u044f \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0438\u0445 \u0440\u0430\u0441\u0447\u0435\u0442\u043e\u0432, \u043e\u043d\u0438 <em>\u043d\u0435<\/em> \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u043b\u0438 \u0441\u043e\u0441\u0435\u0434\u0435\u0439, \u0435\u0441\u043b\u0438 \u0432 \u0442\u0435\u043a\u0443\u0449\u0435\u043c \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0435 \u0443\u0447\u0430\u0441\u0442\u0432\u0443\u0435\u0442 \u044d\u0442\u043e\u0442 \u043f\u0435\u0440\u0432\u044b\u0439 <code>taboo<\/code>-\u0431\u0438\u0442. \u041f\u043e\u0447\u0435\u043c\u0443? \u0410 \u043f\u043e\u0442\u043e\u043c\u0443, \u0447\u0442\u043e \u044d\u0442\u043e \u043a\u043e\u043d\u0435\u0447\u043d\u0430\u044f \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430! \u0421\u043e\u0441\u0435\u0434\u0438, \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u044b\u0435 \u0432 \u0442\u0430\u043a\u043e\u043c \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0435, \u043f\u0440\u0438 \u0438\u0442\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438 \u0438\u043d\u043a\u0440\u0435\u043c\u0435\u043d\u0442\u043e\u043c \u043d\u0438\u043a\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0431\u043e\u043b\u044c\u0448\u0435 \u043d\u0435 \u0431\u0443\u0434\u0443\u0442. \u0417\u0430 \u0434\u043e\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c\u0441\u0442\u0432\u043e\u043c \u0434\u043e\u043b\u0433\u043e \u0445\u043e\u0434\u0438\u0442\u044c \u043d\u0435 \u043d\u0443\u0436\u043d\u043e \u2014 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u0442\u0435 \u043d\u0430 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0443\u044e \u0441\u0445\u0435\u043c\u0443, \u0438 \u0443\u0432\u0438\u0434\u0438\u0442\u0435, \u0447\u0442\u043e \u0441\u043e\u0441\u0435\u0434\u0438, \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u043d\u044b\u0435 \u0432 \u043d\u0435\u0447\u0435\u0442\u043d\u044b\u0445 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u044f\u0445, \u043d\u0438\u043a\u0435\u043c \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f. \u0422\u043e \u0435\u0441\u0442\u044c \u043c\u044b \u0441\u043f\u043e\u043a\u043e\u0439\u043d\u043e \u043c\u043e\u0436\u0435\u043c \u043d\u0435 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0442\u044c \u0441\u043e\u0441\u0435\u0434\u0435\u0439 \u043d\u0435\u0447\u0435\u0442\u043d\u044b\u0445 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0439. \u0421\u043a\u043e\u043b\u044c\u043a\u043e \u0436\u0435 \u0442\u0430\u043a\u0430\u044f \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044f \u043d\u0430\u043c \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u0442? \u0420\u043e\u0432\u043d\u043e \u043f\u043e\u043b\u043e\u0432\u0438\u043d\u0443: \u043f\u043e\u043b\u043e\u0432\u0438\u043d\u0430 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432 \u0447\u0435\u0442\u043d\u0430, \u0430 \u0434\u0440\u0443\u0433\u0430\u044f \u2014 \u043d\u0435\u0447\u0435\u0442\u043d\u0430. \u041a\u043e\u0434, \u043a\u043e\u043d\u0435\u0447\u043d\u043e, \u043f\u0440\u0438\u0434\u0435\u0442\u0441\u044f \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0434\u043e\u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c, \u043d\u0430\u0434\u043e \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u0442\u044c \u0438\u043d\u0434\u0435\u043a\u0441\u0430\u0446\u0438\u044e \u043d\u043e\u0432\u043e\u0439 \u0441\u0445\u0435\u043c\u044b: \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0433\u043e \u0438\u043d\u0434\u0435\u043a\u0441\u0430 \u043d\u0443\u0436\u043d\u043e \u0432\u0437\u044f\u0442\u044c \u043d\u0435 <img decoding=\"async\" class=\"formula inline\" source=\"2^{zeros}\" alt=\"2^{zeros}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/e\/eb\/eba\/eba58b24cac6b5d2f283d3adda5b6fca.svg\" width=\"40\" height=\"12\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/e\/eb\/eba\/eba58b24cac6b5d2f283d3adda5b6fca.svg 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/formulas\/e\/eb\/eba\/eba58b24cac6b5d2f283d3adda5b6fca.svg 781w\" loading=\"lazy\" decode=\"async\"\/>, \u0430 <img decoding=\"async\" class=\"formula inline\" source=\"2^{zeros - 1}\" alt=\"2^{zeros - 1}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/5\/5f\/5fd\/5fd7b420dbdcd1bd111a54be3afcb0ed.svg\" width=\"56\" height=\"16\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/5\/5f\/5fd\/5fd7b420dbdcd1bd111a54be3afcb0ed.svg 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/formulas\/5\/5f\/5fd\/5fd7b420dbdcd1bd111a54be3afcb0ed.svg 781w\" loading=\"lazy\" decode=\"async\"\/> \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u043d\u0430\u0437\u0430\u0434.<\/p>\n<p>\u041f\u043e\u0434\u043e\u0436\u0434\u0438\u0442\u0435, \u043d\u043e \u0435\u0441\u043b\u0438 \u043c\u044b \u043e\u0431\u0440\u0435\u0436\u0435\u043c \u043f\u0435\u0440\u0432\u044b\u0435 \u0431\u0438\u0442\u044b, \u0442\u043e \u043e\u0441\u0442\u0430\u043d\u0435\u0442\u0441\u044f \u0434\u0440\u0443\u0433\u0430\u044f \u0447\u0430\u0441\u0442\u044c \u0441\u043e \u0441\u0445\u043e\u0436\u0438\u043c \u043f\u0430\u0442\u0442\u0435\u0440\u043d\u043e\u043c. \u0427\u0442\u043e \u0435\u0441\u043b\u0438 \u0438 \u0435\u0435 \u0442\u043e\u0436\u0435 \u0442\u0430\u043a \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c, \u0438 \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0440\u0430\u0437 \u043c\u043e\u0436\u043d\u043e \u0442\u0430\u043a \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u0442\u044c? \u041d\u0435 \u0431\u0443\u0434\u0443 \u0443\u0442\u043e\u043c\u043b\u044f\u0442\u044c \u0440\u0430\u0441\u0441\u0443\u0436\u0434\u0435\u043d\u0438\u044f\u043c\u0438, \u0441\u043a\u0430\u0436\u0443 \u0441\u0440\u0430\u0437\u0443 \u2014 \u044f \u0441\u043c\u043e\u0433 \u043f\u0440\u0438\u043c\u0435\u043d\u0438\u0442\u044c \u043f\u043e\u0434\u043e\u0431\u043d\u043e\u0435 \u043f\u0440\u0435\u0444\u0438\u043a\u0441\u043d\u043e\u0435 \u0441\u0436\u0430\u0442\u0438\u0435 \u0434\u043b\u044f \u0447\u0435\u0442\u044b\u0440\u0435\u0445 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432, \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u043f\u043e\u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043b\u043e\u0441\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u0432\u0435 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u0434\u043b\u044f \u0440\u0430\u0441\u0447\u0435\u0442\u0430 \u0442\u0435\u043a\u0443\u0449\u0438\u0445 \u0441\u043e\u0441\u0435\u0434\u0435\u0439. \u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u043c\u044b \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u043c \u043a \u0442\u0440\u0435\u0445\u0441\u043b\u043e\u0439\u043d\u043e\u0439 \u0441\u0445\u0435\u043c\u0435 \u043a\u0435\u0448\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f: base, table, hot (\u0438\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e \u044f \u0438\u0445 \u043d\u0430\u0437\u0432\u0430\u043b well-done, medium \u0438 rare). \u0422\u0440\u0435\u0442\u044c\u044e \u0447\u0430\u0441\u0442\u044c, hot, \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0437\u0432\u0430\u0442\u044c \u0441\u0436\u0430\u0442\u044b\u043c \u043f\u0440\u0435\u0444\u0438\u043a\u0441\u043e\u043c.<\/p>\n<p>\u0410\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0440\u0430\u0431\u043e\u0442\u044b \u0442\u0435\u043f\u0435\u0440\u044c \u0435\u0449\u0435 \u0441\u0438\u043b\u044c\u043d\u0435\u0435 \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u043e\u0442 \u043d\u043e\u043c\u0435\u0440\u0430 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0438: \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0435\u0433\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043c\u044b \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u043c \u0441 base-, table- \u0438\u043b\u0438 hot-\u0447\u0430\u0441\u0442\u044c\u044e.<\/p>\n<p>\u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043f\u043e\u0440\u044f\u0434\u043e\u043a \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 hot-\u0447\u0430\u0441\u0442\u0438. \u041e\u043d\u0430 \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0438\u0437 \u0447\u0435\u0442\u044b\u0440\u0435\u0445 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432, \u0438 \u0433\u043b\u0430\u0432\u043d\u043e\u0435 \u2014 \u043f\u0430\u0442\u0442\u0435\u0440\u043d \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u0435\u0442\u0441\u044f. \u0421\u0445\u0435\u043c\u0443 \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u0439 \u043c\u044b \u0443\u0436\u0435 \u0432\u0438\u0434\u0435\u043b\u0438, \u043d\u043e \u0437\u0434\u0435\u0441\u044c \u043f\u043e\u0432\u0442\u043e\u0440\u044e \u0435\u0435 \u0432 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0435 \u0435\u0435 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f:<\/p>\n<pre><code>0   0000 &lt;+  &lt;+  &lt;+    quad leader        ^  |   |   | 1   0001  |   |   |           |   |   | 2   0010 -+   |   |        ^      |   | 3   0011      |   |               |   | 4   0100 &lt;+  -+   |        ^  |       | 5   0101  |       |           |       | 6   0110 -+       |        ^          | 7   0111          |                   | 8   1000 &lt;+  &lt;+  -+    quad leader        ^  |   | 9   1001  |   |           |   | 10  1010 -+   |        ^      | 11  1011      |               | 12  1100 &lt;+  -+        ^  | 13  1101  |           | 14  1110 -+        ^ 15  1111 <\/code><\/pre>\n<p>\u0412\u0441\u0435 \u044d\u0442\u0438 16 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u043c\u044b \u0434\u0435\u043b\u0438\u043c \u043f\u043e\u043f\u043e\u043b\u0430\u043c \u043d\u0430 2 \u0447\u0430\u0441\u0442\u0438, \u0443 \u043a\u0430\u0436\u0434\u043e\u0439 \u0438\u0437 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0435\u0441\u0442\u044c \u0441\u0432\u043e\u0439 \u043b\u0438\u0434\u0435\u0440 \u2014 quad leader. \u041f\u043e \u0444\u0430\u043a\u0442\u0443 \u044d\u0442\u043e \u0437\u0430\u043a\u0435\u0448\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0441\u043e\u0441\u0435\u0434\u0438 \u0434\u043b\u044f \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0430, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0432\u044b\u0441\u0442\u0430\u0432\u043b\u0435\u043d \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u0431\u0438\u0442. \u0415\u0433\u043e \u043c\u044b \u0440\u0430\u0441\u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u043c 2 \u0440\u0430\u0437\u0430: \u043d\u0430 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u044f\u0445 0 \u0438 8. \u0414\u0430\u043b\u0435\u0435, \u043c\u044b \u0442\u0430\u043a\u0436\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044e \u0434\u043b\u044f \u043d\u0435\u0447\u0435\u0442\u043d\u044b\u0445 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0439 \u2014 \u0434\u043b\u044f \u043d\u0438\u0445 \u043c\u044b \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e \u043d\u0430 \u043a\u0430\u0436\u0434\u043e\u0439 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u043c \u0441\u043e\u0441\u0435\u0434\u0435\u0439 \u0447\u0435\u0442\u043d\u044b\u0445 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432 \u0438 \u043d\u0430 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 (\u0443\u0436\u0435 \u043d\u0435\u0447\u0435\u0442\u043d\u043e\u0439) \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0438 \u043f\u0440\u043e\u0441\u0442\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u0433\u043e\u0442\u043e\u0432\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 (\u0442\u043e \u0435\u0441\u0442\u044c \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0442\u044c \u0434\u043b\u044f \u043d\u0435\u0447\u0435\u0442\u043d\u044b\u0445 \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u043d\u0430\u0434\u043e). \u0412 \u0438\u0442\u043e\u0433\u0435 \u0443 \u043d\u0430\u0441 \u043e\u0441\u0442\u0430\u043b\u0438\u0441\u044c \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0438: 2, 4, 6, 10, 12, 14. \u0417\u0434\u0435\u0441\u044c \u043c\u043e\u0436\u0435\u043c \u0437\u0430\u043c\u0435\u0442\u0438\u0442\u044c, \u0447\u0442\u043e \u0434\u043b\u044f 2, 6, 10, 14 \u043d\u0443\u0436\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u0432\u0437\u044f\u0442\u044c \u0441\u043e\u0441\u0435\u0434\u0435\u0439 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0439 \u0447\u0435\u0442\u043d\u043e\u0439 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0438 \u2014 \u0435\u0433\u043e \u043c\u044b \u0438 \u0442\u0430\u043a \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u043c \u0434\u043b\u044f \u043d\u0435\u0447\u0435\u0442\u043d\u044b\u0445 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0439, \u2014 \u043d\u043e \u0432\u043e\u0442 4 \u0438 12 \u0442\u0440\u0435\u0431\u0443\u044e\u0442 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0439 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438: \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0441\u0442\u0430\u0440\u0442\u043e\u0432\u043e\u0439 \u0442\u043e\u0447\u043a\u0438 \u043d\u0443\u0436\u043d\u043e \u0432\u0437\u044f\u0442\u044c quad leader, \u043d\u043e \u0438 \u0435\u0433\u043e \u043c\u044b \u0442\u043e\u0436\u0435 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u043c. \u0412 \u0438\u0442\u043e\u0433\u0435 \u043c\u044b \u0445\u0440\u0430\u043d\u0438\u043c \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u0432\u0430 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u043d\u044b\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0441\u043e\u0441\u0435\u0434\u0435\u0439: \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0430\u044f \u0447\u0435\u0442\u043d\u0430\u044f \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u044f \u0438 quad leader.<\/p>\n<p>\u041f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u043c \u043a table-\u0447\u0430\u0441\u0442\u0438. \u0418\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u043a\u043e\u0441\u043d\u0443\u043b\u0438\u0441\u044c \u043f\u0440\u0435\u0436\u0434\u0435 \u0432\u0441\u0435\u0433\u043e \u0440\u0430\u0441\u0447\u0435\u0442\u0430 \u0438\u043d\u0434\u0435\u043a\u0441\u0430 \u2014 \u0442\u0435\u043f\u0435\u0440\u044c \u0434\u043b\u044f \u0434\u0435\u043b\u044c\u0442\u044b \u043d\u0443\u0436\u043d\u043e \u0438\u0437 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u043d\u0443\u043b\u0435\u0439 \u0432\u044b\u0447\u0435\u0441\u0442\u044c 4 (\u0440\u0430\u0437\u043c\u0435\u0440 hot \u0447\u0430\u0441\u0442\u0438): <img decoding=\"async\" class=\"formula inline\" source=\"2^{zeros - 4}\" alt=\"2^{zeros - 4}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/d\/d9\/d91\/d91bd530587fc186d19d85d41a5e1ccb.svg\" width=\"56\" height=\"16\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/d\/d9\/d91\/d91bd530587fc186d19d85d41a5e1ccb.svg 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/formulas\/d\/d9\/d91\/d91bd530587fc186d19d85d41a5e1ccb.svg 781w\" loading=\"lazy\" decode=\"async\"\/>. \u0421\u0442\u043e\u0438\u0442 \u0437\u0430\u043c\u0435\u0442\u0438\u0442\u044c, \u0447\u0442\u043e \u043a\u043e\u0433\u0434\u0430 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u043d\u043e\u0432\u0430\u044f table-\u0447\u0430\u0441\u0442\u044c, \u0442\u043e \u0442\u0430\u043a\u0436\u0435 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u0438 \u043d\u043e\u0432\u0430\u044f hot-\u0447\u0430\u0441\u0442\u044c, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043a\u0430\u0436\u0434\u044b\u0439 \u0440\u0430\u0437 \u043f\u043e\u0441\u043b\u0435 \u0440\u0430\u0441\u0447\u0435\u0442\u0430 \u0441\u043e\u0441\u0435\u0434\u0435\u0439 \u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u044d\u0442\u043e\u0433\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0443 \u043d\u0430\u043c \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u043e\u0447\u0438\u0441\u0442\u0438\u0442\u044c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 hot-\u0447\u0430\u0441\u0442\u0438 \u2014 \u043d\u0430\u0437\u043d\u0430\u0447\u0438\u0442\u044c \u043d\u043e\u0432\u043e\u0433\u043e quad-leader \u0442\u0435\u043a\u0443\u0449\u0438\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435\u043c \u0441\u043e\u0441\u0435\u0434\u0435\u0439.<\/p>\n<p>\u0421 base-\u0447\u0430\u0441\u0442\u044c\u044e \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u043f\u043e\u0447\u0442\u0438 \u043d\u0435\u0442. \u0412\u043e-\u043f\u0435\u0440\u0432\u044b\u0445, \u043a\u0430\u043a \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u043d\u044f\u0442\u044c \u0438\u0437 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0445 \u0448\u0430\u0433\u043e\u0432, \u043f\u0440\u0438 \u043d\u0430\u0447\u0430\u043b\u0435 \u043d\u043e\u0432\u043e\u0439 base-\u0447\u0430\u0441\u0442\u0438 \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0441\u0431\u0440\u043e\u0441\u0438\u0442\u044c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 table-\u0447\u0430\u0441\u0442\u0438 (\u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0435 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u0437\u0430\u043d\u043e\u0432\u043e), \u0430 \u0442\u0430\u043a\u0436\u0435 \u0438 hot-\u0447\u0430\u0441\u0442\u0438 (quad leader \u0432\u044b\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0432 \u0442\u0435\u043a\u0443\u0449\u0435\u0435 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0441\u043e\u0441\u0435\u0434\u0435\u0439). \u041d\u043e \u0438 \u044d\u0442\u043e \u0435\u0449\u0435 \u043d\u0435 \u0432\u0441\u0435: \u043f\u043e\u0447\u0435\u043c\u0443 \u0431\u044b \u043d\u0430\u043c \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0442\u043e\u0442 \u0436\u0435 \u0442\u0440\u044e\u043a \u0441 \u043d\u0435\u0447\u0435\u0442\u043d\u044b\u043c\u0438 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u044f\u043c\u0438? \u0418 \u0432\u0435\u0434\u044c \u0432\u0435\u0440\u043d\u043e: \u0435\u0441\u043b\u0438 \u043f\u0435\u0440\u0432\u044b\u0439 \u0431\u0438\u0442 \u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e \u043d\u043e\u043c\u0435\u0440\u0430 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0438 base \u0447\u0430\u0441\u0442\u0438 \u0440\u0430\u0432\u0435\u043d 1, \u0442\u043e \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043f\u0440\u043e\u0441\u0442\u043e \u0434\u043e\u0432\u044b\u0447\u0438\u0441\u043b\u0438\u0442\u044c \u0441\u043e\u0441\u0435\u0434\u0435\u0439, \u0442\u0430\u043a \u0436\u0435 \u043a\u0430\u043a \u0434\u0435\u043b\u0430\u043b\u0438 \u0440\u0430\u043d\u044c\u0448\u0435.<\/p>\n<p>\u041f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u0432\u043e\u043f\u0440\u043e\u0441: \u043a\u0430\u043a \u044d\u0442\u043e \u0432\u0441\u0435 \u043a\u043e\u043c\u0431\u0438\u043d\u0438\u0440\u043e\u0432\u0430\u0442\u044c? \u0417\u0434\u0435\u0441\u044c \u043d\u0430\u0434\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043f\u0440\u0435\u0444\u0438\u043a\u0441. \u041b\u0435\u0433\u043a\u043e \u0443\u0432\u0438\u0434\u0435\u0442\u044c, \u0447\u0442\u043e:<\/p>\n<ul>\n<li>\n<p>\u043a\u0430\u0436\u0434\u044b\u0435 <img decoding=\"async\" class=\"formula inline\" source=\"2^{table size}\" alt=\"2^{table size}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/a\/a8\/a85\/a856bd8e00305c49dd702ec041453dab.svg\" width=\"56\" height=\"16\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/a\/a8\/a85\/a856bd8e00305c49dd702ec041453dab.svg 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/formulas\/a\/a8\/a85\/a856bd8e00305c49dd702ec041453dab.svg 781w\" loading=\"lazy\" decode=\"async\"\/> \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0439 \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0442\u044c base-\u0447\u0430\u0441\u0442\u044c (\u0447\u0442\u043e \u0432 \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u0445 \u0434\u0432\u043e\u0438\u0447\u043d\u044b\u0445 \u0447\u0438\u0441\u0435\u043b \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442, \u0447\u0442\u043e \u043f\u0435\u0440\u0432\u044b\u0435 <img decoding=\"async\" class=\"formula inline\" source=\"i\" alt=\"i\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/8\/86\/865\/865c0c0b4ab0e063e5caa3387c1a8741.svg\" width=\"12\" height=\"12\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/8\/86\/865\/865c0c0b4ab0e063e5caa3387c1a8741.svg 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/formulas\/8\/86\/865\/865c0c0b4ab0e063e5caa3387c1a8741.svg 781w\" loading=\"lazy\" decode=\"async\"\/> \u0431\u0438\u0442\u043e\u0432 0);<\/p>\n<\/li>\n<li>\n<p>\u043a\u0430\u0436\u0434\u044b\u0435 <img decoding=\"async\" class=\"formula inline\" source=\"2^4 = 16\" alt=\"2^4 = 16\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/d\/d1\/d1f\/d1fb320d3be62d73863a147f1be7a6f0.svg\" width=\"56\" height=\"16\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/d\/d1\/d1f\/d1fb320d3be62d73863a147f1be7a6f0.svg 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/formulas\/d\/d1\/d1f\/d1fb320d3be62d73863a147f1be7a6f0.svg 781w\" loading=\"lazy\" decode=\"async\"\/> \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0439 \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u0434\u0435\u043b\u0430\u0442\u044c \u043d\u043e\u0432\u044b\u0435 \u0437\u0430\u043f\u0438\u0441\u0438 \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0443;<\/p>\n<\/li>\n<li>\n<p>\u043a\u0430\u0436\u0434\u044b\u0435 <img decoding=\"async\" class=\"formula inline\" source=\"8\" alt=\"8\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/c\/c9\/c9f\/c9f0f895fb98ab9159f51fd0297e236d.svg\" width=\"12\" height=\"12\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/c\/c9\/c9f\/c9f0f895fb98ab9159f51fd0297e236d.svg 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/formulas\/c\/c9\/c9f\/c9f0f895fb98ab9159f51fd0297e236d.svg 781w\" loading=\"lazy\" decode=\"async\"\/> \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0439 \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0442\u044c quad leader \u0432 hot-\u0447\u0430\u0441\u0442\u0438.<\/p>\n<\/li>\n<\/ul>\n<p>\u0410\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0443\u0441\u043b\u043e\u0436\u043d\u0438\u043b\u0441\u044f, \u043d\u043e \u0447\u0435\u0433\u043e \u043d\u0435 \u0441\u0434\u0435\u043b\u0430\u0435\u0448\u044c \u0440\u0430\u0434\u0438 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0439. \u0417\u0430\u0442\u043e \u0442\u0435\u043f\u0435\u0440\u044c \u0434\u043b\u044f \u0442\u043e\u0433\u043e \u0436\u0435 \u0440\u0430\u0437\u043c\u0435\u0440\u0430 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0430 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u043d\u0435 <img decoding=\"async\" class=\"formula inline\" source=\"2^{i}\" alt=\"2^{i}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/a\/ab\/ab4\/ab466b4fe9f9f2f542f9512aa03c7841.svg\" width=\"12\" height=\"12\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/a\/ab\/ab4\/ab466b4fe9f9f2f542f9512aa03c7841.svg 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/formulas\/a\/ab\/ab4\/ab466b4fe9f9f2f542f9512aa03c7841.svg 781w\" loading=\"lazy\" decode=\"async\"\/> \u0431\u0430\u0439\u0442, \u0430 \u0432\u0441\u0435\u0433\u043e \u043b\u0438\u0448\u044c <img decoding=\"async\" class=\"formula inline\" source=\"2^{i - 4}\" alt=\"2^{i - 4}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/0\/0f\/0f2\/0f2cd44b34e040981d88d7c450ca800a.svg\" width=\"24\" height=\"16\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/0\/0f\/0f2\/0f2cd44b34e040981d88d7c450ca800a.svg 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/formulas\/0\/0f\/0f2\/0f2cd44b34e040981d88d7c450ca800a.svg 781w\" loading=\"lazy\" decode=\"async\"\/>. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0432\u043c\u0435\u0441\u0442\u043e 8\u041a\u0431 \u0442\u0435\u043f\u0435\u0440\u044c \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e 0.5\u041a\u0431, \u043d\u043e \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u043a\u0435\u0448\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0432\u0441\u0435 10 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432.<\/p>\n<p>\u0418 \u0432\u043e\u0442 \u043a\u043e\u0433\u0434\u0430 \u044d\u0442\u0430 \u0438\u0434\u0435\u044f \u0443\u0441\u0442\u0430\u043a\u0430\u043d\u0438\u043b\u0430\u0441\u044c \u0432 \u0433\u043e\u043b\u043e\u0432\u0435 \u0438 \u044f \u0432\u043e\u0432\u0441\u044e \u043f\u0440\u0438\u043d\u044f\u043b\u0441\u044f \u043f\u0438\u0441\u0430\u0442\u044c \u043a\u043e\u0434, \u043c\u0435\u043d\u044f \u0432\u0434\u0440\u0443\u0433 \u043e\u0441\u0435\u043d\u0438\u043b\u043e.<\/p>\n<h4>\u0418\u0434\u0435\u0430\u043b\u044c\u043d\u044b\u0439 \u043a\u0435\u0448<\/h4>\n<p>\u042f \u0435\u0449\u0435 \u0440\u0430\u0437 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u043b \u043d\u0430 \u0441\u0445\u0435\u043c\u0443 \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u0439, \u0440\u0430\u0441\u043f\u0438\u0441\u0430\u043b \u0435\u0435 \u043d\u0430 \u043f\u044f\u0442\u044c \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u0438 \u0437\u0430\u043c\u0435\u0442\u0438\u043b \u0442\u043e, \u0447\u0442\u043e \u0431\u044b\u043b\u043e \u0432\u0441\u0435 \u0432\u0440\u0435\u043c\u044f \u043d\u0430 \u0432\u0438\u0434\u0443, \u043d\u043e \u044f \u043d\u0435 \u0437\u0430\u043c\u0435\u0447\u0430\u043b. \u0412\u043e\u0442 \u044d\u0442\u0430 \u0441\u0445\u0435\u043c\u0430, \u0441\u043f\u0440\u0430\u0432\u0430 \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u2014 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u0439 \u043a \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430\u043c (\u0434\u043b\u044f \u043d\u0435\u0447\u0435\u0442\u043d\u044b\u0445 \u043d\u0435 \u043f\u0438\u0441\u0430\u043b):<\/p>\n<pre><code>00000 &lt;+  &lt;+  &lt;+  &lt;+    5     ^  |   |   |   |   00001  |   |   |   |        |   |   |   | 00010 -+   |   |   |    1     ^      |   |   | 00011      |   |   |            |   |   | 00100 &lt;+  -+   |   |    2     ^  |       |   | 00101  |       |   |        |       |   | 00110 -+       |   |    1     ^          |   | 00111          |   |                |   | 01000 &lt;+  &lt;+  -+   |    3     ^  |   |       | 01001  |   |       |        |   |       | 01010 -+   |       |    1     ^      |       | 01011      |       |            |       | 01100 &lt;+  -+       |    2     ^  |           | 01101  |           |        |           | 01110 -+           |    1     ^              | 11111              |                    | 10000 &lt;+  &lt;+  &lt;+  -+    4       ^  |   |   | 10001  |   |   |        |   |   | 10010 -+   |   |        1     ^      |   | 10011      |   |            |   | 10100 &lt;+  -+   |        2     ^  |       | 10101  |       |        |       | 10110 -+       |        1     ^          | 10111          |                | 11000 &lt;+  &lt;+  -+        3     ^  |   | 11001  |   |        |   | 11010 -+   |            1     ^      | 11011      |            | 11100 &lt;+  -+            2     ^  | 11101  |        | 11110 -+                1     ^ 11111 <\/code><\/pre>\n<p>\u0412\u0438\u0434\u0438\u0442\u0435 \u043f\u0430\u0442\u0442\u0435\u0440\u043d? \u0415\u0441\u043b\u0438 \u0435\u0449\u0435 \u043d\u0435\u0442, \u0442\u043e \u0432\u043e\u0442 \u043f\u043e\u0434\u0441\u043a\u0430\u0437\u043a\u0430 \u2014 \u0441\u0432\u044f\u0437\u044c \u043c\u0435\u0436\u0434\u0443 \u043f\u0440\u0435\u0444\u0438\u043a\u0441\u043e\u043c \u043d\u043e\u043c\u0435\u0440\u0430 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0438 \u0438 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e\u043c \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u0439. \u041a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u044b\u0445 \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u0439 \u043a \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0443 \u0440\u0430\u0432\u043d\u043e \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0443 \u043d\u0443\u043b\u0435\u0439 \u0432 \u043d\u0430\u0447\u0430\u043b\u0435, \u0438 \u043f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u0439 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 <em>\u0432\u043e\u043e\u0431\u0449\u0435 \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f<\/em> \u2014 \u0432\u043c\u0435\u0441\u0442\u043e \u043d\u0435\u0433\u043e \u0431\u0443\u0434\u0435\u0442 \u0443\u0436\u0435 \u043d\u043e\u0432\u043e\u0435, \u043d\u043e \u043d\u043e\u043c\u0435\u0440 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0438 \u0431\u0443\u0434\u0435\u0442 \u0438\u043c\u0435\u0442\u044c \u0441\u0442\u043e\u043b\u044c\u043a\u043e \u0436\u0435 \u043d\u0443\u043b\u0435\u0439 \u0432 \u043d\u0430\u0447\u0430\u043b\u0435. \u0422\u043e \u0435\u0441\u0442\u044c \u043d\u0430\u043c <em>\u043d\u0435\u0437\u0430\u0447\u0435\u043c<\/em> \u0445\u0440\u0430\u043d\u0438\u0442\u044c \u044d\u0442\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f, \u0430 \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u043d\u0430\u0448\u0435 \u0438\u0442\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0438\u0434\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0432\u043f\u0435\u0440\u0435\u0434 (\u0438\u043d\u043a\u0440\u0435\u043c\u0435\u043d\u0442), \u043c\u044b \u0441\u043f\u043e\u043a\u043e\u0439\u043d\u043e \u043c\u043e\u0436\u0435\u043c \u0443\u0434\u0430\u043b\u044f\u0442\u044c \u0441\u0442\u0430\u0440\u044b\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b. \u041f\u0440\u0438 \u0442\u0430\u043a\u043e\u043c \u043f\u043e\u0434\u0445\u043e\u0434\u0435 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0439 \u0440\u0430\u0437\u043c\u0435\u0440 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u0440\u0430\u0432\u0435\u043d \u0440\u0430\u0437\u043c\u0435\u0440\u0443 \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0430. \u0422\u0430\u043a \u043a\u0430\u043a \u044f \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u044e \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u0447\u0438\u0441\u043b\u043e\u043c, \u0442\u043e \u043c\u043d\u0435 \u0434\u0430\u0436\u0435 \u0434\u0443\u043c\u0430\u0442\u044c \u043d\u0435 \u043d\u0430\u0434\u043e \u2014 \u043d\u0430 \u0441\u0442\u0435\u043a\u0435 \u0432\u044b\u0434\u0435\u043b\u044f\u044e \u043c\u0430\u0441\u0441\u0438\u0432 \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u043c 64 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430 (64 * 8 = 512 \u0431\u0430\u0439\u0442).<\/p>\n<p>\u041d\u043e \u043a\u0430\u043a \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e \u044d\u0442\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c? \u0412\u0441\u043f\u043e\u043c\u043d\u0438\u043c, \u043a\u0430\u043a \u043c\u044b \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u0435\u043c \u0441\u043e\u0441\u0435\u0434\u0435\u0439: \u043c\u044b \u0431\u0435\u0440\u0435\u043c \u0440\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0445 \u0441\u043e\u0441\u0435\u0434\u0435\u0439 \u0438 \u0434\u043e\u0440\u0430\u0441\u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u043c \u043f\u0435\u0440\u0432\u044b\u043c \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u043c. \u0410 \u0432\u043e\u0442 \u0438 \u0432\u0442\u043e\u0440\u043e\u0435 \u043d\u0430\u0431\u043b\u044e\u0434\u0435\u043d\u0438\u0435: \u0440\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u0435 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u2014 \u044d\u0442\u043e \u043d\u0430\u0448\u0435, \u043d\u043e \u0431\u0435\u0437 \u043a\u0440\u0430\u0439\u043d\u0435\u0433\u043e \u0431\u0438\u0442\u0430, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0434\u043b\u044f <code>01110<\/code> \u0440\u043e\u0434\u0438\u0442\u0435\u043b\u0435\u043c \u0431\u0443\u0434\u0435\u0442 <code>01100<\/code>. \u0410 \u0432 \u043a\u0430\u043a\u043e\u0439 \u044f\u0447\u0435\u0439\u043a\u0435 \u0445\u0440\u0430\u043d\u044f\u0442\u0441\u044f \u0441\u043e\u0441\u0435\u0434\u0438 \u0434\u043b\u044f <code>01100<\/code>? \u041f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e \u2014 \u043f\u043e\u0434 \u0438\u043d\u0434\u0435\u043a\u0441\u043e\u043c 2, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u0443 \u043d\u0435\u0433\u043e \u0434\u0432\u0430 \u043d\u0443\u043b\u044f \u0432 \u043d\u0430\u0447\u0430\u043b\u0435. \u041a\u0440\u0430\u0439\u043d\u0438\u0439 \u0441\u043b\u0443\u0447\u0430\u0439 \u2014 \u043a\u043e\u0433\u0434\u0430 \u043c\u044b \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u043c \u0432 \u043d\u043e\u0432\u044b\u0439 \u0441\u0442\u0430\u0440\u0448\u0438\u0439 \u0440\u0430\u0437\u0440\u044f\u0434, \u2014 \u0442\u043e\u0433\u0434\u0430 \u043f\u043e\u0441\u043b\u0435 \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u044f \u0431\u0438\u0442\u0430 \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u043c \u043f\u0443\u0441\u0442\u043e\u0435 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e, \u043d\u043e \u0434\u043b\u044f \u043f\u0443\u0441\u0442\u043e\u0433\u043e \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0430 \u043c\u044b \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c \u043f\u0443\u0441\u0442\u043e\u0435 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e, \u0432\u0435\u0434\u044c \u0443 \u043d\u0435\u0433\u043e \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0441\u043e\u0441\u0435\u0434\u0435\u0439.<\/p>\n<p>\u0410 \u0442\u0435\u043f\u0435\u0440\u044c, \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u0438 \u0441\u0430\u043c \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c:<\/p>\n<ol>\n<li>\n<p>\u0421\u043e\u0437\u0434\u0430\u0435\u043c DP-\u0442\u0430\u0431\u043b\u0438\u0446\u0443, (\u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438\u0439) \u043c\u0430\u0441\u0441\u0438\u0432.<\/p>\n<\/li>\n<li>\n<p>\u041d\u0430\u0447\u0438\u043d\u0430\u0435\u043c \u043e\u0447\u0435\u0440\u0435\u0434\u043d\u0443\u044e \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u044e.<\/p>\n<\/li>\n<li>\n<p>\u0418\u0437 \u043d\u043e\u043c\u0435\u0440\u0430 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0438 \u0443\u0431\u0438\u0440\u0430\u0435\u043c \u043f\u0435\u0440\u0432\u044b\u0439 \u0432\u044b\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0439 \u0431\u0438\u0442 \u0438 \u0441\u0447\u0438\u0442\u0430\u0435\u043c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043d\u0443\u043b\u0435\u0439.<\/p>\n<\/li>\n<li>\n<p>\u0418\u0437 DP-\u0442\u0430\u0431\u043b\u0438\u0446\u044b \u0431\u0435\u0440\u0435\u043c \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u043f\u043e\u0434 \u044d\u0442\u0438\u043c \u0438\u043d\u0434\u0435\u043a\u0441\u043e\u043c.<\/p>\n<\/li>\n<li>\n<p>\u0420\u0430\u0441\u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u043c \u0441\u043e\u0441\u0435\u0434\u0435\u0439, \u0431\u0435\u0440\u044f \u0437\u0430 \u043e\u0441\u043d\u043e\u0432\u0443 \u0437\u0430\u043a\u0435\u0448\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445, \u0430 \u0437\u0430 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u2014 \u043f\u0435\u0440\u0432\u044b\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e \u043f\u043e\u0434\u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0430.<\/p>\n<\/li>\n<li>\n<p>\u0421\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u043c \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0443 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435.<\/p>\n<\/li>\n<\/ol>\n<p>\u041a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e \u043b\u0438 \u044d\u0442\u043e? \u041a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e. \u0412\u043e\u0442 \u0434\u043e\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c\u0441\u0442\u0432\u043e \u043e\u0442 \u043e\u0431\u0440\u0430\u0442\u043d\u043e\u0433\u043e. \u0411\u0430\u0437\u043e\u0439 \u0431\u0443\u0434\u0435\u0442 \u0442\u043e, \u0447\u0442\u043e \u0441\u043e\u0441\u0435\u0434\u0438 \u043f\u0443\u0441\u0442\u043e\u0433\u043e \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0430 \u2014 \u044d\u0442\u043e \u043f\u0443\u0441\u0442\u043e\u0435 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e (\u043b\u0438\u0431\u043e \u0434\u0440\u0443\u0433\u043e\u0435, \u043d\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435). \u0421\u0430\u043c\u043e \u0434\u043e\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c\u0441\u0442\u0432\u043e \u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0438\u0437 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430 \u043f\u0435\u0440\u0435\u0431\u043e\u0440\u0430 \u043f\u043e\u0434\u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432 \u2014 \u0438\u043d\u043a\u0440\u0435\u043c\u0435\u043d\u0442\u0430.<\/p>\n<p>\u0414\u043e\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c\u0441\u0442\u0432\u043e:<\/p>\n<ol>\n<li>\n<p>\u041d\u0430\u043c \u0434\u0430\u043d\u0430 \u0442\u0435\u043a\u0443\u0449\u0430\u044f \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u044f <code>iter<\/code>.<\/p>\n<\/li>\n<li>\n<p>\u041c\u044b \u0443\u0431\u0438\u0440\u0430\u0435\u043c \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u0431\u0438\u0442\/\u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u0438 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0447\u0438\u0441\u043b\u043e <code>iter_parent<\/code>.<\/p>\n<\/li>\n<li>\n<p>\u0421\u0447\u0438\u0442\u0430\u0435\u043c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043d\u0443\u043b\u0435\u0439, \u0438 \u0438\u0437 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u0431\u0435\u0440\u0435\u043c \u0440\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u0435 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e <code>nb_parent<\/code>.<\/p>\n<\/li>\n<\/ol>\n<p>\u0423\u0442\u0432\u0435\u0440\u0436\u0434\u0430\u0435\u0442\u0441\u044f, \u0447\u0442\u043e <code>nb_parent<\/code> \u2014 \u044d\u0442\u043e \u0441\u043e\u0441\u0435\u0434\u0438 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0430 <code>iter_parent<\/code>. \u041f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u043c, \u0447\u0442\u043e \u044d\u0442\u043e \u043d\u0435 \u0442\u0430\u043a, \u0442\u043e \u0435\u0441\u0442\u044c \u0432 \u0442\u043e\u0439 \u044f\u0447\u0435\u0439\u043a\u0435 \u0445\u0440\u0430\u043d\u044f\u0442\u0441\u044f \u0441\u043e\u0441\u0435\u0434\u0438 <code>iter_parent_2<\/code>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0435 \u0440\u0430\u0432\u0435\u043d <code>iter_parent<\/code>. \u0422\u043e\u0433\u0434\u0430 \u044d\u0442\u043e \u0447\u0438\u0441\u043b\u043e \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043b\u0438\u0431\u043e \u0431\u043e\u043b\u044c\u0448\u0435, \u043b\u0438\u0431\u043e \u043c\u0435\u043d\u044c\u0448\u0435 \u0435\u0433\u043e, \u043d\u043e:<\/p>\n<ul>\n<li>\n<p><code>iter_parent_2<\/code> \u0442\u043e\u0447\u043d\u043e \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0431\u043e\u043b\u044c\u0448\u0435 <code>iter_parent<\/code>, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u044d\u0442\u043e \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442, \u0447\u0442\u043e \u043e\u043d \u0431\u044b\u043b \u0431\u044b \u0431\u043e\u043b\u044c\u0448\u0435 \u0438 \u0438\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e\u0433\u043e <code>iter<\/code> (\u0442\u0430\u043a \u043a\u0430\u043a \u0440\u0430\u0437\u043b\u0438\u0447\u0438\u044f \u0432 MSB-\u0447\u0430\u0441\u0442\u0438), \u043d\u043e \u043c\u044b \u0438\u0442\u0435\u0440\u0438\u0440\u0443\u0435\u043c\u0441\u044f \u0441\u0442\u0440\u043e\u0433\u043e \u0432\u043e\u0437\u0440\u0430\u0441\u0442\u0430\u044e\u0449\u0438\u043c \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u043c, \u0430 \u0437\u043d\u0430\u0447\u0438\u0442, \u044d\u0442\u043e\u0433\u043e \u0447\u0438\u0441\u043b\u0430 \u043c\u044b \u0435\u0449\u0435 \u043d\u0435 \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u043b\u0438, \u0438 \u0435\u0433\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0435 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u044c\u0441\u044f \u043d\u0435 \u043c\u043e\u0436\u0435\u0442;<\/p>\n<\/li>\n<li>\n<p>\u0447\u0438\u0441\u043b\u043e\u043c \u043c\u0435\u043d\u044c\u0448\u0435 \u043e\u043d\u043e \u0442\u043e\u0436\u0435 \u0431\u044b\u0442\u044c \u043d\u0435 \u043c\u043e\u0436\u0435\u0442, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u044d\u0442\u043e \u043e\u0437\u043d\u0430\u0447\u0430\u043b\u043e \u0431\u044b, \u0447\u0442\u043e <code>iter_parent<\/code> \u043c\u044b \u043f\u0440\u043e\u043f\u0443\u0441\u0442\u0438\u043b\u0438: \u0443 \u043e\u0431\u043e\u0438\u0445 \u0447\u0438\u0441\u0435\u043b \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043b\u0438\u0434\u0438\u0440\u0443\u044e\u0449\u0438\u0445 \u043d\u0443\u043b\u0435\u0439 (\u043f\u043e \u043d\u0430\u0448\u0435\u043c\u0443 \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u044e), \u0430 \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 <code>iter_parent<\/code> \u0438\u0434\u0435\u0442 <em>\u043f\u043e\u0441\u043b\u0435<\/em> <code>iter_parent_2<\/code> (\u0442\u0430\u043a \u043a\u0430\u043a \u0431\u043e\u043b\u044c\u0448\u0435 \u0432 \u0447\u0438\u0441\u043b\u043e\u0432\u043e\u043c \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0438), \u0442\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043f\u043e\u0434 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u043c \u0438\u043d\u0434\u0435\u043a\u0441\u043e\u043c \u043c\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u0431\u044b\u043b\u0438 \u043f\u0435\u0440\u0435\u0437\u0430\u043f\u0438\u0441\u0430\u0442\u044c (\u043f\u0435\u0440\u0435\u0437\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0441\u043e\u0441\u0435\u0434\u0435\u0439 <code>iter_parent_2<\/code>), \u043d\u043e \u043c\u044b \u043d\u0435 \u0441\u0434\u0435\u043b\u0430\u043b\u0438 \u044d\u0442\u043e \u0438 \u0442\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u043d\u0430\u0440\u0443\u0448\u0438\u043b\u0438 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c.<\/p>\n<\/li>\n<\/ul>\n<p>\u0415\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u043e\u0441\u0442\u0430\u0432\u0448\u0438\u0439\u0441\u044f \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u2014 \u043f\u043e\u0434 \u044d\u0442\u0438\u043c \u0438\u043d\u0434\u0435\u043a\u0441\u043e\u043c \u0445\u0440\u0430\u043d\u044f\u0442\u0441\u044f \u0441\u043e\u0441\u0435\u0434\u0438 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0430 <code>iter_parent<\/code>. \u0423\u0447\u0438\u0442\u044b\u0432\u0430\u044f, \u0447\u0442\u043e \u0434\u043b\u044f \u043f\u0443\u0441\u0442\u043e\u0433\u043e \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0430 \u0441\u043e\u0441\u0435\u0434\u0438 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u044b, \u043c\u044b \u0442\u0430\u043a\u0436\u0435 \u043c\u043e\u0436\u0435\u043c \u0443\u0442\u0432\u0435\u0440\u0436\u0434\u0430\u0442\u044c, \u0447\u0442\u043e \u0438 \u043c\u0443\u0441\u043e\u0440\u0430 \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043d\u0435 \u043c\u043e\u0436\u0435\u043c:<\/p>\n<ul>\n<li>\n<p>\u0435\u0441\u043b\u0438 \u0442\u0435\u043a\u0443\u0449\u0435\u0435 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0438\u0437 \u043e\u0434\u043d\u043e\u0433\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430, \u0442\u043e \u0437\u043d\u0430\u0447\u0438\u0442 \u043c\u044b \u043f\u0435\u0440\u0435\u0448\u043b\u0438 \u0432 \u043d\u043e\u0432\u044b\u0439 \u0441\u0442\u0430\u0440\u0448\u0438\u0439 \u0440\u0430\u0437\u0440\u044f\u0434, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0440\u0430\u043d\u044c\u0448\u0435 \u043d\u0435 \u0431\u044b\u043b\u0438. \u0423\u0431\u0440\u0430\u0432 \u044d\u0442\u043e\u0442 \u044d\u043b\u0435\u043c\u0435\u043d\u0442, \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u043c \u043f\u0443\u0441\u0442\u043e\u0435 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e, \u043d\u043e \u0434\u043b\u044f \u043d\u0435\u0433\u043e \u0441\u043e\u0441\u0435\u0434\u0438 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u044b \u0438 \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043d\u043e\u0432\u043e\u0433\u043e \u0438\u043d\u0434\u0435\u043a\u0441\u0430, \u0440\u0430\u043d\u0435\u0435 \u043d\u0435 \u0432\u0438\u0434\u0435\u043d\u043d\u043e\u0433\u043e, \u0441\u043e\u0441\u0435\u0434\u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0442\u0441\u044f, \u0438 \u0434\u0430\u043b\u0435\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0431\u0443\u0434\u0435\u0442 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043e;<\/p>\n<\/li>\n<li>\n<p>\u0432 \u043f\u0440\u043e\u0442\u0438\u0432\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043b\u0438\u0434\u0438\u0440\u0443\u044e\u0449\u0438\u0445 \u043d\u0443\u043b\u0435\u0439 \u0431\u0443\u0434\u0435\u0442 <em>\u043d\u0435 \u0431\u043e\u043b\u044c\u0448\u0435<\/em> \u043d\u043e\u043c\u0435\u0440\u0430 \u0441\u0442\u0430\u0440\u0448\u0435\u0433\u043e \u0440\u0430\u0437\u0440\u044f\u0434\u0430 (\u0438\u043d\u0430\u0447\u0435 \u043c\u044b \u043d\u0430\u0447\u0430\u043b\u0438 \u043d\u043e\u0432\u044b\u0439 \u0440\u0430\u0437\u0440\u044f\u0434 \u0438 \u044d\u0442\u043e \u0441\u043b\u0443\u0447\u0430\u0439 1), \u0438 \u0441\u043e\u0441\u0435\u0434\u0435\u0439 \u0434\u043b\u044f \u043d\u0438\u0445 \u043c\u044b \u0443\u0436\u0435 \u0434\u043e\u043b\u0436\u043d\u044b \u0431\u044b\u043b\u0438 \u0437\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0443, \u0442\u043e \u0435\u0441\u0442\u044c \u043e\u043d\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043e.<\/p>\n<\/li>\n<\/ul>\n<p>\u0412\u043e\u0442 \u043c\u044b \u0438 \u0434\u043e\u043a\u0430\u0437\u0430\u043b\u0438, \u0447\u0442\u043e \u0434\u0430\u043d\u043d\u0430\u044f \u0441\u0445\u0435\u043c\u0430 \u043a\u0435\u0448\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u0430. \u0412\u043e\u0442 \u0441\u0430\u043c \u043a\u043e\u0434, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u044d\u0442\u043e \u0432\u0441\u0435 \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u0435\u0442:<\/p>\n<pre><code class=\"cpp\">typedef struct SubsetIteratorState {     \/* \u0422\u0435\u043a\u0443\u0449\u0435\u0435 \u043f\u043e\u0434\u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e *\/     bitmapword subset;     \/* \u041f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u0434\u043b\u044f \u0438\u0442\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f *\/     bitmapword state;     bitmapword init;     \/* \u041d\u043e\u043c\u0435\u0440 \u0442\u0435\u043a\u0443\u0449\u0435\u0439 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0438 *\/     bitmapword iteration;     \/* \u043a\u0435\u0448 \u0441\u043e\u0441\u0435\u0434\u0435\u0439 *\/     bitmapword cached_neighborhood[64]; } SubsetIteratorState;  \/* \u041f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 \u0441\u043e\u0441\u0435\u0434\u0435\u0439 \u0440\u043e\u0434\u0438\u0442\u0435\u043b\u044f \u0434\u043b\u044f \u0442\u0435\u043a\u0443\u0449\u0435\u0439 \u0438\u0442\u0430\u0440\u0430\u0446\u0438\u0438 *\/ static inline bitmapword get_parent_neighborhood(DPHypContext *context, SubsetIteratorState *iter_state) {     int zero_count;     bitmapword last_bit_removed;      \/* \u0423\u0434\u0430\u043b\u044f\u0435\u043c \u043f\u0435\u0440\u0432\u044b\u0439 \u0431\u0438\u0442 *\/     last_bit_removed = bmw_difference(iter_state-&gt;iteration, bmw_lowest_bit(iter_state-&gt;iteration));     if (last_bit_removed == 0)     {         \/* \u0421\u043e\u0441\u0435\u0434\u0435\u0439 \u043d\u0435\u0442 *\/         return 0;     }      zero_count = bmw_rightmost_one_pos(last_bit_removed);     return iter_state-&gt;cached_neighborhood[zero_count]; }  static bitmapword get_neighbors_iter(DPHypContext *context, bitmapword subgroup,                    bitmapword excluded, SubsetIteratorState *iter_state) {     int i;     int idx;     int zero_count;     bitmapword neighbors;     EdgeArray *complex_edges;      excluded |= subgroup;      iter_state-&gt;iteration++;      idx = bmw_rightmost_one_pos(iter_state-&gt;subset);      \/* \u0411\u0430\u0437\u0430 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f - \u0441\u043e\u0441\u0435\u0434\u0438 \u0440\u043e\u0434\u0438\u0442\u0435\u043b\u044f \u0442\u0435\u043a\u0443\u0449\u0435\u0439 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0438 *\/     neighbors = get_parent_neighborhood(context, iter_state);      \/* \u0414\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0443\u0437\u043b\u044b \u043f\u0440\u043e\u0441\u0442\u044b\u0445 \u0441\u043e\u0441\u0435\u0434\u0435\u0439 *\/     neighbors |= bmw_difference(context-&gt;simple_edges[idx], excluded);      \/* \u041e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u043c \u0441\u043b\u043e\u0436\u043d\u044b\u0435 \u0440\u0435\u0431\u0440\u0430 *\/     complex_edges = &amp;context-&gt;complex_edges[idx];     i = get_start_index(complex_edges, neighbors | excluded);     for (; i &lt; complex_edges-&gt;size; i++)     {         HyperEdge edge = complex_edges-&gt;edges[i];         if ( bmw_is_subset(edge.left, subgroup) &amp;&amp;             !bmw_overlap(edge.right, neighbors | excluded))         {             neighbors |= bmw_lowest_bit(edge.right);         }     }      neighbors = bmw_difference(neighbors, excluded);      \/* \u0421\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u043c \u0441\u043e\u0441\u0435\u0434\u0435\u0439 *\/     zero_count = bmw_rightmost_one_pos(iter_state-&gt;iteration);     iter_state-&gt;cached_neighborhood[zero_count] = neighbors;      return neighbors; } <\/code><\/pre>\n<blockquote>\n<p>\u0421\u0445\u0435\u043c\u0443 \u0442\u0430\u043a\u0436\u0435 \u043c\u043e\u0436\u043d\u043e \u0447\u0443\u0442\u044c-\u0447\u0443\u0442\u044c \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c, \u043d\u0435 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u044f \u043d\u0435\u0447\u0435\u0442\u043d\u044b\u0435 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0430, \u043d\u043e \u044d\u0442\u043e \u0443\u0436\u0435 \u043e\u0431\u043b\u0430\u0441\u0442\u044c \u043c\u0438\u043a\u0440\u043e-\u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0439.<\/p>\n<\/blockquote>\n<p>\u0410 \u043d\u0435\u043b\u044c\u0437\u044f \u043b\u0438 \u0435\u0449\u0435 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0439? \u041c\u043e\u0436\u043d\u043e. \u041f\u0440\u0438\u043c\u0435\u0440 \u044d\u0442\u043e\u0433\u043e \u0443\u0436\u0435 \u0435\u0441\u0442\u044c \u0432 \u043a\u043e\u0434\u0435, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0442\u043e\u043b\u044c\u043a\u043e \u044f \u0447\u0442\u043e \u043f\u0440\u0438\u0432\u0435\u043b \u2014 \u0438\u043d\u0434\u0435\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435.<\/p>\n<details class=\"spoiler\">\n<summary>\u041d\u0435 \u0441\u043e\u0432\u0441\u0435\u043c \u0438\u0434\u0435\u0430\u043b\u044c\u043d\u044b\u0439 \u043a\u0435\u0448<\/summary>\n<div class=\"spoiler__content\">\n<p>\u0414\u0430, \u044d\u0442\u0430 \u0441\u0442\u0440\u0430\u0442\u0435\u0433\u0438\u044f \u043a\u0435\u0448\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0445\u043e\u0440\u043e\u0448\u0430, \u043d\u043e \u043d\u0435 \u0438\u0434\u0435\u0430\u043b\u044c\u043d\u0430. \u0412\u0441\u043f\u043e\u043c\u043d\u0438\u0442\u0435 \u043d\u0430\u0447\u0430\u043b\u043e, \u043a\u043e\u0433\u0434\u0430 \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u043b\u0441\u044f \u043f\u043e\u0434\u0445\u043e\u0434 \u043a\u0435\u0448\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f MySQL \u2014 \u043e\u043d\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0438 \u0435\u0433\u043e \u0434\u0430\u0436\u0435 \u0432 \u043f\u0435\u0440\u0432\u043e\u043c \u0446\u0438\u043a\u043b\u0435 <code>EnumerateCsgRec<\/code>. \u0412 \u043d\u0435\u043c \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u044b\u0445 \u0443\u0437\u043b\u043e\u0432 \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e \u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f, \u0438 \u0438\u0437-\u0437\u0430 \u044d\u0442\u043e\u0433\u043e \u0432 \u0447\u0438\u0441\u0442\u043e\u043c \u0432\u0438\u0434\u0435 \u043a\u0435\u0448\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043d\u0435\u043b\u044c\u0437\u044f. \u041e\u043d\u0438 \u043e\u0431\u043e\u0448\u043b\u0438 \u044d\u0442\u043e \u044d\u0432\u0440\u0438\u0441\u0442\u0438\u043a\u043e\u0439 \u2014 \u043a\u0435\u0448\u0438\u0440\u0443\u044e\u0442 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u044b\u0435 \u0443\u0437\u043b\u044b, \u0430 \u043f\u043e\u0442\u043e\u043c \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u044e\u0442 \u0432\u0441\u0435 \u0440\u0430\u043d\u0435\u0435 \u0437\u0430\u043f\u0440\u0435\u0449\u0435\u043d\u043d\u044b\u0435, \u043d\u043e \u043a\u043e\u0442\u043e\u0440\u044b\u0435 <em>\u043c\u043e\u0433\u043b\u0438 \u0431\u044b \u0431\u044b\u0442\u044c<\/em> \u0441\u043e\u0441\u0435\u0434\u044f\u043c\u0438.<\/p>\n<p>\u0412\u043e\u0442 \u043f\u0440\u0438\u043c\u0435\u0440, \u043a\u043e\u0433\u0434\u0430 \u044d\u0442\u043e <em>\u043d\u0435<\/em> \u0442\u0430\u043a. \u0415\u0441\u0442\u044c 3 \u0432\u044b\u0437\u043e\u0432\u0430 <code>EnumerateCsgRec<\/code> (<code>S<\/code> \u2014 \u043f\u043e\u0434\u0433\u0440\u0430\u0444, <code>X<\/code> \u2014 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u044b\u0445 \u0443\u0437\u043b\u043e\u0432, <code>N<\/code> \u2014 \u0441\u043e\u0441\u0435\u0434\u0438, \u043f\u043e \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u0441\u0435\u0439\u0447\u0430\u0441 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u044f, \u0442. \u0435. \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u044b <code>N(S, X)<\/code>):<\/p>\n<pre><code>1. S = 00000001, X = 00000001, N = 00001110 2. S = 00001001, X = 00001111, N = 01110000 3. S = 01001001, X = 01111111, N = 10000000 <\/code><\/pre>\n<p>\u041f\u0435\u0440\u0432\u044b\u0435 \u0434\u0432\u0435 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0438 \u0434\u0430\u043b\u0438 \u0441\u043e\u0441\u0435\u0434\u0435\u0439 \u0438\u0437 \u0442\u0440\u0435\u0445 \u0440\u044f\u0434\u043e\u043c \u0441\u0442\u043e\u044f\u0449\u0438\u0445 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432, \u0438 \u0441\u0435\u0439\u0447\u0430\u0441 \u043c\u044b \u043d\u0430\u0445\u043e\u0434\u0438\u043c\u0441\u044f \u0432 \u0442\u0440\u0435\u0442\u044c\u0435\u043c \u0432\u044b\u0437\u043e\u0432\u0435: \u043f\u043e\u0434\u0433\u0440\u0430\u0444 = <code>1001001<\/code>, \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u044b\u0435 = <code>1111111<\/code>, \u0441\u043e\u0441\u0435\u0434\u0438 = <code>10000000<\/code>. \u0412 \u043f\u0435\u0440\u0432\u043e\u043c (\u0438 \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u043c \u0446\u0438\u043a\u043b\u0435) \u043c\u044b \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u043b\u0438, \u0447\u0442\u043e \u0443 <code>11001001<\/code> \u0435\u0441\u0442\u044c \u043f\u043b\u0430\u043d, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0430 \u043d\u0443\u0436\u043d\u043e \u043d\u0430\u0439\u0442\u0438 \u0441\u043e\u0441\u0435\u0434\u0435\u0439. \u0421\u043b\u0435\u0434\u0443\u044f \u043b\u043e\u0433\u0438\u043a\u0435 MySQL, \u0434\u043b\u044f \u043d\u0435\u0433\u043e \u0441\u043e\u0441\u0435\u0434\u0438 \u2014 <code>10110110<\/code>, \u0442\u0430\u043a \u043a\u0430\u043a \u043d\u0443\u0436\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0432\u0441\u0435\u0445 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0445 \u0441\u043e\u0441\u0435\u0434\u0435\u0439.<\/p>\n<p>\u0413\u0434\u0435 \u0437\u0434\u0435\u0441\u044c \u043c\u043e\u0436\u0435\u0442 \u0432\u043e\u0437\u043d\u0438\u043a\u043d\u0443\u0442\u044c \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430? \u041f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u0442\u0435 \u043d\u0430 \u0432\u0442\u043e\u0440\u043e\u0439 \u0432\u044b\u0437\u043e\u0432: \u043e\u0442\u043a\u0443\u0434\u0430 \u0432\u0437\u044f\u043b\u0438\u0441\u044c \u0441\u043e\u0441\u0435\u0434\u0438 <code>1110000<\/code>? \u041c\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0438 \u0438\u0445 \u043e\u0442 <code>0000100<\/code>, \u043d\u043e \u043e\u043d <em>\u0431\u044b\u043b \u043d\u0435 \u0432 \u043d\u0430\u0448\u0435\u043c <\/em><strong><em>\u0438\u0442\u043e\u0433\u043e\u0432\u043e\u043c<\/em><\/strong><em> \u043f\u043e\u0434\u0433\u0440\u0430\u0444\u0435<\/em>, \u0430 \u0437\u043d\u0430\u0447\u0438\u0442, \u0447\u0442\u043e \u043e\u0434\u043d\u043e \u0438\u0437 \u0433\u0438\u043f\u0435\u0440\u0440\u0435\u0431\u0435\u0440 \u043c\u043e\u0433\u043b\u043e \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u044c \u0432 \u0441\u0435\u0431\u0435 <code>01000000<\/code>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d (\u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442\u0441\u044f \u0432 \u0438\u0442\u043e\u0433\u043e\u0432\u043e\u043c \u043f\u043e\u0434\u0433\u0440\u0430\u0444\u0435).<\/p>\n<p>\u041d\u0435\u0442\u0440\u0443\u0434\u043d\u043e \u0434\u043e\u0433\u0430\u0434\u0430\u0442\u044c\u0441\u044f, \u0447\u0442\u043e \u043f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0443\u0437\u043b\u043e\u0432 (\u0430 \u0437\u043d\u0430\u0447\u0438\u0442 \u0438 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0445 \u043f\u0430\u0440 csg\/cmp), \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c, \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0442\u0441\u044f, \u0430 \u0437\u043d\u0430\u0447\u0438\u0442 \u0438 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e &#171;\u043c\u0443\u0441\u043e\u0440\u043d\u044b\u0445&#187; \u0440\u0435\u0448\u0435\u043d\u0438\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043b\u0438\u0431\u043e \u043d\u0435 \u0434\u0430\u0434\u0443\u0442 \u043f\u043e\u043b\u0435\u0437\u043d\u043e\u0433\u043e \u043e\u0442\u0432\u0435\u0442\u0430, \u043b\u0438\u0431\u043e \u0431\u0443\u0434\u0443\u0442 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u044b \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0440\u0430\u0437, \u0442\u043e\u0436\u0435 \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0442\u0441\u044f. \u041c\u0435\u0436\u0434\u0443 \u043d\u0438\u043c\u0438 \u0431\u0435\u0437\u0443\u0441\u043b\u043e\u0432\u043d\u043e \u0435\u0441\u0442\u044c \u0441\u0432\u044f\u0437\u044c, \u0442\u0430\u043a \u043a\u0430\u043a \u043f\u0440\u043e\u0448\u043b\u044b\u0435 \u0441\u043e\u0441\u0435\u0434\u0438 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u044b \u0438\u0437 \u0442\u0435\u043a\u0443\u0449\u0438\u0445 \u0443\u0437\u043b\u043e\u0432, \u043d\u043e \u0441\u043b\u043e\u0436\u043d\u043e \u0441\u043a\u0430\u0437\u0430\u0442\u044c, \u043d\u0430\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0437\u0432\u0430\u0442\u044c \u044d\u0442\u043e \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u043f\u043b\u043e\u0445\u0438\u043c \u0438\u043b\u0438 \u0445\u043e\u0440\u043e\u0448\u0438\u043c \u0434\u043b\u044f MySQL. \u0410 \u0432\u043e\u0442 \u0434\u043b\u044f PostgreSQL, \u043a\u0430\u043a \u043c\u0438\u043d\u0438\u043c\u0443\u043c \u043d\u0430 \u0434\u0430\u043d\u043d\u043e\u043c \u044d\u0442\u0430\u043f\u0435 \u0436\u0438\u0437\u043d\u0438 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f, \u0441\u043a\u0430\u0437\u0430\u0442\u044c \u043c\u043e\u0436\u043d\u043e \u2014 \u043e\u043d\u043e \u043f\u043b\u043e\u0445\u043e\u0435. \u041f\u0440\u0438\u0447\u0438\u043d\u0430 \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0432 \u0432\u044b\u0431\u043e\u0440\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043f\u043b\u0430\u043d\u0430 \u2014 <code>make_join_rel<\/code>. \u0412\u044b\u0437\u043e\u0432 \u044d\u0442\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043e\u0447\u0435\u043d\u044c \u0434\u043e\u0440\u043e\u0433\u043e \u0441\u0442\u043e\u0438\u0442 \u0438 \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442 \u043f\u043e\u0447\u0442\u0438 \u0432\u0441\u0435 \u0432\u0440\u0435\u043c\u044f \u0440\u0430\u0431\u043e\u0442\u044b. \u0415\u0441\u043b\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0432 \u044d\u0442\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u043f\u043e\u0434\u0445\u043e\u0434 MySQL, \u0442\u043e \u043f\u043e \u0438\u0442\u043e\u0433\u0443 \u0431\u0443\u0434\u0435\u0442 \u0441\u043e\u0437\u0434\u0430\u043d\u043e \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043c\u043d\u043e\u0433\u043e \u043d\u0435\u043d\u0443\u0436\u043d\u044b\u0445 \u043f\u0430\u0440 CSG\/CMP, \u0434\u043b\u044f \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043c\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u0431\u0443\u0434\u0435\u043c \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043f\u043b\u0430\u043d. \u0421\u043a\u043e\u0440\u0435\u0435 \u0432\u0441\u0435\u0433\u043e, \u043c\u044b \u0432\u043f\u0443\u0441\u0442\u0443\u044e \u043f\u043e\u0442\u0440\u0430\u0442\u0438\u043c \u043d\u0430 \u044d\u0442\u043e \u0432\u0440\u0435\u043c\u044f \u0438 \u0440\u0435\u0441\u0443\u0440\u0441\u044b, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0434\u0430\u0436\u0435 \u0435\u0441\u043b\u0438 \u043c\u0435\u0436\u0434\u0443 \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u044f\u043c\u0438 \u043d\u0435\u0442 \u043f\u0440\u0435\u0434\u0438\u043a\u0430\u0442\u043e\u0432, \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0441\u043e\u0437\u0434\u0430\u0442\u044c <code>CROSS JOIN<\/code>. \u041a\u043e\u0440\u043e\u0447\u0435 \u0433\u043e\u0432\u043e\u0440\u044f, \u0432 \u0442\u0435\u043a\u0443\u0449\u0435\u0439 \u043c\u043e\u0434\u0435\u043b\u0438 \u0441\u0442\u043e\u0438\u043c\u043e\u0441\u0442\u0438, \u0433\u043e\u0440\u0430\u0437\u0434\u043e \u0432\u044b\u0433\u043e\u0434\u043d\u0435\u0435 \u043f\u043e\u0442\u0440\u0430\u0442\u0438\u0442\u044c\u0441\u044f \u043d\u0430 \u043b\u0438\u0448\u043d\u0438\u0439 \u0432\u044b\u0437\u043e\u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043d\u0430\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u044f \u0441\u043e\u0441\u0435\u0434\u0435\u0439 (<code>get_neighbors<\/code>), \u0447\u0435\u043c \u043d\u0430 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043f\u043b\u0430\u043d\u0430 (<code>make_join_rel<\/code>). \u041d\u043e \u044d\u0442\u043e \u0435\u0449\u0435 \u043d\u0435 \u0432\u0441\u0435.<\/p>\n<p>\u041e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u043d\u0430 \u0444\u0443\u043d\u0434\u0430\u043c\u0435\u043d\u0442\u0430\u043b\u044c\u043d\u043e\u0435 \u0440\u0430\u0437\u043b\u0438\u0447\u0438\u0435 \u0432 \u043f\u043e\u0434\u0445\u043e\u0434\u0435 \u043a\u0435\u0448\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f. \u0412 \u043f\u043e\u0434\u0445\u043e\u0434\u0435 MySQL \u043e\u043d\u0438 \u0432\u043f\u043e\u043b\u043d\u0435 \u0441\u043f\u0440\u0430\u0432\u0435\u0434\u043b\u0438\u0432\u043e \u043c\u043e\u0433\u0443\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0441\u0432\u043e\u0439 \u043a\u0435\u0448 \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0435\u0433\u043e \u043f\u0440\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438, \u0442\u0430\u043a \u043a\u0430\u043a \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u043f\u043e\u0434\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e. \u041c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c, \u043e\u043d \u043d\u0435 \u0442\u0430\u043a\u043e\u0439 \u043e\u043f\u0442\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0439, \u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0434\u0430\u0436\u0435 \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 <em>\u0443\u0441\u043b\u043e\u0432\u043d\u043e\u0433\u043e<\/em> \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f. \u0410 \u0432\u043e\u0442 &#171;\u0438\u0434\u0435\u0430\u043b\u044c\u043d\u044b\u0439&#187; \u043a\u0435\u0448 \u2014 \u0434\u0440\u0443\u0433\u043e\u0435 \u0434\u0435\u043b\u043e, \u043e\u043d \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u043e\u0442 \u043d\u0430\u0441 \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e\u0439 \u0435\u0433\u043e \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0438, \u0442\u043e \u0435\u0441\u0442\u044c \u043c\u044b \u043e\u0431\u044f\u0437\u0430\u043d\u044b \u043d\u0430 \u043a\u0430\u0436\u0434\u043e\u0439 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0438 \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u0442\u044c \u0441\u043e\u0441\u0435\u0434\u0435\u0439, \u0447\u0442\u043e\u0431\u044b \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u0435 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f \u0434\u0430\u043b\u043e \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u044b\u0439 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442.<\/p>\n<p>\u0421\u043a\u0430\u0437\u0430\u0442\u044c, \u0447\u0442\u043e \u043b\u0443\u0447\u0448\u0435, \u0441\u043b\u043e\u0436\u043d\u043e:<\/p>\n<ol>\n<li>\n<p>\u0412 \u043e\u0434\u043d\u0438\u0445 \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u044f\u0445 \u0438\u043c\u0435\u0435\u0442 \u0441\u043c\u044b\u0441\u043b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c &#171;\u0438\u0434\u0435\u0430\u043b\u044c\u043d\u044b\u0439&#187; \u043a\u0435\u0448 (\u0438 \u0430\u0434\u0430\u043f\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043a\u0435\u0448\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0438\u0437 MySQL): <\/p>\n<ul>\n<li>\n<p>\u0434\u043b\u044f \u0431\u043e\u043b\u044c\u0448\u0435\u0439 \u0447\u0430\u0441\u0442\u0438 \u043f\u043e\u0434\u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432 \u0443 \u043d\u0430\u0441 \u0443\u0436\u0435 \u0438\u043c\u0435\u0435\u0442\u0441\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u044b\u0439 \u043f\u043b\u0430\u043d;<\/p>\n<\/li>\n<li>\n<p>\u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0438\u0445 \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u0432\u043d\u044b\u0445 \u0432\u044b\u0437\u043e\u0432\u043e\u0432 \u043d\u0435 \u043f\u0440\u0435\u0434\u0432\u0438\u0434\u0438\u0442\u0441\u044f (\u0438 \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u044d\u043a\u0441\u043f\u043e\u043d\u0435\u043d\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0432\u0437\u0440\u044b\u0432\u0430).<\/p>\n<\/li>\n<\/ul>\n<\/li>\n<li>\n<p>\u0412 \u0434\u0440\u0443\u0433\u0438\u0445 \u0442\u0430\u043a\u0438\u0445 \u043f\u043b\u0430\u043d\u043e\u0432 \u0432\u043e\u043e\u0431\u0449\u0435 \u043d\u0435\u0442, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0438 \u0441\u043e\u0441\u0435\u0434\u0435\u0439 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u044c \u043d\u0435 \u043d\u0430\u0434\u043e, \u043c\u043e\u0436\u043d\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u0438\u0437\u0440\u0435\u0434\u043a\u0430 \u0438\u0445 \u0447\u0435\u0441\u0442\u043d\u043e \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u0442\u044c.<\/p>\n<\/li>\n<\/ol>\n<p>\u041d\u043e \u0434\u0430\u0436\u0435 \u0442\u0430\u043a, \u0432\u0437\u044f\u0432 \u043f\u0435\u0440\u0432\u044b\u0439 \u043f\u043e\u0434\u0445\u043e\u0434, \u043d\u0430\u043c \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u043e\u0446\u0435\u043d\u0438\u0442\u044c \u043f\u043e\u0441\u043b\u0435\u0434\u0441\u0442\u0432\u0438\u044f, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0435\u0449\u0435 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u0443\u0437\u043b\u043e\u0432 \u0432 \u0441\u043e\u0441\u0435\u0434\u0441\u0442\u0432\u043e \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0442 \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0438\u0435 \u0440\u0430\u0441\u0445\u043e\u0434\u044b \u043d\u0430 \u0434\u0440\u0443\u0433\u0438\u0435 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0438. \u042d\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u043d\u0438\u0432\u0435\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432\u044b\u0438\u0433\u0440\u044b\u0448, \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0439 \u043f\u0440\u044f\u043c\u043e \u0441\u0435\u0439\u0447\u0430\u0441: \u043d\u0435 \u0437\u0430\u0431\u044b\u0432\u0430\u0439\u0442\u0435, \u0447\u0442\u043e \u043a\u0430\u0436\u0434\u044b\u0439 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u0443\u0437\u0435\u043b \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u0435\u0442 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0439 \u043f\u043e \u043f\u043e\u0434\u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0430\u043c <em>\u0432 \u0434\u0432\u0430 \u0440\u0430\u0437\u0430<\/em>, \u0430 \u044d\u0442\u043e\u0442 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u0443\u0437\u0435\u043b \u0435\u0449\u0435 \u0438 \u0434\u043e\u0431\u0430\u0432\u0438\u0442 \u043d\u043e\u0432\u044b\u0445 \u0443\u0437\u043b\u043e\u0432 \u0432 \u0431\u0443\u0434\u0443\u0449\u0438\u0445 \u0441\u043e\u0441\u0435\u0434\u0435\u0439! \u0418\u0437 \u043f\u0440\u0438\u043c\u0435\u0440\u0430 \u0432\u044b\u0448\u0435 \u2014 \u043c\u044b \u0434\u043e\u0431\u0430\u0432\u0438\u043b\u0438 \u0434\u0432\u0430 \u0443\u0437\u043b\u0430 \u0432 \u0441\u043e\u0441\u0435\u0434\u0438, \u0430 \u0437\u043d\u0430\u0447\u0438\u0442, \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0439 \u0441\u0442\u0430\u043d\u0435\u0442 \u0432 \u0447\u0435\u0442\u044b\u0440\u0435 \u0440\u0430\u0437\u0430 \u0431\u043e\u043b\u044c\u0448\u0435, \u0438 \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043d\u0443\u0436\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u043d\u0430\u0439\u0442\u0438 \u0435\u0449\u0435 \u0441\u043e\u0441\u0435\u0434\u0435\u0439, \u0432\u044b\u0437\u0432\u0430\u0442\u044c \u0434\u0440\u0443\u0433\u0438\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0438 \u0442\u0430\u043a \u0434\u0430\u043b\u0435\u0435. \u0410 \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0442\u0430\u043a\u0438\u0445 &#171;\u043a\u043e\u0441\u0432\u0435\u043d\u043d\u044b\u0445&#187; \u0441\u043e\u0441\u0435\u0434\u0435\u0439 \u043d\u0430\u043a\u043e\u043f\u0438\u0442\u0441\u044f \u0437\u0430 \u0435\u0449\u0435 \u0431\u043e\u043b\u044c\u0448\u0435\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u0432\u043d\u044b\u0445 \u0432\u044b\u0437\u043e\u0432\u043e\u0432 \u2014 \u0432\u043e\u043f\u0440\u043e\u0441 \u0440\u0438\u0442\u043e\u0440\u0438\u0447\u0435\u0441\u043a\u0438\u0439.<\/p>\n<\/div>\n<\/details>\n<h3>\u0418\u043d\u0434\u0435\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0440\u0435\u0431\u0435\u0440<\/h3>\n<p>\u0420\u0430\u0441\u0441\u043a\u0430\u0437\u044b\u0432\u0430\u044f \u043e \u0434\u0435\u0442\u0430\u043b\u044f\u0445 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438, \u044f \u0443\u043f\u043e\u043c\u044f\u043d\u0443\u043b, \u0447\u0442\u043e \u0441\u043b\u043e\u0436\u043d\u044b\u0435 \u0440\u0435\u0431\u0440\u0430 \u0441\u043e\u0440\u0442\u0438\u0440\u0443\u044e\u0442\u0441\u044f, \u044d\u0442\u043e \u043f\u043e\u043c\u043e\u0433\u0430\u0435\u0442 \u0438\u0437\u0431\u0430\u0432\u0438\u0442\u044c\u0441\u044f \u043e\u0442 \u0434\u0443\u0431\u043b\u0438\u043a\u0430\u0442\u043e\u0432, \u043d\u043e \u0435\u0441\u0442\u044c \u0435\u0449\u0435 \u043e\u0434\u043d\u0430 \u043f\u043e\u043b\u044c\u0437\u0430. \u0415\u0441\u043b\u0438 \u043c\u044b \u0432\u0437\u0433\u043b\u044f\u043d\u0435\u043c \u043d\u0430 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0447\u0430\u0441\u0442\u0438 DPhyp, \u0430 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e \u043d\u0430 \u043c\u0435\u0441\u0442\u0430, \u0432 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043d\u0430\u043c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043e\u0431\u0445\u043e\u0434\u0438\u0442\u044c \u0440\u0435\u0431\u0440\u0430 \u2014 \u043d\u0430\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u0435 \u0441\u043e\u0441\u0435\u0434\u0435\u0439 \u0438 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u0441\u0432\u044f\u0437\u0438 (\u0440\u0435\u0431\u0440\u0430) \u043c\u0435\u0436\u0434\u0443 \u0434\u0432\u0443\u043c\u044f \u0433\u0438\u043f\u0435\u0440\u0443\u0437\u043b\u0430\u043c\u0438, \u2014 \u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u043c\u0435\u0442\u0438\u0442\u044c \u043f\u043e\u0445\u043e\u0436\u0438\u0439 \u043f\u0430\u0442\u0442\u0435\u0440\u043d \u0441 \u0438\u0434\u0435\u0435\u0439 \u043a\u0435\u0448\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f: \u0435\u0441\u0442\u044c \u0434\u0432\u0438\u0436\u0443\u0449\u0438\u0435\u0441\u044f \u0434\u0435\u0442\u0430\u043b\u0438, \u0430 \u0435\u0441\u0442\u044c \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u044b\u0435:<\/p>\n<ul>\n<li>\n<p>\u043f\u0440\u0438 \u043f\u043e\u0438\u0441\u043a\u0435 \u0441\u043e\u0441\u0435\u0434\u0435\u0439 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u044b\u0445 \u0443\u0437\u043b\u043e\u0432 (<code>excluded<\/code>) \u043d\u0435\u0438\u0437\u043c\u0435\u043d\u043d\u043e (\u043b\u0438\u0431\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u0435\u0442\u0441\u044f);<\/p>\n<\/li>\n<li>\n<p>\u043f\u0440\u0438 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0438 \u0441\u0432\u044f\u0437\u0438 \u043c\u0435\u0436\u0434\u0443 \u0433\u0438\u043f\u0435\u0440\u0443\u0437\u043b\u0430\u043c\u0438 \u043e\u0431\u0430 \u0433\u0438\u043f\u0435\u0440\u0443\u0437\u043b\u0430 \u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u044b.<\/p>\n<\/li>\n<\/ul>\n<p>\u041f\u043e\u043f\u0440\u043e\u0431\u0443\u0435\u043c \u043a\u0430\u043a-\u0442\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u044d\u0442\u043e \u0437\u043d\u0430\u043d\u0438\u0435, \u0438 \u0434\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u043d\u0430\u0443\u0447\u0438\u043c\u0441\u044f \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u0442\u044c \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u044b\u0435 \u0443\u0437\u043b\u044b. \u0410\u043d\u0430\u043b\u0438\u0437 DPhyp \u0434\u0430\u0435\u0442 \u043f\u043e\u043d\u044f\u0442\u044c, \u0447\u0442\u043e \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u044b\u0445 \u0443\u0437\u043b\u043e\u0432 \u0438\u043c\u0435\u0435\u0442 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u0443\u044e \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443: \u043b\u0438\u0434\u0438\u0440\u0443\u044e\u0449\u0438\u0435 \u0435\u0434\u0438\u043d\u0438\u0446\u044b, \u0430 \u0437\u0430\u0442\u0435\u043c \u0440\u0430\u0437\u0440\u043e\u0437\u043d\u0435\u043d\u043d\u044b\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, <code>010110011111<\/code> \u2014 \u0432 \u043d\u0435\u043c \u0435\u0441\u0442\u044c \u043f\u044f\u0442\u044c \u043b\u0438\u0434\u0438\u0440\u0443\u044e\u0449\u0438\u0445 \u0435\u0434\u0438\u043d\u0438\u0446. \u042d\u0442\u043e \u043d\u0435\u0441\u043b\u0443\u0447\u0430\u0439\u043d\u043e, \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0442\u0430\u043a \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442: \u043c\u044b \u043d\u0435 \u0434\u043e\u043b\u0436\u043d\u044b \u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043d\u0430 \u0443\u0437\u043b\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0435\u0449\u0435 \u043d\u0435 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u043b\u0438, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043a\u0430\u0436\u0434\u044b\u0439 \u0440\u0430\u0437 \u043f\u0440\u0438 \u043e\u0431\u0445\u043e\u0434\u0435 \u0440\u0435\u0431\u0435\u0440 \u043c\u044b \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c, \u0447\u0442\u043e \u043d\u0438\u043a\u0430\u043a\u0430\u044f \u0447\u0430\u0441\u0442\u044c \u0441 \u044d\u0442\u0438\u043c\u0438 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u044b\u043c\u0438 \u043d\u0435 \u043f\u0435\u0440\u0435\u0441\u0435\u043a\u0430\u0435\u0442\u0441\u044f. \u041c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u044b\u0445 \u0443\u0437\u043b\u043e\u0432 \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u0438\u0442\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043c\u043e\u0436\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0442\u044c\u0441\u044f, \u043d\u043e \u043d\u0435 \u0443\u043c\u0435\u043d\u044c\u0448\u0438\u0442\u044c\u0441\u044f, \u0430 \u044d\u0442\u043e \u0437\u043d\u0430\u0447\u0438\u0442, \u0447\u0442\u043e \u043c\u044b \u0437\u0430\u0440\u0430\u043d\u0435\u0435 \u043c\u043e\u0436\u0435\u043c \u0437\u043d\u0430\u0442\u044c, \u043a\u0430\u043a\u0438\u0435 \u0443\u0437\u043b\u044b \u0442\u043e\u0447\u043d\u043e \u043d\u0435 \u0431\u0443\u0434\u0443\u0442 \u0443\u0434\u043e\u0432\u043b\u0435\u0442\u0432\u043e\u0440\u044f\u0442\u044c \u0443\u0441\u043b\u043e\u0432\u0438\u044e, \u0442\u043e \u0435\u0441\u0442\u044c \u0431\u0443\u0434\u0443\u0442 \u043f\u0435\u0440\u0435\u0441\u0435\u043a\u0430\u0442\u044c\u0441\u044f \u0441 \u044d\u0442\u0438\u043c\u0438 \u043b\u0438\u0434\u0438\u0440\u0443\u044e\u0449\u0438\u043c\u0438 \u043d\u0443\u043b\u044f\u043c\u0438.<\/p>\n<p>\u041c\u043e\u0436\u0435\u043c \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0432\u043e\u0442 \u0447\u0442\u043e \u2014 \u0432\u0437\u044f\u0442\u044c \u0432\u0441\u0435 \u0433\u0438\u043f\u0435\u0440\u0440\u0435\u0431\u0440\u0430 \u0438 \u043e\u0442\u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438\u0445 \u043f\u043e \u043f\u0440\u0430\u0432\u043e\u0439 \u0447\u0430\u0441\u0442\u0438, \u0430 \u0434\u043b\u044f \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043b\u0438\u0434\u0438\u0440\u0443\u044e\u0449\u0438\u0445 \u043d\u0443\u043b\u0435\u0439. \u0417\u0430\u0442\u0435\u043c, \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u0438\u0442\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f, \u043c\u044b \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u0435\u043c \u0434\u043b\u0438\u043d\u0443 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u043b\u0438\u0434\u0438\u0440\u0443\u044e\u0449\u0438\u0445 \u0435\u0434\u0438\u043d\u0438\u0446 \u0432\u043e \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0435 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u044b\u0445 \u0438 \u0441\u0442\u0430\u0440\u0442\u043e\u0432\u044b\u0439 \u0438\u043d\u0434\u0435\u043a\u0441 \u0434\u043b\u044f \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0438 \u0441\u0442\u0430\u0432\u0438\u043c \u0442\u0430\u043a\u0438\u043c, \u0447\u0442\u043e\u0431\u044b \u043f\u0435\u0440\u0432\u044b\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u043f\u0440\u0430\u0432\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u0440\u0435\u0431\u0440\u0430 \u0442\u043e\u0447\u043d\u043e \u043f\u0440\u0435\u0432\u044b\u0448\u0430\u043b \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0435\u0434\u0438\u043d\u0438\u0446.<\/p>\n<p>\u041f\u043e\u043a\u0430\u0436\u0443 \u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u0435. \u0423 \u043d\u0430\u0441 \u0438\u043c\u0435\u0435\u0442\u0441\u044f \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043e\u0442\u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u043f\u043e \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0443 \u043b\u0438\u0434\u0438\u0440\u0443\u044e\u0449\u0438\u0445 \u043d\u0443\u043b\u0435\u0439 \u0433\u0438\u043f\u0435\u0440\u0440\u0435\u0431\u0435\u0440. \u0421\u043f\u0440\u0430\u0432\u0430 \u043d\u0430\u043f\u0438\u0441\u0430\u043b \u0438\u043d\u0434\u0435\u043a\u0441\u044b \u0434\u043b\u044f \u0443\u0434\u043e\u0431\u0441\u0442\u0432\u0430 (\u043b\u0435\u0432\u0430\u044f \u0447\u0430\u0441\u0442\u044c \u0433\u0438\u043f\u0435\u0440\u0440\u0435\u0431\u0440\u0430 \u043d\u0435 \u0432\u0430\u0436\u043d\u0430, \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u0430\u0432\u0430\u044f):<\/p>\n<pre><code>[     xxxxx - 00101    0     xxxxx - 00111    1     xxxxx - 00100    2     xxxxx - 00100    3     xxxxx - 01100    4     xxxxx - 10100    5     xxxxx - 11100    6     xxxxx - 01000    7 ] <\/code><\/pre>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u043b\u0435\u0433\u043a\u043e \u043f\u043e\u043d\u044f\u0442\u044c, \u0441 \u043a\u0430\u043a\u043e\u0433\u043e \u0438\u043d\u0434\u0435\u043a\u0441\u0430 \u043d\u0430\u043c \u0441\u0442\u043e\u0438\u0442 \u043d\u0430\u0447\u0430\u0442\u044c \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u044e \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0442\u043e\u0433\u043e, \u043a\u0430\u043a\u043e\u0435 \u043f\u0435\u0440\u0435\u0434 \u043d\u0430\u043c\u0438 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u044b\u0445 \u0443\u0437\u043b\u043e\u0432:<\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<th>\n<p align=\"left\"><code>excluded<\/code><\/p>\n<\/th>\n<th>\n<p align=\"left\">\u0441\u0442\u0430\u0440\u0442\u043e\u0432\u044b\u0439 \u0438\u043d\u0434\u0435\u043a\u0441<\/p>\n<\/th>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>00100<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">0<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>00001<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">2<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>11101<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">2<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>10011<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">2<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>00111<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">7<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>01111<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">8<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>\u041d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043c\u043e\u043c\u0435\u043d\u0442\u043e\u0432:<\/p>\n<ol>\n<li>\n<p>\u041c\u044b \u043c\u043e\u0436\u0435\u043c \u0431\u044b\u0442\u044c \u0443\u0432\u0435\u0440\u0435\u043d\u044b \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u0440\u0430\u0437\u043c\u0435\u0440\u0435 \u043b\u0438\u0434\u0438\u0440\u0443\u044e\u0449\u0438\u0445 \u0435\u0434\u0438\u043d\u0438\u0446, \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u0430\u044f \u0447\u0430\u0441\u0442\u044c \u0434\u043b\u044f \u043d\u0430\u0441 \u2014 \u0447\u0435\u0440\u043d\u044b\u0439 \u044f\u0449\u0438\u043a. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0438\u0437-\u0437\u0430 \u044d\u0442\u043e\u0433\u043e \u0432 \u0442\u0440\u0435\u0442\u044c\u0435\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u044e \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u043c \u0441\u043e \u0432\u0442\u043e\u0440\u043e\u0433\u043e \u0438\u043d\u0434\u0435\u043a\u0441\u0430, \u0445\u043e\u0442\u044f \u0432\u0438\u0434\u043d\u043e, \u0447\u0442\u043e \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u0430\u044f \u0447\u0430\u0441\u0442\u044c \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0430.<\/p>\n<\/li>\n<li>\n<p>\u0414\u043b\u044f \u043e\u0431\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u043a\u043e\u0434\u0430 \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u043a\u043e\u0433\u0434\u0430 \u043d\u0435\u0442 \u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0438\u0445 \u0440\u0435\u0431\u0435\u0440 \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0442\u044c \u0434\u043b\u0438\u043d\u0443 \u043c\u0430\u0441\u0441\u0438\u0432\u0430 (\u0431\u043e\u043b\u044c\u0448\u043e\u0435 \u0447\u0438\u0441\u043b\u043e).<\/p>\n<\/li>\n<\/ol>\n<p>\u0427\u0442\u043e\u0431\u044b \u043f\u043e\u043d\u044f\u0442\u044c \u043f\u043e\u043b\u044c\u0437\u0443 \u044d\u0442\u043e\u0439 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438, \u0432\u0441\u043f\u043e\u043c\u043d\u0438\u0442\u0435, \u0447\u0442\u043e \u0432\u0441\u0435 \u0440\u0435\u0431\u0440\u0430 \u0432 \u0433\u0440\u0430\u0444\u0435 \u2014 \u0434\u0432\u0443\u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0435, \u0442\u043e \u0435\u0441\u0442\u044c \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0433\u0438\u043f\u0435\u0440\u0440\u0435\u0431\u0440\u0430 \u043c\u044b \u0441\u043e\u0437\u0434\u0430\u0435\u043c \u0434\u0432\u0435 \u043f\u0430\u0440\u044b \u0441 \u043e\u0431\u043c\u0435\u043d\u044f\u043d\u043d\u044b\u043c\u0438 \u043b\u0435\u0432\u043e\u0439 \u0438 \u043f\u0440\u0430\u0432\u043e\u0439 \u0447\u0430\u0441\u0442\u044f\u043c\u0438. \u041c\u043e\u0436\u0435\u0442 \u043e\u043a\u0430\u0437\u0430\u0442\u044c\u0441\u044f, \u0447\u0442\u043e \u043d\u0430 \u043a\u0430\u043a\u043e\u0439-\u0442\u043e \u0443\u0437\u0435\u043b \u0441\u0441\u044b\u043b\u0430\u0435\u0442\u0441\u044f \u043e\u0447\u0435\u043d\u044c \u0431\u043e\u043b\u044c\u0448\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0442\u0430\u0431\u043b\u0438\u0446 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u044d\u0442\u043e \u0442\u0430\u0431\u043b\u0438\u0446\u0430 \u0444\u0430\u043a\u0442\u043e\u0432, \u0430 \u0440\u0430\u0437\u043c\u0435\u0440\u043d\u043e\u0441\u0442\u0435\u0439 \u0443 \u043d\u0430\u0441 100+), \u0430 \u0441\u0430\u043c\u0430 \u044d\u0442\u0430 \u0442\u0430\u0431\u043b\u0438\u0446\u0430 \u0438\u043c\u0435\u0435\u0442 \u0441\u0430\u043c\u044b\u0439 \u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u0438\u043d\u0434\u0435\u043a\u0441, \u0442\u043e \u0435\u0441\u0442\u044c <code>excluded<\/code> \u0431\u0443\u0434\u0435\u0442 \u0432\u043a\u043b\u044e\u0447\u0430\u0442\u044c \u043f\u043e\u0447\u0442\u0438 \u0432\u0441\u0435 \u0442\u0430\u0431\u043b\u0438\u0446\u044b. \u0412 \u044d\u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043d\u0430\u043c \u043f\u0440\u0438\u0434\u0435\u0442\u0441\u044f \u0431\u0435\u0437\u0443\u0441\u043f\u0435\u0448\u043d\u043e \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u0442\u044c \u043f\u043e \u0432\u0441\u0435\u043c \u0441\u043b\u043e\u0436\u043d\u044b\u043c \u0440\u0435\u0431\u0440\u0430\u043c, \u0437\u043d\u0430\u044f, \u0447\u0442\u043e \u044d\u0442\u043e \u043d\u0435 \u0434\u0430\u0441\u0442 \u043d\u0438\u043a\u0430\u043a\u043e\u0433\u043e \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430.<\/p>\n<p>\u0425\u043e\u0440\u043e\u0448\u043e, \u0430 \u043a\u0430\u043a \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u044c \u0441\u0442\u0430\u0440\u0442\u043e\u0432\u044b\u0439 \u0438\u043d\u0434\u0435\u043a\u0441? \u041f\u0435\u0440\u0432\u043e\u0435 \u0447\u0442\u043e \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442 \u0432 \u0433\u043e\u043b\u043e\u0432\u0443, \u043a\u043e\u0433\u0434\u0430 \u0433\u043e\u0432\u043e\u0440\u044f\u0442 &#171;\u043e\u0442\u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439&#187; \u2014 \u0431\u0438\u043d\u0430\u0440\u043d\u044b\u0439 \u043f\u043e\u0438\u0441\u043a, \u043d\u043e \u043d\u0435 \u0441\u043f\u0435\u0448\u0438\u0442\u0435 \u0441 \u0432\u044b\u0432\u043e\u0434\u0430\u043c\u0438. \u0412\u0441\u043f\u043e\u043c\u043d\u0438\u043c, \u0447\u0442\u043e \u043d\u0430\u0448\u0435 \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u043e &#171;\u043a\u043b\u044e\u0447\u0435\u0439&#187; (\u044d\u0442\u043e \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043b\u0438\u0434\u0438\u0440\u0443\u044e\u0449\u0438\u0445 \u043d\u0443\u043b\u0435\u0439\/\u0435\u0434\u0438\u043d\u0438\u0446) \u2014 \u0434\u0438\u0441\u043a\u0440\u0435\u0442\u043d\u043e\u0435. \u041d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u043e\u043d\u043e \u0441 \u043d\u0443\u043b\u044f \u0438 \u043c\u043e\u0436\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u0442\u044c\u0441\u044f (\u0432 \u043c\u043e\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0435\u0441\u0442\u044c \u043f\u0440\u0435\u0434\u0435\u043b \u2014 64). \u0410 \u0447\u0442\u043e \u043f\u043e\u0434\u0445\u043e\u0434\u0438\u0442 \u043f\u043e\u0434 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0442\u0430\u043a\u043e\u0439 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b? \u041c\u0430\u0441\u0441\u0438\u0432. \u041f\u043e\u0434 \u0438\u043d\u0434\u0435\u043a\u0441\u043e\u043c <code>i<\/code> \u0431\u0443\u0434\u0435\u0442 \u0445\u0440\u0430\u043d\u0438\u0442\u044c\u0441\u044f \u043f\u0435\u0440\u0432\u044b\u0439 \u0438\u043d\u0434\u0435\u043a\u0441 \u043c\u0430\u0441\u0441\u0438\u0432\u0430 \u0433\u0438\u043f\u0435\u0440\u0440\u0435\u0431\u0435\u0440, \u043f\u0435\u0440\u0432\u044b\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u043f\u0440\u0430\u0432\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 (\u0433\u0438\u043f\u0435\u0440\u0440\u0435\u0431\u0440\u0430) \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043d\u0435 \u043c\u0435\u043d\u044c\u0448\u0435 \u044d\u0442\u043e\u0433\u043e <code>i<\/code>.<\/p>\n<p>\u0410 \u0447\u0442\u043e \u0434\u0435\u043b\u0430\u0442\u044c \u0441 \u043f\u0440\u043e\u0431\u0435\u043b\u0430\u043c\u0438? \u0412 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u043f\u043e\u0441\u043b\u0435 <code>00111<\/code> \u0441\u0440\u0430\u0437\u0443 \u0438\u0434\u0435\u0442 <code>00100<\/code>, \u0431\u0435\u0437 <code>00010<\/code>. \u042d\u0442\u0438 \u043f\u0440\u043e\u0431\u0435\u043b\u044b \u043c\u044b \u0437\u0430\u043f\u043e\u043b\u043d\u044f\u0435\u043c \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435\u043c, \u0442\u043e \u0435\u0441\u0442\u044c \u0435\u0441\u043b\u0438 \u0434\u043b\u044f \u043a\u0430\u043a\u043e\u0439-\u0442\u043e \u0434\u043b\u0438\u043d\u044b <code>i<\/code> \u044f \u043d\u0435 \u0437\u043d\u0430\u044e, \u0441 \u043a\u0430\u043a\u043e\u0433\u043e \u0438\u043d\u0434\u0435\u043a\u0441\u0430 \u043c\u043d\u0435 \u043b\u0443\u0447\u0448\u0435 \u043d\u0430\u0447\u0430\u0442\u044c \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u044e, \u0442\u043e \u043d\u0443\u0436\u043d\u043e \u0432\u0437\u044f\u0442\u044c \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0439 \u0438\u043d\u0434\u0435\u043a\u0441, \u0442\u0430\u043a \u043a\u0430\u043a \u0435\u0441\u043b\u0438 \u043c\u043e\u0439 \u043f\u0435\u0440\u0432\u044b\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442 <code>i<\/code>, \u0442\u043e \u044f \u0431\u0443\u0434\u0443 \u0443\u0434\u043e\u0432\u043b\u0435\u0442\u0432\u043e\u0440\u044f\u0442\u044c \u0438 \u0432\u0441\u0435\u043c \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044f\u043c \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u044b\u0445 \u0434\u043b\u0438\u043d\u043e\u0439 \u043c\u0435\u043d\u044c\u0448\u0435 \u044d\u0442\u043e\u0433\u043e <code>i<\/code>. \u0417\u0430 \u0431\u0430\u0437\u0443 \u043c\u044b \u0432\u043e\u0437\u044c\u043c\u0435\u043c \u0438\u043d\u0434\u0435\u043a\u0441 <code>0<\/code>, \u0442\u043e \u0435\u0441\u0442\u044c \u0435\u0441\u043b\u0438 \u0442\u0430\u043a\u043e\u0439 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u044b\u0445 \u0443\u0437\u043b\u043e\u0432 \u043d\u0435\u0442, \u0442\u043e \u0435\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0431\u0443\u0434\u0435\u0442 <code>0<\/code>, \u0442\u0430\u043a \u043a\u0430\u043a \u0432 \u044d\u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043c\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u043f\u0440\u043e\u0438\u0442\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043f\u043e \u0432\u0441\u0435\u043c \u0433\u0438\u043f\u0435\u0440\u0440\u0435\u0431\u0440\u0430\u043c.<\/p>\n<p>\u0417\u0430\u0442\u0440\u0430\u0442\u044b \u043d\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0442\u0430\u043a\u043e\u0433\u043e \u0438\u043d\u0434\u0435\u043a\u0441\u0430 \u0440\u0430\u0432\u043d\u044b \u0442\u043e\u043b\u044c\u043a\u043e \u0440\u0430\u0441\u0447\u0435\u0442\u0443 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u043b\u0438\u0434\u0438\u0440\u0443\u044e\u0449\u0438\u0445 \u0435\u0434\u0438\u043d\u0438\u0446 \u0432\u043e \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0435 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u044b\u0445 \u0443\u0437\u043b\u043e\u0432. \u041d\u043e \u044d\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u0440\u043e\u0441\u0442\u044b\u043c \u0431\u0438\u0442\u043e\u0432\u044b\u043c \u0442\u0440\u044e\u043a\u043e\u043c \u2014 \u043f\u0440\u0438\u0431\u0430\u0432\u043b\u044f\u0435\u043c <code>1<\/code> \u0438 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0438\u0437 <code>0<\/code> \u0442\u0430\u043a\u043e\u0439 \u0436\u0435 \u0434\u043b\u0438\u043d\u044b, \u043d\u043e \u043e\u043a\u0430\u043d\u0447\u0438\u0432\u0430\u044e\u0449\u0443\u044e\u0441\u044f \u043d\u0430 <code>1<\/code>, \u0430 \u0437\u0430\u0442\u0435\u043c \u0440\u0430\u0441\u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u043c \u043f\u043e\u0437\u0438\u0446\u0438\u044e \u044d\u0442\u043e\u0439 \u0435\u0434\u0438\u043d\u0438\u0446\u044b. \u041f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u044d\u0442\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043c\u043e\u0436\u043d\u043e \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0439 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0435\u0439, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, <code>POPCNT<\/code>.<\/p>\n<p>\u0414\u043b\u044f \u0440\u0435\u0431\u0435\u0440 \u0438\u0437 \u043f\u0440\u0438\u043c\u0435\u0440\u0430 \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043f\u043e\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0442\u0430\u043a\u043e\u0439 \u0438\u043d\u0434\u0435\u043a\u0441 (\u0438\u043d\u0434\u0435\u043a\u0441 \u043c\u0430\u0441\u0441\u0438\u0432\u0430 \u0440\u0435\u0431\u0435\u0440 \u0441\u043f\u0440\u0430\u0432\u0430):<\/p>\n<pre><code>[     0: 0     1: 2     2: 2     3: 7     4: 8     5: 8 ] <\/code><\/pre>\n<p>\u0420\u0430\u0437\u043c\u0435\u0440 \u044d\u0442\u043e\u0433\u043e \u0438\u043d\u0434\u0435\u043a\u0441\u0430 \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0442 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u043b\u0438\u0434\u0438\u0440\u0443\u044e\u0449\u0438\u0445 <code>0<\/code> \u0432\u043e \u0432\u0441\u0435\u043c \u043c\u0430\u0441\u0441\u0438\u0432\u0435 \u0440\u0435\u0431\u0435\u0440. \u0414\u043b\u044f \u043f\u0440\u0438\u043c\u0435\u0440\u0430 \u0432\u0438\u0434\u043d\u043e, \u0447\u0442\u043e \u044f \u043c\u043e\u0433 \u0431\u044b \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043c\u0430\u0441\u0441\u0438\u0432 \u0442\u043e\u043b\u044c\u043a\u043e \u0438\u0437 \u0447\u0435\u0442\u044b\u0440\u0435\u0445 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432, \u0430 \u0434\u0430\u043b\u044c\u0448\u0435 \u0432\u0441\u0435\u0433\u0434\u0430 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0442\u044c <code>8<\/code> (\u043a\u0430\u043a \u0440\u0430\u0437\u043c\u0435\u0440 \u043c\u0430\u0441\u0441\u0438\u0432\u0430).<\/p>\n<p>\u041c\u044b \u043d\u0430\u0443\u0447\u0438\u043b\u0438\u0441\u044c \u0431\u044b\u0441\u0442\u0440\u043e \u043e\u0442\u0441\u0435\u043a\u0430\u0442\u044c \u043d\u0435\u043d\u0443\u0436\u043d\u044b\u0435 \u0440\u0435\u0431\u0440\u0430 \u043f\u0440\u0438 \u043f\u043e\u0438\u0441\u043a\u0435 \u0441\u043e\u0441\u0435\u0434\u0435\u0439. \u041d\u043e \u043f\u043e \u0440\u0435\u0431\u0440\u0430\u043c \u043c\u044b \u0445\u043e\u0434\u0438\u043c \u0442\u0430\u043a\u0436\u0435 \u0434\u043b\u044f \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u043e\u0441\u0442\u0438 \u0434\u0432\u0443\u0445 \u0433\u0438\u043f\u0435\u0440\u0443\u0437\u043b\u043e\u0432. \u041c\u043e\u0436\u043d\u043e \u043b\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u044d\u0442\u043e\u0442 \u0438\u043d\u0434\u0435\u043a\u0441 \u0438 \u0437\u0434\u0435\u0441\u044c? \u0414\u0430, \u043c\u043e\u0436\u043d\u043e. \u0414\u0432\u0430 \u0433\u0438\u043f\u0435\u0440\u0443\u0437\u043b\u0430 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u044b, \u043a\u043e\u0433\u0434\u0430 \u0435\u0441\u0442\u044c \u0433\u0438\u043f\u0435\u0440\u0440\u0435\u0431\u0440\u043e, \u043b\u0435\u0432\u0430\u044f \u0447\u0430\u0441\u0442\u044c \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u2014 \u043f\u043e\u0434\u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u043b\u0435\u0432\u043e\u0433\u043e \u0433\u0438\u043f\u0435\u0440\u0443\u0437\u043b\u0430, \u0430 \u043f\u0440\u0430\u0432\u0430\u044f \u0447\u0430\u0441\u0442\u044c \u2014 \u043f\u0440\u0430\u0432\u043e\u0433\u043e. \u0413\u0438\u043f\u0435\u0440\u0443\u0437\u043b\u044b \u043d\u0430 \u0432\u0445\u043e\u0434\u0435 \u043d\u0438\u043a\u0430\u043a \u043d\u0435 \u043c\u0435\u043d\u044f\u044e\u0442\u0441\u044f, \u0442\u043e\u0447\u043d\u043e \u0442\u0430\u043a \u0436\u0435, \u043a\u0430\u043a \u0438 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u044b\u0445. \u0410 \u0442\u0435\u043f\u0435\u0440\u044c \u043d\u0430\u0434\u043e \u0437\u0430\u043c\u0435\u0442\u0438\u0442\u044c, \u0447\u0442\u043e \u043f\u0440\u0430\u0432\u0430\u044f \u0447\u0430\u0441\u0442\u044c \u0433\u0438\u043f\u0435\u0440\u0440\u0435\u0431\u0440\u0430 \u0442\u043e\u0447\u043d\u043e \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u0434\u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e\u043c, \u0435\u0441\u043b\u0438 \u0432 \u044d\u0442\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u0435\u0441\u0442\u044c \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b, \u0438\u043d\u0434\u0435\u043a\u0441 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043c\u0435\u043d\u044c\u0448\u0435, \u0447\u0435\u043c \u043d\u0430\u0438\u043c\u0435\u043d\u044c\u0448\u0438\u0439 \u0432 \u0433\u0438\u043f\u0435\u0440\u0443\u0437\u043b\u0435 \u0441\u043f\u0440\u0430\u0432\u0430. \u041f\u0440\u0438\u043c\u0435\u0440: \u043f\u0440\u0430\u0432\u0430\u044f \u0447\u0430\u0441\u0442\u044c \u0433\u0438\u043f\u0435\u0440\u0440\u0435\u0431\u0440\u0430 <code>001010<\/code> \u043d\u0438\u043a\u0430\u043a \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u0434\u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e\u043c \u0433\u0438\u043f\u0435\u0440\u0443\u0437\u043b\u0430 <code>001100<\/code>, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u0432 \u0440\u0435\u0431\u0440\u0435 \u0435\u0441\u0442\u044c \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u0441 \u0438\u043d\u0434\u0435\u043a\u0441\u043e\u043c 2. \u0422\u043e \u0435\u0441\u0442\u044c \u0441\u0435\u043c\u0430\u043d\u0442\u0438\u043a\u0430 \u0437\u0434\u0435\u0441\u044c \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0442\u0430 \u0436\u0435, \u0447\u0442\u043e \u0438 \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u043e\u0433\u043e \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0430, \u2014 \u043c\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u0438\u0441\u043a\u043b\u044e\u0447\u0430\u0442\u044c \u0432\u0441\u0435 \u0440\u0435\u0431\u0440\u0430, \u0443 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0435\u0441\u0442\u044c \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u043c\u0435\u043d\u044c\u0448\u0435 \u043d\u0430\u0438\u043c\u0435\u043d\u044c\u0448\u0435\u0433\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430 \u043f\u0440\u0430\u0432\u043e\u0433\u043e \u0433\u0438\u043f\u0435\u0440\u0443\u0437\u043b\u0430.<\/p>\n<p>\u0412\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0435 \u0441\u0442\u0430\u0440\u0442\u043e\u0432\u043e\u0433\u043e \u0438\u043d\u0434\u0435\u043a\u0441\u0430 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 <code>get_start_index<\/code>. \u0414\u043b\u044f \u0443\u0434\u043e\u0431\u0441\u0442\u0432\u0430 \u043d\u0430 \u0432\u0445\u043e\u0434 \u043e\u043d\u0430 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u043d\u0435 \u0433\u043e\u0442\u043e\u0432\u044b\u0439 \u0438\u043d\u0434\u0435\u043a\u0441, \u0430 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u044b\u0445 \u0443\u0437\u043b\u043e\u0432. \u042d\u0442\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0442\u0430\u043a\u0436\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043f\u0440\u0438 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0438 \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u043e\u0441\u0442\u0438 \u0434\u0432\u0443\u0445 \u0433\u0438\u043f\u0435\u0440\u0443\u0437\u043b\u043e\u0432: \u043d\u0430\u0434\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u0435\u0440\u0435\u0434 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0435\u0439 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u0430 \u0438\u0437 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0430, \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0449\u0435\u0433\u043e \u043f\u0440\u0430\u0432\u043e\u0435 \u0433\u0438\u043f\u0435\u0440\u0440\u0435\u0431\u0440\u043e, \u0432\u044b\u0447\u0435\u0441\u0442\u044c \u0435\u0434\u0438\u043d\u0438\u0446\u0443, \u0442\u043e\u0433\u0434\u0430 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u043d\u0443\u043b\u0435\u0439 \u043e\u0431\u0440\u0430\u0442\u043d\u043e \u0441\u0442\u0430\u043d\u0435\u0442 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c\u044e \u0435\u0434\u0438\u043d\u0438\u0446, \u0447\u0442\u043e \u043f\u043e \u0442\u0440\u0435\u0431\u0443\u0435\u043c\u043e\u0439 \u0441\u0435\u043c\u0430\u043d\u0442\u0438\u043a\u0435 \u2014 \u043e\u0434\u043d\u043e \u0438 \u0442\u043e \u0436\u0435.<\/p>\n<pre><code class=\"cpp\">static int get_start_index(EdgeArray *edges, bitmapword excluded) {     int index;     int lowest_bit;      lowest_bit = bmw_rightmost_one_pos(excluded + 1);      if (edges-&gt;start_idx_size &lt;= lowest_bit)         return edges-&gt;size;      index = (int)edges-&gt;start_idx[lowest_bit];     return index; } <\/code><\/pre>\n<h3>\u041e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0437\u0430\u043f\u0440\u043e\u0441\u0430<\/h3>\n<p>\u0418\u0442\u0430\u043a, PostgreSQL \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 2 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430: DPsize \u0438 GEQO, \u043f\u0440\u0438\u0447\u0435\u043c \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f, \u0435\u0441\u043b\u0438 \u0432 \u0437\u0430\u043f\u0440\u043e\u0441\u0435 \u0442\u0430\u0431\u043b\u0438\u0446 \u0431\u043e\u043b\u044c\u0448\u0435, \u0447\u0435\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430 <code>geqo_threshold<\/code>. \u041d\u043e \u043f\u043e\u0447\u0435\u043c\u0443 \u0438\u043c\u0435\u043d\u043d\u043e \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0442\u0430\u0431\u043b\u0438\u0446? \u0414\u0435\u043b\u043e \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u044c DPsize \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442\u0441\u044f \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e\u043c \u0442\u0430\u0431\u043b\u0438\u0446 \u2014 \u043c\u044b \u0431\u0435\u0437\u0443\u0441\u043b\u043e\u0432\u043d\u043e \u0431\u0443\u0434\u0435\u043c \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0442\u044c \u0432\u0441\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0435 \u043a\u043e\u043c\u0431\u0438\u043d\u0430\u0446\u0438\u0438. \u041d\u043e \u0441 DPhyp \u0432\u0441\u0435 \u043e\u0431\u0441\u0442\u043e\u0438\u0442 \u0438\u043d\u0430\u0447\u0435, \u0435\u0433\u043e \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u043e\u0442 \u0441\u0430\u043c\u043e\u0433\u043e \u0433\u0440\u0430\u0444\u0430 \u0437\u0430\u043f\u0440\u043e\u0441\u0430. \u0412 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u044c\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u0441\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u043e\u0432 \u043d\u0430 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0442\u0438\u043f\u0430\u0445 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432, \u043d\u043e \u043e\u043d\u0438 \u043d\u0435 \u0434\u0430\u044e\u0442 \u043f\u0440\u044f\u043c\u043e\u0433\u043e \u043e\u0442\u0432\u0435\u0442\u0430 \u043d\u0430 \u0442\u043e, \u043a\u0430\u043a \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0442\u044c \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0437\u0430\u043f\u0440\u043e\u0441\u0430 (\u0430 \u043c\u043e\u0436\u0435\u0442, \u044f \u043f\u0440\u043e\u0433\u043b\u044f\u0434\u0435\u043b). \u042d\u0442\u043e\u0442 \u043e\u0442\u0432\u0435\u0442 \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u0432 \u0434\u0440\u0443\u0433\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u2014 <a href=\"https:\/\/db.in.tum.de\/~radke\/papers\/hugejoins.pdf\" rel=\"noopener noreferrer nofollow\">&#171;Adaptive Optimization of Large Join Queries&#187;<\/a>.<\/p>\n<p>\u0410\u0432\u0442\u043e\u0440 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438 \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u0435\u0442 \u043c\u0435\u0442\u0430\u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c, \u043a\u043e\u0442\u043e\u0440\u044b\u0439, \u043a\u043e\u043c\u0431\u0438\u043d\u0438\u0440\u0443\u044f \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0440\u0430\u0437\u043d\u044b\u0445 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u043e\u0432 JOIN&#8217;\u0430, \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043f\u043b\u0430\u043d\u044b \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u0441 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e\u043c \u0442\u0430\u0431\u043b\u0438\u0446 \u0432 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0442\u044b\u0441\u044f\u0447. \u0412 \u043f\u0440\u043e\u0441\u0442\u044b\u0445 \u0437\u0430\u043f\u0440\u043e\u0441\u0430\u0445 \u0430\u0432\u0442\u043e\u0440\u044b \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u044e\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c DPhyp, \u043d\u043e \u0447\u0442\u043e \u0442\u0430\u043a\u043e\u0435 \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u0437\u0430\u043f\u0440\u043e\u0441? \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0435\u0441\u043b\u0438 \u0432 \u0437\u0430\u043f\u0440\u043e\u0441\u0435 100 \u0442\u0430\u0431\u043b\u0438\u0446, \u0442\u043e \u044d\u0442\u043e \u043d\u0435 \u0437\u043d\u0430\u0447\u0438\u0442, \u0447\u0442\u043e DPhyp \u0441 \u043d\u0438\u043c \u043d\u0435 \u0441\u043f\u0440\u0430\u0432\u0438\u0442\u0441\u044f. \u0415\u0441\u043b\u0438 \u0433\u0440\u0430\u0444 \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u043f\u0440\u043e\u0441\u0442\u0443\u044e \u0446\u0435\u043f\u043e\u0447\u043a\u0443, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0432\u0441\u0435 \u043f\u0440\u0435\u0434\u0438\u043a\u0430\u0442\u044b \u0432 \u0444\u043e\u0440\u043c\u0435 <code>Ti.x OP T(i + 1).x<\/code>, \u0442\u043e \u043f\u043b\u0430\u043d \u0434\u043b\u044f \u043d\u0435\u0433\u043e \u043d\u0430\u0439\u0442\u0438 \u043d\u0435\u0441\u043b\u043e\u0436\u043d\u043e, \u043d\u043e \u0432\u043e\u0442 \u0435\u0441\u043b\u0438 \u044d\u0442\u043e \u043a\u043b\u0438\u043a\u0430 (\u043a\u0430\u0436\u0434\u044b\u0439 \u0441 \u043a\u0430\u0436\u0434\u044b\u043c), \u0442\u043e \u0434\u0430\u0436\u0435 15 \u0442\u0430\u0431\u043b\u0438\u0446 \u2014 \u044d\u0442\u043e \u0443\u0436\u0435 \u043c\u043d\u043e\u0433\u043e. \u0414\u043b\u044f DPhyp \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043d\u0430\u0434\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0442\u044c \u043d\u0435 \u0432 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0435 \u0442\u0430\u0431\u043b\u0438\u0446, \u0430 \u0432 \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0433\u0440\u0430\u0444\u0430 \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u2014 <strong>\u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0435 \u0441\u0432\u044f\u0437\u043d\u044b\u0445 \u043f\u043e\u0434\u0433\u0440\u0430\u0444\u043e\u0432<\/strong>. \u0417\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0432 10000 \u0441\u0432\u044f\u0437\u043d\u044b\u0445 \u043f\u043e\u0434\u0433\u0440\u0430\u0444\u043e\u0432 \u2014 \u043a\u0430\u043a \u043f\u0440\u0435\u0434\u0435\u043b \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u0438 \u0437\u0430\u043f\u0440\u043e\u0441\u0430, \u044d\u0442\u043e \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e 14 \u0442\u0430\u0431\u043b\u0438\u0446\u0430\u043c \u0432 \u043a\u043b\u0438\u043a\u0435.<\/p>\n<p>\u0412 \u044d\u0442\u043e\u0439 \u0436\u0435 \u0441\u0430\u043c\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u0435\u0442\u0441\u044f \u0438\u0434\u0435\u044f, \u043d\u043e \u0442\u0430\u043a\u0436\u0435 \u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0434\u043b\u044f \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u0441\u0432\u044f\u0437\u043d\u044b\u0445 \u043f\u043e\u0434\u0433\u0440\u0430\u0444\u043e\u0432. \u041f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0432 \u043d\u0430 \u043d\u0435\u0435, \u044f \u043f\u043e\u043d\u044f\u043b: \u043e\u043d\u0430 \u0438\u0434\u0435\u0430\u043b\u044c\u043d\u043e \u043b\u043e\u0436\u0438\u0442\u0441\u044f \u043d\u0430 \u0441\u0445\u0435\u043c\u0443 \u043a\u0435\u0448\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f, \u043e\u043f\u0438\u0441\u0430\u043d\u043d\u0443\u044e \u0432\u044b\u0448\u0435. \u0412\u043e\u0442 \u044d\u0442\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u044f:<\/p>\n<pre><code class=\"cpp\">static uint64 count_cc_recursive(DPHypContext *context, bitmapword subgraph, bitmapword excluded,                    uint64 count, uint64 max, bitmapword base_neighborhood) {     SubsetIteratorState subset_iter;     subset_iterator_init(&amp;subset_iter, base_neighborhood);     while (subset_iterator_next(&amp;subset_iter))     {         bitmapword set;         bitmapword excluded_ext;         bitmapword neighborhood;            count++;         if (count &gt; max)             break;          excluded_ext = excluded | base_neighborhood;         set = subgraph | subset_iter.subset;         neighborhood = get_neighbors_iter(context, set, excluded_ext, &amp;subset_iter);         count = count_cc_recursive(context, set, excluded_ext, count, max, neighborhood);     }      return count; }  static uint64 count_cc(DPHypContext *context, uint64 max) {     int64 count = 0;     int rels_count;      rels_count = list_length(context-&gt;initial_rels);     for (size_t i = 0; i &lt; rels_count; i++)     {         bitmapword excluded;         bitmapword neighborhood;          count++;         if (count &gt; max)             break;          excluded = bmw_make_b_v(i);         neighborhood = get_neighbors_base(context, i, excluded);         count = count_cc_recursive(context, bmw_make_singleton(i), excluded,                                    count, max, neighborhood);     }      return count; } <\/code><\/pre>\n<p>\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u044f \u043e\u0441\u0442\u0430\u0432\u0438\u043b \u0442\u0435\u043c\u0438 \u0436\u0435, \u0447\u0442\u043e \u0438 \u0432 \u0441\u0442\u0430\u0442\u044c\u0435, \u043d\u043e \u0430\u0434\u0430\u043f\u0442\u0438\u0440\u043e\u0432\u0430\u043b \u0441\u0438\u0433\u043d\u0430\u0442\u0443\u0440\u0443 \u0434\u043b\u044f \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0438 \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e\u0433\u043e \u0438\u0442\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u043e \u0441\u043e\u0441\u0435\u0434\u044f\u043c.<\/p>\n<p>\u0411\u043e\u043d\u0443\u0441: \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0441\u0432\u044f\u0437\u043d\u044b\u0445 \u043f\u043e\u0434\u0433\u0440\u0430\u0444\u043e\u0432 \u2014 \u044d\u0442\u043e \u0440\u0430\u0437\u043c\u0435\u0440 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0438\u0440\u0443\u044e\u0449\u0435\u0439 DP-\u0442\u0430\u0431\u043b\u0438\u0446\u044b. \u0421\u0435\u0439\u0447\u0430\u0441 \u044d\u0442\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0434\u043b\u044f \u0435\u0435 \u043f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u0430\u043b\u043b\u043e\u043a\u0430\u0446\u0438\u0438.<\/p>\n<h3>\u0422\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435<\/h3>\n<p>\u041f\u0440\u043e\u0432\u0435\u0440\u0438\u043c \u0432\u0441\u0435 \u0432\u043d\u0430\u0447\u0430\u043b\u0435 \u043d\u0430 \u043a\u0430\u043a\u043e\u043c-\u043d\u0438\u0431\u0443\u0434\u044c \u043f\u0440\u043e\u0441\u0442\u043e\u043c \u0437\u0430\u043f\u0440\u043e\u0441\u0435:<\/p>\n<pre><code class=\"sql\">EXPLAIN ANALYZE SELECT *  FROM t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, t13, t14 WHERE      t1.x + t2.x + t3.x + t4.x + t5.x + t6.x + t7.x &gt; t8.x + t9.x + t10.x + t11.x + t12.x + t13.x + t14.x; <\/code><\/pre>\n<p>\u042d\u0442\u043e 14 \u0442\u0430\u0431\u043b\u0438\u0446, \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u043d\u044b\u0445 \u043e\u0434\u043d\u0438\u043c \u0433\u0438\u043f\u0435\u0440\u0440\u0435\u0431\u0440\u043e\u043c: <code>{t1, t2, t3, t4, t5, t6, t7} - {t8, t9, t10, t11, t12, t13, t14}<\/code>. \u041a\u0430\u0436\u0434\u0430\u044f \u0442\u0430\u0431\u043b\u0438\u0446\u0430 \u2014 \u043e\u0434\u043d\u043e\u043a\u043e\u043b\u043e\u043d\u043e\u0447\u043d\u0430\u044f, \u0441 \u0442\u0440\u0435\u043c\u044f \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u043c\u0438 (\u0447\u0442\u043e\u0431\u044b \u0437\u0430\u043f\u0440\u043e\u0441 \u0434\u043e\u043b\u0433\u043e \u043d\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u043b\u0441\u044f). \u0414\u043b\u044f DPsize \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439:<\/p>\n<pre><code>                                                                  QUERY PLAN                                    -----------------------------------------------------------------------------------------------------------------------------------------------  Nested Loop  (cost=0.00..215311.78 rows=1594323 width=56) (actual time=1.672..1330.944 rows=2083371 loops=1)    Join Filter: (((((((t1.x + t2.x) + t3.x) + t4.x) + t5.x) + t6.x) + t7.x) &gt; ((((((t8.x + t9.x) + t10.x) + t11.x) + t12.x) + t13.x) + t14.x))    Rows Removed by Join Filter: 2699598    -&gt;  Nested Loop  (cost=0.00..36.36 rows=2187 width=28) (actual time=0.057..0.612 rows=2187 loops=1)          -&gt;  Nested Loop  (cost=0.00..5.39 rows=81 width=16) (actual time=0.042..0.128 rows=81 loops=1)                -&gt;  Nested Loop  (cost=0.00..2.18 rows=9 width=8) (actual time=0.029..0.061 rows=9 loops=1)                      -&gt;  Seq Scan on t4  (cost=0.00..1.03 rows=3 width=4) (actual time=0.018..0.028 rows=3 loops=1)                      -&gt;  Materialize  (cost=0.00..1.04 rows=3 width=4) (actual time=0.003..0.008 rows=3 loops=3)                            -&gt;  Seq Scan on t5  (cost=0.00..1.03 rows=3 width=4) (actual time=0.003..0.012 rows=3 loops=1)                -&gt;  Materialize  (cost=0.00..2.23 rows=9 width=8) (actual time=0.001..0.005 rows=9 loops=9)                      -&gt;  Nested Loop  (cost=0.00..2.18 rows=9 width=8) (actual time=0.007..0.025 rows=9 loops=1)                            -&gt;  Seq Scan on t6  (cost=0.00..1.03 rows=3 width=4) (actual time=0.002..0.010 rows=3 loops=1)                            -&gt;  Materialize  (cost=0.00..1.04 rows=3 width=4) (actual time=0.002..0.004 rows=3 loops=3)                                  -&gt;  Seq Scan on t7  (cost=0.00..1.03 rows=3 width=4) (actual time=0.002..0.006 rows=3 loops=1)          -&gt;  Materialize  (cost=0.00..3.69 rows=27 width=12) (actual time=0.001..0.002 rows=27 loops=81)                -&gt;  Nested Loop  (cost=0.00..3.56 rows=27 width=12) (actual time=0.014..0.037 rows=27 loops=1)                      -&gt;  Nested Loop  (cost=0.00..2.18 rows=9 width=8) (actual time=0.008..0.022 rows=9 loops=1)                            -&gt;  Seq Scan on t1  (cost=0.00..1.03 rows=3 width=4) (actual time=0.003..0.008 rows=3 loops=1)                            -&gt;  Materialize  (cost=0.00..1.04 rows=3 width=4) (actual time=0.002..0.004 rows=3 loops=3)                                  -&gt;  Seq Scan on t2  (cost=0.00..1.03 rows=3 width=4) (actual time=0.002..0.007 rows=3 loops=1)                      -&gt;  Materialize  (cost=0.00..1.04 rows=3 width=4) (actual time=0.001..0.001 rows=3 loops=9)                            -&gt;  Seq Scan on t3  (cost=0.00..1.03 rows=3 width=4) (actual time=0.003..0.004 rows=3 loops=1)    -&gt;  Materialize  (cost=0.00..47.29 rows=2187 width=28) (actual time=0.000..0.078 rows=2187 loops=2187)          -&gt;  Nested Loop  (cost=0.00..36.36 rows=2187 width=28) (actual time=0.039..0.405 rows=2187 loops=1)                -&gt;  Nested Loop  (cost=0.00..5.39 rows=81 width=16) (actual time=0.021..0.043 rows=81 loops=1)                      -&gt;  Nested Loop  (cost=0.00..2.18 rows=9 width=8) (actual time=0.010..0.014 rows=9 loops=1)                            -&gt;  Seq Scan on t11  (cost=0.00..1.03 rows=3 width=4) (actual time=0.004..0.005 rows=3 loops=1)                            -&gt;  Materialize  (cost=0.00..1.04 rows=3 width=4) (actual time=0.002..0.002 rows=3 loops=3)                                  -&gt;  Seq Scan on t12  (cost=0.00..1.03 rows=3 width=4) (actual time=0.003..0.004 rows=3 loops=1)                      -&gt;  Materialize  (cost=0.00..2.23 rows=9 width=8) (actual time=0.001..0.002 rows=9 loops=9)                            -&gt;  Nested Loop  (cost=0.00..2.18 rows=9 width=8) (actual time=0.009..0.013 rows=9 loops=1)                                  -&gt;  Seq Scan on t13  (cost=0.00..1.03 rows=3 width=4) (actual time=0.004..0.005 rows=3 loops=1)                                  -&gt;  Materialize  (cost=0.00..1.04 rows=3 width=4) (actual time=0.001..0.002 rows=3 loops=3)                                        -&gt;  Seq Scan on t14  (cost=0.00..1.03 rows=3 width=4) (actual time=0.003..0.003 rows=3 loops=1)                -&gt;  Materialize  (cost=0.00..3.69 rows=27 width=12) (actual time=0.000..0.001 rows=27 loops=81)                      -&gt;  Nested Loop  (cost=0.00..3.56 rows=27 width=12) (actual time=0.016..0.026 rows=27 loops=1)                            -&gt;  Nested Loop  (cost=0.00..2.18 rows=9 width=8) (actual time=0.010..0.014 rows=9 loops=1)                                  -&gt;  Seq Scan on t8  (cost=0.00..1.03 rows=3 width=4) (actual time=0.005..0.006 rows=3 loops=1)                                  -&gt;  Materialize  (cost=0.00..1.04 rows=3 width=4) (actual time=0.001..0.002 rows=3 loops=3)                                        -&gt;  Seq Scan on t9  (cost=0.00..1.03 rows=3 width=4) (actual time=0.003..0.003 rows=3 loops=1)                            -&gt;  Materialize  (cost=0.00..1.04 rows=3 width=4) (actual time=0.001..0.001 rows=3 loops=9)                                  -&gt;  Seq Scan on t10  (cost=0.00..1.03 rows=3 width=4) (actual time=0.004..0.005 rows=3 loops=1)  Planning Time: 3069.835 ms  Execution Time: 1371.090 ms (44 rows) <\/code><\/pre>\n<p>\u041d\u0430 \u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0443\u0448\u043b\u043e 3 \u0441\u0435\u043a\u0443\u043d\u0434\u044b, \u0445\u043e\u0442\u044f \u043d\u0430 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u2014 \u043c\u0435\u043d\u044c\u0448\u0435 1.5 \u0441\u0435\u043a\u0443\u043d\u0434. \u0427\u0442\u043e \u043d\u0430\u043c \u0434\u0430\u0441\u0442 DPhyp:<\/p>\n<pre><code>                                                                  QUERY PLAN                                    -----------------------------------------------------------------------------------------------------------------------------------------------  Nested Loop  (cost=0.00..215311.78 rows=1594323 width=56) (actual time=1.612..1325.670 rows=2083371 loops=1)    Join Filter: (((((((t1.x + t2.x) + t3.x) + t4.x) + t5.x) + t6.x) + t7.x) &gt; ((((((t8.x + t9.x) + t10.x) + t11.x) + t12.x) + t13.x) + t14.x))    Rows Removed by Join Filter: 2699598    -&gt;  Nested Loop  (cost=0.00..36.36 rows=2187 width=28) (actual time=0.039..0.551 rows=2187 loops=1)          -&gt;  Nested Loop  (cost=0.00..5.39 rows=81 width=16) (actual time=0.029..0.131 rows=81 loops=1)                -&gt;  Nested Loop  (cost=0.00..2.18 rows=9 width=8) (actual time=0.021..0.051 rows=9 loops=1)                      -&gt;  Seq Scan on t4  (cost=0.00..1.03 rows=3 width=4) (actual time=0.015..0.023 rows=3 loops=1)                      -&gt;  Materialize  (cost=0.00..1.04 rows=3 width=4) (actual time=0.001..0.006 rows=3 loops=3)                            -&gt;  Seq Scan on t5  (cost=0.00..1.03 rows=3 width=4) (actual time=0.003..0.012 rows=3 loops=1)                -&gt;  Materialize  (cost=0.00..2.23 rows=9 width=8) (actual time=0.001..0.006 rows=9 loops=9)                      -&gt;  Nested Loop  (cost=0.00..2.18 rows=9 width=8) (actual time=0.006..0.034 rows=9 loops=1)                            -&gt;  Seq Scan on t6  (cost=0.00..1.03 rows=3 width=4) (actual time=0.003..0.012 rows=3 loops=1)                            -&gt;  Materialize  (cost=0.00..1.04 rows=3 width=4) (actual time=0.001..0.005 rows=3 loops=3)                                  -&gt;  Seq Scan on t7  (cost=0.00..1.03 rows=3 width=4) (actual time=0.002..0.009 rows=3 loops=1)          -&gt;  Materialize  (cost=0.00..3.69 rows=27 width=12) (actual time=0.000..0.002 rows=27 loops=81)                -&gt;  Nested Loop  (cost=0.00..3.56 rows=27 width=12) (actual time=0.009..0.032 rows=27 loops=1)                      -&gt;  Nested Loop  (cost=0.00..2.18 rows=9 width=8) (actual time=0.006..0.020 rows=9 loops=1)                            -&gt;  Seq Scan on t2  (cost=0.00..1.03 rows=3 width=4) (actual time=0.002..0.008 rows=3 loops=1)                            -&gt;  Materialize  (cost=0.00..1.04 rows=3 width=4) (actual time=0.001..0.003 rows=3 loops=3)                                  -&gt;  Seq Scan on t3  (cost=0.00..1.03 rows=3 width=4) (actual time=0.002..0.006 rows=3 loops=1)                      -&gt;  Materialize  (cost=0.00..1.04 rows=3 width=4) (actual time=0.000..0.001 rows=3 loops=9)                            -&gt;  Seq Scan on t1  (cost=0.00..1.03 rows=3 width=4) (actual time=0.002..0.003 rows=3 loops=1)    -&gt;  Materialize  (cost=0.00..47.29 rows=2187 width=28) (actual time=0.000..0.078 rows=2187 loops=2187)          -&gt;  Nested Loop  (cost=0.00..36.36 rows=2187 width=28) (actual time=0.025..0.397 rows=2187 loops=1)                -&gt;  Nested Loop  (cost=0.00..5.39 rows=81 width=16) (actual time=0.013..0.037 rows=81 loops=1)                      -&gt;  Nested Loop  (cost=0.00..2.18 rows=9 width=8) (actual time=0.007..0.012 rows=9 loops=1)                            -&gt;  Seq Scan on t11  (cost=0.00..1.03 rows=3 width=4) (actual time=0.003..0.005 rows=3 loops=1)                            -&gt;  Materialize  (cost=0.00..1.04 rows=3 width=4) (actual time=0.001..0.002 rows=3 loops=3)                                  -&gt;  Seq Scan on t12  (cost=0.00..1.03 rows=3 width=4) (actual time=0.003..0.003 rows=3 loops=1)                      -&gt;  Materialize  (cost=0.00..2.23 rows=9 width=8) (actual time=0.001..0.002 rows=9 loops=9)                            -&gt;  Nested Loop  (cost=0.00..2.18 rows=9 width=8) (actual time=0.006..0.009 rows=9 loops=1)                                  -&gt;  Seq Scan on t13  (cost=0.00..1.03 rows=3 width=4) (actual time=0.003..0.003 rows=3 loops=1)                                  -&gt;  Materialize  (cost=0.00..1.04 rows=3 width=4) (actual time=0.001..0.001 rows=3 loops=3)                                        -&gt;  Seq Scan on t14  (cost=0.00..1.03 rows=3 width=4) (actual time=0.002..0.003 rows=3 loops=1)                -&gt;  Materialize  (cost=0.00..3.69 rows=27 width=12) (actual time=0.000..0.001 rows=27 loops=81)                      -&gt;  Nested Loop  (cost=0.00..3.56 rows=27 width=12) (actual time=0.011..0.021 rows=27 loops=1)                            -&gt;  Nested Loop  (cost=0.00..2.18 rows=9 width=8) (actual time=0.007..0.011 rows=9 loops=1)                                  -&gt;  Seq Scan on t9  (cost=0.00..1.03 rows=3 width=4) (actual time=0.004..0.004 rows=3 loops=1)                                  -&gt;  Materialize  (cost=0.00..1.04 rows=3 width=4) (actual time=0.001..0.001 rows=3 loops=3)                                        -&gt;  Seq Scan on t10  (cost=0.00..1.03 rows=3 width=4) (actual time=0.003..0.003 rows=3 loops=1)                            -&gt;  Materialize  (cost=0.00..1.04 rows=3 width=4) (actual time=0.000..0.001 rows=3 loops=9)                                  -&gt;  Seq Scan on t8  (cost=0.00..1.03 rows=3 width=4) (actual time=0.003..0.004 rows=3 loops=1)  Planning Time: 4.706 ms  Execution Time: 1365.543 ms (44 rows) <\/code><\/pre>\n<p><strong>4 \u043c\u0438\u043b\u043b\u0438\u0441\u0435\u043a\u0443\u043d\u0434\u044b<\/strong>! \u041f\u0440\u0438 \u044d\u0442\u043e\u043c \u043f\u043b\u0430\u043d\u044b \u0438\u0434\u0435\u043d\u0442\u0438\u0447\u043d\u044b\u0435 \u2014 \u043f\u0440\u0438\u0440\u043e\u0441\u0442 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u043f\u043e\u0447\u0442\u0438 \u0432 <strong>600 \u0440\u0430\u0437<\/strong>!<\/p>\n<p>\u041d\u043e \u044d\u0442\u043e \u0432\u0441\u0435\u0433\u043e \u043b\u0438\u0448\u044c \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u0437\u0430\u043f\u0440\u043e\u0441, \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u0442\u0435\u043f\u0435\u0440\u044c \u0432\u043e\u0437\u044c\u043c\u0435\u043c \u0447\u0442\u043e-\u0442\u043e \u043f\u043e\u0441\u043e\u043b\u0438\u0434\u043d\u0435\u0435. \u0412\u043e\u0437\u044c\u043c\u0435\u043c \u043a \u043f\u0440\u0438\u043c\u0435\u0440\u0443 \u0433\u043e\u0442\u043e\u0432\u044b\u0439 JOB (Join Order Benchmark), \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0439 \u0432 \u0440\u0430\u0431\u043e\u0442\u0435 <a href=\"https:\/\/vldb.org\/pvldb\/vol9\/p204-leis.pdf\" rel=\"noopener noreferrer nofollow\">&#171;How Good Are Query Optimizers, Really?&#187;<\/a> \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0434\u043b\u044f \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044f \u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0449\u0438\u043a\u043e\u0432 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u0421\u0423\u0411\u0414, \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u0441\u0430\u043c PostgreSQL. \u0411\u0435\u043d\u0447\u043c\u0430\u0440\u043a \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0439\u0442\u0438 \u0432 <a href=\"https:\/\/github.com\/gregrahn\/join-order-benchmark\" rel=\"noopener noreferrer nofollow\">\u044d\u0442\u043e\u043c \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0438<\/a>.<\/p>\n<blockquote>\n<p>\u0412 \u0441\u0430\u043c\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u0435 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u043b\u043e\u0441\u044c \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435 \u043d\u0435 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438 \u0440\u0430\u0431\u043e\u0442\u044b \u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0449\u0438\u043a\u0430, \u0430 \u043e\u0446\u0435\u043d\u043e\u043a, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043e\u043d \u0434\u0430\u0435\u0442. \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0438\u0441\u044c \u043d\u0435\u0441\u043b\u043e\u0436\u043d\u044b\u0435 \u0437\u0430\u043f\u0440\u043e\u0441\u044b \u2014 \u044d\u0442\u043e INNER equi-JOIN&#8217;\u044b (\u0442. \u0435. \u0443\u0441\u043b\u043e\u0432\u0438\u044f JOIN \u2014 \u0442\u043e\u043b\u044c\u043a\u043e \u0440\u0430\u0432\u0435\u043d\u0441\u0442\u0432\u043e), \u043e\u0434\u043d\u0430\u043a\u043e \u0434\u043b\u044f \u043e\u0446\u0435\u043d\u043a\u0438 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0439 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0441\u0430\u043c\u044b\u0435 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0435 \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0438, \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u0432\u0441\u044f\u043a\u0438\u0435 \u0441\u043b\u043e\u0436\u043d\u044b\u0435 <code>LEFT JOIN<\/code>, \u043d\u043e \u043f\u043e\u043a\u0430 \u044d\u0442\u043e\u0433\u043e \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e.<\/p>\n<\/blockquote>\n<p>\u041a\u0430\u043a \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u043b\u043e\u0441\u044c \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435:<\/p>\n<ul>\n<li>\n<p>\u0437\u0430\u043c\u0435\u0440 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u043b\u0441\u044f \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043f\u0440\u043e\u0441\u0442\u0435\u043d\u044c\u043a\u043e\u0433\u043e \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0437\u0430\u043c\u0435\u0440\u044f\u043b\u043e \u0432\u0440\u0435\u043c\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f <code>join_search_hook<\/code>;<\/p>\n<\/li>\n<li>\n<p>\u043f\u043e\u0441\u043b\u0435 \u0437\u0430\u043b\u0438\u0432\u043a\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438\u0442\u043e\u0433\u043e\u0432\u044b\u0439 \u0440\u0430\u0437\u043c\u0435\u0440 \u0411\u0414 \u2014 \u0447\u0443\u0442\u044c \u0431\u043e\u043b\u044c\u0448\u0435 8\u0413\u0431;<\/p>\n<\/li>\n<li>\n<p>\u0432\u0441\u0435\u0433\u043e \u0438\u043c\u0435\u043b\u043e\u0441\u044c 113 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432, \u043d\u043e \u043d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u0438\u0445 33, \u0432\u0441\u0435 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u0441\u0443\u0442\u044c \u0432\u0430\u0440\u0438\u0430\u0446\u0438\u0438 \u0441 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u043c\u0438 \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u0430\u043c\u0438. \u0414\u043b\u044f \u0442\u0435\u0441\u0442\u043e\u0432 \u043a\u0430\u0436\u0434\u044b\u0439 \u0437\u0430\u043f\u0440\u043e\u0441 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u043b\u0441\u044f \u0434\u0435\u0441\u044f\u0442\u044c \u0440\u0430\u0437 \u0438 \u0440\u0430\u0441\u0441\u0447\u0438\u0442\u044b\u0432\u0430\u043b\u043e\u0441\u044c \u0441\u0440\u0435\u0434\u043d\u0435\u0435 \u0432\u0440\u0435\u043c\u044f \u0435\u0433\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f, \u0430 \u0437\u0430\u0442\u0435\u043c, \u0447\u0442\u043e\u0431\u044b &#171;\u0448\u0443\u043c\u0435\u0442\u044c&#187;, \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u043e\u0434\u043d\u0438\u0445 \u0438 \u0442\u0435\u0445 \u0436\u0435 \u043a\u043b\u0430\u0441\u0441\u043e\u0432 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 (\u0441 \u0440\u0430\u0437\u043d\u044b\u043c\u0438 \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u0430\u043c\u0438) \u0433\u0440\u0443\u043f\u043f\u0438\u0440\u043e\u0432\u0430\u043b\u0438\u0441\u044c \u0438 \u0440\u0430\u0441\u0441\u0447\u0438\u0442\u044b\u0432\u0430\u043b\u043e\u0441\u044c \u0441\u0440\u0435\u0434\u043d\u0435\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435.<\/p>\n<\/li>\n<\/ul>\n<p>\u041f\u043e \u0438\u0442\u043e\u0433\u0443 \u0432\u0441\u0435\u0445 \u0437\u0430\u043f\u0443\u0441\u043a\u043e\u0432 \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0430\u0441\u044c \u0442\u0430\u043a\u0430\u044f \u0442\u0430\u0431\u043b\u0438\u0446\u0430:<\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<th>\n<p align=\"left\">\u041a\u043b\u0430\u0441\u0441 \u0437\u0430\u043f\u0440\u043e\u0441\u0430<\/p>\n<\/th>\n<th>\n<p align=\"left\">\u0412\u0440\u0435\u043c\u044f, DPsize<\/p>\n<\/th>\n<th>\n<p align=\"left\">\u0412\u0440\u0435\u043c\u044f, DPhyp<\/p>\n<\/th>\n<th>\n<p align=\"left\">\u0421\u0442\u043e\u0438\u043c\u043e\u0441\u0442\u044c, DPsize<\/p>\n<\/th>\n<th>\n<p align=\"left\">\u0421\u0442\u043e\u0438\u043c\u043e\u0441\u0442\u044c, DPhyp<\/p>\n<\/th>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">1<\/p>\n<\/td>\n<td>\n<p align=\"left\">0.00<\/p>\n<\/td>\n<td>\n<p align=\"left\">0.00<\/p>\n<\/td>\n<td>\n<p align=\"left\">20063.63..20063.64<\/p>\n<\/td>\n<td>\n<p align=\"left\">20047.21..20047.22<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">2<\/p>\n<\/td>\n<td>\n<p align=\"left\">0.00<\/p>\n<\/td>\n<td>\n<p align=\"left\">0.00<\/p>\n<\/td>\n<td>\n<p align=\"left\">3917.21..3917.22<\/p>\n<\/td>\n<td>\n<p align=\"left\">3865.78..3865.79<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">3<\/p>\n<\/td>\n<td>\n<p align=\"left\">0.00<\/p>\n<\/td>\n<td>\n<p align=\"left\">0.00<\/p>\n<\/td>\n<td>\n<p align=\"left\">16893.51..16893.52<\/p>\n<\/td>\n<td>\n<p align=\"left\">16893.07..16893.08<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">4<\/p>\n<\/td>\n<td>\n<p align=\"left\">0.00<\/p>\n<\/td>\n<td>\n<p align=\"left\">0.00<\/p>\n<\/td>\n<td>\n<p align=\"left\">16537.03..16537.04<\/p>\n<\/td>\n<td>\n<p align=\"left\">16532.75..16532.76<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">5<\/p>\n<\/td>\n<td>\n<p align=\"left\">0.00<\/p>\n<\/td>\n<td>\n<p align=\"left\">0.00<\/p>\n<\/td>\n<td>\n<p align=\"left\">55136.70..55136.71<\/p>\n<\/td>\n<td>\n<p align=\"left\">55110.84..55110.85<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">6<\/p>\n<\/td>\n<td>\n<p align=\"left\">0.00<\/p>\n<\/td>\n<td>\n<p align=\"left\">0.00<\/p>\n<\/td>\n<td>\n<p align=\"left\">9136.23..9136.24<\/p>\n<\/td>\n<td>\n<p align=\"left\">8601.80..8601.81<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">7<\/p>\n<\/td>\n<td>\n<p align=\"left\">1.30<\/p>\n<\/td>\n<td>\n<p align=\"left\">2.00<\/p>\n<\/td>\n<td>\n<p align=\"left\">26596.24..26596.25<\/p>\n<\/td>\n<td>\n<p align=\"left\">25281.84..25281.85<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">8<\/p>\n<\/td>\n<td>\n<p align=\"left\">0.25<\/p>\n<\/td>\n<td>\n<p align=\"left\">0.85<\/p>\n<\/td>\n<td>\n<p align=\"left\">237500.71..237500.73<\/p>\n<\/td>\n<td>\n<p align=\"left\">215342.88..215342.89<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">9<\/p>\n<\/td>\n<td>\n<p align=\"left\">1.75<\/p>\n<\/td>\n<td>\n<p align=\"left\">1.95<\/p>\n<\/td>\n<td>\n<p align=\"left\">121709.02..121709.03<\/p>\n<\/td>\n<td>\n<p align=\"left\">118041.88..118041.89<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">10<\/p>\n<\/td>\n<td>\n<p align=\"left\">0.23<\/p>\n<\/td>\n<td>\n<p align=\"left\">0.30<\/p>\n<\/td>\n<td>\n<p align=\"left\">218646.80..218646.81<\/p>\n<\/td>\n<td>\n<p align=\"left\">216146.76..216146.77<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">11<\/p>\n<\/td>\n<td>\n<p align=\"left\">1.25<\/p>\n<\/td>\n<td>\n<p align=\"left\">2.03<\/p>\n<\/td>\n<td>\n<p align=\"left\">4264.53..4264.54<\/p>\n<\/td>\n<td>\n<p align=\"left\">4263.81..4263.82<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">12<\/p>\n<\/td>\n<td>\n<p align=\"left\">1.47<\/p>\n<\/td>\n<td>\n<p align=\"left\">2.27<\/p>\n<\/td>\n<td>\n<p align=\"left\">18062.07..18062.08<\/p>\n<\/td>\n<td>\n<p align=\"left\">17923.86..17923.87<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">13<\/p>\n<\/td>\n<td>\n<p align=\"left\">3.28<\/p>\n<\/td>\n<td>\n<p align=\"left\">3.73<\/p>\n<\/td>\n<td>\n<p align=\"left\">19880.57..19880.58<\/p>\n<\/td>\n<td>\n<p align=\"left\">19561.58..19561.60<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">14<\/p>\n<\/td>\n<td>\n<p align=\"left\">1.20<\/p>\n<\/td>\n<td>\n<p align=\"left\">1.30<\/p>\n<\/td>\n<td>\n<p align=\"left\">6675.30..6675.31<\/p>\n<\/td>\n<td>\n<p align=\"left\">6675.12..6675.13<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">15<\/p>\n<\/td>\n<td>\n<p align=\"left\">4.70<\/p>\n<\/td>\n<td>\n<p align=\"left\">6.03<\/p>\n<\/td>\n<td>\n<p align=\"left\">140612.22..140612.23<\/p>\n<\/td>\n<td>\n<p align=\"left\">105280.24..105280.26<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">16<\/p>\n<\/td>\n<td>\n<p align=\"left\">2.03<\/p>\n<\/td>\n<td>\n<p align=\"left\">2.30<\/p>\n<\/td>\n<td>\n<p align=\"left\">4373.61..4373.62<\/p>\n<\/td>\n<td>\n<p align=\"left\">3928.40..3928.41<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">17<\/p>\n<\/td>\n<td>\n<p align=\"left\">0.72<\/p>\n<\/td>\n<td>\n<p align=\"left\">1.10<\/p>\n<\/td>\n<td>\n<p align=\"left\">4526.53..4526.54<\/p>\n<\/td>\n<td>\n<p align=\"left\">4073.57..4073.58<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">18<\/p>\n<\/td>\n<td>\n<p align=\"left\">0.50<\/p>\n<\/td>\n<td>\n<p align=\"left\">1.03<\/p>\n<\/td>\n<td>\n<p align=\"left\">36882.96..36882.97<\/p>\n<\/td>\n<td>\n<p align=\"left\">33151.67..33151.68<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">19<\/p>\n<\/td>\n<td>\n<p align=\"left\">8.35<\/p>\n<\/td>\n<td>\n<p align=\"left\">9.23<\/p>\n<\/td>\n<td>\n<p align=\"left\">141225.66..141225.67<\/p>\n<\/td>\n<td>\n<p align=\"left\">131527.60..131527.61<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">20<\/p>\n<\/td>\n<td>\n<p align=\"left\">4.60<\/p>\n<\/td>\n<td>\n<p align=\"left\">6.23<\/p>\n<\/td>\n<td>\n<p align=\"left\">12982.67..12982.68<\/p>\n<\/td>\n<td>\n<p align=\"left\">12976.69..12976.70<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">21<\/p>\n<\/td>\n<td>\n<p align=\"left\">4.57<\/p>\n<\/td>\n<td>\n<p align=\"left\">5.90<\/p>\n<\/td>\n<td>\n<p align=\"left\">3833.12..3833.13<\/p>\n<\/td>\n<td>\n<p align=\"left\">3833.12..3833.13<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">22<\/p>\n<\/td>\n<td>\n<p align=\"left\">17.55<\/p>\n<\/td>\n<td>\n<p align=\"left\">21.00<\/p>\n<\/td>\n<td>\n<p align=\"left\">7532.63..7532.64<\/p>\n<\/td>\n<td>\n<p align=\"left\">7532.28..7532.29<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">23<\/p>\n<\/td>\n<td>\n<p align=\"left\">16.07<\/p>\n<\/td>\n<td>\n<p align=\"left\">20.53<\/p>\n<\/td>\n<td>\n<p align=\"left\">43981.68..43981.69<\/p>\n<\/td>\n<td>\n<p align=\"left\">42108.50..42108.51<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">24<\/p>\n<\/td>\n<td>\n<p align=\"left\">47.90<\/p>\n<\/td>\n<td>\n<p align=\"left\">56.35<\/p>\n<\/td>\n<td>\n<p align=\"left\">6665.46..6665.47<\/p>\n<\/td>\n<td>\n<p align=\"left\">6580.84..6580.85<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">25<\/p>\n<\/td>\n<td>\n<p align=\"left\">3.73<\/p>\n<\/td>\n<td>\n<p align=\"left\">5.30<\/p>\n<\/td>\n<td>\n<p align=\"left\">8502.14..8502.15<\/p>\n<\/td>\n<td>\n<p align=\"left\">8495.15..8495.16<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">26<\/p>\n<\/td>\n<td>\n<p align=\"left\">29.83<\/p>\n<\/td>\n<td>\n<p align=\"left\">41.83<\/p>\n<\/td>\n<td>\n<p align=\"left\">9324.37..9324.38<\/p>\n<\/td>\n<td>\n<p align=\"left\">9237.43..9237.44<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">27<\/p>\n<\/td>\n<td>\n<p align=\"left\">42.40<\/p>\n<\/td>\n<td>\n<p align=\"left\">69.67<\/p>\n<\/td>\n<td>\n<p align=\"left\">1053.48..1053.49<\/p>\n<\/td>\n<td>\n<p align=\"left\">1290.69..1290.70<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">28<\/p>\n<\/td>\n<td>\n<p align=\"left\">137.20<\/p>\n<\/td>\n<td>\n<p align=\"left\">208.17<\/p>\n<\/td>\n<td>\n<p align=\"left\">7534.70..7534.71<\/p>\n<\/td>\n<td>\n<p align=\"left\">7534.67..7534.68<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">29<\/p>\n<\/td>\n<td>\n<p align=\"left\">949.77<\/p>\n<\/td>\n<td>\n<p align=\"left\">936.80<\/p>\n<\/td>\n<td>\n<p align=\"left\">4013.73..4013.74<\/p>\n<\/td>\n<td>\n<p align=\"left\">4013.73..4013.74<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">30<\/p>\n<\/td>\n<td>\n<p align=\"left\">38.67<\/p>\n<\/td>\n<td>\n<p align=\"left\">61.60<\/p>\n<\/td>\n<td>\n<p align=\"left\">9323.59..9323.60<\/p>\n<\/td>\n<td>\n<p align=\"left\">9323.59..9323.60<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">31<\/p>\n<\/td>\n<td>\n<p align=\"left\">20.83<\/p>\n<\/td>\n<td>\n<p align=\"left\">34.00<\/p>\n<\/td>\n<td>\n<p align=\"left\">9584.13..9584.14<\/p>\n<\/td>\n<td>\n<p align=\"left\">9575.61..9575.62<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">32<\/p>\n<\/td>\n<td>\n<p align=\"left\">0.00<\/p>\n<\/td>\n<td>\n<p align=\"left\">0.00<\/p>\n<\/td>\n<td>\n<p align=\"left\">3880.96..3880.97<\/p>\n<\/td>\n<td>\n<p align=\"left\">3838.37..3838.38<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">33<\/p>\n<\/td>\n<td>\n<p align=\"left\">165.90<\/p>\n<\/td>\n<td>\n<p align=\"left\">216.83<\/p>\n<\/td>\n<td>\n<p align=\"left\">3029.91..3029.92<\/p>\n<\/td>\n<td>\n<p align=\"left\">2995.14..2995.15<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>\u041a\u043e\u0433\u0434\u0430 \u044f \u0441\u043b\u0435\u0433\u043a\u0430 \u043f\u0440\u043e\u0431\u0435\u0436\u0430\u043b\u0441\u044f \u043f\u043e \u0442\u0430\u0431\u043b\u0438\u0446\u0435, \u0442\u043e \u043d\u0435 \u043f\u043e\u0432\u0435\u0440\u0438\u043b \u0441\u0432\u043e\u0438\u043c \u0433\u043b\u0430\u0437\u0430\u043c. \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0432 \u0432\u0438\u0434\u0435 \u0433\u0440\u0430\u0444\u0438\u043a\u0430:<\/p>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/\/post_images\/2d8\/543\/201\/2d85432010ce3b7069ec33097fff9d2b.svg\" alt=\"\u041d\u0430\u0433\u043b\u044f\u0434\u043d\u043e\u0435 \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u0432\u0448\u0438\u0445\u0441\u044f \u0441\u0442\u043e\u0438\u043c\u043e\u0441\u0442\u0435\u0439\" sizes=\"(max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/\/post_images\/2d8\/543\/201\/2d85432010ce3b7069ec33097fff9d2b.svg 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/\/post_images\/2d8\/543\/201\/2d85432010ce3b7069ec33097fff9d2b.svg 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u041d\u0430\u0433\u043b\u044f\u0434\u043d\u043e\u0435 \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u0432\u0448\u0438\u0445\u0441\u044f \u0441\u0442\u043e\u0438\u043c\u043e\u0441\u0442\u0435\u0439<\/figcaption><\/div>\n<\/figure>\n<p>DPhyp \u0432 \u043f\u043e\u0434\u0430\u0432\u043b\u044f\u044e\u0449\u0435\u043c \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u0435 \u0441\u043e\u0437\u0434\u0430\u0435\u0442 \u043f\u043b\u0430\u043d <em>\u043b\u0443\u0447\u0448\u0435<\/em>, \u0447\u0435\u043c DPsize. \u0414\u0430, \u0432\u0440\u0435\u043c\u044f \u0435\u0433\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0431\u043e\u043b\u044c\u0448\u0435, \u043d\u043e \u0437\u0430\u0442\u043e \u043f\u043b\u0430\u043d-\u0442\u043e \u043b\u0443\u0447\u0448\u0435, \u0430 \u0437\u043d\u0430\u0447\u0438\u0442 \u0432 \u0434\u043e\u043b\u0433\u043e\u0441\u0440\u043e\u043a\u0435 \u043c\u044b \u0432\u044b\u0438\u0433\u0440\u044b\u0432\u0430\u0435\u043c!<\/p>\n<p>\u041e\u0434\u043d\u0430\u043a\u043e \u0447\u0442\u043e-\u0442\u043e \u0437\u0434\u0435\u0441\u044c \u044f\u0432\u043d\u043e \u043d\u0435 \u0442\u0430\u043a. \u041a\u0430\u043a \u043c\u0438\u043d\u0438\u043c\u0443\u043c, \u043c\u044b \u0442\u043e\u043b\u044c\u043a\u043e \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u043b\u0438 <em>\u043f\u043e\u0440\u044f\u0434\u043a\u043e\u043c<\/em> \u043e\u0431\u0441\u043b\u0435\u0434\u0443\u0435\u043c\u044b\u0445 \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u0439, \u043d\u043e \u0441\u0430\u043c\u0438 \u043f\u043b\u0430\u043d\u044b-\u0442\u043e \u043d\u0435 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u043b\u0438, \u044d\u0442\u043e \u043d\u0430 \u0441\u0430\u043c\u043e\u043c PostgreSQL. \u0422\u0430\u043a \u0447\u0442\u043e \u0436\u0435, \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u0439 \u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0449\u0438\u043a \u0441\u043b\u043e\u043c\u0430\u043d? \u0414\u043b\u044f \u0447\u0438\u0441\u0442\u043e\u0442\u044b \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u0430 \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c, \u0447\u0442\u043e \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u0432\u044b\u0445\u043e\u0434\u0435. &#171;\u041f\u043e\u0434 \u043d\u043e\u0436&#187; \u043f\u043e\u0439\u0434\u0435\u0442 \u0437\u0430\u043f\u0440\u043e\u0441 <code>6f<\/code> (\u043f\u043e\u043f\u0430\u043b\u0441\u044f \u043f\u043e\u0434 \u0440\u0443\u043a\u0443). \u0412\u043e\u0442 \u0447\u0442\u043e \u043d\u0430\u043c \u0434\u0430\u0435\u0442 DPsize:<\/p>\n<pre><code>                                                                        QUERY PLAN                                            -----------------------------------------------------------------------------------------------------------------------------------------------------------  Aggregate  (cost=15215.38..15215.39 rows=1 width=96)    -&gt;  Nested Loop  (cost=8.10..15175.34 rows=5339 width=48)          -&gt;  Nested Loop  (cost=7.67..12744.50 rows=5339 width=37)                Join Filter: (ci.movie_id = t.id)                -&gt;  Nested Loop  (cost=7.23..12483.46 rows=147 width=41)                      -&gt;  Nested Loop  (cost=6.80..12351.21 rows=270 width=20)                            -&gt;  Seq Scan on keyword k  (cost=0.00..3691.40 rows=8 width=20)                                  Filter: (keyword = ANY ('{superhero,sequel,second-part,marvel-comics,based-on-comic,tv-special,fight,violence}'::text[]))                            -&gt;  Bitmap Heap Scan on movie_keyword mk  (cost=6.80..1079.43 rows=305 width=8)                                  Recheck Cond: (k.id = keyword_id)                                  -&gt;  Bitmap Index Scan on keyword_id_movie_keyword  (cost=0.00..6.72 rows=305 width=0)                                        Index Cond: (keyword_id = k.id)                      -&gt;  Index Scan using title_pkey on title t  (cost=0.43..0.49 rows=1 width=21)                            Index Cond: (id = mk.movie_id)                            Filter: (production_year &gt; 2000)                -&gt;  Index Scan using movie_id_cast_info on cast_info ci  (cost=0.44..1.33 rows=36 width=8)                      Index Cond: (movie_id = mk.movie_id)          -&gt;  Index Scan using name_pkey on name n  (cost=0.43..0.46 rows=1 width=19)                Index Cond: (id = ci.person_id) (19 rows) <\/code><\/pre>\n<p>\u0410 \u0432\u043e\u0442 \u0447\u0442\u043e \u0434\u0430\u0435\u0442 DPhyp:<\/p>\n<pre><code>                                                                        QUERY PLAN                                          -----------------------------------------------------------------------------------------------------------------------------------------------------------  Aggregate  (cost=13720.08..13720.09 rows=1 width=96)    -&gt;  Nested Loop  (cost=8.10..13704.27 rows=2108 width=48)          -&gt;  Nested Loop  (cost=7.67..12744.50 rows=2108 width=37)                Join Filter: (ci.movie_id = t.id)                -&gt;  Nested Loop  (cost=7.23..12483.46 rows=147 width=41)                      -&gt;  Nested Loop  (cost=6.80..12351.21 rows=270 width=20)                            -&gt;  Seq Scan on keyword k  (cost=0.00..3691.40 rows=8 width=20)                                  Filter: (keyword = ANY ('{superhero,sequel,second-part,marvel-comics,based-on-comic,tv-special,fight,violence}'::text[]))                            -&gt;  Bitmap Heap Scan on movie_keyword mk  (cost=6.80..1079.43 rows=305 width=8)                                  Recheck Cond: (k.id = keyword_id)                                  -&gt;  Bitmap Index Scan on keyword_id_movie_keyword  (cost=0.00..6.72 rows=305 width=0)                                        Index Cond: (keyword_id = k.id)                      -&gt;  Index Scan using title_pkey on title t  (cost=0.43..0.49 rows=1 width=21)                            Index Cond: (id = mk.movie_id)                            Filter: (production_year &gt; 2000)                -&gt;  Index Scan using movie_id_cast_info on cast_info ci  (cost=0.44..1.33 rows=36 width=8)                      Index Cond: (movie_id = mk.movie_id)          -&gt;  Index Scan using name_pkey on name n  (cost=0.43..0.46 rows=1 width=19)                Index Cond: (id = ci.person_id) (19 rows) <\/code><\/pre>\n<p>\u041f\u043b\u0430\u043d \u0434\u0435\u0448\u0435\u0432\u043b\u0435 \u043d\u0430 \u043f\u043e\u0447\u0442\u0438 \u043d\u0430 20000 \u0443.\u0435.! \u0422\u043e \u0435\u0441\u0442\u044c \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0434\u0430\u0435\u0442 \u043f\u043b\u0430\u043d \u043b\u0443\u0447\u0448\u0435&#8230; \u041d\u043e \u0441\u0442\u043e\u043f! <strong>\u043f\u043b\u0430\u043d\u044b \u0438\u0434\u0435\u043d\u0442\u0438\u0447\u043d\u044b\u0435, \u043d\u043e \u0441\u0442\u043e\u0438\u043c\u043e\u0441\u0442\u0438 \u0440\u0430\u0437\u043d\u044b\u0435<\/strong>? \u0420\u0430\u0437\u043b\u0438\u0447\u0438\u044f \u043d\u0430\u0441\u0442\u0443\u043f\u0430\u044e\u0442 \u0432 \u0442\u0440\u0435\u0442\u044c\u0435\u043c \u0443\u0437\u043b\u0435 \u2014 <code>Nested Loop<\/code> \u0441 <code>ci.movie_id = t.id<\/code> \u043f\u0440\u0435\u0434\u0438\u043a\u0430\u0442\u043e\u043c: DPsize \u043e\u0446\u0435\u043d\u0438\u0432\u0430\u0435\u0442 \u0435\u0433\u043e \u0432 5339 \u0441\u0442\u0440\u043e\u043a, \u0430 DPhyp \u2014 \u0432 2108. \u041a\u0430\u043a \u0442\u0430\u043a\u043e\u0435 \u0432\u043e\u043e\u0431\u0449\u0435 \u043c\u043e\u0433\u043b\u043e \u043f\u0440\u043e\u0438\u0437\u043e\u0439\u0442\u0438? \u041d\u0430\u0434\u043e \u043d\u0430\u0439\u0442\u0438 \u043f\u0440\u0438\u0447\u0438\u043d\u0443.<\/p>\n<p>\u0421\u0442\u0430\u0440\u0442\u043e\u0432\u043e\u0439 \u0442\u043e\u0447\u043a\u043e\u0439 \u0431\u0443\u0434\u0435\u0442 \u0442\u0440\u0435\u0439\u0441\u0438\u043d\u0433 \u0437\u0430\u043f\u0440\u043e\u0441\u0430, \u0447\u0442\u043e\u0431\u044b \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0442\u044c, \u043a\u0430\u043a\u0438\u0435 \u043f\u043e\u0434\u043f\u043b\u0430\u043d\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u044d\u0442\u043e\u0433\u043e NL. \u041f\u0440\u0438\u0434\u0435\u0442\u0441\u044f \u0434\u0435\u043b\u0430\u0442\u044c \u044d\u0442\u043e \u043e\u0442\u043b\u0430\u0434\u043a\u043e\u0439 \u0432\u0440\u0443\u0447\u043d\u0443\u044e, \u0432\u0435\u0434\u044c \u0434\u043b\u044f \u043f\u043e\u0434\u043e\u0431\u043d\u043e\u0433\u043e \u043d\u0435\u0442 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0445 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043a (\u0435\u0441\u0442\u044c \u043c\u0430\u043a\u0440\u043e\u0441 <code>OPTIMIZER_DEBUG<\/code>, \u043d\u043e \u043e\u043d \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0432\u043e\u0434\u0438\u0442\u044c \u0443\u0436\u0435 \u0433\u043e\u0442\u043e\u0432\u044b\u0435 \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u044f, \u0430 \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u043f\u0440\u043e\u0441\u043b\u0435\u0434\u0438\u0442\u044c \u043f\u043e\u0440\u044f\u0434\u043e\u043a \u0432\u044b\u0431\u043e\u0440\u0430, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043d\u0435 \u043f\u043e\u0434\u0445\u043e\u0434\u0438\u0442).<\/p>\n<p>\u0414\u043b\u044f DPsize \u043f\u043e\u0440\u044f\u0434\u043e\u043a \u0431\u0443\u0434\u0435\u0442 \u0442\u0430\u043a\u0438\u043c:<\/p>\n<pre><code>{1, 2, 3} {5} {1, 3, 5} {2} {2, 3, 5} {1} {1, 5} {2, 3} <\/code><\/pre>\n<p>\u0414\u043b\u044f DPhyp \u2014 \u0442\u0430\u043a\u0438\u043c:<\/p>\n<pre><code>{1} {2, 3, 5} {1, 5} {2, 3} {1, 3, 5} {2} {1, 2, 3} {5} <\/code><\/pre>\n<blockquote>\n<p>\u0427\u0438\u0441\u043b\u0430 &#8212; \u044d\u0442\u043e ID \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u0439:<\/p>\n<p>1 &#8212; <code>cast_info ci<\/code><br \/> 2 &#8212; <code>keyword k<\/code><br \/> 3 &#8212; <code>movie_keyword mk<\/code><br \/> 5 &#8212; <code>title t<\/code><\/p>\n<\/blockquote>\n<p>\u041d\u0435\u0441\u043c\u043e\u0442\u0440\u044f \u043d\u0430 \u0440\u0430\u0437\u043d\u0438\u0446\u0443 \u0432 \u043f\u043e\u0440\u044f\u0434\u043a\u0435 \u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u044f, \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u043e\u0434\u043d\u0438 \u0438 \u0442\u0435 \u0436\u0435 \u043f\u0430\u0440\u044b, \u0442\u043e \u0435\u0441\u0442\u044c \u043c\u044b \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u0442\u0435\u0440\u044f\u0435\u043c. \u041d\u043e \u043f\u043e\u0447\u0435\u043c\u0443 \u0436\u0435 \u0442\u043e\u0433\u0434\u0430 \u0440\u0430\u0437\u043d\u0430\u044f \u0441\u0442\u043e\u0438\u043c\u043e\u0441\u0442\u044c? \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0437\u0430\u0439\u0434\u0435\u043c \u0441 \u0434\u0440\u0443\u0433\u043e\u0439 \u0441\u0442\u043e\u0440\u043e\u043d\u044b \u2014 \u0447\u0442\u043e \u044d\u0442\u043e \u0437\u0430 \u0447\u0438\u0441\u043b\u0430 <code>2108<\/code> \u0438 <code>5339<\/code> \u0432 \u043f\u043b\u0430\u043d\u0430\u0445 \u0437\u0430\u043f\u0440\u043e\u0441\u0430? \u0415\u0441\u043b\u0438 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0432 \u043a\u043e\u0434\u0435, \u0442\u043e \u044d\u0442\u043e \u043f\u043e\u043b\u0435 <code>rows<\/code> \u0443 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b <code>Path<\/code>. \u0410 \u043a\u0430\u043a \u044d\u0442\u043e \u043f\u043e\u043b\u0435 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u0442\u0441\u044f? \u0412 \u043a\u043e\u0434\u0435 \u0436\u0435 \u043c\u044b \u0443\u0432\u0438\u0434\u0438\u043c, \u0447\u0442\u043e <code>rows<\/code> \u0443 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b <code>Path<\/code> \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043f\u043e\u043b\u0435\u043c <code>rows<\/code> \u0443 <code>RelOptInfo<\/code>, \u043f\u0440\u0438\u0447\u0435\u043c \u044d\u0442\u043e \u0434\u0435\u043b\u0430\u0435\u0442\u0441\u044f \u0432\u043e \u0432\u0441\u0435\u0445 \u0442\u0438\u043f\u0430\u0445 \u0443\u0437\u043b\u043e\u0432 \u043f\u043b\u0430\u043d\u0430 (\u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0430\u044f \u0447\u0430\u0441\u0442\u044c \u043f\u0440\u0438\u043c\u0435\u0440\u043e\u0432):<\/p>\n<pre><code class=\"cpp\">\/* https:\/\/github.com\/postgres\/postgres\/blob\/144ad723a4484927266a316d1c9550d56745ff67\/src\/backend\/optimizer\/path\/costsize.c#L3375 *\/ void final_cost_nestloop(PlannerInfo *root, NestPath *path, JoinCostWorkspace *workspace, JoinPathExtraData *extra) {     \/* ... *\/     if (path-&gt;jpath.path.param_info)         path-&gt;jpath.path.rows = path-&gt;jpath.path.param_info-&gt;ppi_rows;     else         path-&gt;jpath.path.rows = path-&gt;jpath.path.parent-&gt;rows;     \/* ... *\/ }  \/* https:\/\/github.com\/postgres\/postgres\/blob\/144ad723a4484927266a316d1c9550d56745ff67\/src\/backend\/optimizer\/path\/costsize.c#L3873 *\/ void final_cost_mergejoin(PlannerInfo *root, MergePath *path, JoinCostWorkspace *workspace, JoinPathExtraData *extra) {     \/* ... *\/     if (path-&gt;jpath.path.param_info)         path-&gt;jpath.path.rows = path-&gt;jpath.path.param_info-&gt;ppi_rows;     else         path-&gt;jpath.path.rows = path-&gt;jpath.path.parent-&gt;rows;     \/* ... *\/ }  \/* https:\/\/github.com\/postgres\/postgres\/blob\/144ad723a4484927266a316d1c9550d56745ff67\/src\/backend\/optimizer\/path\/costsize.c#L4305 *\/ void final_cost_hashjoin(PlannerInfo *root, HashPath *path, JoinCostWorkspace *workspace, JoinPathExtraData *extra) {     \/* ... *\/     if (path-&gt;jpath.path.param_info)         path-&gt;jpath.path.rows = path-&gt;jpath.path.param_info-&gt;ppi_rows;     else         path-&gt;jpath.path.rows = path-&gt;jpath.path.parent-&gt;rows;     \/* ... *\/ } <\/code><\/pre>\n<p>\u0425\u043e\u0440\u043e\u0448\u043e, \u0430 \u043e\u0442\u043a\u0443\u0434\u0430 \u0442\u043e\u0433\u0434\u0430 <code>rows<\/code> \u0431\u0435\u0440\u0435\u0442\u0441\u044f \u0432 <code>RelOptInfo<\/code>? \u0415\u0441\u043b\u0438 \u043f\u043e\u0438\u0441\u043a\u0430\u0442\u044c \u043f\u043e \u043a\u043e\u0434\u0443, \u0442\u043e \u0434\u043b\u044f JOIN \u043c\u044b \u043d\u0430\u0439\u0434\u0435\u043c <em>\u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0435<\/em> \u043c\u0435\u0441\u0442\u043e \u0435\u0435 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u2014 <code>set_joinrel_size_estimates<\/code>. \u0412\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043e\u043d \u0432 \u0434\u0432\u0443\u0445 \u043c\u0435\u0441\u0442\u0430\u0445: <code>build_join_rel<\/code> \u2014 \u0441\u043e\u0437\u0434\u0430\u0435\u0442 <em>\u043d\u043e\u0432\u044b\u0439<\/em> <code>RelOptInfo<\/code> \u0442\u0438\u043f\u0430 JOIN \u0438 <code>build_child_join_rel<\/code> \u2014 \u0442\u043e \u0436\u0435 \u0441\u0430\u043c\u043e\u0435, \u043d\u043e \u0434\u043b\u044f \u043d\u0430\u0441\u043b\u0435\u0434\u0443\u0435\u043c\u044b\u0445 \u0442\u0430\u0431\u043b\u0438\u0446 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0441\u044e\u0434\u0430 \u043f\u043e\u043f\u0430\u0434\u0430\u044e\u0442 \u043f\u0430\u0440\u0442\u0438\u0446\u0438\u0438). \u0412 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043d\u0438\u043a\u0430\u043a\u0438\u0445 \u043f\u0430\u0440\u0442\u0438\u0446\u0438\u0439 \u043d\u0435\u0442, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f <code>build_join_rel<\/code>. \u0424\u0438\u043d\u0430\u043b\u044c\u043d\u0430\u044f \u0447\u0435\u0440\u0442\u0430 \u2014 \u0433\u0434\u0435 \u0436\u0435 \u0432 \u043d\u0435\u043c \u0432\u044b\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043e\u0446\u0435\u043d\u043a\u0430 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u0441\u0442\u0440\u043e\u043a? \u041e\u0442\u0432\u0435\u0442 \u2014 \u043f\u0440\u0438 <em>\u043f\u0435\u0440\u0432\u043e\u043c \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0438<\/em> \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f <code>set_joinrel_size_estimates<\/code>, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0432\u044b\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u044d\u0442\u043e \u043f\u043e\u043b\u0435, <em>\u043e\u0446\u0435\u043d\u0438\u0432\u0430\u044f \u043f\u043e \u0442\u0435\u043a\u0443\u0449\u0435\u0439 \u043f\u0430\u0440\u0435<\/em> \u0441\u043e\u0435\u0434\u0438\u043d\u044f\u0435\u043c\u044b\u0445 \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u0439. \u0414\u0440\u0443\u0433\u0438\u043c\u0438 \u0441\u043b\u043e\u0432\u0430\u043c\u0438, \u043e\u0446\u0435\u043d\u043a\u0430 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c\u043e\u0433\u043e \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u0441\u0442\u0440\u043e\u043a \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0435\u0434\u0438\u043d\u043e\u0436\u0434\u044b, \u0430 \u0434\u0430\u043b\u044c\u0448\u0435 \u043c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u044d\u0442\u0443 \u043e\u0446\u0435\u043d\u043a\u0443 \u0432\u043e \u0432\u0441\u0435\u0445 \u0441\u043b\u0443\u0447\u0430\u044f\u0445. \u0417\u0432\u0443\u0447\u0438\u0442 \u0432\u043f\u043e\u043b\u043d\u0435 \u043b\u043e\u0433\u0438\u0447\u043d\u043e, \u0442\u0430\u043a \u043a\u0430\u043a \u043d\u0430 \u043a\u0430\u0436\u0434\u043e\u0435 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u0439 \u043f\u0440\u0435\u0434\u0438\u043a\u0430\u0442\u044b \u0442\u043e\u0436\u0435 \u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u044b, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c\u044b\u0445 \u0441\u0442\u0440\u043e\u043a \u043d\u0435 \u0434\u043e\u043b\u0436\u043d\u043e \u0437\u0430\u0432\u0438\u0441\u0435\u0442\u044c \u043e\u0442 \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0430. \u041d\u043e \u043f\u043e\u0447\u0435\u043c\u0443 \u0436\u0435 \u0442\u043e\u0433\u0434\u0430 \u043e\u0446\u0435\u043d\u043a\u0430 \u0442\u0430\u043a \u0441\u0438\u043b\u044c\u043d\u043e \u0440\u0430\u0437\u043d\u0438\u0442\u0441\u044f? \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0435\u0449\u0435 \u0440\u0430\u0437 \u043f\u0440\u043e\u0432\u0435\u0434\u0435\u043c \u0442\u0440\u0435\u0439\u0441\u0438\u043d\u0433, \u043d\u043e \u043d\u0430 \u044d\u0442\u043e\u0442 \u0440\u0430\u0437 \u043f\u043e\u0434\u0441\u0447\u0438\u0442\u0430\u0435\u043c \u0432\u0441\u0435 \u0432\u044b\u0437\u043e\u0432\u044b \u0438 \u0432\u0441\u0435 \u043e\u0446\u0435\u043d\u043a\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u044b \u0434\u0435\u043b\u0430\u0435\u043c. \u041f\u043e\u0441\u0442\u0440\u043e\u0438\u043c \u0434\u0435\u0440\u0435\u0432\u043e, \u0443\u0437\u043b\u0430\u043c\u0438 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0431\u0443\u0434\u0443\u0442 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0430 \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u0439, \u0430 \u0434\u043e\u0447\u0435\u0440\u043d\u0438\u043c\u0438 \u0443\u0437\u043b\u0430\u043c\u0438 \u2014 \u0442\u0435, \u0438\u0437 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0441\u043e\u0437\u0434\u0430\u0435\u0442\u0441\u044f \u0440\u043e\u0434\u0438\u0442\u0435\u043b\u044c. \u0422\u0430\u043a \u043a\u0430\u043a \u0432 \u0437\u0430\u043f\u0440\u043e\u0441\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e <code>JOIN INNER<\/code>, \u0444\u043e\u0440\u043c\u0443\u043b\u0430 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u043a\u043e\u0440\u0442\u0435\u0436\u0435\u0439 \u0431\u0443\u0434\u0435\u0442 \u0442\u0430\u043a\u043e\u0432\u0430: <code>nrows = outer_rows * inner_rows * jselect<\/code>:<\/p>\n<ul>\n<li>\n<p><code>nrows<\/code> \u2014 \u0438\u0442\u043e\u0433\u043e\u0432\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043a\u043e\u0440\u0442\u0435\u0436\u0435\u0439;<\/p>\n<\/li>\n<li>\n<p><code>outer_rows<\/code> \u2014 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043a\u043e\u0440\u0442\u0435\u0436\u0435\u0439 \u0432\u043e \u0432\u043d\u0435\u0448\u043d\u0435\u0439 \u0447\u0430\u0441\u0442\u0438;<\/p>\n<\/li>\n<li>\n<p><code>inner_rows<\/code> \u2014 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043a\u043e\u0440\u0442\u0435\u0436\u0435\u0439 \u0432\u043e \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0435\u0439 \u0447\u0430\u0441\u0442\u0438;<\/p>\n<\/li>\n<li>\n<p><code>jselec<\/code> \u2014 \u0441\u0435\u043b\u0435\u043a\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u044c \u043f\u0440\u0435\u0434\u0438\u043a\u0430\u0442\u043e\u0432.<\/p>\n<\/li>\n<\/ul>\n<p>\u0414\u043b\u044f DPsize \u0441\u0442\u0435\u043a \u0432\u044b\u0437\u043e\u0432\u043e\u0432 \u0431\u0443\u0434\u0435\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c (\u043f\u043e\u0434 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0430\u043c\u0438 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0430 \u0441\u0435\u043b\u0435\u043a\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u044c \u043f\u0440\u0435\u0434\u0438\u043a\u0430\u0442\u043e\u0432, \u0440\u0435\u0431\u0440\u0430 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043a\u043e\u0440\u0442\u0435\u0436\u0435\u0439 \u043d\u0430 \u0432\u044b\u0445\u043e\u0434\u0435):<\/p>\n<pre><code>                     {1, 2, 3, 5}                         3.95e-7                     \/           \\                 9813           1375372                  \/                   \\             {1, 2, 3}                {5}              7.45e-6               \/      \\       164574168      8         \/            \\     {1, 3}           {2}      1e-6     \/     \\ 36245584  4523930    \/          \\ {1}          {3}   <\/code><\/pre>\n<p>\u0423\u043a\u0430\u0437\u0430\u043d\u043d\u0430\u044f \u0441\u0435\u043b\u0435\u043a\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u044c \u0441\u0438\u043b\u044c\u043d\u043e \u043e\u0431\u0440\u0435\u0437\u0430\u043d\u0430, \u0447\u0442\u043e\u0431\u044b \u043d\u0435 \u0437\u0430\u043d\u0438\u043c\u0430\u0442\u044c \u043c\u043d\u043e\u0433\u043e \u043c\u0435\u0441\u0442\u0430, \u0442\u0430\u043a \u043a\u0430\u043a \u0447\u0438\u0441\u043b\u0430 \u0434\u043b\u0438\u043d\u043d\u044b\u0435, \u043d\u043e \u0434\u0430\u0436\u0435 \u0431\u0435\u0437 \u044d\u0442\u043e\u0433\u043e \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0434\u0441\u0447\u0438\u0442\u0430\u0442\u044c, \u0447\u0442\u043e <code>9813 * 1375372 * 3.95e-7 = 5332<\/code>. \u0415\u0441\u043b\u0438 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043e\u0442\u0431\u0440\u043e\u0448\u0435\u043d\u043d\u044b\u0435 \u0440\u0430\u0437\u0440\u044f\u0434\u044b, \u043d\u0430\u0431\u0435\u0440\u0435\u0442\u0441\u044f \u043d\u0430 \u043e\u0436\u0438\u0434\u0430\u0435\u043c\u043e\u0435 \u0447\u0438\u0441\u043b\u043e \u2014 <code>5339<\/code>.<\/p>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c, \u0447\u0442\u043e \u0441\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c \u0432 DPhyp:<\/p>\n<pre><code>                 {1, 2, 3, 5}                     3.95e-7                   \/         \\                 36245584        147                \/               \\             {1}             {2, 3, 5}                               7.45e-6                             \/        \\                            8       2461152                           \/             \\                         {2}           {3, 5}                                       3.95e-7                                      \/      \\                                  4523930  1375372                                    \/          \\                                  {3}          {5}  <\/code><\/pre>\n<p>\u0427\u0442\u043e \u0438 \u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043b\u043e \u043e\u0436\u0438\u0434\u0430\u0442\u044c: <code>36245584 * 147 * 3.95e-7 = 2104<\/code>, \u0441 \u043e\u043a\u0440\u0443\u0433\u043b\u0435\u043d\u0438\u0435\u043c \u044d\u0442\u043e \u0434\u0430\u0435\u0442 <code>2108<\/code>.<\/p>\n<p>\u0418\u0442\u0430\u043a, \u043c\u044b \u043d\u0430\u0448\u043b\u0438 \u0438\u0441\u0445\u043e\u0434\u043d\u0443\u044e \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443 \u2014 \u043f\u043b\u043e\u0445\u043e\u0439 \u0432\u044b\u0431\u043e\u0440 \u043f\u0435\u0440\u0432\u043e\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e\u0439 \u043e\u0446\u0435\u043d\u043a\u0438. \u0414\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043b\u0438 \u043e\u043d\u0430 \u043f\u043b\u043e\u0445\u0430? \u0412 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0434\u0430, \u0442\u0430\u043a \u043a\u0430\u043a \u0435\u0441\u043b\u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0437\u0430\u043f\u0440\u043e\u0441, \u0442\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u043c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b:<\/p>\n<pre><code>                                                                             QUERY PLAN                                              --------------------------------------------------------------------------------------------------------------------------------------------------------------------  Aggregate  (cost=13720.08..13720.09 rows=1 width=96) (actual time=8753.807..8753.810 rows=1 loops=1)    -&gt;  Nested Loop  (cost=8.10..13704.27 rows=2108 width=48) (actual time=0.637..8530.663 rows=785477 loops=1)          -&gt;  Nested Loop  (cost=7.67..12744.50 rows=2108 width=37) (actual time=0.623..2643.045 rows=785477 loops=1)                Join Filter: (ci.movie_id = t.id)                -&gt;  Nested Loop  (cost=7.23..12483.46 rows=147 width=41) (actual time=0.610..405.496 rows=14165 loops=1)                      -&gt;  Nested Loop  (cost=6.80..12351.21 rows=270 width=20) (actual time=0.597..140.721 rows=35548 loops=1)                            -&gt;  Seq Scan on keyword k  (cost=0.00..3691.40 rows=8 width=20) (actual time=0.143..37.305 rows=8 loops=1)                                  Filter: (keyword = ANY ('{superhero,sequel,second-part,marvel-comics,based-on-comic,tv-special,fight,violence}'::text[]))                                  Rows Removed by Filter: 134162                            -&gt;  Bitmap Heap Scan on movie_keyword mk  (cost=6.80..1079.43 rows=305 width=8) (actual time=0.993..12.278 rows=4444 loops=8)                                  Recheck Cond: (k.id = keyword_id)                                  Heap Blocks: exact=23488                                  -&gt;  Bitmap Index Scan on keyword_id_movie_keyword  (cost=0.00..6.72 rows=305 width=0) (actual time=0.501..0.501 rows=4444 loops=8)                                        Index Cond: (keyword_id = k.id)                      -&gt;  Index Scan using title_pkey on title t  (cost=0.43..0.49 rows=1 width=21) (actual time=0.007..0.007 rows=0 loops=35548)                            Index Cond: (id = mk.movie_id)                            Filter: (production_year &gt; 2000)                            Rows Removed by Filter: 1                -&gt;  Index Scan using movie_id_cast_info on cast_info ci  (cost=0.44..1.33 rows=36 width=8) (actual time=0.008..0.148 rows=55 loops=14165)                      Index Cond: (movie_id = mk.movie_id)          -&gt;  Index Scan using name_pkey on name n  (cost=0.43..0.46 rows=1 width=19) (actual time=0.007..0.007 rows=1 loops=785477)                Index Cond: (id = ci.person_id)  Planning Time: 1.419 ms  Execution Time: 8753.873 ms (24 rows) <\/code><\/pre>\n<p>\u0412 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0443\u0437\u0435\u043b \u0434\u0430\u043b 785477 \u043a\u043e\u0440\u0442\u0435\u0436\u0435\u0439, \u0438 \u043e\u0448\u0438\u0431\u043a\u0430 \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 (\u043a\u0440\u0430\u0442\u043d\u043e\u0441\u0442\u044c):<\/p>\n<ul>\n<li>\n<p>DPhyp: 370;<\/p>\n<\/li>\n<li>\n<p>DPsize: 150.<\/p>\n<\/li>\n<\/ul>\n<p>\u041e\u0448\u0438\u0431\u043b\u0438\u0441\u044c \u0432 \u043e\u0446\u0435\u043d\u043a\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u043a\u043e\u0440\u0442\u0435\u0436\u0435\u0439 \u0431\u043e\u043b\u0435\u0435 \u0447\u0435\u043c \u0432 \u0434\u0432\u0430 \u0440\u0430\u0437\u0430, \u043f\u0440\u0438\u0447\u0435\u043c \u0432 \u0445\u0443\u0434\u0448\u0443\u044e \u0441\u0442\u043e\u0440\u043e\u043d\u0443 \u2014 \u043d\u0435\u0434\u043e\u0441\u0447\u0438\u0442\u0430\u043b\u0438\u0441\u044c. \u041d\u043e \u0438 \u044d\u0442\u043e \u0435\u0449\u0435 \u043d\u0435 \u0432\u0441\u0435. \u0412\u0441\u043f\u043e\u043c\u043d\u0438\u0442\u0435 \u043f\u0435\u0440\u0432\u044b\u0439 \u043f\u0440\u0438\u043c\u0435\u0440 \u2014 \u0437\u0430\u043f\u0440\u043e\u0441 \u0441 \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u043c \u0433\u0438\u043f\u0435\u0440\u0440\u0435\u0431\u0440\u043e\u043c. \u041e\u043d \u043f\u043b\u0430\u043d\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043e\u0447\u0435\u043d\u044c \u0431\u044b\u0441\u0442\u0440\u043e, \u043d\u043e \u0432\u043e\u0442 \u0435\u0441\u043b\u0438 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0448\u0430\u0433 \u0432 \u0441\u0442\u043e\u0440\u043e\u043d\u0443, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043f\u0435\u0440\u0435\u043d\u0435\u0441\u0442\u0438 <code>t7.x<\/code> \u0432 \u043f\u0440\u0430\u0432\u0443\u044e \u0441\u0442\u0440\u043e\u043d\u0443 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f, \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u043c \u0442\u0430\u043a\u043e\u0439 \u043f\u043b\u0430\u043d:<\/p>\n<pre><code>-----------------------------------------------------------------------------------------------------------------------------------------------  Nested Loop  (cost=0.00..215344.72 rows=1594323 width=56)    Join Filter: ((((((t1.x + t2.x) + t3.x) + t4.x) + t5.x) + t6.x) &gt; (((((((t7.x + t8.x) + t9.x) + t10.x) + t11.x) + t12.x) + t13.x) + t14.x))    -&gt;  Nested Loop  (cost=0.00..93.00 rows=6561 width=32)          -&gt;  Nested Loop  (cost=0.00..5.39 rows=81 width=16)                -&gt;  Nested Loop  (cost=0.00..2.18 rows=9 width=8)                      -&gt;  Seq Scan on t7  (cost=0.00..1.03 rows=3 width=4)                      -&gt;  Materialize  (cost=0.00..1.04 rows=3 width=4)                            -&gt;  Seq Scan on t8  (cost=0.00..1.03 rows=3 width=4)                -&gt;  Materialize  (cost=0.00..2.23 rows=9 width=8)                      -&gt;  Nested Loop  (cost=0.00..2.18 rows=9 width=8)                            -&gt;  Seq Scan on t9  (cost=0.00..1.03 rows=3 width=4)                            -&gt;  Materialize  (cost=0.00..1.04 rows=3 width=4)                                  -&gt;  Seq Scan on t10  (cost=0.00..1.03 rows=3 width=4)          -&gt;  Materialize  (cost=0.00..5.80 rows=81 width=16)                -&gt;  Nested Loop  (cost=0.00..5.39 rows=81 width=16)                      -&gt;  Nested Loop  (cost=0.00..2.18 rows=9 width=8)                            -&gt;  Seq Scan on t11  (cost=0.00..1.03 rows=3 width=4)                            -&gt;  Materialize  (cost=0.00..1.04 rows=3 width=4)                                  -&gt;  Seq Scan on t12  (cost=0.00..1.03 rows=3 width=4)                      -&gt;  Materialize  (cost=0.00..2.23 rows=9 width=8)                            -&gt;  Nested Loop  (cost=0.00..2.18 rows=9 width=8)                                  -&gt;  Seq Scan on t13  (cost=0.00..1.03 rows=3 width=4)                                  -&gt;  Materialize  (cost=0.00..1.04 rows=3 width=4)                                        -&gt;  Seq Scan on t14  (cost=0.00..1.03 rows=3 width=4)    -&gt;  Materialize  (cost=0.00..19.94 rows=729 width=24)          -&gt;  Nested Loop  (cost=0.00..16.29 rows=729 width=24)                -&gt;  Nested Loop  (cost=0.00..3.56 rows=27 width=12)                      -&gt;  Nested Loop  (cost=0.00..2.18 rows=9 width=8)                            -&gt;  Seq Scan on t2  (cost=0.00..1.03 rows=3 width=4)                            -&gt;  Materialize  (cost=0.00..1.04 rows=3 width=4)                                  -&gt;  Seq Scan on t3  (cost=0.00..1.03 rows=3 width=4)                      -&gt;  Materialize  (cost=0.00..1.04 rows=3 width=4)                            -&gt;  Seq Scan on t1  (cost=0.00..1.03 rows=3 width=4)                -&gt;  Materialize  (cost=0.00..3.69 rows=27 width=12)                      -&gt;  Nested Loop  (cost=0.00..3.56 rows=27 width=12)                            -&gt;  Nested Loop  (cost=0.00..2.18 rows=9 width=8)                                  -&gt;  Seq Scan on t5  (cost=0.00..1.03 rows=3 width=4)                                  -&gt;  Materialize  (cost=0.00..1.04 rows=3 width=4)                                        -&gt;  Seq Scan on t6  (cost=0.00..1.03 rows=3 width=4)                            -&gt;  Materialize  (cost=0.00..1.04 rows=3 width=4)                                  -&gt;  Seq Scan on t4  (cost=0.00..1.03 rows=3 width=4)  Planning Time: 9.477 ms (42 rows) <\/code><\/pre>\n<p>\u0414\u0430, \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u0435\u0435 \u2014 9 \u043c\u0441 \u0432\u043c\u0435\u0441\u0442\u043e 4 \u043c\u0441, \u043d\u043e \u0432\u0435\u0434\u044c \u044d\u0442\u043e \u0432\u0441\u0435 \u0440\u0430\u0432\u043d\u043e \u0431\u044b\u0441\u0442\u0440\u043e. \u0414\u0430, \u0431\u044b\u0441\u0442\u0440\u043e, \u0442\u043e\u043b\u044c\u043a\u043e \u0432\u043e\u0442 \u0434\u0435\u043b\u043e \u0443\u0436\u0435 \u043d\u0435 \u0432 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438. \u041f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u0442\u0435, \u0447\u0442\u043e \u0434\u0430\u0435\u0442 DPsize:<\/p>\n<pre><code>                                                                  QUERY PLAN                                    -----------------------------------------------------------------------------------------------------------------------------------------------  Nested Loop  (cost=0.00..215311.78 rows=1594323 width=56)    Join Filter: ((((((t1.x + t2.x) + t3.x) + t4.x) + t5.x) + t6.x) &gt; (((((((t7.x + t8.x) + t9.x) + t10.x) + t11.x) + t12.x) + t13.x) + t14.x))    -&gt;  Nested Loop  (cost=0.00..36.36 rows=2187 width=28)          -&gt;  Nested Loop  (cost=0.00..5.39 rows=81 width=16)                -&gt;  Nested Loop  (cost=0.00..2.18 rows=9 width=8)                      -&gt;  Seq Scan on t4  (cost=0.00..1.03 rows=3 width=4)                      -&gt;  Materialize  (cost=0.00..1.04 rows=3 width=4)                            -&gt;  Seq Scan on t5  (cost=0.00..1.03 rows=3 width=4)                -&gt;  Materialize  (cost=0.00..2.23 rows=9 width=8)                      -&gt;  Nested Loop  (cost=0.00..2.18 rows=9 width=8)                            -&gt;  Seq Scan on t6  (cost=0.00..1.03 rows=3 width=4)                            -&gt;  Materialize  (cost=0.00..1.04 rows=3 width=4)                                  -&gt;  Seq Scan on t7  (cost=0.00..1.03 rows=3 width=4)          -&gt;  Materialize  (cost=0.00..3.69 rows=27 width=12)                -&gt;  Nested Loop  (cost=0.00..3.56 rows=27 width=12)                      -&gt;  Nested Loop  (cost=0.00..2.18 rows=9 width=8)                            -&gt;  Seq Scan on t1  (cost=0.00..1.03 rows=3 width=4)                            -&gt;  Materialize  (cost=0.00..1.04 rows=3 width=4)                                  -&gt;  Seq Scan on t2  (cost=0.00..1.03 rows=3 width=4)                      -&gt;  Materialize  (cost=0.00..1.04 rows=3 width=4)                            -&gt;  Seq Scan on t3  (cost=0.00..1.03 rows=3 width=4)    -&gt;  Materialize  (cost=0.00..47.29 rows=2187 width=28)          -&gt;  Nested Loop  (cost=0.00..36.36 rows=2187 width=28)                -&gt;  Nested Loop  (cost=0.00..5.39 rows=81 width=16)                      -&gt;  Nested Loop  (cost=0.00..2.18 rows=9 width=8)                            -&gt;  Seq Scan on t11  (cost=0.00..1.03 rows=3 width=4)                            -&gt;  Materialize  (cost=0.00..1.04 rows=3 width=4)                                  -&gt;  Seq Scan on t12  (cost=0.00..1.03 rows=3 width=4)                      -&gt;  Materialize  (cost=0.00..2.23 rows=9 width=8)                            -&gt;  Nested Loop  (cost=0.00..2.18 rows=9 width=8)                                  -&gt;  Seq Scan on t13  (cost=0.00..1.03 rows=3 width=4)                                  -&gt;  Materialize  (cost=0.00..1.04 rows=3 width=4)                                        -&gt;  Seq Scan on t14  (cost=0.00..1.03 rows=3 width=4)                -&gt;  Materialize  (cost=0.00..3.69 rows=27 width=12)                      -&gt;  Nested Loop  (cost=0.00..3.56 rows=27 width=12)                            -&gt;  Nested Loop  (cost=0.00..2.18 rows=9 width=8)                                  -&gt;  Seq Scan on t8  (cost=0.00..1.03 rows=3 width=4)                                  -&gt;  Materialize  (cost=0.00..1.04 rows=3 width=4)                                        -&gt;  Seq Scan on t9  (cost=0.00..1.03 rows=3 width=4)                            -&gt;  Materialize  (cost=0.00..1.04 rows=3 width=4)                                  -&gt;  Seq Scan on t10  (cost=0.00..1.03 rows=3 width=4)  Planning Time: 3337.097 ms (42 rows) <\/code><\/pre>\n<p>\u0412\u0440\u0435\u043c\u044f \u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0433\u043e\u0440\u0430\u0437\u0434\u043e \u0434\u043e\u043b\u044c\u0448\u0435, \u043d\u043e \u0432\u043d\u0438\u043c\u0430\u0442\u0435\u043b\u044c\u043d\u0435\u0435 \u0432\u0441\u043c\u043e\u0442\u0440\u0438\u0442\u0435\u0441\u044c \u0432 \u043f\u043b\u0430\u043d \u0437\u0430\u043f\u0440\u043e\u0441\u0430. \u041f\u0435\u0440\u0432\u043e\u0435, \u0447\u0442\u043e \u043d\u0430\u0434\u043e \u0437\u0430\u043c\u0435\u0442\u0438\u0442\u044c, \u2014 \u0441\u0442\u043e\u0438\u043c\u043e\u0441\u0442\u044c \u043c\u0435\u043d\u044c\u0448\u0435. \u0412\u0437\u0433\u043b\u044f\u043d\u0438\u0442\u0435, \u0437\u0430 \u0441\u0447\u0435\u0442 \u0447\u0435\u0433\u043e:<\/p>\n<pre><code>                     -&gt;  Nested Loop  (cost=0.00..2.18 rows=9 width=8)                            -&gt;  Seq Scan on t6  (cost=0.00..1.03 rows=3 width=4)                            -&gt;  Materialize  (cost=0.00..1.04 rows=3 width=4)                                  -&gt;  Seq Scan on t7  (cost=0.00..1.03 rows=3 width=4) <\/code><\/pre>\n<p>\u0414\u0430, DPsize \u0441\u043c\u043e\u0433 <em>\u043d\u0430\u0439\u0442\u0438 \u043d\u0435\u044f\u0432\u043d\u0443\u044e \u0441\u0432\u044f\u0437\u044c<\/em> \u043c\u0435\u0436\u0434\u0443 \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u044f\u043c\u0438, \u0434\u0430\u0436\u0435 \u0435\u0441\u043b\u0438 \u043e\u043d\u0438 \u0431\u044b\u043b\u0438 \u043f\u043e \u0440\u0430\u0437\u043d\u0443\u044e \u0441\u0442\u043e\u0440\u043e\u043d\u0443 \u043e\u043f\u0435\u0440\u0430\u043d\u0434\u043e\u0432. DPhyp \u0442\u0430\u043a\u043e\u0433\u043e \u043d\u0435 \u0441\u0434\u0435\u043b\u0430\u0435\u0442, \u0442\u0430\u043a \u043a\u0430\u043a \u044d\u0442\u043e \u0440\u0430\u0437\u043d\u044b\u0435 \u0441\u0442\u043e\u0440\u043e\u043d\u044b \u0440\u0435\u0431\u0440\u0430, \u0430 \u043f\u043e \u0435\u0433\u043e \u043f\u0440\u0430\u0432\u0438\u043b\u0430\u043c \u0442\u0430\u043a\u043e\u0435 \u0434\u0435\u043b\u0430\u0442\u044c \u0437\u0430\u043f\u0440\u0435\u0449\u0435\u043d\u043e \u2014 \u043d\u0435\u043b\u044c\u0437\u044f \u0441\u043e\u0435\u0434\u0438\u043d\u044f\u0442\u044c \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0435 \u0443\u0437\u043b\u044b \u0440\u0430\u0437\u043d\u044b\u0445 \u0433\u0438\u043f\u0435\u0440\u0443\u0437\u043b\u043e\u0432, \u0435\u0441\u043b\u0438 \u043e\u043d\u0438 \u043f\u043e \u0440\u0430\u0437\u043d\u044b\u0435 \u0441\u0442\u043e\u0440\u043e\u043d\u044b \u0433\u0438\u043f\u0435\u0440\u0440\u0435\u0431\u0440\u0430, \u0442\u043e\u043b\u044c\u043a\u043e \u0432\u0441\u0435 \u0432\u043c\u0435\u0441\u0442\u0435. \u0418\u0437 \u044d\u0442\u043e\u0433\u043e \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u043a\u043b\u044e\u0447\u0438\u0442\u044c, \u0447\u0442\u043e DPhyp \u2014 \u044d\u0442\u043e \u043e\u0447\u0435\u043d\u044c \u0445\u043e\u0440\u043e\u0448\u0430\u044f, \u043d\u043e \u0432\u0441\u0435 \u0436\u0435 <em>\u044d\u0432\u0440\u0438\u0441\u0442\u0438\u043a\u0430<\/em>. \u041d\u043e, \u043a \u0441\u043e\u0436\u0430\u043b\u0435\u043d\u0438\u044e, \u0438 \u044d\u0442\u043e \u043d\u0435 \u0432\u0441\u0435 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b.<\/p>\n<p>\u0414\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0433\u0438\u043f\u0435\u0440\u0440\u0435\u0431\u0435\u0440 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0442\u0440\u0438 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0430, \u043d\u043e \u043e\u043d\u0438 \u043d\u0435 \u043f\u043e\u043a\u0440\u044b\u0432\u0430\u044e\u0442 \u0432\u0441\u0435\u0445 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u0432. \u041f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u043a\u0440\u043e\u0435\u0442\u0441\u044f \u0432 <code>joinclauses<\/code>. \u0412\u043e \u0432\u0440\u0435\u043c\u044f \u0440\u0430\u0431\u043e\u0442\u044b PostgreSQL \u0441\u043e\u0437\u0434\u0430\u0435\u0442 \u0432\u0441\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0435 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u044b \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0441 \u0440\u0430\u0437\u043d\u044b\u043c \u043d\u0430\u0431\u043e\u0440\u043e\u043c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0445 \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u0439 \u043b\u0435\u0432\u043e\u0439 \u0438 \u043f\u0440\u0430\u0432\u043e\u0439 \u0447\u0430\u0441\u0442\u0438. \u042d\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0440\u0430\u0437\u043d\u044b\u0435 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u044b \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0432 \u0434\u0435\u0440\u0435\u0432\u0435. \u041f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0435 \u0442\u0430\u043c \u0438\u043d\u0434\u0435\u043a\u0441\u044b \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u0439 \u043c\u043e\u0433\u0443\u0442 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u044c\u0441\u044f \u043d\u0435 \u043a \u0442\u0430\u0431\u043b\u0438\u0446\u0430\u043c, \u0430 \u043a \u0438\u043d\u0434\u0435\u043a\u0441\u0430\u043c \u0443\u0437\u043b\u043e\u0432 JOIN (<code>RangeTblEntry<\/code> \u0442\u0438\u043f\u0430 <code>RTE_JOIN<\/code>). \u0418 \u043e\u043d\u0438 \u0442\u0430\u043c \u043d\u0435 \u043f\u0440\u043e\u0441\u0442\u043e \u0442\u0430\u043a, \u043e\u043d\u0438 &#171;\u043f\u043e\u0434\u0441\u043a\u0430\u0437\u044b\u0432\u0430\u044e\u0442&#187; \u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0449\u0438\u043a\u0443, \u043a\u0430\u043a\u0438\u0435 \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u044f \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0438 \u043a\u0430\u043a \u043f\u0435\u0440\u0435\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u044f. \u0414\u043b\u044f \u043f\u043e\u043d\u0438\u043c\u0430\u043d\u0438\u044f \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043d\u0430 \u0442\u0430\u043a\u043e\u0439 \u0437\u0430\u043f\u0440\u043e\u0441 (\u0432\u0437\u044f\u0442 \u0438\u0437 \u0440\u0435\u0433\u0440\u0435\u0441\u0441-\u0442\u0435\u0441\u0442\u043e\u0432 \u0441\u0430\u043c\u043e\u0433\u043e PostgreSQL):<\/p>\n<pre><code class=\"sql\">select t1.* from   text_tbl t1   left join (select *, '***'::text as d1 from int8_tbl i8b1) b1     left join int8_tbl i8       left join (select *, null::int as d2 from int8_tbl i8b2) b2       on (i8.q1 = b2.q1)     on (b2.d2 = b1.q2)   on (t1.f1 = b1.d1)   left join int4_tbl i4   on (i8.q2 = i4.f1); <\/code><\/pre>\n<p>\u041f\u0440\u043e\u0431\u043b\u0435\u043c\u043d\u044b\u043c \u0437\u0434\u0435\u0441\u044c \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u0440\u0435\u0434\u0438\u043a\u0430\u0442 <code>i8.q2 = i4.f1<\/code> \u2014 \u0434\u043b\u044f \u043d\u0435\u0433\u043e \u0445\u0440\u0430\u043d\u0438\u0442\u0441\u044f <em>\u0442\u0440\u0438<\/em> \u043a\u043e\u043f\u0438\u0438 \u0441 \u0440\u0430\u0437\u043d\u044b\u043c \u043d\u0430\u0431\u043e\u0440\u043e\u043c \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u0439 \u043b\u0435\u0432\u043e\u0439 \u0438 \u043f\u0440\u0430\u0432\u043e\u0439 \u0447\u0430\u0441\u0442\u0438:<\/p>\n<ul>\n<li>\n<p><code>{3}       - {8}<\/code><\/p>\n<\/li>\n<li>\n<p><code>{3, 6}    - {8}<\/code><\/p>\n<\/li>\n<li>\n<p><code>{3, 6, 7} - {8}<\/code><\/p>\n<\/li>\n<\/ul>\n<p>3 \u0438 8 \u2014 \u0438\u043d\u0434\u0435\u043a\u0441\u044b, \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u0442\u0430\u0431\u043b\u0438\u0446\u0430\u043c <code>i8<\/code> \u0438 <code>i4<\/code> \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e. \u041d\u043e \u0447\u0442\u043e \u044d\u0442\u043e \u0437\u0430 6 \u0438 7? \u042d\u0442\u043e \u0438\u043d\u0434\u0435\u043a\u0441\u044b JOIN&#8217;\u043e\u0432:<\/p>\n<pre><code class=\"sql\">-- 6 (select *, '***'::text as d1 from int8_tbl i8b1) b1     left join int8_tbl i8       left join (select *, null::int as d2 from int8_tbl i8b2) b2       on (i8.q1 = b2.q1)     on (b2.d2 = b1.q2)  -- 7 text_tbl t1   left join (select *, '***'::text as d1 from int8_tbl i8b1) b1     left join int8_tbl i8       left join (select *, null::int as d2 from int8_tbl i8b2) b2       on (i8.q1 = b2.q1)     on (b2.d2 = b1.q2)   on (t1.f1 = b1.d1) <\/code><\/pre>\n<p>\u042d\u0442\u043e \u043e\u0442\u0440\u0430\u0436\u0430\u0435\u0442 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f: <code>i8.q2 = i4.f1<\/code> \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u043d\u0435 \u043a \u0441\u0430\u043c\u043e\u043c\u0443 <code>i8<\/code>, \u0430 \u043a \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0443 <code>LEFT JOIN<\/code>\u0430.<\/p>\n<hr\/>\n<p>\u0425\u043e\u0440\u043e\u0448\u043e, \u043d\u043e \u043f\u043e\u0447\u0435\u043c\u0443 \u0442\u043e\u0433\u0434\u0430 \u0432\u0440\u0435\u043c\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0431\u043e\u043b\u044c\u0448\u0435? \u0415\u0441\u043b\u0438 \u043c\u044b \u043d\u0435 \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0435\u043c \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u044b, \u0442\u043e \u044d\u0442\u043e \u0432\u0440\u0435\u043c\u044f \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c \u043c\u0435\u043d\u044c\u0448\u0435. \u0414\u0435\u043b\u043e \u0432\u043e\u0442 \u0432 \u0447\u0435\u043c.<\/p>\n<p>\u0415\u0441\u043b\u0438 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043d\u0430 \u043a\u043e\u0434 \u0432\u0430\u043d\u0438\u043b\u044c\u043d\u043e\u0433\u043e \u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0449\u0438\u043a\u0430, \u0442\u043e \u043c\u043e\u0436\u0435\u043c \u0443\u0432\u0438\u0434\u0435\u0442\u044c, \u0447\u0442\u043e \u043e\u043d \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0443\u043c\u043d\u044b\u0439. <a href=\"https:\/\/github.com\/postgres\/postgres\/blob\/0810fbb02dbe70b8a7a7bcc51580827b8bbddbdc\/src\/backend\/optimizer\/path\/joinrels.c#L73\" rel=\"noopener noreferrer nofollow\">\u0424\u0443\u043d\u043a\u0446\u0438\u044f <code>join_search_one_level<\/code><\/a> \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 \u0437\u0430 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0443 1 \u0443\u0440\u043e\u0432\u043d\u044f DPsize:<\/p>\n<details class=\"spoiler\">\n<summary>join_search_one_level<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"cpp\">\/* src\/backend\/optimizer\/path\/joinrels.c *\/ void join_search_one_level(PlannerInfo *root, int level) { List  **joinrels = root-&gt;join_rel_level; ListCell   *r; intk;  root-&gt;join_cur_level = level;  \/*  * \u0421\u043e\u0435\u0434\u0438\u043d\u044f\u0435\u043c \u0432\u0441\u0435 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0435 \u0443\u0440\u043e\u0432\u043d\u0438, \u0441 \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0439 \u0442\u0430\u0431\u043b\u0438\u0446\u0435\u0439.  *\/ foreach(r, joinrels[level - 1]) { RelOptInfo *old_rel = (RelOptInfo *) lfirst(r);  if (old_rel-&gt;joininfo != NIL || old_rel-&gt;has_eclass_joins || has_join_restriction(root, old_rel)) { intfirst_rel;  if (level == 2) first_rel = foreach_current_index(r) + 1; else first_rel = 0;  make_rels_by_clause_joins(root, old_rel, joinrels[1], first_rel); } else { make_rels_by_clauseless_joins(root,   old_rel,   joinrels[1]); } }  \/*  * \u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \"\u0432\u0435\u0442\u0432\u0438\u0441\u0442\u044b\u0445\" \u043f\u043b\u0430\u043d\u043e\u0432 - \u043b\u043e\u0433\u0438\u043a\u0430 DPsize, \u0433\u0434\u0435 \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u044e\u0442\u0441\u044f      * \u043f\u0430\u0440\u044b \u0438\u0437 \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u0439 \u0441 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u043c\u0438 \u0442\u0430\u0431\u043b\u0438\u0446\u0430\u043c\u0438, \u043f\u043e \u043e\u0431\u0435\u0438\u043c \u0441\u0442\u043e\u0440\u043e\u043d\u0430\u043c  *\/ for (k = 2;; k++) { intother_level = level - k;  foreach(r, joinrels[k]) { RelOptInfo *old_rel = (RelOptInfo *) lfirst(r); intfirst_rel; ListCell   *r2;  if (k == other_level) first_rel = foreach_current_index(r) + 1; else first_rel = 0;  for_each_from(r2, joinrels[other_level], first_rel) { RelOptInfo *new_rel = (RelOptInfo *) lfirst(r2);                  \/* \u0421\u043e\u0437\u0434\u0430\u0435\u043c \u043f\u043b\u0430\u043d, \u0442\u043e\u043b\u044c\u043a\u043e \u0435\u0441\u0442\u044c \u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0438\u0439 \u043f\u0440\u0435\u0434\u0438\u043a\u0430\u0442 *\/ if (!bms_overlap(old_rel-&gt;relids, new_rel-&gt;relids)) { if (have_relevant_joinclause(root, old_rel, new_rel) || have_join_order_restriction(root, old_rel, new_rel)) { (void) make_join_rel(root, old_rel, new_rel); } } } } }  \/*      * \u0421\u043e\u0437\u0434\u0430\u0435\u043c CROSS JOIN, \u0435\u0441\u043b\u0438 \u043d\u0430 \u0442\u0435\u043a\u0443\u0449\u0435\u043c \u0443\u0440\u043e\u0432\u043d\u0435 \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u0441\u043c\u043e\u0433\u043b\u0438 \u0441\u043e\u0437\u0434\u0430\u0442\u044c  *\/ if (joinrels[level] == NIL) { foreach(r, joinrels[level - 1]) { RelOptInfo *old_rel = (RelOptInfo *) lfirst(r);  make_rels_by_clauseless_joins(root,   old_rel,   joinrels[1]); } } } <\/code><\/pre>\n<\/div>\n<\/details>\n<p>\u0415\u0435 \u043b\u043e\u0433\u0438\u043a\u0430 \u0442\u0430\u043a\u0430\u044f:<\/p>\n<ol>\n<li>\n<p>\u0412\u043d\u0430\u0447\u0430\u043b\u0435 \u0441\u043e\u0437\u0434\u0430\u0435\u043c left-deep\/right-deep \u043f\u043b\u0430\u043d\u044b \u2014 \u0441\u043e\u0437\u0434\u0430\u0435\u043c \u0442\u0435\u043a\u0443\u0449\u0438\u0439 \u0443\u0440\u043e\u0432\u0435\u043d\u044c \u043f\u0440\u0438\u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435\u043c 1 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u043a \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u043c\u0443 \u0443\u0440\u043e\u0432\u043d\u044e (\u0434\u0430\u0436\u0435 \u0435\u0441\u043b\u0438 \u043d\u0435\u0442 \u043f\u0440\u0435\u0434\u0438\u043a\u0430\u0442\u0430, \u0442\u043e \u0435\u0441\u0442\u044c \u0441\u043e\u0437\u0434\u0430\u0435\u043c <code>CROSS JOIN<\/code>).<\/p>\n<\/li>\n<li>\n<p>\u0417\u0430\u0442\u0435\u043c \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u043e\u0441\u043d\u043e\u0432\u043d\u0443\u044e \u043b\u043e\u0433\u0438\u043a\u0443 DPsize \u0441 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u0438\u0435\u043c \u0432\u0441\u0435\u0445 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0445 \u043f\u0430\u0440, \u0434\u0430\u044e\u0449\u0438\u0445 \u043f\u043e \u0438\u0442\u043e\u0433\u0443 \u043d\u0443\u0436\u043d\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e.<\/p>\n<\/li>\n<li>\n<p>\u0412 \u043a\u043e\u043d\u0446\u0435, \u0435\u0441\u043b\u0438 \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u0441\u043c\u043e\u0433\u043b\u0438 \u043d\u0430\u0439\u0442\u0438, \u0442\u043e \u0441\u043e\u0437\u0434\u0430\u0435\u043c \u0443\u0437\u043b\u044b <code>CROSS JOIN<\/code>&#8216;\u0430.<\/p>\n<\/li>\n<\/ol>\n<p>\u041e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044f \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0432\u043e 2 \u0448\u0430\u0433\u0435 \u2014 \u043c\u044b <em>\u043d\u0435<\/em> \u0441\u043e\u0437\u0434\u0430\u0435\u043c \u043b\u0438\u0448\u043d\u0438\u0435 <code>CROSS JOIN<\/code>, \u0435\u0441\u043b\u0438 \u043e\u043d\u0438 \u043d\u0435 \u043d\u0443\u0436\u043d\u044b. \u042d\u0442\u043e, \u043f\u043e \u0444\u0430\u043a\u0442\u0443, \u0438\u043c\u0438\u0442\u0430\u0446\u0438\u044f \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u044f DPhyp, \u0442\u0430\u043a \u043a\u0430\u043a \u0435\u0433\u043e \u0438\u0434\u0435\u044f \u0432 \u044d\u0442\u043e\u043c \u0438 \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u2014 \u0441\u043e\u0435\u0434\u0438\u043d\u044f\u0442\u044c \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u044f, \u0442\u043e\u043b\u044c\u043a\u043e \u0435\u0441\u043b\u0438 \u043c\u0435\u0436\u0434\u0443 \u043d\u0438\u043c\u0438 \u0435\u0441\u0442\u044c \u0441\u0432\u044f\u0437\u044c.<\/p>\n<p>\u041e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u043a\u0443\u043d\u0434\u044b \u043c\u044b \u0442\u0440\u0430\u0442\u0438\u043c \u043d\u0430 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u0443\u044e \u0434\u0435\u044f\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c:<\/p>\n<ul>\n<li>\n<p>\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435\u043c \u0433\u0438\u043f\u0435\u0440\u0433\u0440\u0430\u0444\u0430.<\/p>\n<\/li>\n<li>\n<p>\u041e\u0431\u0445\u043e\u0434 \u0441\u043e\u0441\u0435\u0434\u0435\u0439.<\/p>\n<\/li>\n<li>\n<p>\u0420\u0430\u0431\u043e\u0442\u0430 \u0441 \u0435\u0449\u0435 \u043e\u0434\u043d\u043e\u0439 \u0445\u044d\u0448-\u0442\u0430\u0431\u043b\u0438\u0446\u0435\u0439.<\/p>\n<\/li>\n<\/ul>\n<p>\u0412\u0441\u0435 \u044d\u0442\u0438 \u043b\u0438\u0448\u043d\u0438\u0435 \u0442\u0430\u043a\u0442\u044b \u043d\u0430\u043a\u0430\u043f\u043b\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u0438 \u0432\u044b\u043b\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u0432 \u0435\u0449\u0435 \u0431\u043e\u043b\u0435\u0435 \u0434\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435.<\/p>\n<h3>\u0418\u0442\u043e\u0433\u0438<\/h3>\n<p>\u0420\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435, \u043a\u043e\u043d\u0435\u0447\u043d\u043e, \u043f\u043e\u043a\u0430 \u0435\u0449\u0435 \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0441\u044b\u0440\u043e\u0435. \u0421\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0430\u044f \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u0437\u0430\u0442\u043e\u0447\u0435\u043d\u0430 \u043f\u043e\u0434 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0438 PostgreSQL, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0434\u043b\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043e\u0434\u043d\u043e\u0433\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u0430 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0438\u0441\u043a\u0430\u0442\u044c \u043e\u0431\u0445\u043e\u0434\u043d\u044b\u0435 \u043f\u0443\u0442\u0438, \u0430 \u0434\u0440\u0443\u0433\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 &#171;\u0441\u043e \u0441\u043a\u0440\u0438\u043f\u043e\u043c&#187;.<\/p>\n<p>\u041f\u0440\u0435\u0434\u0432\u043e\u0441\u0445\u0438\u0449\u0430\u044e \u0432\u043e\u043f\u0440\u043e\u0441: \u0430 \u0437\u0430\u0447\u0435\u043c \u0432\u0441\u0435 \u044d\u0442\u043e \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u043b\u043e\u0441\u044c? R&amp;D. \u041a\u0430\u043a \u044f \u0441\u043a\u0430\u0437\u0430\u043b \u0432 \u043d\u0430\u0447\u0430\u043b\u0435, \u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0449\u0438\u043a \u2014 \u0432\u0430\u0436\u043d\u0430\u044f \u0434\u0435\u0442\u0430\u043b\u044c \u0440\u0430\u0431\u043e\u0442\u044b \u0421\u0423\u0411\u0414, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u044f \u0432 \u044d\u0442\u043e\u0439 \u043e\u0431\u043b\u0430\u0441\u0442\u0438 \u043c\u043e\u0433\u0443\u0442 \u0432 \u043a\u0430\u043a\u043e\u0439-\u0442\u043e \u043c\u043e\u043c\u0435\u043d\u0442 \u043e\u0431\u0435\u0440\u043d\u0443\u0442\u044c\u0441\u044f \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u043c \u0432\u044b\u0438\u0433\u0440\u044b\u0448\u0435\u043c (\u043a\u043b\u044e\u0447\u0435\u0432\u043e\u0435 \u0441\u043b\u043e\u0432\u043e \u2014 &#171;\u043c\u043e\u0433\u0443\u0442&#187;). \u041a \u0441\u043e\u0436\u0430\u043b\u0435\u043d\u0438\u044e, \u043e\u043a\u0443\u043f\u0430\u0435\u043c\u043e\u0441\u0442\u044c \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e \u044d\u0442\u043e\u0439 \u0438\u043d\u0432\u0435\u0441\u0442\u0438\u0446\u0438\u0438 \u0441\u0435\u0439\u0447\u0430\u0441 \u043e\u0442\u0440\u0438\u0446\u0430\u0442\u0435\u043b\u044c\u043d\u0430\u044f \u2014 \u043d\u0430 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0435 \u044d\u0442\u043e\u0442 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0441\u043e\u0437\u0434\u0430\u0435\u0442 \u043f\u043b\u0430\u043d\u044b \u0438 \u043d\u0435 \u043b\u0443\u0447\u0448\u0435, \u0438 \u043d\u0435 \u0431\u044b\u0441\u0442\u0440\u0435\u0435.<\/p>\n<p>\u041f\u043e\u0434\u044b\u0442\u043e\u0436\u0438\u043c \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043a\u0438:<\/p>\n<ol>\n<li>\n<p>\u0422\u0435\u0440\u044f\u044e\u0442\u0441\u044f \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0435 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438: \u0433\u0438\u043f\u0435\u0440\u0440\u0435\u0431\u0440\u0430 \u0441\u043e\u0437\u0434\u0430\u044e\u0442\u0441\u044f \u0438\u0437 \u043f\u0440\u0435\u0434\u0438\u043a\u0430\u0442\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0430 \u0434\u0430\u043d\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u043d\u0435\u043b\u044c\u0437\u044f \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u0442\u0440\u0430\u043d\u0441\u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432 \u0433\u0438\u043f\u0435\u0440\u0440\u0435\u0431\u0440\u0430 \u0438\u0437-\u0437\u0430 \u0438\u043d\u0434\u0435\u043a\u0441\u043e\u0432 RangeTable, \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u044e\u0449\u0438\u0445 \u041d\u0415 \u043d\u0430 \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u044f (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043d\u0430 JOIN&#8217;\u044b).<\/p>\n<\/li>\n<li>\n<p>\u041d\u0435\u0441\u0432\u044f\u0437\u043d\u044b\u0435 \u043f\u043e\u0434\u0433\u0440\u0430\u0444\u044b \u0442\u0440\u0435\u0431\u0443\u044e\u0442 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0439 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438: \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u0441\u0430\u043c \u0434\u043e\u043b\u0436\u0435\u043d \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044e \u043a\u0430\u043a \u0434\u0435\u0439\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c (\u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 <code>cj_strategy<\/code>).<\/p>\n<\/li>\n<li>\n<p>\u041e\u0446\u0435\u043d\u043a\u0430 \u0441\u0442\u0440\u0430\u0434\u0430\u0435\u0442 \u0438\u0437-\u0437\u0430 \u043d\u0435\u043e\u043f\u0442\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0445 \u043f\u0435\u0440\u0432\u044b\u0445 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u0432: \u043f\u043e\u0440\u044f\u0434\u043e\u043a \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u043c\u044b\u0445 \u043f\u0430\u0440 \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u0439 \u0434\u043b\u044f JOIN&#8217;\u043e\u0432 \u0432\u0430\u0436\u0435\u043d, \u043d\u043e \u0441\u0435\u0439\u0447\u0430\u0441 \u043e\u043d \u043d\u0435 \u0441\u043e\u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0441\u044f \u0441 \u0442\u0435\u043c, \u0447\u0442\u043e \u0434\u0435\u043b\u0430\u0435\u0442 \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u0439 \u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0449\u0438\u043a.<\/p>\n<\/li>\n<li>\n<p>\u0414\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0434\u043e\u043b\u0433\u043e\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435: \u0441\u0435\u0439\u0447\u0430\u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u0439 <code>make_join_rel<\/code>, \u043d\u043e \u043e\u043d \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442 \u043b\u044c\u0432\u0438\u043d\u0443\u044e \u0434\u043e\u043b\u044e \u0432\u0440\u0435\u043c\u0435\u043d\u0438.<\/p>\n<\/li>\n<\/ol>\n<p>\u041f\u0440\u0438 \u0432\u0441\u0435\u043c \u044d\u0442\u043e\u043c \u0435\u0441\u0442\u044c \u0438 \u0445\u043e\u0440\u043e\u0448\u0430\u044f \u043d\u043e\u0432\u043e\u0441\u0442\u044c: \u0432\u0441\u0435 \u043f\u043e\u043f\u0440\u0430\u0432\u0438\u043c\u043e. \u041e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0434\u0438\u043a\u0442\u043e\u0432\u0430\u043d\u044b \u043e\u0434\u043d\u043e\u0439 \u043b\u0438\u0448\u044c \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0435\u0439, \u0442\u043e \u0435\u0441\u0442\u044c \u044d\u0442\u043e \u043d\u0435 \u043a\u0430\u043a\u0438\u0435-\u0442\u043e \u0444\u0443\u043d\u0434\u0430\u043c\u0435\u043d\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f. \u041d\u0438\u043a\u0442\u043e \u043d\u0435 \u0437\u0430\u043f\u0440\u0435\u0449\u0430\u0435\u0442 \u043d\u0430\u043c \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0441\u0432\u043e\u0439 <code>make_join_rel<\/code>, \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043f\u043e\u0434 DPhyp. \u0412 \u043a\u0440\u0430\u0439\u043d\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043f\u0440\u043e\u043f\u0430\u0442\u0447\u0438\u0442\u044c \u044f\u0434\u0440\u043e \u0438 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0442\u043e, \u0447\u0435\u0433\u043e \u043d\u0430\u043c \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u0435\u0442. \u0422\u0435\u043c \u0431\u043e\u043b\u0435\u0435 \u043c\u044b \u043d\u0430\u0448\u043b\u0438 \u043a\u0430\u043a \u043c\u0438\u043d\u0438\u043c\u0443\u043c \u043e\u0434\u0438\u043d \u0437\u0430\u043f\u0440\u043e\u0441, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u043c\u043e\u0433\u043b\u0438 \u0443\u0441\u043a\u043e\u0440\u0438\u0442\u044c \u0432 \u0441\u043e\u0442\u043d\u0438 \u0440\u0430\u0437, \u0430 \u044d\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u043e\u0442\u043a\u0440\u044b\u0442\u044c \u0446\u0435\u043b\u0443\u044e \u043e\u0431\u043b\u0430\u0441\u0442\u044c \u043f\u0440\u0438\u043c\u0435\u043d\u0438\u043c\u043e\u0441\u0442\u0438, \u0438 \u0437\u043d\u0430\u0447\u0438\u0442, \u0440\u0430\u0431\u043e\u0442\u0430 \u043f\u0440\u043e\u0434\u0435\u043b\u0430\u043d\u0430 \u043d\u0435 \u0437\u0440\u044f.<\/p>\n<p>\u0412\u0441\u0435\u043c \u0441\u043b\u043e\u043d\u0430.<\/p>\n<p>\u0421\u0441\u044b\u043b\u043a\u0438:<\/p>\n<ul>\n<li>\n<p><a href=\"https:\/\/github.com\/TantorLabs\/pg_dphyp\" rel=\"noopener noreferrer nofollow\">\u0420\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435 pg_dphyp<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/15721.courses.cs.cmu.edu\/spring2018\/papers\/16-optimizer2\/p539-moerkotte.pdf\" rel=\"noopener noreferrer nofollow\">Dynamic Programming Strikes Back<\/a> \u2014 DPhyp<\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/db.in.tum.de\/~radke\/papers\/hugejoins.pdf\" rel=\"noopener noreferrer nofollow\">Adaptive Optimization of Very Large Join Queries<\/a> \u2014 \u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043e\u0433\u0440\u043e\u043c\u043d\u044b\u0445 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432<\/p>\n<\/li>\n<\/ul>\n<\/div>\n<\/div>\n<\/div>\n<p><!----><!----><\/div>\n<p><!----><!----><br \/> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/articles\/929980\/\"> https:\/\/habr.com\/ru\/articles\/929980\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div><!--[--><!--]--><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p>\u041f\u0440\u0438\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e!<\/p>\n<p>\u0412 \u00ab\u0422\u0430\u043d\u0442\u043e\u0440 \u041b\u0430\u0431\u0441\u00bb \u044f \u0440\u0430\u0431\u043e\u0442\u0430\u044e \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u043c \u0421\u0423\u0411\u0414 \u0438 \u0437\u0430\u043a\u043e\u043d\u043e\u043c\u0435\u0440\u043d\u043e \u0443\u0432\u043b\u0435\u043a\u0430\u044e\u0441\u044c \u0431\u0430\u0437\u0430\u043c\u0438 \u0434\u0430\u043d\u043d\u044b\u0445. \u041a\u0430\u043a-\u0442\u043e \u0440\u0430\u0437 \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u043f\u0440\u043e\u043b\u0438\u0441\u0442\u044b\u0432\u0430\u043d\u0438\u044f <a href=\"https:\/\/www.redbook.io\/\" rel=\"noopener noreferrer nofollow\">\u043a\u0440\u0430\u0441\u043d\u043e\u0439 \u043a\u043d\u0438\u0433\u0438<\/a> \u0432\u043e \u043c\u043d\u0435 \u0447\u0442\u043e-\u0442\u043e \u0449\u0435\u043b\u043a\u043d\u0443\u043b\u043e, \u0438 \u044f \u0437\u0430\u0445\u043e\u0442\u0435\u043b \u0433\u043b\u0443\u0431\u0436\u0435 \u043f\u043e\u0438\u0437\u0443\u0447\u0430\u0442\u044c \u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0449\u0438\u043a. \u042f \u0443\u0433\u043b\u0443\u0431\u0438\u043b\u0441\u044f \u0432 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u044b \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0439 \u0442\u0430\u0431\u043b\u0438\u0446 \u0438 \u043d\u0430\u0442\u043a\u043d\u0443\u043b\u0441\u044f \u043d\u0430 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c DPhyp, \u043a\u043e\u0442\u043e\u0440\u044b\u0439, \u043a\u0430\u043a \u043e\u043a\u0430\u0437\u0430\u043b\u043e\u0441\u044c, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 \u043c\u043d\u043e\u0433\u0438\u0435 \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 (\u0438 \u043d\u0435 \u043e\u0447\u0435\u043d\u044c) \u0431\u0430\u0437\u044b \u0434\u0430\u043d\u043d\u044b\u0445. \u0421\u0442\u0430\u043b\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e \u2014 \u0430 \u0435\u0441\u0442\u044c \u043b\u0438 \u0442\u0430\u043a\u043e\u0435 \u0432 PostgreSQL? \u041a \u0443\u0434\u0438\u0432\u043b\u0435\u043d\u0438\u044e, \u043e\u043a\u0430\u0437\u0430\u043b\u043e\u0441\u044c \u0447\u0442\u043e \u043d\u0435\u0442. \u041d\u0443, \u0430 \u0435\u0441\u043b\u0438 \u0447\u0435\u0433\u043e-\u0442\u043e \u043d\u0435\u0442, \u043d\u0430\u0434\u043e \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0441\u0430\u043c\u0438\u043c.<\/p>\n<p>\u042d\u0442\u0430 \u0441\u0442\u0430\u0442\u044c\u044f \u043d\u0435 \u043e DPhyp \u043a\u0430\u043a \u0442\u0430\u043a\u043e\u0432\u043e\u043c, \u0430 \u043e \u0442\u043e\u043c, \u0441 \u0447\u0435\u043c \u043c\u043d\u0435 \u043f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u0441\u0442\u043e\u043b\u043a\u043d\u0443\u0442\u044c\u0441\u044f \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0433\u043e \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f \u0434\u043b\u044f PostgreSQL. \u041d\u043e \u0432\u043d\u0430\u0447\u0430\u043b\u0435 \u2014 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0435 \u0432\u0432\u0435\u0434\u0435\u043d\u0438\u0435.<\/p>\n<h3>\u0410\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u044b \u0440\u0430\u0431\u043e\u0442\u044b \u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0449\u0438\u043a\u043e\u0432 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432<\/h3>\n<p>\u041f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0449\u0438\u043a \u0432 \u0431\u0430\u0437\u0430\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u2014 \u043f\u043e\u0436\u0430\u043b\u0443\u0439, \u0441\u0430\u043c\u044b\u0439 \u0441\u043b\u043e\u0436\u043d\u044b\u0439 \u0438 \u0432\u0430\u0436\u043d\u044b\u0439 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 \u0441\u0438\u0441\u0442\u0435\u043c\u044b, \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u0435\u0441\u043b\u0438 \u043c\u044b \u0433\u043e\u0432\u043e\u0440\u0438\u043c \u043e \u0442\u0435\u0440\u0430\u0431\u0430\u0439\u0442\u0430\u0445 \u0434\u0430\u043d\u043d\u044b\u0445. \u041d\u0435\u0432\u0430\u0436\u043d\u043e, \u043d\u0430\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0431\u044b\u0441\u0442\u0440\u043e\u0435 \u0436\u0435\u043b\u0435\u0437\u043e \u0441\u0442\u043e\u0438\u0442 \u0432 \u0441\u0435\u0440\u0432\u0435\u0440\u043d\u043e\u0439: \u0435\u0441\u043b\u0438 \u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0449\u0438\u043a \u043e\u0448\u0438\u0431\u0441\u044f \u0438 \u043d\u0430\u0447\u0430\u043b \u0432\u043c\u0435\u0441\u0442\u043e \u0438\u043d\u0434\u0435\u043a\u0441\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u0441\u043a\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435, \u2014 \u0432\u0441\u0451, \u0438\u0437\u0432\u043e\u043b\u044c\u0442\u0435 \u043f\u0440\u0438\u0439\u0442\u0438 \u0437\u0430 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u043c \u0447\u0435\u0440\u0435\u0437 \u043d\u0435\u0434\u0435\u043b\u044e. \u0412 \u044d\u0442\u043e\u043c \u0441\u043b\u043e\u0436\u043d\u043e\u043c \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0435 \u043c\u043e\u0436\u043d\u043e \u0432\u044b\u0434\u0435\u043b\u0438\u0442\u044c \u044f\u0434\u0440\u043e: \u043f\u0435\u0440\u0435\u0431\u043e\u0440 JOIN&#8217;\u043e\u0432. \u041f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u0439 \u0432\u044b\u0431\u043e\u0440 \u043f\u043e\u0440\u044f\u0434\u043a\u0430 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f \u0442\u0430\u0431\u043b\u0438\u0446 \u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u043d\u0430 \u0441\u0442\u043e\u0438\u043c\u043e\u0441\u0442\u044c \u0432\u0441\u0435\u0433\u043e \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u043d\u0430\u0438\u0431\u043e\u043b\u044c\u0448\u0435\u0435 \u0432\u043b\u0438\u044f\u043d\u0438\u0435. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0432\u043e\u0442 \u0442\u0430\u043a\u043e\u0439 \u0437\u0430\u043f\u0440\u043e\u0441&#8230;<\/p>\n<pre><code class=\"sql\">SELECT * FROM t1  JOIN t2 ON t1.x = t2.x JOIN t3 ON t2.x = t3.x JOIN t4 ON t3.x = t4.x; <\/code><\/pre>\n<p>&#8230;\u0438\u043c\u0435\u0435\u0442 14 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0445 \u043a\u043e\u043c\u0431\u0438\u043d\u0430\u0446\u0438\u0439 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0439 \u0442\u0430\u0431\u043b\u0438\u0446. \u0412 \u043e\u0431\u0449\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u2014 \u044d\u0442\u043e \u0447\u0438\u0441\u043b\u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0445 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0439 \u0431\u0438\u043d\u0430\u0440\u043d\u043e\u0433\u043e \u0434\u0435\u0440\u0435\u0432\u0430 \u0438\u0437 <code>N<\/code> \u0443\u0437\u043b\u043e\u0432, \u0433\u0434\u0435 \u043f\u043e\u0434 \u0443\u0437\u043b\u0430\u043c\u0438 \u043f\u043e\u043d\u0438\u043c\u0430\u044e\u0442\u0441\u044f \u0442\u0430\u0431\u043b\u0438\u0446\u044b, <a href=\"https:\/\/ru.wikipedia.org\/wiki\/%D0%A7%D0%B8%D1%81%D0%BB%D0%B0_%D0%9A%D0%B0%D1%82%D0%B0%D0%BB%D0%B0%D0%BD%D0%B0\" rel=\"noopener noreferrer nofollow\">\u0447\u0438\u0441\u043b\u043e \u041a\u0430\u0442\u0430\u043b\u0430\u043d\u0430<\/a>, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0434\u043b\u044f 7 \u0442\u0430\u0431\u043b\u0438\u0446 \u0443\u0436\u0435 \u0440\u0430\u0432\u043d\u043e 429, \u0430 \u0434\u043b\u044f 8 \u2014 1430. \u0421\u0442\u043e\u0438\u0442 \u043b\u0438 \u0433\u043e\u0432\u043e\u0440\u0438\u0442\u044c, \u0447\u0442\u043e \u0441 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u043c\u043e\u043c\u0435\u043d\u0442\u0430 \u0447\u0438\u0441\u043b\u043e \u044d\u0442\u043e \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u043d\u0430\u0441\u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0433\u0440\u043e\u043c\u043d\u044b\u043c, \u0447\u0442\u043e \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0439\u0442\u0438 \u043e\u043f\u0442\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0439 \u043f\u043b\u0430\u043d \u043f\u0440\u043e\u0441\u0442\u044b\u043c \u043f\u0435\u0440\u0435\u0431\u043e\u0440\u043e\u043c \u043a\u043e\u043c\u0431\u0438\u043d\u0430\u0446\u0438\u0439?<\/p>\n<p>\u0422\u043e, \u043a\u0430\u043a \u043c\u044b \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u043c\u0441\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u043f\u0435\u0440\u0435\u0431\u043e\u0440, \u0438 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442 <s>\u043d\u0430\u0448 \u043b\u0430\u0433\u0435\u0440\u044c<\/s> \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0443 \u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0449\u0438\u043a\u0430: top-down \u0438\u043b\u0438 bottom-up. \u041f\u043e\u0434\u0445\u043e\u0434 top-down \u2014 \u044d\u0442\u043e \u043f\u043e\u0434\u0445\u043e\u0434 &#171;\u0441\u0432\u0435\u0440\u0445\u0443 \u0432\u043d\u0438\u0437&#187; (\u0435\u0433\u043e \u0435\u0449\u0435 \u043d\u0430\u0437\u044b\u0432\u0430\u044e\u0442 goal-oriented, \u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u043c \u043d\u0430 \u0446\u0435\u043b\u044c). \u041c\u044b \u0437\u0430\u0445\u043e\u0434\u0438\u043c \u0432 \u043a\u043e\u0440\u0435\u043d\u044c, \u043f\u043e\u043d\u0438\u043c\u0430\u0435\u043c \u0435\u0433\u043e &#171;\u0446\u0435\u043b\u044c&#187; (\u0435\u0441\u0442\u044c \u043b\u0438 \u0433\u0440\u0443\u043f\u043f\u0438\u0440\u043e\u0432\u043a\u0430 \u0438\u043b\u0438 \u0444\u0438\u043b\u044c\u0442\u0440\u0430\u0446\u0438\u044f, \u0447\u0442\u043e \u043d\u0430 \u0432\u044b\u0445\u043e\u0434\u0435 \u0438 \u0442.\u0434.) \u0438 \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0430\u043d\u0438\u0438 \u044d\u0442\u043e\u0433\u043e \u0441\u043e\u0437\u0434\u0430\u0435\u043c \u043f\u043b\u0430\u043d \u0437\u0430\u043f\u0440\u043e\u0441\u0430. \u041f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432\u043e\u043c \u0437\u0434\u0435\u0441\u044c \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0442\u043e, \u0447\u0442\u043e \u0443 \u043d\u0430\u0441 \u043d\u0430 \u0440\u0443\u043a\u0430\u0445 \u0435\u0441\u0442\u044c \u043f\u043e\u043b\u043d\u044b\u0439 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442 \u0438 \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0435\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c. \u041f\u0440\u0438\u043c\u0435\u0440\u043e\u043c \u043c\u043e\u0436\u0435\u0442 \u0441\u043b\u0443\u0436\u0438\u0442\u044c \u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0449\u0438\u043a (\u0433\u0440\u0443\u0431\u043e \u0433\u043e\u0432\u043e\u0440\u044f, \u044d\u0442\u043e \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430) cascades, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0432 Microsoft SQL Server: \u043e\u043d \u0441 \u043b\u0435\u0433\u043a\u043e\u0441\u0442\u044c\u044e \u043c\u043e\u0436\u0435\u0442 \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0430\u0442\u044c \u0443\u0437\u043b\u044b \u0433\u0440\u0430\u0444\u0430 \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u043f\u043e\u0434 GROUP-BY, \u0447\u0435\u0433\u043e \u0434\u0440\u0443\u0433\u043e\u0439 \u043f\u043e\u0434\u0445\u043e\u0434 \u0431\u0435\u0437 \u043f\u043e\u043c\u043e\u0449\u0438 \u0441\u043e \u0441\u0442\u043e\u0440\u043e\u043d\u044b \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 (\u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430 \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u0430\u0433\u0430\u0435\u0442 \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u043d\u0430\u0431\u043e\u0440 \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u0439 \u0434\u043b\u044f \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f).<\/p>\n<p>Bottom-up (&#171;\u0441\u043d\u0438\u0437\u0443 \u0432\u0432\u0435\u0440\u0445&#187;) \u2014 \u044d\u0442\u043e \u043f\u0440\u043e\u0442\u0438\u0432\u043e\u043f\u043e\u043b\u043e\u0436\u043d\u044b\u0439 \u043b\u0430\u0433\u0435\u0440\u044c, \u0433\u0434\u0435 \u0432\u043d\u0430\u0447\u0430\u043b\u0435 \u043f\u043b\u0430\u043d\u0438\u0440\u0443\u044e\u0442 \u0432\u0441\u0435 JOIN&#8217;\u044b \u0438 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0442\u043e\u043c &#171;\u043d\u0430\u0432\u0435\u0448\u0438\u0432\u0430\u044e\u0442&#187; \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0443\/\u0433\u0440\u0443\u043f\u043f\u0438\u0440\u043e\u0432\u043a\u0443 \u0438 \u0434\u0440\u0443\u0433\u0438\u0435 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u044b. \u042d\u0442\u043e\u0442 \u043f\u043e\u0434\u0445\u043e\u0434 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u0432\u043e \u043c\u043d\u043e\u0433\u0438\u0445 \u0421\u0423\u0411\u0414, \u0432\u043a\u043b\u044e\u0447\u0430\u044f PostgreSQL. \u0415\u0433\u043e \u043f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432\u043e \u2014 \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u0443\u0435\u043c\u043e\u0441\u0442\u044c, \u0442\u0430\u043a \u043a\u0430\u043a \u043e\u043d \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043e\u0433\u0440\u043e\u043c\u043d\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e JOIN&#8217;\u043e\u0432. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0432 \u0441\u0442\u0430\u0442\u044c\u0435 <a href=\"https:\/\/db.in.tum.de\/~radke\/papers\/hugejoins.pdf\" rel=\"noopener noreferrer nofollow\">Adaptive Optimization of Very Large Join Queries<\/a> \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d \u043f\u043e\u0434\u0445\u043e\u0434, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u0441 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u043c\u0438 \u0442\u044b\u0441\u044f\u0447\u0430\u043c\u0438 \u0442\u0430\u0431\u043b\u0438\u0446, \u043a\u043e\u043c\u0431\u0438\u043d\u0438\u0440\u0443\u044f \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0440\u0430\u0437\u043d\u044b\u0445 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u043e\u0432. \u0412 \u043f\u0440\u0438\u043c\u0435\u0440 \u0432 \u0441\u0442\u0430\u0442\u044c\u0435 \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442\u0441\u044f SAP, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0438\u0437-\u0437\u0430 \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0439 \u0432\u043d\u0443\u0442\u0440\u0438 \u0434\u0440\u0443\u0433\u0438\u0445 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0439 \u043c\u043e\u0436\u0435\u0442 \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0437\u0430\u043f\u0440\u043e\u0441, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0449\u0438\u0439 \u0442\u044b\u0441\u044f\u0447\u0438 \u043e\u0431\u044b\u0447\u043d\u044b\u0445 \u0442\u0430\u0431\u043b\u0438\u0446.<\/p>\n<p>\u0410\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u043e\u0432 bottom-up \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043c\u043d\u043e\u0433\u043e. \u0420\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043a\u0440\u0430\u0442\u043a\u043e \u0442\u0435, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u0432 PostgreSQL.<\/p>\n<h4>DPsize<\/h4>\n<p>\u0412\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0430 \u0440\u0430\u0441\u0441\u0432\u0435\u0442\u0430 \u0420\u0421\u0423\u0411\u0414 \u043d\u0438\u043a\u0442\u043e \u0434\u043e \u043a\u043e\u043d\u0446\u0430 \u043d\u0435 \u043f\u043e\u043d\u0438\u043c\u0430\u043b, \u043a\u0430\u043a \u0432\u0441\u0435 \u0434\u043e\u043b\u0436\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c, \u0438 \u0434\u0435\u043b\u0430\u043b\u0438 \u043a\u0442\u043e \u043a\u0430\u043a \u0443\u043c\u0435\u0435\u0442. \u0422\u043e\u0433\u0434\u0430 \u043f\u043e\u044f\u0432\u0438\u043b\u0441\u044f \u043f\u0435\u0440\u0432\u044b\u0439 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0434\u043b\u044f \u043f\u043e\u0438\u0441\u043a\u0430 \u043f\u043e\u0440\u044f\u0434\u043a\u0430 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0439. \u0421\u0435\u0433\u043e\u0434\u043d\u044f \u0432\u0441\u0435 (\u043a\u0430\u043a \u043c\u0438\u043d\u0438\u043c\u0443\u043c, \u0432 \u0441\u0442\u0430\u0442\u044c\u044f\u0445) \u043d\u0430\u0437\u044b\u0432\u0430\u044e\u0442 \u0435\u0433\u043e DPsize.<\/p>\n<blockquote>\n<p>\u0412\u0441\u043f\u043e\u043c\u043d\u0438\u043c, \u0447\u0442\u043e \u0442\u0430\u043a\u043e\u0435 \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u0435. \u041d\u0430 \u0440\u0430\u0431\u043e\u0442\u0435 \u0441 \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u044f\u043c\u0438 \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0430 \u0440\u0435\u043b\u044f\u0446\u0438\u043e\u043d\u043d\u0430\u044f \u0430\u043b\u0433\u0435\u0431\u0440\u0430, \u0438 \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u0435 \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0437\u0432\u0430\u0442\u044c \u043f\u0440\u043e\u0441\u0442\u044b\u043c \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u043e\u043c \u0434\u0430\u043d\u043d\u044b\u0445 \u0441\u043e \u0441\u0432\u043e\u0435\u0439 \u0441\u0445\u0435\u043c\u043e\u0439 (\u0430\u0442\u0440\u0438\u0431\u0443\u0442\u0430\u043c\u0438). \u0421\u0430\u043c\u044b\u0439 \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u043f\u0440\u0438\u043c\u0435\u0440 \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u044f \u2013 \u0442\u0430\u0431\u043b\u0438\u0446\u0430, \u043d\u043e \u0434\u0440\u0443\u0433\u043e\u0439 \u0432\u0430\u0436\u043d\u044b\u0439 \u043f\u0440\u0438\u043c\u0435\u0440 \u2014 \u044d\u0442\u043e <code>JOIN<\/code>, \u0442.\u043a. \u043f\u043e \u0444\u0430\u043a\u0442\u0443 \u043e\u043d \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f\u043c (\u0434\u0430\u0435\u0442 \u043a\u043e\u0440\u0442\u0435\u0436\u0438 \u0438 \u0435\u0441\u0442\u044c \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u044b). \u0414\u0430\u043b\u0435\u0435 \u044f \u0431\u0443\u0434\u0443 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0442\u0435\u0440\u043c\u0438\u043d &#171;\u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u0435&#187;, \u043d\u043e \u0442\u0430\u043c, \u0433\u0434\u0435 \u0432\u0430\u0436\u043d\u043e \u043f\u043e\u0434\u0447\u0435\u0440\u043a\u043d\u0443\u0442\u044c \u0440\u0430\u0437\u043b\u0438\u0447\u0438\u0435, \u0431\u0443\u0434\u0443 \u0433\u043e\u0432\u043e\u0440\u0438\u0442\u044c &#171;\u0442\u0430\u0431\u043b\u0438\u0446\u0430&#187;.<\/p>\n<\/blockquote>\n<p>\u0418\u0434\u0435\u044f DPsize \u043f\u0440\u043e\u0441\u0442\u0430: \u0447\u0442\u043e\u0431\u044b \u0441\u043e\u0437\u0434\u0430\u0442\u044c JOIN \u0438\u0437 <code>i<\/code> \u0442\u0430\u0431\u043b\u0438\u0446 \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u0439, \u043d\u0443\u0436\u043d\u043e \u0441\u043e\u0435\u0434\u0438\u043d\u0438\u0442\u044c \u0434\u0440\u0443\u0433\u0438\u0435 \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432 \u0441\u0443\u043c\u043c\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u0442\u0430\u0431\u043b\u0438\u0446 \u0434\u0430\u0434\u0443\u0442 \u044d\u0442\u043e\u0442 <code>i<\/code>. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0434\u043b\u044f <code>4<\/code> \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0441\u043e\u0435\u0434\u0438\u043d\u0438\u0442\u044c <code>1<\/code> \u0438 <code>3<\/code>, <code>2<\/code> \u0438 <code>2<\/code>. \u0421\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u0432 \u044d\u0442\u043e\u043c \u0438 \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435, \u043a\u043e\u0433\u0434\u0430 \u043e\u0442\u0432\u0435\u0442 \u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e \u0448\u0430\u0433\u0430 \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u043e\u0442 \u043e\u0442\u0432\u0435\u0442\u0430 \u043f\u0440\u043e\u0448\u043b\u044b\u0445, \u043d\u0443 \u0430 \u0431\u0430\u0437\u043e\u0439 \u0432\u044b\u0441\u0442\u0443\u043f\u0430\u044e\u0442 \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u044f \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u043c <code>1<\/code>, \u0442\u043e \u0435\u0441\u0442\u044c \u043e\u0431\u044b\u0447\u043d\u044b\u0435 \u0442\u0430\u0431\u043b\u0438\u0446\u044b. \u0410\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u043d\u0435\u043f\u043b\u043e\u0445\u043e \u0441\u0435\u0431\u044f \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u043d\u0430 OLTP-\u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0435, \u043a\u043e\u0433\u0434\u0430 \u0442\u0430\u0431\u043b\u0438\u0446 \u043c\u0430\u043b\u043e, \u0438 \u0434\u0430\u0435\u0442 \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043e\u043f\u0442\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0435 \u043f\u043b\u0430\u043d\u044b \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432, \u0430 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u043d\u0430\u0447\u0438\u043d\u0430\u044e\u0442\u0441\u044f, \u043a\u043e\u0433\u0434\u0430 \u0442\u0430\u0431\u043b\u0438\u0446 \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u043c\u043d\u043e\u0433\u043e.<\/p>\n<p>\u041a\u0430\u043a \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u043c\u0435\u0442\u0438\u0442\u044c, \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u044d\u0442\u043e\u0433\u043e \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430 \u2014 \u044d\u043a\u0441\u043f\u043e\u043d\u0435\u043d\u0446\u0438\u0430\u043b\u044c\u043d\u0430\u044f, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u043d\u0430 \u043a\u0430\u0436\u0434\u043e\u043c \u043f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u043c \u0448\u0430\u0433\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u0435\u0449\u0435 \u0431\u043e\u043b\u044c\u0448\u0435 \u043f\u0430\u0440 \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u0439. \u0420\u0430\u0437\u043d\u044b\u0435 \u0421\u0423\u0411\u0414 \u0431\u043e\u0440\u044e\u0442\u0441\u044f \u0441 \u044d\u0442\u0438\u043c \u043f\u043e-\u0440\u0430\u0437\u043d\u043e\u043c\u0443, \u0432 PostgreSQL \u0441\u0442\u0430\u043b\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u0440\u0443\u0433\u043e\u0439 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c.<\/p>\n<h4>GEQO<\/h4>\n<p>GEQO (Genetic Query Optimizer) \u2014 \u044d\u0442\u043e \u0433\u0435\u043d\u0435\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u043f\u043e\u0438\u0441\u043a\u0430 \u043e\u043f\u0442\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043f\u043b\u0430\u043d\u0430 \u0437\u0430\u043f\u0440\u043e\u0441\u0430. \u0415\u0441\u043b\u0438 \u0432\u044b \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0435\u0442\u0435 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0432 PostgreSQL \u0437\u0430\u043f\u0440\u043e\u0441 \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u043d\u0430 12 \u0442\u0430\u0431\u043b\u0438\u0446, \u0430 \u043f\u043e\u0442\u043e\u043c \u043d\u0430 13, \u0442\u043e \u0443\u0434\u0438\u0432\u0438\u0442\u0435\u0441\u044c, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0437\u0430\u0442\u0440\u0430\u0447\u0435\u043d\u043d\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u0441\u043d\u0438\u0437\u0438\u043b\u043e\u0441\u044c \u0441 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u0441\u0435\u043a\u0443\u043d\u0434 \u0434\u043e \u043f\u043e\u0447\u0442\u0438 <em>\u0434\u0435\u0441\u044f\u0442\u0438 \u043c\u0438\u043b\u043b\u0438\u0441\u0435\u043a\u0443\u043d\u0434<\/em>. \u041f\u043e\u0447\u0435\u043c\u0443? \u0414\u0435\u043b\u043e \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u044d\u0442\u043e \u0440\u0430\u043d\u0434\u043e\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c, \u0435\u0433\u043e \u0440\u0430\u0431\u043e\u0442\u0443 \u043c\u043e\u0436\u043d\u043e \u043e\u043f\u0438\u0441\u0430\u0442\u044c \u0442\u0430\u043a: \u0432\u043d\u0430\u0447\u0430\u043b\u0435 \u0441\u0442\u0440\u043e\u0438\u043c <em>\u0445\u043e\u0442\u044c \u043a\u0430\u043a\u043e\u0439-\u043d\u0438\u0431\u0443\u0434\u044c<\/em> \u043f\u043b\u0430\u043d \u0437\u0430\u043f\u0440\u043e\u0441\u0430, \u0430 \u0437\u0430\u0442\u0435\u043c \u043f\u0440\u043e\u0432\u043e\u0434\u0438\u043c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0439 (\u044d\u0442\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442\u0441\u044f \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0435\u0439), \u0432 \u043a\u0430\u0436\u0434\u043e\u0439 \u0438\u0437 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u043e \u043c\u0435\u043d\u044f\u0435\u043c \u043a\u0430\u043a\u0438\u0435-\u043d\u0438\u0431\u0443\u0434\u044c \u0443\u0437\u043b\u044b, \u0438 \u0432 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0443\u044e \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u044e \u0438\u0434\u0435\u0442 \u043f\u043b\u0430\u043d \u0441 \u043b\u0443\u0447\u0448\u0435\u0439 \u0441\u0442\u043e\u0438\u043c\u043e\u0441\u0442\u044c\u044e. \u041e\u0442\u0441\u044e\u0434\u0430 \u0438 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 &#171;\u0433\u0435\u043d\u0435\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439&#187; \u0432\u0432\u0438\u0434\u0443 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u0432 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435 \u043f\u043e\u043a\u043e\u043b\u0435\u043d\u0438\u0435 (\u0438\u0442\u0435\u0440\u0430\u0446\u0438\u044e) \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u044f\u0442 \u0441\u0438\u043b\u044c\u043d\u0435\u0439\u0448\u0438\u0435 (\u0442\u043e \u0435\u0441\u0442\u044c \u0432 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u2014 \u0441\u0430\u043c\u044b\u0435 \u0434\u0435\u0448\u0435\u0432\u044b\u0435).<\/p>\n<h3>DPhyp<\/h3>\n<p>\u041f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u043c \u043a \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u0442\u0435\u043c\u0435 \u2014 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0443 DPhyp. DPhyp \u2014 \u044d\u0442\u043e \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u0431\u043e\u0440\u0430 JOIN&#8217;\u043e\u0432, \u0435\u0433\u043e \u043e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u0438\u0434\u0435\u044f \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u0441\u0430\u043c \u0437\u0430\u043f\u0440\u043e\u0441 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0443\u043a\u0430\u0437\u0430\u043d\u0438\u044f \u043d\u0430 \u0442\u043e, \u043a\u0430\u043a \u0434\u043e\u043b\u0436\u043d\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442\u044c \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435 \u0442\u0430\u0431\u043b\u0438\u0446. \u0422\u0430\u043a \u043f\u043e\u0447\u0435\u043c\u0443 \u0431\u044b \u0435\u0433\u043e \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c? \u041e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u2014 \u0432 \u0441\u0430\u043c\u043e\u043c \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0438 \u0437\u0430\u043f\u0440\u043e\u0441\u0430. \u0420\u0430\u043d\u0435\u0435 \u044f \u0443\u043f\u043e\u043c\u044f\u043d\u0443\u043b, \u0447\u0442\u043e \u0437\u0430\u043f\u0440\u043e\u0441 \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0432 \u0432\u0438\u0434\u0435 \u0433\u0440\u0430\u0444\u0430, \u043d\u043e \u043c\u043e\u0436\u043d\u043e \u043b\u0438 \u0442\u0430\u043a \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0434\u043b\u044f \u0446\u0435\u043b\u0435\u0439 \u043f\u0435\u0440\u0435\u0431\u043e\u0440\u0430 JOIN&#8217;\u043e\u0432? \u0427\u0442\u043e\u0431\u044b \u043f\u043e\u043d\u044f\u0442\u044c, \u0432 \u0447\u0435\u043c \u0442\u0440\u0443\u0434\u043d\u043e\u0441\u0442\u044c, \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440 \u0438\u0437 \u0441\u0442\u0430\u0442\u044c\u0438:<\/p>\n<pre><code class=\"sql\">SELECT * FROM R1, R2, R3, R4, R5, R6 WHERE R1.x = R2.x AND R2.x = R3.x AND R4.x = R5.x AND R5.x = R6.x AND       R1.x + R2.x + R3.x = R4.x + R5.x + R6.x <\/code><\/pre>\n<p>\u0414\u0430, \u0432\u0438\u0434\u0438\u043c, \u0447\u0442\u043e \u0435\u0441\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e <em>\u044f\u0432\u043d\u043e<\/em> \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u043d\u044b\u0445 \u043c\u0435\u0436\u0434\u0443 \u0441\u043e\u0431\u043e\u0439 \u0442\u0430\u0431\u043b\u0438\u0446 \u2014 \u0434\u043b\u044f \u043d\u0438\u0445 \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0440\u0435\u0431\u0440\u0430 \u0432 \u043d\u0430\u0448\u0435\u043c \u0433\u0440\u0430\u0444\u0435 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, <code>R1 - R2<\/code>), \u043d\u043e \u0447\u0442\u043e \u0434\u0435\u043b\u0430\u0442\u044c \u0441 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u043c \u043f\u0440\u0435\u0434\u0438\u043a\u0430\u0442\u043e\u043c, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e \u0444\u0430\u043a\u0442\u0443 \u0441\u043e\u0435\u0434\u0438\u043d\u044f\u0435\u0442 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0430 \u0442\u0430\u0431\u043b\u0438\u0446? \u042d\u0442\u0443 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443 \u0438 \u0440\u0435\u0448\u0430\u0435\u0442 DPhyp \u2014 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f (DP), \u043e\u0441\u043d\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043d\u0430 <em>\u0433\u0438\u043f\u0435\u0440\u0433\u0440\u0430\u0444\u0430\u0445<\/em> (hyp \u2014 hypergraph). \u041f\u0443\u0433\u0430\u0442\u044c\u0441\u044f \u043d\u0435 \u0441\u0442\u043e\u0438\u0442, \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u0430\u0433\u0430\u044e, \u0447\u0442\u043e \u0432\u044b \u0437\u043d\u0430\u043a\u043e\u043c\u044b \u0441 \u043e\u0431\u044b\u0447\u043d\u044b\u043c \u0433\u0440\u0430\u0444\u043e\u043c \u2014 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e\u043c \u0443\u0437\u043b\u043e\u0432, \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u043d\u044b\u0445 \u043c\u0435\u0436\u0434\u0443 \u0441\u043e\u0431\u043e\u0439 \u0440\u0435\u0431\u0440\u0430\u043c\u0438, \u0430 \u0432\u043e\u0442 \u0433\u0438\u043f\u0435\u0440\u0433\u0440\u0430\u0444 \u2014 \u044d\u0442\u043e \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u0433\u0438\u043f\u0435\u0440\u0443\u0437\u043b\u043e\u0432, \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u043d\u044b\u0445 \u043c\u0435\u0436\u0434\u0443 \u0441\u043e\u0431\u043e\u0439 \u0433\u0438\u043f\u0435\u0440\u0440\u0435\u0431\u0440\u0430\u043c\u0438:<\/p>\n<ul>\n<li>\n<p>\u0433\u0438\u043f\u0435\u0440\u0443\u0437\u0435\u043b (hypernode) \u2014 \u044d\u0442\u043e <em>\u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e<\/em> \u043e\u0431\u044b\u0447\u043d\u044b\u0445 <em>\u0443\u0437\u043b\u043e\u0432;<\/em><\/p>\n<\/li>\n<li>\n<p>\u0433\u0438\u043f\u0435\u0440\u0440\u0435\u0431\u0440\u043e (hyperedge) \u2014 \u044d\u0442\u043e \u0440\u0435\u0431\u0440\u043e, \u0441\u043e\u0435\u0434\u0438\u043d\u044f\u044e\u0449\u0435\u0435 2 <em>\u0433\u0438\u043f\u0435\u0440\u0443\u0437\u043b\u0430<\/em>.<\/p>\n<\/li>\n<\/ul>\n<p>\u0412 \u0437\u0430\u043f\u0440\u043e\u0441\u0435 \u0438\u0437 \u043f\u0440\u0438\u043c\u0435\u0440\u0430 \u0443 \u043d\u0430\u0441 \u0438\u043c\u0435\u044e\u0442\u0441\u044f \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0433\u0438\u043f\u0435\u0440\u0440\u0435\u0431\u0440\u0430:<\/p>\n<ol>\n<li>\n<p><code>{R1} - {R2}<\/code><\/p>\n<\/li>\n<li>\n<p><code>{R2} - {R3}<\/code><\/p>\n<\/li>\n<li>\n<p><code>{R4} - {R5}<\/code><\/p>\n<\/li>\n<li>\n<p><code>{R5} - {R6}<\/code><\/p>\n<\/li>\n<li>\n<p><code>{R1, R2, R3} - {R4, R5, R6}<\/code><\/p>\n<\/li>\n<\/ol>\n<p>\u0415\u0441\u043b\u0438 \u0432 \u0433\u0438\u043f\u0435\u0440\u0443\u0437\u043b\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u043d\u043e \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u0435, \u0442\u043e \u0435\u0433\u043e \u043d\u0430\u0437\u044b\u0432\u0430\u044e\u0442 <em>\u043f\u0440\u043e\u0441\u0442\u044b\u043c \u0433\u0438\u043f\u0435\u0440\u0443\u0437\u043b\u043e\u043c<\/em>. \u0410\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u043e \u0435\u0441\u043b\u0438 \u0433\u0438\u043f\u0435\u0440\u0440\u0435\u0431\u0440\u043e \u0441\u043e\u0435\u0434\u0438\u043d\u044f\u0435\u0442 \u0434\u0432\u0430 \u043f\u0440\u043e\u0441\u0442\u044b\u0445 \u0433\u0438\u043f\u0435\u0440\u0443\u0437\u043b\u0430, \u0442\u043e \u044d\u0442\u043e <em>\u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u0433\u0438\u043f\u0435\u0440\u0443\u0437\u0435\u043b<\/em>. \u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u043f\u0435\u0440\u0432\u044b\u0435 \u0447\u0435\u0442\u044b\u0440\u0435 \u0438\u0437 \u043f\u0435\u0440\u0435\u0447\u043d\u044f \u2014\u043f\u0440\u043e\u0441\u0442\u044b\u0435 \u0433\u0438\u043f\u0435\u0440\u0440\u0435\u0431\u0440\u0430.<\/p>\n<p>\u0427\u0442\u043e\u0431\u044b \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043f\u043b\u0430\u043d \u0434\u043b\u044f \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0430 \u0438\u0437 <code>i<\/code> \u0443\u0437\u043b\u043e\u0432, \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u043e\u0431\u043e\u0439\u0442\u0438 \u0443\u0436\u0435 \u043d\u0435 \u0432\u0441\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0435 \u043f\u0430\u0440\u044b, \u0434\u0430\u044e\u0449\u0438\u0435 <code>i<\/code> \u0432 \u0441\u0443\u043c\u043c\u0435, \u0430 \u0432\u0441\u0435 \u043f\u0430\u0440\u044b \u0433\u0438\u043f\u0435\u0440\u0443\u0437\u043b\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432 \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0438 \u0434\u0430\u044e\u0442 \u0442\u043e \u0436\u0435 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e. \u0422\u0430\u043a\u0430\u044f \u043f\u0430\u0440\u0430 \u2014 \u044d\u0442\u043e \u043f\u0430\u0440\u0430 \u0438\u0437 \u0434\u0432\u0443\u0445 \u043d\u0435\u043f\u0435\u0440\u0435\u0441\u0435\u043a\u0430\u044e\u0449\u0438\u0445\u0441\u044f \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432: <code>connected subgraph<\/code> (csg, \u043f\u043e\u0434\u0433\u0440\u0430\u0444) \u0438 <code>connected complement<\/code> (cmp, \u0434\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435). \u042d\u0442\u0438 \u0430\u0431\u0431\u0440\u0435\u0432\u0438\u0430\u0442\u0443\u0440\u044b \u0431\u0443\u0434\u0443\u0442 \u0447\u0430\u0441\u0442\u043e \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u0442\u044c\u0441\u044f \u0432 \u0441\u0442\u0430\u0442\u044c\u0435.<\/p>\n<p>\u0427\u0442\u043e\u0431\u044b \u0432\u0441\u0435 \u0437\u0430\u0440\u0430\u0431\u043e\u0442\u0430\u043b\u043e \u043e\u043f\u0442\u0438\u043c\u0430\u043b\u044c\u043d\u043e, \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0432\u0432\u0435\u0441\u0442\u0438 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0435 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0435 \u2014 \u043f\u043e\u0440\u044f\u0434\u043e\u043a \u0443\u0437\u043b\u043e\u0432. \u041d\u0430\u0434 \u0443\u0437\u043b\u0430\u043c\u0438 (\u0442.\u0435. \u0442\u0430\u0431\u043b\u0438\u0446\u0430\u043c\u0438) \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u0435 \u043f\u043e\u0440\u044f\u0434\u043a\u0430, \u0433\u0440\u0443\u0431\u043e \u0433\u043e\u0432\u043e\u0440\u044f, \u043e\u043d\u0438 \u0434\u043e\u043b\u0436\u043d\u044b \u0431\u044b\u0442\u044c \u043f\u0440\u043e\u043d\u0443\u043c\u0435\u0440\u043e\u0432\u0430\u043d\u044b (\u043d\u0443\u043c\u0435\u0440\u0430\u0446\u0438\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0447\u0430\u0449\u0435 \u0432\u0441\u0435\u0433\u043e) \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u0442\u043e\u043c \u043c\u044b \u043c\u043e\u0433\u043b\u0438 \u0438\u0445 \u0441\u0440\u0430\u0432\u043d\u0438\u0442\u044c \u0438 \u043e\u0442\u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c. \u0427\u0442\u043e\u0431\u044b \u043f\u043e\u043d\u044f\u0442\u044c \u0437\u0430\u0447\u0435\u043c, \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u044f\u0434\u0440\u043e \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430 \u2014 \u0441\u043e\u0441\u0435\u0434\u0441\u0442\u0432\u043e.<\/p>\n<p>\u0412 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u0440\u0430\u0431\u043e\u0442\u044b \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430 \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0430 \u043e\u0442 \u043e\u0434\u043d\u043e\u0433\u043e \u0433\u0438\u043f\u0435\u0440\u0443\u0437\u043b\u0430 \u043a \u0434\u0440\u0443\u0433\u043e\u043c\u0443 \u043c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u0441\u043e\u0441\u0435\u0434\u0435\u0439 (neighborhood). \u0412 \u0441\u0442\u0430\u0442\u044c\u0435 \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u043c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435, \u043d\u043e \u043f\u0440\u043e\u0449\u0435 \u0432\u0441\u0435\u0433\u043e \u0441\u043a\u0430\u0437\u0430\u0442\u044c, \u0447\u0442\u043e \u0441\u043e\u0441\u0435\u0434\u0438 \u0434\u043b\u044f \u043a\u0430\u043a\u043e\u0433\u043e-\u043b\u0438\u0431\u043e \u0433\u0438\u043f\u0435\u0440\u0443\u0437\u043b\u0430 \u2014 \u044d\u0442\u043e \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u0434\u0440\u0443\u0433\u0438\u0445 \u0434\u043e\u0441\u0442\u0438\u0436\u0438\u043c\u044b\u0445 \u0443\u0437\u043b\u043e\u0432. \u0422\u0430\u043a\u0436\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f, \u0447\u0442\u043e\u0431\u044b \u044d\u0442\u043e \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u0431\u044b\u043b\u043e \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u043c, \u0432 \u043f\u0440\u043e\u0442\u0438\u0432\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u043e\u0434\u043d\u0438 \u0438 \u0442\u0435 \u0436\u0435 \u0443\u0437\u043b\u044b \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0440\u0430\u0437. \u0412\u043e\u0442 \u0442\u0443\u0442 \u0438 \u043d\u0443\u0436\u0435\u043d \u043f\u043e\u0440\u044f\u0434\u043e\u043a \u2014 \u043a\u043e\u0433\u0434\u0430 \u0434\u043b\u044f \u043d\u0430\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u044f \u0441\u043e\u0441\u0435\u0434\u0435\u0439 \u043c\u044b \u043e\u0431\u0445\u043e\u0434\u0438\u043c \u0440\u0435\u0431\u0440\u0430, \u0442\u043e \u0432 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0442\u043e\u043b\u044c\u043a\u043e <em>\u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u0442\u0435\u043b\u044f<\/em> \u0433\u0438\u043f\u0435\u0440\u0443\u0437\u043b\u0430, \u0435\u0433\u043e <em>\u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442<\/em>. \u0414\u0430\u043b\u044c\u0448\u0435 \u043d\u0443\u0436\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c, \u0447\u0442\u043e \u0434\u0440\u0443\u0433\u0438\u0435 \u0440\u0435\u0431\u0440\u0430 \u043d\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442 \u0443\u0436\u0435 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0435 \u0443\u0437\u043b\u044b. \u041f\u043e\u0441\u043b\u0435\u0434\u043d\u044f\u044f \u0432\u0430\u0436\u043d\u0430\u044f \u0434\u0435\u0442\u0430\u043b\u044c \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430 \u2014 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u043e\u0435 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e (excluded set). \u0412 DPsize \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438 \u0438\u0442\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u043e \u0434\u043e\u043f\u043e\u043b\u043d\u044f\u044e\u0449\u0438\u043c \u043f\u0430\u0440\u0430\u043c \u043c\u044b \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u043c \u043d\u0435 \u0441 0, \u0430 \u0441\u043e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0433\u043e \u0438\u043d\u0434\u0435\u043a\u0441\u0430, \u0438\u043b\u0438 \u0432 \u043f\u0440\u043e\u0442\u0438\u0432\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043f\u043e\u043f\u044b\u0442\u0430\u0435\u043c\u0441\u044f \u0441\u043e\u0435\u0434\u0438\u043d\u0438\u0442\u044c \u0441\u0435\u0431\u044f \u0441 \u0441\u043e\u0431\u043e\u0439 \u0436\u0435, \u0430 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u0430\u0440\u044b \u2014 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0434\u0432\u0430\u0436\u0434\u044b. \u0417\u0434\u0435\u0441\u044c \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0442\u0430 \u0436\u0435 \u0438\u0434\u0435\u044f, \u043c\u044b \u0432\u0435\u0434\u0435\u043c \u0443\u0447\u0435\u0442 \u0443\u0437\u043b\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0435 \u0441\u0442\u043e\u0438\u0442 \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0442\u044c (\u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u044b\u0445) \u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c \u044d\u0442\u043e \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0432\u0435\u0437\u0434\u0435, \u0434\u0430\u0436\u0435 \u043f\u0440\u0438 \u043d\u0430\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u0438 \u0441\u043e\u0441\u0435\u0434\u0435\u0439. \u0411\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f \u044d\u0442\u043e\u043c\u0443 \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043d\u0435 \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0442\u044c \u043e\u0434\u043d\u043e \u0438 \u0442\u043e \u0436\u0435 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u0434\u0432\u0430\u0436\u0434\u044b.<\/p>\n<p>\u041e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u043b\u043e\u0433\u0438\u043a\u0430 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430 \u0432 \u0441\u0442\u0430\u0442\u044c\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0430 \u043f\u044f\u0442\u044c\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u044f\u043c\u0438, \u0430 \u044f\u0434\u0440\u043e \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430 \u0432\u043a\u0440\u0430\u0442\u0446\u0435 \u043c\u043e\u0436\u043d\u043e \u043e\u043f\u0438\u0441\u0430\u0442\u044c \u0442\u0430\u043a: \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u043d\u0430\u0439\u0442\u0438 csg-cmp \u043f\u0430\u0440\u0443, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0432 \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0438 \u0434\u0430\u0435\u0442 \u0432\u0435\u0441\u044c \u0437\u0430\u043f\u0440\u043e\u0441, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043f\u043e\u0438\u0441\u043a\u0430 \u0441\u043e\u0441\u0435\u0434\u0435\u0439 \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u043e\u0447\u0435\u0440\u0435\u0434\u043d\u043e\/\u0440\u0435\u043a\u0443\u0440\u0441\u0438\u0432\u043d\u043e \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u0442\u044c\u0441\u044f csg \u0438 cmp. \u0412\u043e\u043f\u0440\u043e\u0441 \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u0442\u043e\u043c, \u0441 \u0447\u0435\u0433\u043e \u043d\u0430\u0447\u0430\u0442\u044c. \u041e\u0442\u0432\u0435\u0442 \u0437\u0434\u0435\u0441\u044c \u0442\u0430\u043a\u043e\u0439 \u2014 \u043c\u044b \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u043c \u0438\u0442\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043f\u043e \u0432\u0441\u0435\u043c \u0443\u0437\u043b\u0430\u043c \u043d\u0430\u0447\u0438\u043d\u0430\u044f <em>\u0441 \u043a\u043e\u043d\u0446\u0430<\/em>, \u0430 \u043f\u0440\u0438 \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u043c \u0432\u044b\u0437\u043e\u0432\u0435 \u0432 <em>excluded<\/em> \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c \u0432\u0441\u0435 \u0443\u0437\u043b\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u0435\u043d\u044c\u0448\u0435 \u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e. \u0412 \u0438\u0442\u043e\u0433\u0435 \u043c\u044b \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u043c \u0441 \u043f\u0440\u043e\u0441\u0442\u043e\u0433\u043e \u0433\u0438\u043f\u0435\u0440\u0443\u0437\u043b\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0438\u043a\u0442\u043e \u043d\u0435 \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u043b, \u0430 \u0437\u0430\u0442\u0435\u043c \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u0432\u043d\u043e \u0435\u0433\u043e \u0440\u0430\u0441\u0448\u0438\u0440\u044f\u0435\u043c \u0438 \u043d\u0430\u0445\u043e\u0434\u0438\u043c cmp \u0434\u043b\u044f \u043d\u0435\u0433\u043e \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0441\u043e\u0441\u0435\u0434\u0435\u0439.<\/p>\n<p>\u0421\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u0442\u0435\u043f\u0435\u0440\u044c \u043d\u0435\u0442\u0440\u0443\u0434\u043d\u043e \u043f\u043e\u043d\u044f\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u0438:<\/p>\n<ul>\n<li>\n<p><code>Solve<\/code> \u2014 \u0432\u0445\u043e\u0434\u043d\u0430\u044f \u0442\u043e\u0447\u043a\u0430 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430. \u0418\u0442\u0435\u0440\u0438\u0440\u0443\u0435\u043c\u0441\u044f \u043f\u043e \u043f\u0440\u043e\u0441\u0442\u044b\u043c \u0433\u0438\u043f\u0435\u0440\u0443\u0437\u043b\u0430\u043c \u0441 \u043a\u043e\u043d\u0446\u0430 \u0438 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u043c <code>EmitCsg<\/code> \u0438 <code>EnumerateCsgRecursive<\/code>;<\/p>\n<\/li>\n<li>\n<p><code>EmitCsg<\/code> \u2014 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u0443\u0436\u0435 <em>\u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439<\/em> csg, \u0434\u043b\u044f \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043d\u0430\u0445\u043e\u0434\u0438\u0442 \u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0438\u0439 cmp, \u0430 \u0437\u0430\u0442\u0435\u043c \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442 <code>EmitCsgCmp<\/code> \u0438\/\u0438\u043b\u0438 <code>EnumerateCmpRecursive<\/code>;<\/p>\n<\/li>\n<li>\n<p><code>EmitCsgRecursive<\/code> \u2014 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 csg, \u043a\u043e\u0442\u043e\u0440\u044b\u0439<\/p>\n<\/li>\n<\/ul>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-468230","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/468230","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=468230"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/468230\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=468230"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=468230"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=468230"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}