{"id":286243,"date":"2017-05-12T16:45:03","date_gmt":"2017-05-12T12:45:03","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=286243"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=286243","title":{"rendered":"\u0420\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043c\u0438\u043d\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438 \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u043c\u0435\u0442\u043e\u0434\u043e\u043c \u041a\u0432\u0430\u0439\u043d\u0430\\\u041c\u0430\u043a-\u041a\u043b\u0430\u0441\u043a\u0438"},"content":{"rendered":"<p>\u041a \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u0438\u044e \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u0435\u0442\u0441\u044f \u043e\u0434\u043d\u0430 \u0438\u0437 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0445 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0439 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430 \u043c\u0438\u043d\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438 \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0438\u0445 (\u0431\u0443\u043b\u0435\u0432\u044b\u0445) \u0444\u0443\u043d\u043a\u0446\u0438\u0439 (\u041b\u0424) \u0437\u0430\u0434\u0430\u043d\u043d\u044b\u0445 \u0432 \u0432\u0438\u0434\u0435 \u0441\u043e\u0432\u0435\u0440\u0448\u0435\u043d\u043d\u043e\u0439 \u0434\u0438\u0437\u044a\u044e\u043d\u043a\u0442\u0438\u0432\u043d\u043e\u0439 \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e\u0439 \u0444\u043e\u0440\u043c\u044b (\u0421\u0414\u041d\u0424) \u043c\u0435\u0442\u043e\u0434\u043e\u043c \u041a\u0432\u0430\u0439\u043d\u0430\\\u041c\u0430\u043a-\u041a\u043b\u0430\u0441\u043a\u0438 (\u0434\u0430\u043b\u0435\u0435 \u043f\u0440\u043e\u0441\u0442\u043e \u041c\u0430\u043a-\u041a\u043b\u0430\u0441\u043a\u0438) \u0438 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b, \u0432\u044b\u044f\u0432\u043b\u0435\u043d\u043d\u044b\u0435 \u043f\u0440\u0438 \u0435\u0451 \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438. \u0412 \u0438\u0441\u0441\u043b\u0435\u0434\u0443\u0435\u043c\u043e\u043c \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0435 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u041c\u0430\u043a-\u041a\u043b\u0430\u0441\u043a\u0438 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d \u043d\u0430 \u044f\u0437\u044b\u043a\u0435 C# \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c Generic-\u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 .NET.<\/p>\n<p>  \u0425\u043e\u0442\u0435\u043b\u043e\u0441\u044c \u0431\u044b \u043e\u0442\u043c\u0435\u0442\u0438\u0442\u044c, \u0447\u0442\u043e \u0437\u0430\u0434\u0430\u0447\u0430 \u043c\u0438\u043d\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438 \u041b\u0424, \u043f\u043e \u043c\u043e\u0435\u043c\u0443 \u043c\u043d\u0435\u043d\u0438\u044e, \u043d\u0435\u0437\u0430\u0441\u043b\u0443\u0436\u0435\u043d\u043d\u043e \u043e\u0431\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0441\u0442\u043e\u0440\u043e\u043d\u043e\u0439 \u0432 \u0442\u0435\u043c\u0430\u0442\u0438\u043a\u0435 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u043e\u0432 \u043c\u0430\u0448\u0438\u043d\u043d\u043e\u0433\u043e \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u044f, \u0442. \u043a. \u043f\u043e \u0441\u0432\u043e\u0435\u043c\u0443 \u0441\u043c\u044b\u0441\u043b\u0443 \u043e\u043d\u0430 \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u0442 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0443 \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u044f \u0441 \u0443\u0447\u0438\u0442\u0435\u043b\u0435\u043c \u0434\u043b\u044f \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u043e\u0433\u043e \u043d\u0430\u0431\u043e\u0440\u0430 \u0432\u0445\u043e\u0434\u043d\u044b\u0445 \u0442\u0435\u0440\u043c (\u043f\u0440\u043e\u0441\u0442\u044b\u0445 \u043a\u043e\u043d\u044a\u044e\u043d\u043a\u0446\u0438\u0439), \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u0443\u0435\u043c\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u0438\u0441\u0442\u0438\u043d\u043d\u043e\u0435 (true) \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435. \u0421\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e, \u044d\u0442\u043e\u0442 \u043d\u0430\u0431\u043e\u0440 \u0432\u0445\u043e\u0434\u043d\u044b\u0445 \u0442\u0435\u0440\u043c, \u0438\u0437 \u043e\u0431\u0449\u0435\u0433\u043e \u0438\u0445 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0433\u043e \u0447\u0438\u0441\u043b\u0430 <math>$inline$2^N$inline$<\/math>, \u0433\u0434\u0435 <i>N<\/i> \u2013 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0434\u0432\u0443\u0445 \u043a\u043b\u0430\u0441\u0441\u043e\u0432\u044b\u0445 \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u0430\u043b\u044c\u043d\u044b\u0445 (\u0434\u0432\u043e\u0438\u0447\u043d\u044b\u0445) \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u0432 \u0442\u0435\u0440\u043c\u0430\u0445, \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043e\u0431\u0443\u0447\u0430\u044e\u0449\u0435\u0439 \u0432\u044b\u0431\u043e\u0440\u043a\u043e\u0439 \u0434\u043b\u044f \u0437\u0430\u0434\u0430\u0447\u0438 \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u044f \u0441 \u0443\u0447\u0438\u0442\u0435\u043b\u0435\u043c \u0441 \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u044b\u043c (\u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0438\u0441\u0442\u0438\u043d\u043d\u044b\u043c) \u0432\u044b\u0445\u043e\u0434\u043d\u044b\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435\u043c \u0446\u0435\u043b\u0435\u0432\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438. \u0414\u043b\u044f \u0432\u0441\u0435\u0445 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0445 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0445 \u0442\u0435\u0440\u043c, \u043d\u0435 \u0432\u0445\u043e\u0434\u044f\u0449\u0438\u0445 \u0432 \u043e\u0431\u0443\u0447\u0430\u044e\u0449\u0443\u044e \u0432\u044b\u0431\u043e\u0440\u043a\u0443, \u043c\u0438\u043d\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u0430\u044f \u041b\u0424 \u0434\u043e\u043b\u0436\u043d\u0430 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0442\u044c \u043b\u043e\u0436\u043d\u043e\u0435 (false) \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435.<\/p>\n<p>  \u041e\u0434\u043d\u0438\u043c \u0438\u0437 \u043b\u0435\u0433\u043a\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u043c\u044b\u0445 \u0434\u043b\u044f \u043b\u044e\u0431\u043e\u0433\u043e \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u0432\u0445\u043e\u0434\u043d\u044b\u0445 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u043e\u0432 \u043c\u0438\u043d\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438 \u041b\u0424 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043c\u0435\u0442\u043e\u0434 \u041c\u0430\u043a-\u041a\u043b\u0430\u0441\u043a\u0438. \u0421\u043e\u0433\u043b\u0430\u0441\u043d\u043e \u0442\u0435\u043e\u0440\u0438\u0438 \u043c\u0435\u0442\u043e\u0434 \u041c\u0430\u043a-\u041a\u043b\u0430\u0441\u043a\u0438 \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0438\u0437 \u0434\u0432\u0443\u0445 \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0445 \u044d\u0442\u0430\u043f\u043e\u0432:<br \/>  <a name=\"habracut\"><\/a>  <\/p>\n<ol>\n<li>\u041d\u0430\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u0435 \u0432\u0441\u0435\u0445 \u043f\u0440\u043e\u0441\u0442\u044b\u0445 \u0442\u0435\u0440\u043c \u041b\u0424, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u043f\u0440\u0430\u0432\u0438\u043b\u043e (\u0437\u0430\u043a\u043e\u043d\u044b) \u0441\u043a\u043b\u0435\u0438\u0432\u0430\u043d\u0438\u044f:<br \/>  a) (A &#038; B) \u2228 (A &#038; !B) \u2261 A;<br \/>  b) (A \u2228 B) &#038; (A \u2228 !B) \u2261 A;<br \/>  \u0433\u0434\u0435 &#038; \u2014 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044f \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u00ab\u0418\u00bb; \u2228 \u2014 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044f \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u00ab\u0418\u041b\u0418\u00bb;! \u2013 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044f \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u043e\u0442\u0440\u0438\u0446\u0430\u043d\u0438\u044f \u00ab\u041d\u0415\u00bb.\n<\/li>\n<li>\u041c\u0438\u043d\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044f \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u043f\u0440\u043e\u0441\u0442\u044b\u0445 \u0442\u0435\u0440\u043c \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u043e\u0433\u043e \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0430, \u043a\u0430\u043a \u0437\u0430\u0434\u0430\u0447\u0430 \u043d\u0430\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u044f \u043e\u043f\u0442\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043f\u043e\u043a\u0440\u044b\u0442\u0438\u044f \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0430 \u043f\u043e\u0434\u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0430\u043c\u0438 \u0440\u0430\u0437\u043d\u043e\u0439 \u0434\u043b\u0438\u043d\u044b.<\/li>\n<\/ol>\n<p>  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u041a\u043e\u0434 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 (\u043d\u0430\u0436\u0430\u0442\u044c \u0434\u043b\u044f \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0430):<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code>using System; using System.IO; using System.Collections.Generic; using System.Linq;  \/\/\/ &lt;summary&gt; \/\/\/ \u0411\u0430\u0437\u043e\u0432\u044b\u0439 \u043a\u043b\u0430\u0441\u0441 \u0434\u043b\u044f \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \/\/\/ &lt;\/summary&gt; public abstract class LogicFunction {   \/\/\u0414\u0438\u0437\u044a\u044e\u043d\u043a\u0446\u0438\u0438 \u0438\u043b\u0438 \u043a\u043e\u043d\u044a\u044e\u043d\u043a\u0446\u0438\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u0438   public readonly ICollection&lt;char[]&gt; Terms = new LinkedList&lt;char[]&gt;();   \/\/\u0412\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u0438   public abstract bool Calculate(bool[] X);   \/\/\u0412\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u0438   public virtual bool Calculate(char[] X)   {     return Calculate(X.Select(p =&gt; p != '0').ToArray());   } }  \/\/\/ &lt;summary&gt; \/\/\/ \u0414\u0438\u0437\u044a\u044e\u043d\u043a\u0442\u0438\u0432\u043d\u0430\u044f \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u0430\u044f \u0444\u043e\u0440\u043c\u0430 \/\/\/ &lt;\/summary&gt; public class Dnf : LogicFunction {   public override bool Calculate(bool[] X)   {     bool bResult = false;     foreach (char[] term in Terms)     {       bool TermVal = true;       for (int i = 0; i &lt; term.Length; i++)       {         if (term[i] == '*') continue;         TermVal &= (term[i] != '0' ? X[i] : !X[i]);       }       bResult |= TermVal;     }     return bResult;   } }  \/\/\/ &lt;summary&gt; \/\/\/ \u041a\u043e\u043d\u044a\u044e\u043d\u043a\u0442\u0438\u0432\u043d\u0430\u044f \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u0430\u044f \u0444\u043e\u0440\u043c\u0430 \/\/\/ &lt;\/summary&gt; public class Knf : LogicFunction {   public override bool Calculate(bool[] X)   {     bool bResult = true;     foreach (char[] term in Terms)     {       bool TermVal = false;       for (int i = 0; i &lt; term.Length; i++)       {         if (term[i] == '*') continue;         TermVal |= (term[i] != '0' ? X[i] : !X[i]);       }       bResult &= TermVal;     }     return bResult;   } }  \/\/\/ &lt;summary&gt; \/\/\/ \u041c\u0438\u043d\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044f \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043c\u0435\u0442\u043e\u0434\u043e\u043c \u041a\u0432\u0430\u0439\u043d\u0430---\u041c\u0430\u043a-\u041a\u043b\u0430\u0441\u043a\u0438 \/\/\/ &lt;\/summary&gt; public class Quine_McCluskey {   private readonly Dnf _result = new Dnf();   public Dnf Result   {     get { return _result; }   }    \/\/\u0417\u0430\u043f\u0443\u0441\u043a \u043c\u0435\u0442\u043e\u0434\u0430   public void Start(IEnumerable&lt;char[]&gt; TermInput)   {     LogicFuncMinimize(TermInput, _result.Terms);   }    \/\/\u0417\u0430\u043f\u0443\u0441\u043a \u043c\u0435\u0442\u043e\u0434\u0430   public void Start(string sFileName)   {     Start(LoadDsnfFromFile(sFileName));   }    \/\/\u041d\u0430\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u0435 \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0439 \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438   private static void LogicFuncMinimize(IEnumerable&lt;char[]&gt; X1, ICollection&lt;char[]&gt; OutR)   {     Dictionary&lt;int, LinkedList&lt;TreeNodeEnd&gt;&gt; OutTemp = new Dictionary&lt;int, LinkedList&lt;TreeNodeEnd&gt;&gt;();     if (X1.First().Length &lt;= 40)     {       Dictionary&lt;UInt64, TreeNodeEnd&gt; X1Tree = new Dictionary&lt;UInt64, TreeNodeEnd&gt;();       DeleteDublicatingTerms(X1, X1Tree);       int iLevelCounter = 0;       \/\/\u041f\u043e\u0432\u0442\u043e\u0440 \u0434\u043e \u0442\u0435\u0445 \u043f\u043e\u0440 \u043f\u043e\u043a\u0430 \u0431\u0443\u0434\u0443\u0442 \u043e\u0441\u0442\u0430\u0432\u0430\u0442\u044c\u0441\u044f \u0442\u0435\u0440\u043c\u044b       while (X1Tree.Count != 0)       {         Dictionary&lt;UInt64, TreeNodeEnd&gt; X2Tree = new Dictionary&lt;UInt64, TreeNodeEnd&gt;();         Skleivanie(X1Tree, X2Tree, OutTemp, iLevelCounter++);         X1Tree = X2Tree;         GC.Collect(); \/\/\u041e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u0435 \u0441\u0431\u043e\u0440\u043a\u0438 \u043c\u0443\u0441\u043e\u0440\u0430 \u043e\u0447\u0435\u043d\u044c \u0441\u0438\u043b\u044c\u043d\u043e \u0432\u043b\u0438\u044f\u0435\u0442 \u043d\u0430 \u0432\u0440\u0435\u043c\u044f \u0440\u0430\u0431\u043e\u0442\u044b!!!       }     }     else     {       TreeFuncTerm X1Tree = new TreeFuncTerm();       DeleteDublicatingTerms(X1, X1Tree);       int iLevelCounter = 0;       \/\/\u041f\u043e\u0432\u0442\u043e\u0440 \u0434\u043e \u0442\u0435\u0445 \u043f\u043e\u0440 \u043f\u043e\u043a\u0430 \u0431\u0443\u0434\u0443\u0442 \u043e\u0441\u0442\u0430\u0432\u0430\u0442\u044c\u0441\u044f \u0442\u0435\u0440\u043c\u044b       while (X1Tree.Count != 0)       {         TreeFuncTerm X2Tree = new TreeFuncTerm();         Skleivanie(X1Tree, X2Tree, OutTemp, iLevelCounter++);         X1Tree = X2Tree;         GC.Collect(); \/\/\u041e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u0435 \u0441\u0431\u043e\u0440\u043a\u0438 \u043c\u0443\u0441\u043e\u0440\u0430 \u043e\u0447\u0435\u043d\u044c \u0441\u0438\u043b\u044c\u043d\u043e \u0432\u043b\u0438\u044f\u0435\u0442 \u043d\u0430 \u0432\u0440\u0435\u043c\u044f \u0440\u0430\u0431\u043e\u0442\u044b!!!       }     }     HashSet&lt;TreeNodeEnd&gt; OutRes = new HashSet&lt;TreeNodeEnd&gt;();     ReduceRedundancyTerms(OutTemp, OutRes);     OutR.Clear();     foreach (TreeNodeEnd term in OutRes) OutR.Add(term.Term);   }    \/\/\u041f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0430 \u0447\u0442\u0435\u043d\u0438\u044f \u0414\u0421\u041d\u0424 \u0438\u0437 \u0444\u0430\u0439\u043b\u0430 \u0438 \u0437\u0430\u043f\u0438\u0441\u044c \u0432 \u043c\u0430\u0442\u0440\u0438\u0446\u0443   private static ICollection&lt;char[]&gt; LoadDsnfFromFile(string sFullFileName)   {     ICollection&lt;char[]&gt; DSNF = new LinkedList&lt;char[]&gt;();     \/\/\u0427\u0442\u0435\u043d\u0438\u0435 \u0441\u0442\u0440\u043e\u043a \u0438\u0437 \u0444\u0430\u0439\u043b\u0430     using (StreamReader InFile = new StreamReader(sFullFileName))     {       string sLine = &quot;&quot;;       while ((sLine = InFile.ReadLine()) != null)       {         DSNF.Add(sLine.ToArray());       }     }     return DSNF;   }    \/\/\u0423\u0434\u0430\u043b\u0435\u043d\u0438\u0435 \u0434\u0443\u0431\u043b\u0438\u043a\u0430\u0442\u043e\u0432 \u0442\u0435\u0440\u043c\u043e\u0432 \u0438\u0437 \u0432\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u0441\u043f\u0438\u0441\u043a\u0430   \/\/\u0412 \u0432\u044b\u0445\u043e\u0434\u043d\u043e\u0439 \u0441\u043b\u043e\u0432\u0430\u0440\u044c \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u0435 \u0442\u0435\u0440\u043c\u044b   private static void DeleteDublicatingTerms(IEnumerable&lt;char[]&gt; InX1,     Dictionary&lt;UInt64, TreeNodeEnd&gt; OutX2Tree)   {     OutX2Tree.Clear();     TreeNodeEnd pCurrNode = null;     foreach (char[] x1 in InX1)     {       UInt64 iCode = GetTermCode(x1);       if (OutX2Tree.ContainsKey(iCode)) continue;       pCurrNode = new TreeNodeEnd(x1, null, null, pCurrNode, OutX2Tree.Count);       OutX2Tree.Add(iCode, pCurrNode);     }   }    \/\/\u0423\u0434\u0430\u043b\u0435\u043d\u0438\u0435 \u0434\u0443\u0431\u043b\u0438\u043a\u0430\u0442\u043e\u0432 \u0442\u0435\u0440\u043c\u043e\u0432 \u0438\u0437 \u0432\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u0441\u043f\u0438\u0441\u043a\u0430   \/\/\u0412 \u0432\u044b\u0445\u043e\u0434\u043d\u043e\u0435 \u0434\u0435\u0440\u0435\u0432\u043e \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u0435 \u0442\u0435\u0440\u043c\u044b   private static void DeleteDublicatingTerms(IEnumerable&lt;char[]&gt; InX1, TreeFuncTerm OutX2Tree)   {     OutX2Tree.Clear();     foreach (char[] x1 in InX1)     {       OutX2Tree.AddTerm(x1, null, null);     }   }    \/\/\u0421\u043a\u043b\u0435\u0438\u0432\u0430\u043d\u0438\u0435 \u0441\u0442\u0440\u043e\u043a \u0441 \u043e\u0434\u043d\u0438\u043c \u0440\u0430\u0437\u043b\u0438\u0447\u0438\u0435\u043c   private static void Skleivanie(TreeFuncTerm X1Tree, TreeFuncTerm X2Tree,     Dictionary&lt;int, LinkedList&lt;TreeNodeEnd&gt;&gt; OutResult, int iLevel)   {     LinkedList&lt;TreeNodeEnd&gt; OutR = new LinkedList&lt;TreeNodeEnd&gt;();     OutResult.Add(iLevel, OutR);     Dictionary&lt;int, TreeNodeEnd&gt; FindTerms = new Dictionary&lt;int, TreeNodeEnd&gt;();     TreeNodeEnd x1 = X1Tree.Last;     while (x1 != null)     {       X1Tree.SearchDiff1(x1, FindTerms);       if (FindTerms.Count == 0)       {         \/\/\u0414\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043d\u0430 \u0432\u044b\u0445\u043e\u0434 \u0442\u0435\u0445 \u0442\u0435\u0440\u043c\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0438 \u0441 \u043a\u0435\u043c \u043d\u0435 \u0441\u043a\u043b\u0435\u0438\u043b\u0438\u0441\u044c         OutR.AddLast(x1);       }       else       {         foreach (KeyValuePair&lt;int, TreeNodeEnd&gt; kvp in FindTerms)         {           \/\/\u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430, \u0447\u0442\u043e\u0431\u044b \u043a\u043e\u043c\u0431\u0438\u043d\u0430\u0446\u0438\u0438 \u0442\u0435\u0440\u043c\u043e\u0432 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u043b\u0438\u0441\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e \u043e\u0434\u043d\u043e\u043c\u0443 \u0440\u0430\u0437\u0443           if (x1.Number &lt; kvp.Value.Number) continue;           \/\/\u0421\u043a\u043b\u0435\u0438\u0432\u0430\u043d\u0438\u0435 \u0434\u0432\u0443\u0445 \u0442\u0435\u0440\u043c\u043e\u0432 \u0441 \u043e\u0434\u043d\u0438\u043c \u0440\u0430\u0437\u043b\u0438\u0447\u0438\u0435\u043c           char cSymbSav = x1.Term[kvp.Key];           x1.Term[kvp.Key] = '*'; \/\/\u041c\u0435\u0442\u043a\u0430 \u0441\u043a\u043b\u0435\u0438\u0432\u0430\u043d\u0438\u044f           X2Tree.AddTerm(x1.Term, x1, kvp.Value);           x1.Term[kvp.Key] = cSymbSav;         }       }       x1 = x1.Prev;     }   }    \/\/\u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u0439 \u043a\u043e\u0434 \u0434\u043b\u044f \u0442\u0435\u0440\u043c\u0430   private static UInt64 GetTermCode(char[] pTerm)   {     UInt64 iMultip = 1, iCode = 0;     for (int i = 0; i &lt; pTerm.Length; i++)     {       switch (pTerm[i])       {         case '0':           break;         case '1':           iCode += iMultip;           break;         case '*':           iCode += (iMultip + iMultip);           break;       }       iMultip *= 3;     }     return iCode;   }    \/\/\u0421\u043a\u043b\u0435\u0438\u0432\u0430\u043d\u0438\u0435 \u0441\u0442\u0440\u043e\u043a \u0441 \u043e\u0434\u043d\u0438\u043c \u0440\u0430\u0437\u043b\u0438\u0447\u0438\u0435\u043c   private static void Skleivanie(Dictionary&lt;UInt64, TreeNodeEnd&gt; X1Tree, Dictionary&lt;UInt64,     TreeNodeEnd&gt; X2Tree, Dictionary&lt;int, LinkedList&lt;TreeNodeEnd&gt;&gt; OutResult, int iLevel)   {     LinkedList&lt;TreeNodeEnd&gt; OutR = new LinkedList&lt;TreeNodeEnd&gt;();     OutResult.Add(iLevel, OutR);     foreach (KeyValuePair&lt;UInt64, TreeNodeEnd&gt; x1 in X1Tree)     {       bool bIsSkleiv = false;       UInt64 iMultip = 1;       for (int iPos = 0; iPos &lt; x1.Value.Term.Length; iPos++)       {         char cSymbSav = x1.Value.Term[iPos];         if (cSymbSav != '*')         {           UInt64 iCode;           if (cSymbSav == '0')             iCode = x1.Key + iMultip;           else \/\/_if (cSymbSav == '1')             iCode = x1.Key - iMultip;           TreeNodeEnd pSkleivNode = null;           X1Tree.TryGetValue(iCode, out pSkleivNode);           if (pSkleivNode != null)           {             bIsSkleiv = true;             \/\/\u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430, \u0447\u0442\u043e\u0431\u044b \u043a\u043e\u043c\u0431\u0438\u043d\u0430\u0446\u0438\u0438 \u0442\u0435\u0440\u043c\u043e\u0432 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u043b\u0438\u0441\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e \u043e\u0434\u043d\u043e\u043c\u0443 \u0440\u0430\u0437\u0443             if (x1.Value.Number &gt; pSkleivNode.Number)             {               \/\/\u0421\u043a\u043b\u0435\u0438\u0432\u0430\u043d\u0438\u0435 \u0434\u0432\u0443\u0445 \u0442\u0435\u0440\u043c\u043e\u0432 \u0441 \u043e\u0434\u043d\u0438\u043c \u0440\u0430\u0437\u043b\u0438\u0447\u0438\u0435\u043c               if (cSymbSav == '0')                 iCode = x1.Key + iMultip + iMultip;               else \/\/_if (cSymbSav == '1')                 iCode = x1.Key + iMultip;               x1.Value.Term[iPos] = '*'; \/\/\u041c\u0435\u0442\u043a\u0430 \u0441\u043a\u043b\u0435\u0438\u0432\u0430\u043d\u0438\u044f               if (!X2Tree.ContainsKey(iCode)) X2Tree.Add(iCode,                 new TreeNodeEnd(x1.Value.Term, x1.Value, pSkleivNode, null, X2Tree.Count));               x1.Value.Term[iPos] = cSymbSav;             }           }         }         iMultip *= 3;       }       if (!bIsSkleiv)       {         \/\/\u0414\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043d\u0430 \u0432\u044b\u0445\u043e\u0434 \u0442\u0435\u0445 \u0442\u0435\u0440\u043c\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0438 \u0441 \u043a\u0435\u043c \u043d\u0435 \u0441\u043a\u043b\u0435\u0438\u043b\u0438\u0441\u044c         OutR.AddLast(x1.Value);       }     }   }    \/\/ \u041e\u0442\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u043d\u0438\u0435 \u0438\u0437\u0431\u044b\u0442\u043e\u0447\u043d\u044b\u0445 \u0442\u0435\u0440\u043c \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430 \u043f\u0440\u0438\u0431\u043b\u0438\u0436\u0435\u043d\u043d\u043e\u0433\u043e \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u0437\u0430\u0434\u0430\u0447\u0438 \u043e \u043f\u043e\u043a\u0440\u044b\u0442\u0438\u0438.   private static void ReduceRedundancyTerms(Dictionary&lt;int, LinkedList&lt;TreeNodeEnd&gt;&gt; X,     HashSet&lt;TreeNodeEnd&gt; ResultNumbers)   {     \/\/\u041f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0430 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0438\u0440\u0443\u044e\u0449\u0435\u0433\u043e \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430     ResultNumbers.Clear();     \/\/\u041a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440 \u043f\u0435\u0440\u0432\u0438\u0447\u043d\u044b\u0445 \u0432\u0445\u043e\u0434\u043d\u044b\u0445 \u0442\u0435\u0440\u043c\u043e\u0432 \u0441 \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435\u043c \u043f\u043e \u043a\u043e\u043b-\u0432\u0443 \u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u0432\u0448\u0438\u0445 \u0432\u044b\u0445\u043e\u0434\u043d\u044b\u0435 \u0442\u0435\u0440\u043c\u044b     HashSet&lt;TreeNodeEnd&gt; pNumbersForAdd = new HashSet&lt;TreeNodeEnd&gt;();     Dictionary&lt;TreeNodeEnd, uint&gt; Numbers2Terms = new Dictionary&lt;TreeNodeEnd, uint&gt;();     Dictionary&lt;TreeNodeEnd, HashSet&lt;TreeNodeEnd&gt;&gt; Terms2Numbers =       new Dictionary&lt;TreeNodeEnd, HashSet&lt;TreeNodeEnd&gt;&gt;();     \/\/\u0424\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u043f\u043e \u0443\u0440\u043e\u0432\u043d\u044e     foreach (int iLevel in X.Keys.OrderByDescending(p =&gt; p).AsQueryable())     {       foreach (TreeNodeEnd term in X[iLevel])       {         HashSet&lt;TreeNodeEnd&gt; TermNumberCont = new HashSet&lt;TreeNodeEnd&gt;();         HashSet&lt;TreeNodeEnd&gt; ListNumbers = new HashSet&lt;TreeNodeEnd&gt;();         ListNumbers.Add(term);         while (ListNumbers.Count &gt; 0)         {           TreeNodeEnd pCurrNode = ListNumbers.First();           ListNumbers.Remove(pCurrNode);           if (pCurrNode.Parent1 != null && pCurrNode.Parent2 != null)           {             ListNumbers.Add(pCurrNode.Parent1);             ListNumbers.Add(pCurrNode.Parent2);           }           else           {             if (!Numbers2Terms.ContainsKey(pCurrNode)) Numbers2Terms.Add(pCurrNode, 0);             Numbers2Terms[pCurrNode]++;             \/\/\u0414\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043d\u043e\u043c\u0435\u0440\u0430 \u0432 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440             TermNumberCont.Add(pCurrNode);           }         }         \/\/int iIntersectNumbers = pNumbersForAdd.Intersect(TermNumberCont).Count();         \/\/if (iIntersectNumbers &lt; TermNumberCont.Count)         {           pNumbersForAdd.UnionWith(TermNumberCont);           Terms2Numbers.Add(term, TermNumberCont);         }       }     }     \/\/\u0412\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u043f\u0435\u0440\u0432\u044b\u0439 \u043f\u0440\u0438\u043d\u0446\u0438\u043f - \u043f\u0435\u0440\u0432\u044b\u043c\u0438 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0435 \u0441\u0442\u043e\u043b\u0431\u0446\u044b \u0422\u041f     pNumbersForAdd = new HashSet&lt;TreeNodeEnd&gt;(pNumbersForAdd.OrderBy(p =&gt; Numbers2Terms[p]));     \/\/\u041a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440 \u0434\u043b\u044f \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u043e\u0442\u043e\u0431\u0440\u0430\u043d\u043d\u044b\u0445 \u0432\u044b\u0445\u043e\u0434\u043d\u044b\u0445 \u0442\u0435\u0440\u043c\u043e\u0432 \u0441 \u0438\u0445 \u0441\u0432\u044f\u0437\u044f\u043c\u0438 \u0441 \u0432\u0445\u043e\u0434\u043d\u044b\u043c\u0438     Dictionary&lt;TreeNodeEnd, HashSet&lt;TreeNodeEnd&gt;&gt; SelectedTerms =       new Dictionary&lt;TreeNodeEnd, HashSet&lt;TreeNodeEnd&gt;&gt;();     \/\/\u041f\u0435\u0440\u0435\u0431\u043e\u0440 \u0432\u0441\u0435\u0445 \u043f\u0435\u0440\u0432\u0438\u0447\u043d\u044b\u0445 \u0432\u0445\u043e\u0434\u043d\u044b\u0445 \u0442\u0435\u0440\u043c\u043e\u0432     while (pNumbersForAdd.Count &gt; 0)     {       \/\/\u041f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c\u044b\u0439 \u0432\u0445\u043e\u0434\u043d\u043e\u0439 \u0442\u0435\u0440\u043c       TreeNodeEnd pSrcTerm = pNumbersForAdd.First();       \/\/\u041e\u0442\u0431\u043e\u0440 \u043b\u0443\u0447\u0448\u0435\u0433\u043e \u0432\u044b\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u0442\u0435\u0440\u043c\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u044b\u043b \u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d \u0441 \u0443\u0447\u0430\u0441\u0442\u0438\u0435\u043c \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u0432\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u0442\u0435\u0440\u043c\u0430       TreeNodeEnd BestTerm = null;       int iBestTermNumbersCount = 0;       foreach (KeyValuePair&lt;TreeNodeEnd, HashSet&lt;TreeNodeEnd&gt;&gt; CurrTerm in Terms2Numbers)       {         if (!CurrTerm.Value.Contains(pSrcTerm)) continue;         int iCurrTermNumbersCount = CurrTerm.Value.Intersect(pNumbersForAdd).Count();         if ((BestTerm == null) || (iBestTermNumbersCount &lt; iCurrTermNumbersCount))         {           BestTerm = CurrTerm.Key;           iBestTermNumbersCount = iCurrTermNumbersCount;         }       }       ResultNumbers.Add(BestTerm);       HashSet&lt;TreeNodeEnd&gt; pBestTermSrcNodes = Terms2Numbers[BestTerm];       Terms2Numbers.Remove(BestTerm);       SelectedTerms.Add(BestTerm, pBestTermSrcNodes);       pNumbersForAdd.RemoveWhere(p =&gt; pBestTermSrcNodes.Contains(p));     }     \/\/\u0427\u0442\u043e\u0431\u044b \u043e\u0441\u0432\u043e\u0431\u043e\u0434\u0438\u0442\u044c \u043d\u0435\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u0443\u044e \u043f\u0430\u043c\u044f\u0442\u044c     Terms2Numbers = SelectedTerms;     \/\/\u0422\u0435\u043f\u0435\u0440\u044c \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043d\u0430 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0432\u044b\u043a\u0438\u043d\u0443\u0442\u044c \u0438\u0437 \u0441\u043f\u0438\u0441\u043a\u0430 \u043e\u0442\u043e\u0431\u0440\u0430\u043d\u043d\u044b\u0445     TreeNodeEnd termForDelete = null;     do     {       termForDelete = null;       int iTermForDeleteUsedNumbCount = 0;       foreach (KeyValuePair&lt;TreeNodeEnd, HashSet&lt;TreeNodeEnd&gt;&gt; term1 in SelectedTerms)       {         int iUsedNumbCounter = 0;         foreach (TreeNodeEnd numb in term1.Value)         {           bool bFind = false;           foreach (KeyValuePair&lt;TreeNodeEnd, HashSet&lt;TreeNodeEnd&gt;&gt; term2 in SelectedTerms)           {             if (term1.Key == term2.Key) continue;             if (bFind = term2.Value.Contains(numb)) break;           }           if (bFind) iUsedNumbCounter++;         }         if ((iUsedNumbCounter == term1.Value.Count) && ((termForDelete == null) ||             (iUsedNumbCounter &lt;= iTermForDeleteUsedNumbCount)))         {           termForDelete = term1.Key;           iTermForDeleteUsedNumbCount = iUsedNumbCounter;         }       }       if (termForDelete != null)       {         ResultNumbers.Remove(termForDelete);         SelectedTerms.Remove(termForDelete);       }     } while (termForDelete != null);   } }  \/\/\/ &lt;summary&gt; \/\/\/ \u0414\u0435\u0440\u0435\u0432\u043e \u0442\u0435\u0440\u043c\u043e\u0432 \/\/\/ &lt;\/summary&gt; public class TreeFuncTerm {   \/\/\u041a\u043e\u0440\u0435\u043d\u044c   private readonly TreeNodeMiddle rootNode = new TreeNodeMiddle();   \/\/\u0421\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u0437\u0430\u0432\u0435\u0440\u0448\u0430\u044e\u0449\u0438\u0439 \u0443\u0437\u0435\u043b \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0441\u0441\u044b\u043b\u043e\u043a \u043d\u0430 \u043a\u043e\u043d\u0435\u0447\u043d\u044b\u0435 \u043b\u0438\u0441\u0442\u044c\u044f \u0434\u0435\u0440\u0435\u0432\u0430   private TreeNodeEnd _lastTreeNode = null;   public TreeNodeEnd Last   {     get { return _lastTreeNode; }   }   \/\/\u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0442\u0435\u0440\u043c\u043e\u0432 \u0432 \u0434\u0435\u0440\u0435\u0432\u0435   private int _count = 0;   public int Count   {     get { return _count; }   }    \/\/\u041a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440   public TreeFuncTerm()   {     Clear();   }    \/\/\u041e\u0447\u0438\u0441\u0442\u0438\u0442\u044c \u0434\u0435\u0440\u0435\u0432\u043e   public void Clear()   {     rootNode.Clear();     _count = 0;     _lastTreeNode = null;   }    \/\/\u0414\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0432 \u0434\u0435\u0440\u0435\u0432\u043e \u043d\u043e\u0432\u043e\u0433\u043e \u0442\u0435\u0440\u043c\u0430   public void AddTerm(char[] term, TreeNodeEnd pParent1, TreeNodeEnd pParent2)   {     TreeNodeMiddle pCurrNode = rootNode;     for (int j = 0; j &lt; term.Length; j++)     {       TreeNodeBase item = pCurrNode.GetChild(term[j]);       if (item == null)       {         if (j + 1 &lt; term.Length)         {           item = new TreeNodeMiddle();         }         else         {           item = new TreeNodeEnd(term, pParent1, pParent2, _lastTreeNode, _count);           _lastTreeNode = (TreeNodeEnd)item;           _count++;         }         pCurrNode.AddChild(item, term[j]);       }       if (item is TreeNodeMiddle) pCurrNode = (TreeNodeMiddle)item;     }   }    \/\/\u041f\u043e\u0438\u0441\u043a \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0435\u0439 \u0441 \u043e\u0434\u043d\u0438\u043c \u043e\u0442\u043b\u0438\u0447\u0438\u0435\u043c \u043e\u0442 \u0437\u0430\u0434\u0430\u043d\u043d\u043e\u0439 \u043d\u0435 \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u0432\u043d\u044b\u043c \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u043c   public void SearchDiff1(TreeNodeEnd x1, Dictionary&lt;int, TreeNodeEnd&gt; result)   {     result.Clear();     TreeNodeMiddle pCurrNode = rootNode;     Dictionary&lt;int, TreeNodeMiddle&gt; OneDiffNodesList = new Dictionary&lt;int, TreeNodeMiddle&gt;();     for (int iPos = 0; iPos &lt; x1.Term.Length; iPos++)     {       char cSymbol = x1.Term[iPos];       if (pCurrNode != null)       {         if (cSymbol != '*')         {           TreeNodeBase item = pCurrNode.GetChild(cSymbol == '0' ? '1' : '0');           if (item != null)           {             if (item is TreeNodeMiddle)             {               OneDiffNodesList.Add(iPos, (TreeNodeMiddle)item);             }             else \/\/if (item is TreeNodeEnd)             {               \/\/\u0414\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0442\u0435\u0440\u043c\u0430 \u0432 \u0432\u044b\u0445\u043e\u0434\u043d\u043e\u0439 \u0441\u043f\u0438\u0441\u043e\u043a               result.Add(iPos, (TreeNodeEnd)item);             }           }         }         TreeNodeBase pNextNode = pCurrNode.GetChild(cSymbol);         if ((pNextNode != null) && (pNextNode is TreeNodeMiddle))         {           pCurrNode = (TreeNodeMiddle)pNextNode;         }       }       \/\/\u041f\u0440\u043e\u0432\u0435\u0440\u044f\u044e\u0442\u0441\u044f \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438, \u043e\u0442\u043e\u0431\u0440\u0430\u043d\u043d\u044b\u0435 \u043d\u0430 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0445 \u043f\u043e\u0437\u0438\u0446\u0438\u044f\u0445,       \/\/\u043d\u0430 \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0441\u0442\u044c \u043e\u0442\u043b\u0438\u0447\u0438\u044f \u043e\u0442 \u0437\u0430\u0434\u0430\u043d\u043d\u043e\u0439       for (int iKey = 0; iKey &lt; iPos; iKey++)       {         if (!OneDiffNodesList.ContainsKey(iKey)) continue;         TreeNodeMiddle pValue = OneDiffNodesList[iKey];         TreeNodeBase item = pValue.GetChild(cSymbol);         if (item == null)         {           OneDiffNodesList.Remove(iKey);         }         else if (item is TreeNodeMiddle)         {           OneDiffNodesList[iKey] = (TreeNodeMiddle)item;         }         else \/\/if (item is TreeNodeEnd)         {           \/\/\u0414\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0442\u0435\u0440\u043c\u0430 \u0432 \u0432\u044b\u0445\u043e\u0434\u043d\u043e\u0439 \u0441\u043f\u0438\u0441\u043e\u043a           result.Add(iKey, (TreeNodeEnd)item);         }       }     }   } }  \/\/\/ &lt;summary&gt; \/\/\/ \u0411\u0430\u0437\u043e\u0432\u044b\u0439 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u0443\u0437\u043b\u0430 \u0434\u0435\u0440\u0435\u0432\u0430 \u0442\u0435\u0440\u043c\u043e\u0432 \/\/\/ &lt;\/summary&gt; public interface TreeNodeBase {   \/\/\u041e\u0447\u0438\u0441\u0442\u043a\u0430 \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0445 \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432   void Clear(); }  \/\/\/ &lt;summary&gt; \/\/\/ \u041a\u043e\u043d\u0435\u0447\u043d\u044b\u0439 \u0443\u0437\u0435\u043b \u0434\u0435\u0440\u0435\u0432\u0430 \u0442\u0435\u0440\u043c\u043e\u0432 \/\/\/ &lt;\/summary&gt; public class TreeNodeEnd : TreeNodeBase {   \/\/\u0422\u0435\u0440\u043c, \u0441\u043e\u043f\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0439 \u0443\u0437\u043b\u0443   private char[] _term;   public char[] Term   {     get { return _term; }   }   \/\/\u0421\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0439 \u043a\u043e\u043d\u0435\u0447\u043d\u044b\u0439 \u0443\u0437\u0435\u043b \u0434\u0435\u0440\u0435\u0432\u0430 \u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e \u0443\u0440\u043e\u0432\u043d\u044f \u0434\u043b\u044f \u043e\u0434\u043d\u043e\u0441\u0442\u043e\u0440\u043e\u043d\u043d\u0435\u0433\u043e \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u043e\u0433\u043e \u0441\u043f\u0438\u0441\u043a\u0430   private TreeNodeEnd _prev;   public TreeNodeEnd Prev   {     get { return _prev; }   }   \/\/\u0421\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u0440\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0439 \u043a\u043e\u043d\u0435\u0447\u043d\u044b\u0439 \u0443\u0437\u0435\u043b \u0434\u0435\u0440\u0435\u0432\u0430 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0433\u043e \u0443\u0440\u043e\u0432\u043d\u044f   private TreeNodeEnd _parent1;   public TreeNodeEnd Parent1   {     get { return _parent1; }   }   \/\/\u0421\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u0440\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0439 \u043a\u043e\u043d\u0435\u0447\u043d\u044b\u0439 \u0443\u0437\u0435\u043b \u0434\u0435\u0440\u0435\u0432\u0430 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0433\u043e \u0443\u0440\u043e\u0432\u043d\u044f   private TreeNodeEnd _parent2;   public TreeNodeEnd Parent2   {     get { return _parent2; }   }   \/\/\u041d\u043e\u043c\u0435\u0440 \u0443\u0437\u043b\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043e\u043d \u0438\u043c\u0435\u0435\u0442 \u0432 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0432\u0441\u0435\u0445 \u043a\u043e\u043d\u0435\u0447\u043d\u044b\u0445 \u0443\u0437\u043b\u043e\u0432 \u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e \u0443\u0440\u043e\u0432\u043d\u044f   public readonly int Number;    \/\/\u041a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440   public TreeNodeEnd(char[] pTermRef, TreeNodeEnd pParent1, TreeNodeEnd pParent2,     TreeNodeEnd pPrevTreeNode, int iNumber)   {     pTermRef.CopyTo(_term = new char[pTermRef.Length], 0);     _parent1 = pParent1;     _parent2 = pParent2;     _prev = pPrevTreeNode;     Number = iNumber;   }    \/\/\u041e\u0447\u0438\u0441\u0442\u043a\u0430 \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0445 \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432   public void Clear()   {     _term = null;     _parent1 = null;     _parent2 = null;     _prev = null;   } }  \/\/\/ &lt;summary&gt; \/\/\/ \u041f\u0440\u043e\u043c\u0435\u0436\u0443\u0442\u043e\u0447\u043d\u044b\u0439 \u0443\u0437\u0435\u043b \u0434\u0435\u0440\u0435\u0432\u0430 \u0442\u0435\u0440\u043c\u043e\u0432 \/\/\/ &lt;\/summary&gt; public class TreeNodeMiddle : TreeNodeBase {   \/\/\u0414\u043e\u0447\u0435\u0440\u043d\u0438\u0435 \u0443\u0437\u043b\u044b   private TreeNodeBase Childs0;   private TreeNodeBase Childs1;   private TreeNodeBase Childs2;    \/\/\u041e\u0447\u0438\u0441\u0442\u043a\u0430 \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0445 \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432   public void Clear()   {     if ((Childs0 != null) && (Childs0 is TreeNodeMiddle)) ((TreeNodeMiddle)Childs0).Clear();     if ((Childs1 != null) && (Childs1 is TreeNodeMiddle)) ((TreeNodeMiddle)Childs1).Clear();     if ((Childs2 != null) && (Childs2 is TreeNodeMiddle)) ((TreeNodeMiddle)Childs2).Clear();     Childs0 = Childs1 = Childs2 = null;   }    \/\/\u041f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 \u0434\u043e\u0447\u0435\u0440\u043d\u0435\u0433\u043e \u0443\u0437\u043b\u0430   public TreeNodeBase GetChild(char cSymbol)   {     switch (cSymbol)     {       case '0':         return Childs0;       case '1':         return Childs1;       case '*':         return Childs2;     }     return null;   }    \/\/\u0414\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0434\u043e\u0447\u0435\u0440\u043d\u0435\u0433\u043e \u0443\u0437\u043b\u0430   public void AddChild(TreeNodeBase newChild, char cSymbol)   {     switch (cSymbol)     {       case '0':         Childs0 = newChild;         break;       case '1':         Childs1 = newChild;         break;       case '*':         Childs2 = newChild;         break;     }   } } <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  \u041a\u043b\u0430\u0441\u0441 Quine_McCluskey \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0435\u0439 \u044d\u0442\u043e\u0433\u043e \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430, \u043a\u043e\u0442\u043e\u0440\u043e\u043c\u0443 \u043f\u043e\u043c\u043e\u0433\u0430\u044e\u0442 \u0434\u0440\u0443\u0433\u0438\u0435 \u043a\u043b\u0430\u0441\u0441\u044b \u0438 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u044b: Dnf, TreeNodeBase, TreeNodeMiddle, TreeNodeEnd, TreeFuncTerm. \u0414\u043b\u044f \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438 \u043d\u0443\u0436\u043d\u043e \u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c \u043e\u0434\u0438\u043d \u0438\u0437 \u043f\u0435\u0440\u0435\u0433\u0440\u0443\u0436\u0435\u043d\u043d\u044b\u0445 \u043c\u0435\u0442\u043e\u0434\u043e\u0432 Start.<\/p>\n<p>  \u0412 \u043f\u0443\u043d\u043a\u0442\u0435 1 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043c\u043d\u043e\u0433\u043e\u043a\u0440\u0430\u0442\u043d\u044b\u0439 \u043f\u043e\u043f\u0430\u0440\u043d\u044b\u0439 \u043f\u0435\u0440\u0435\u0431\u043e\u0440 \u0442\u0435\u0440\u043c \u0441 \u0446\u0435\u043b\u044c\u044e \u0432\u044b\u044f\u0432\u043b\u0435\u043d\u0438\u044f \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0438\u0445 \u0441\u043a\u043b\u0435\u0439\u043a\u0438. \u0414\u0432\u0430 \u0442\u0435\u0440\u043c\u0430 \u0441\u043a\u043b\u0435\u0438\u0432\u0430\u044e\u0442\u0441\u044f, \u0435\u0441\u043b\u0438 \u043e\u043d\u0438 \u043e\u0442\u043b\u0438\u0447\u0430\u044e\u0442\u0441\u044f \u0434\u0440\u0443\u0433 \u043e\u0442 \u0434\u0440\u0443\u0433\u0430 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u043c\u0438 \u0442\u043e\u043b\u044c\u043a\u043e \u043b\u0438\u0448\u044c \u0432 \u043e\u0434\u043d\u043e\u0439 \u0438\u0437 \u043f\u043e\u0437\u0438\u0446\u0438\u0439: \u0443 \u043e\u0434\u043d\u043e\u0433\u043e \u0441\u0442\u043e\u0438\u0442 \u20180\u2019, \u0430 \u0443 \u0434\u0440\u0443\u0433\u043e\u0433\u043e \u2013 \u20181\u2019. \u0421\u043a\u043b\u0435\u0438\u0432\u0430\u044e\u0449\u0438\u0435\u0441\u044f \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0435 (\u0440\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0435) \u0442\u0435\u0440\u043c\u044b \u0438\u0441\u043a\u043b\u044e\u0447\u0430\u044e\u0442\u0441\u044f \u0438\u0437 \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u0439 \u0440\u0430\u0431\u043e\u0442\u044b, \u0430 \u0432\u043c\u0435\u0441\u0442\u043e \u0438\u0445 \u0434\u0432\u043e\u0438\u0445 \u0434\u0430\u043b\u0435\u0435 \u043d\u0430 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0438 \u043f. 1 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430 \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043d\u043e\u0432\u0430\u044f \u0434\u043e\u0447\u0435\u0440\u043d\u044f\u044f \u0442\u0435\u0440\u043c\u0430, \u0443 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043d\u0430 \u043f\u043e\u0437\u0438\u0446\u0438\u0438 \u0440\u0430\u0437\u043b\u0438\u0447\u0430\u044e\u0449\u0438\u0445\u0441\u044f \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u0440\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0445 \u0442\u0435\u0440\u043c \u0441\u0442\u043e\u0438\u0442 \u0437\u043d\u0430\u043a \u2018*\u2019. \u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u0434\u0432\u043e\u0438\u0447\u043d\u044b\u0439 \u0430\u043b\u0444\u0430\u0432\u0438\u0442 \u0432\u0445\u043e\u0434\u043d\u044b\u0445 \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0445 \u0442\u0435\u0440\u043c \u0432\u043d\u0443\u0442\u0440\u0438 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430 \u0440\u0430\u0441\u0448\u0438\u0440\u044f\u0435\u0442\u0441\u044f \u0434\u043e \u0442\u0440\u043e\u0438\u0447\u043d\u043e\u0433\u043e: \u20180\u2019, \u20181\u2019, \u2018*\u2019.<\/p>\n<p>  \u041f\u0443\u043d\u043a\u0442 1 \u0432 \u043a\u043b\u0430\u0441\u0441\u0435 Quine_McCluskey \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d \u0432 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0435 LogicFuncMinimize \u0434\u0432\u0443\u043c\u044f \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0438\u0430\u043b\u044c\u043d\u043e \u0440\u0430\u0437\u043d\u044b\u043c\u0438 \u0441\u043f\u043e\u0441\u043e\u0431\u0430\u043c\u0438. \u041f\u0435\u0440\u0432\u044b\u0439 \u0441\u043f\u043e\u0441\u043e\u0431, \u043e\u0441\u043d\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043d\u0430 64 \u0431\u0438\u0442\u043d\u044b\u0445 \u0446\u0435\u043b\u043e\u0447\u0438\u0441\u043b\u0435\u043d\u043d\u044b\u0445 \u0445\u044d\u0448-\u043a\u043e\u0434\u0430\u0445 \u0438 \u043f\u043e\u0438\u0441\u043a\u0435 \u0432 .NET \u0441\u043b\u043e\u0432\u0430\u0440\u0435 Dictionary&lt;UInt64,\u2026&gt;, \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043f\u0440\u0438 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0435 \u0432\u0445\u043e\u0434\u043d\u044b\u0445 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u0431\u0443\u043b\u0435\u0432\u0441\u043a\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043c\u0435\u043d\u044c\u0448\u0435 \u0438\u043b\u0438 \u0440\u0430\u0432\u043d\u043e\u043c 40, \u0430 \u0432\u0442\u043e\u0440\u043e\u0439, \u043e\u0441\u043d\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043d\u0430 \u043f\u043e\u0438\u0441\u043a\u0435 \u0432 \u0442\u0440\u043e\u0438\u0447\u043d\u043e\u043c \u0434\u0435\u0440\u0435\u0432\u0435, \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u043f\u0440\u0438 \u0431\u043e\u043b\u044c\u0448\u0435\u043c \u0438\u0445 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0435. \u0422\u0430\u043a\u043e\u0435 \u0440\u0430\u0437\u0434\u0432\u043e\u0435\u043d\u0438\u0435 \u043e\u0431\u0443\u0441\u043b\u043e\u0432\u043b\u0435\u043d\u043e \u0442\u0435\u043c, \u0447\u0442\u043e \u043f\u0435\u0440\u0432\u044b\u0439 \u0441\u043f\u043e\u0441\u043e\u0431 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0431\u044b\u0441\u0442\u0440\u0435\u0435, \u0447\u0435\u043c \u0432\u0442\u043e\u0440\u043e\u0439, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0435\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442\u043d\u0435\u0435, \u043d\u043e \u043e\u043d \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u0438 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0435 \u0432\u0445\u043e\u0434\u043d\u044b\u0445 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u0434\u043e 40, \u0430 \u043f\u0440\u0438 \u0431\u043e\u043b\u044c\u0448\u0435\u043c \u0438\u0445 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0435 \u0432\u044b\u0445\u043e\u0434\u0438\u0442 \u0437\u0430 64 \u0431\u0438\u0442 \u0440\u0430\u0437\u0440\u044f\u0434\u043d\u0443\u044e \u0441\u0435\u0442\u043a\u0443 \u0446\u0435\u043b\u043e\u0447\u0438\u0441\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u0445\u044d\u0448-\u043a\u043e\u0434\u0430, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u043e\u0433\u043e \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430. \u0414\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e, \u0442. \u043a. \u0432 \u0442\u0435\u0440\u043c\u0430\u0445 \u0432\u043d\u0443\u0442\u0440\u0438 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430 \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u0442\u0440\u043e\u0438\u0447\u043d\u0430\u044f \u043b\u043e\u0433\u0438\u043a\u0430, \u0442\u043e \u043f\u0440\u0438 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0435 \u0432\u0445\u043e\u0434\u043d\u044b\u0445 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u0440\u0430\u0432\u043d\u043e\u043c 41 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0445\u044d\u0448-\u043a\u043e\u0434\u0430 <math>$inline$3^{41}$inline$<\/math> \u0443\u0436\u0435 \u043f\u0440\u0435\u0432\u044b\u0448\u0430\u0435\u0442 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 (<math>$inline$2^{64}$inline$<\/math>-1), \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0432 64 \u0431\u0438\u0442\u043d\u0443\u044e \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e.<\/p>\n<p>  \u0412\u0442\u043e\u0440\u043e\u0439 \u0441\u043f\u043e\u0441\u043e\u0431 \u0440\u0430\u0431\u043e\u0442\u044b \u043f. 1, \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0449\u0438\u0439 \u043f\u0440\u0438 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u0432\u043e \u0432\u0445\u043e\u0434\u043d\u044b\u0445 \u0442\u0435\u0440\u043c\u0430\u0445 \u0431\u043e\u043b\u044c\u0448\u0435 40, \u043e\u0441\u043d\u043e\u0432\u0430\u043d \u043d\u0430 \u043f\u043e\u0438\u0441\u043a\u043e\u0432\u043e\u043c \u0442\u0440\u043e\u0438\u0447\u043d\u043e\u043c \u0434\u0435\u0440\u0435\u0432\u0435 \u0442\u0435\u0440\u043c TreeFuncTerm. \u041f\u0440\u043e\u043c\u0435\u0436\u0443\u0442\u043e\u0447\u043d\u044b\u0435 \u0443\u0437\u043b\u044b \u0434\u0435\u0440\u0435\u0432\u0430 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u044b \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043a\u043b\u0430\u0441\u0441\u0430 TreeNodeMiddle. \u041a\u0430\u0436\u0434\u044b\u0439 \u0438\u0437 \u043d\u0438\u0445 \u043c\u043e\u0436\u0435\u0442 \u0441\u0441\u044b\u043b\u0430\u0442\u044c\u0441\u044f \u043c\u0430\u043a\u0441\u0438\u043c\u0443\u043c \u043d\u0430 \u0442\u0440\u0438 \u043f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0445 \u0443\u0437\u043b\u0430 \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0442\u043e\u0433\u043e \u0431\u044b\u043b\u0438 \u043b\u0438 \u0432 \u0434\u0435\u0440\u0435\u0432\u043e \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u044b \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u0442\u0435\u0440\u043c\u044b. \u0412\u0441\u0435 \u043a\u043e\u043d\u0435\u0447\u043d\u044b\u0435 \u0443\u0437\u043b\u044b \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u0430\u043c\u0438 \u043a\u043b\u0430\u0441\u0441\u0430 TreeNodeEnd, \u0433\u043b\u0443\u0431\u0438\u043d\u0430 \u0434\u043e \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043e\u0442 \u043a\u043e\u0440\u043d\u044f \u0443 \u043d\u0438\u0445 \u0432\u0441\u0435\u0445 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u0430 \u0438 \u0440\u0430\u0432\u043d\u0430 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0443 \u0432\u0445\u043e\u0434\u043d\u044b\u0445 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445. \u041a\u0430\u0436\u0434\u044b\u0439 \u043a\u043e\u043d\u0435\u0447\u043d\u044b\u0439 \u0443\u0437\u0435\u043b \u0442\u0430\u043a\u0436\u0435 \u0438\u043c\u0435\u0435\u0442 \u0441\u0441\u044b\u043b\u043a\u0443 \u043d\u0430 \u0434\u0440\u0443\u0433\u043e\u0439 \u0443\u0437\u0435\u043b TreeNodeEnd, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u044b\u043b \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d \u0434\u043e \u043d\u0435\u0433\u043e, \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u044f \u0442\u0435\u043c \u0441\u0430\u043c\u044b\u043c \u043e\u0434\u043d\u043e\u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0439 \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0439 \u0441\u043f\u0438\u0441\u043e\u043a. \u0422\u0430\u043a\u043e\u0433\u043e \u0440\u043e\u0434\u0430 \u0441\u043f\u0438\u0441\u043e\u043a \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0434\u043b\u044f \u0431\u044b\u0441\u0442\u0440\u043e\u0433\u043e \u043f\u0435\u0440\u0435\u0431\u043e\u0440\u0430 \u0432\u0441\u0435\u0445 \u043a\u043e\u043d\u0435\u0447\u043d\u044b\u0439 \u0443\u0437\u043b\u043e\u0432 \u043f\u043e\u0438\u0441\u043a\u043e\u0432\u043e\u0433\u043e \u0434\u0435\u0440\u0435\u0432\u0430 \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u0438\u0445 \u0441\u043a\u043b\u0435\u0438\u0432\u0430\u043d\u0438\u044f.<\/p>\n<p>  \u0415\u0441\u043b\u0438 \u0432 \u043f. 1 \u0434\u043b\u044f \u0442\u0435\u0440\u043c\u0430 \u043d\u0435 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0434\u0440\u0443\u0433\u043e\u0433\u043e \u043e\u0442\u043b\u0438\u0447\u0430\u044e\u0449\u0435\u0433\u043e\u0441\u044f \u043e\u0442 \u043d\u0435\u0433\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u043e\u0434\u043d\u043e\u0439 \u043f\u043e\u0437\u0438\u0446\u0438\u0438 \u0442\u0435\u0440\u043c\u0430, \u0442. \u0435. \u0442\u0435\u0440\u043c \u043d\u0438 \u0441 \u043a\u0435\u043c \u043d\u0435 \u0441\u043a\u043b\u0435\u0438\u0432\u0430\u0435\u0442\u0441\u044f, \u0442\u043e \u043e\u043d \u0441\u0447\u0438\u0442\u0430\u0435\u0442\u0441\u044f \u043e\u0434\u043d\u0438\u043c \u0438\u0437 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u0432 \u0440\u0430\u0431\u043e\u0442\u044b \u043f. 1 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430, \u0438\u0441\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0438\u0437 \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u0439 \u0440\u0430\u0431\u043e\u0442\u044b \u0432 \u043d\u0451\u043c \u0438 \u043f\u043e\u0441\u0442\u0443\u043f\u0430\u0435\u0442 \u043d\u0430 \u0432\u0445\u043e\u0434 \u043f\u0443\u043d\u043a\u0442\u0430 2 \u0440\u0430\u0431\u043e\u0442\u044b \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430, \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0432 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0435 ReduceRedundancyTerms.<\/p>\n<p>  \u041e\u0442\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u043d\u0438\u0435 \u0438\u0437\u0431\u044b\u0442\u043e\u0447\u043d\u044b\u0445 \u0442\u0435\u0440\u043c \u0432 ReduceRedundancyTerms \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430 \u043f\u0440\u0438\u0431\u043b\u0438\u0436\u0435\u043d\u043d\u043e\u0433\u043e \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u0437\u0430\u0434\u0430\u0447\u0438 \u043e \u043f\u043e\u043a\u0440\u044b\u0442\u0438\u0438 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0430 \u043f\u043e\u0434\u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0430\u043c\u0438 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u0434\u043b\u0438\u043d\u044b. \u041f\u043e\u043a\u0440\u044b\u0442\u0438\u0435, \u0431\u043b\u0438\u0437\u043a\u043e\u0435 \u043a \u043a\u0440\u0430\u0442\u0447\u0430\u0439\u0448\u0435\u043c\u0443 \u0434\u0430\u0451\u0442 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u043f\u043e\u043a\u0440\u044b\u0442\u0438\u0439 (\u0422\u041f), \u043e\u0441\u043d\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043d\u0430 \u043c\u0435\u0442\u043e\u0434\u0435 \u201c\u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0439 \u0441\u0442\u043e\u043b\u0431\u0435\u0446\u2013\u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u0430\u044f \u0441\u0442\u0440\u043e\u043a\u0430\u201d, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 <a href=\"http:\/\/www.studfiles.ru\/preview\/5175815\/page:4\/\">\u0437\u0434\u0435\u0441\u044c<\/a>.<\/p>\n<p>  \u041f\u0440\u0438\u0431\u043b\u0438\u0437\u0438\u0442\u0435\u043b\u044c\u043d\u0430\u044f \u043b\u043e\u0433\u0438\u043a\u0430 \u0435\u0433\u043e \u0440\u0430\u0431\u043e\u0442\u044b \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0432 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u043c:<\/p>\n<ol>\n<li> \u0418\u0441\u0445\u043e\u0434\u043d\u0430\u044f \u0442\u0430\u0431\u043b\u0438\u0446\u0430 \u0441\u0447\u0438\u0442\u0430\u0435\u0442\u0441\u044f \u0442\u0435\u043a\u0443\u0449\u0435\u0439 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u0443\u0435\u043c\u043e\u0439 \u0422\u041f, \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u0441\u0442\u0440\u043e\u043a \u043f\u043e\u043a\u0440\u044b\u0442\u0438\u0439 \u2013 \u043f\u0443\u0441\u0442\u043e;<\/li>\n<li> \u0412 \u0442\u0435\u043a\u0443\u0449\u0435\u0439 \u0442\u0430\u0431\u043b\u0438\u0446\u0435 \u0432\u044b\u0434\u0435\u043b\u044f\u0435\u0442\u0441\u044f \u0441\u0442\u043e\u043b\u0431\u0435\u0446 \u0441 \u043d\u0430\u0438\u043c\u0435\u043d\u044c\u0448\u0438\u043c \u0447\u0438\u0441\u043b\u043e\u043c \u0435\u0434\u0438\u043d\u0438\u0446. \u0421\u0440\u0435\u0434\u0438 \u0441\u0442\u0440\u043e\u043a, \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0438\u0445 \u0435\u0434\u0438\u043d\u0438\u0446\u044b \u0432 \u044d\u0442\u043e\u043c \u0441\u0442\u043e\u043b\u0431\u0446\u0435, \u0432\u044b\u0434\u0435\u043b\u044f\u0435\u0442\u0441\u044f \u043e\u0434\u043d\u0430 \u0441 \u043d\u0430\u0438\u0431\u043e\u043b\u044c\u0448\u0438\u043c \u0447\u0438\u0441\u043b\u043e\u043c \u0435\u0434\u0438\u043d\u0438\u0446. \u042d\u0442\u0430 \u0441\u0442\u0440\u043e\u043a\u0430 \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0432 \u043f\u043e\u043a\u0440\u044b\u0442\u0438\u0435, \u0442\u0435\u043a\u0443\u0449\u0430\u044f \u0442\u0430\u0431\u043b\u0438\u0446\u0430 \u0441\u043e\u043a\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f \u0432\u044b\u0447\u0435\u0440\u043a\u0438\u0432\u0430\u043d\u0438\u0435\u043c \u0432\u0441\u0435\u0445 \u0441\u0442\u043e\u043b\u0431\u0446\u043e\u0432, \u0432 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u0430\u044f \u0441\u0442\u0440\u043e\u043a\u0430 \u0438\u043c\u0435\u0435\u0442 \u0435\u0434\u0438\u043d\u0438\u0446\u0443;<\/li>\n<li> \u0415\u0441\u043b\u0438 \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0435 \u0435\u0441\u0442\u044c \u043d\u0435 \u0432\u044b\u0447\u0435\u0440\u043a\u043d\u0443\u0442\u044b\u0435 \u0441\u0442\u043e\u043b\u0431\u0446\u044b, \u0442\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u043f. 2, \u0438\u043d\u0430\u0447\u0435 \u2013 \u043f\u043e\u043a\u0440\u044b\u0442\u0438\u0435 \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u043e.<\/li>\n<\/ol>\n<p>  \u041f\u0440\u0438\u043c\u0435\u0447\u0430\u043d\u0438\u0435: \u041f\u0440\u0438 \u043f\u043e\u0434\u0441\u0447\u0451\u0442\u0435 \u0447\u0438\u0441\u043b\u0430 \u0435\u0434\u0438\u043d\u0438\u0446 \u0432 \u0441\u0442\u0440\u043e\u043a\u0435 \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0435\u0434\u0438\u043d\u0438\u0446\u044b \u0432 \u043d\u0435\u0432\u044b\u0447\u0435\u0440\u043a\u043d\u0443\u044b\u0445 \u0441\u0442\u043e\u043b\u0431\u0446\u0430\u0445.<\/p>\n<p>  \u0414\u043b\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0440\u0430\u0431\u043e\u0442\u044b \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u0434\u0432\u0435 \u0442\u0435\u0441\u0442\u043e\u0432\u044b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438. \u041f\u0435\u0440\u0432\u0430\u044f \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0430 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0434\u043b\u044f \u043d\u0430\u0431\u043e\u0440\u0430 \u0432\u0445\u043e\u0434\u043d\u044b\u0445 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e\u043c <i>N<\/i> \u0441\u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u043e\u0432\u043e\u043a\u0443\u043f\u043d\u043e\u0441\u0442\u044c \u0442\u0435\u0440\u043c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e\u043c <math>$inline$2^N$inline$<\/math>, \u0432\u044b\u0447\u0438\u0441\u043b\u0438\u0442\u044c \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u041b\u0424 \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0442\u0435\u0440\u043c\u0430 \u0438 \u0432\u044b\u0433\u0440\u0443\u0437\u0438\u0442\u044c \u0432 \u0444\u0430\u0439\u043b \u0442\u043e\u043b\u044c\u043a\u043e \u0442\u0435 \u0442\u0435\u0440\u043c\u044b, \u0434\u043b\u044f \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0435 \u0438\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0431\u044b\u043b\u043e \u0440\u0430\u0432\u043d\u043e TRUE. \u041f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u043f\u0440\u043e\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0440\u0430\u0431\u043e\u0442\u044b \u043c\u0438\u043d\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0439 \u0444\u043e\u0440\u043c\u044b \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043f\u0443\u0442\u0451\u043c \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f \u0435\u0451 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0442\u0435\u0440\u043c\u0430 \u0438 \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044f \u0441 \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u043c.<\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">TestQuineMcCluskeyRandom (\u043d\u0430\u0436\u0430\u0442\u044c \u0434\u043b\u044f \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0430)<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code>public static void TestQuineMcCluskeyRandom(string sFileName, int iVariableAmount) {   int iTotalCombines = 1 &lt;&lt; iVariableAmount;   ICollection&lt;KeyValuePair&lt;string, bool&gt;&gt; FuncResult = new List&lt;KeyValuePair&lt;string, bool&gt;&gt;(iTotalCombines);   File.Delete(sFileName);   Random rnd = new Random();   int iLogicFuncMask = 0;   while (iLogicFuncMask == 0) iLogicFuncMask = rnd.Next(iTotalCombines);   for (int iCounter = 0; iCounter &lt; iTotalCombines; iCounter++)   {     int iCurValue = iCounter;     string sLine = &quot;&quot;;     for (int i = 0; i &lt; iVariableAmount; i++)     {       sLine += (iCurValue % 2).ToString();       iCurValue \/= 2;     }     bool bFuncValue = (iCounter & iLogicFuncMask) &gt; 0;     if (bFuncValue)     {       File.AppendAllText(sFileName, sLine + Environment.NewLine);     }     FuncResult.Add(new KeyValuePair&lt;string, bool&gt;(sLine, bFuncValue));   }   \/\/\u0417\u0430\u043f\u0443\u0441\u043a \u0432 \u0440\u0430\u0431\u043e\u0442\u0443   DateTime DtStart = DateTime.Now;   Console.WriteLine(&quot;\u0421\u0442\u0430\u0440\u0442 - &quot; + DtStart.ToLongTimeString());   Quine_McCluskey Logic = new Quine_McCluskey();   Logic.Start(sFileName);   DateTime DtEnd = DateTime.Now;   TimeSpan Elapsed = DtEnd - DtStart;   Console.WriteLine(&quot;\u0417\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u0435 - &quot; + DtEnd.ToLongTimeString());   Console.WriteLine(&quot;\u0414\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c - &quot; + String.Format(&quot;{0:00}:{1:00}:{2:00}&quot;,     Elapsed.Hours, Elapsed.Minutes, Elapsed.Seconds));   \/\/\u0421\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u0432   int iErrorsCounter = 0;   foreach (KeyValuePair&lt;string, bool&gt; kvp in FuncResult)   {     if (Logic.Result.Calculate(kvp.Key.ToArray()) != kvp.Value) iErrorsCounter++;   }   Console.WriteLine(&quot;\u041a\u043e\u043b-\u0432\u043e \u0442\u0435\u0440\u043c\u043e\u0432 = &quot; + Logic.Result.Terms.Count);   Console.WriteLine(&quot;\u041a\u043e\u043b-\u0432\u043e \u043e\u0448\u0438\u0431\u043e\u043a = &quot; + iErrorsCounter);   Console.ReadLine(); } <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  \u0412\u0442\u043e\u0440\u0430\u044f \u0442\u0435\u0441\u0442\u043e\u0432\u0430\u044f \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0430 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0438\u0437 \u0444\u0430\u0439\u043b\u0430 \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c \u043d\u0430\u0431\u043e\u0440\u044b, \u0437\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0435 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0439 \u0442\u0435\u0441\u0442\u043e\u0432\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0435\u0439 TestQuineMcCluskeyRandom, \u0434\u043b\u044f \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0431\u0443\u043b\u0435\u0432\u0441\u043a\u0430\u044f \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0430 \u0434\u043e\u043b\u0436\u043d\u0430 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f TRUE \u0438 \u043f\u0440\u043e\u0432\u0435\u0441\u0442\u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0443 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0440\u0430\u0431\u043e\u0442\u044b \u043c\u0438\u043d\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438.<\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">TestQuineMcCluskeyFile (\u043d\u0430\u0436\u0430\u0442\u044c \u0434\u043b\u044f \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0430)<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code>public static void TestQuineMcCluskeyFile(string sFileName, int iVariableAmount) {   int iTotalCombines = 1 &lt;&lt; iVariableAmount;   ICollection&lt;KeyValuePair&lt;string, bool&gt;&gt; FuncResult = new List&lt;KeyValuePair&lt;string, bool&gt;&gt;(iTotalCombines);   string sFileContent = File.ReadAllText(sFileName);   for (int iCounter = 0; iCounter &lt; iTotalCombines; iCounter++)   {     int iCurValue = iCounter;     string sLine = &quot;&quot;;     for (int i = 0; i &lt; iVariableAmount; i++)     {       sLine += (iCurValue % 2).ToString();       iCurValue \/= 2;     }     bool bFuncValue = sFileContent.Contains(sLine + Environment.NewLine);     FuncResult.Add(new KeyValuePair&lt;string, bool&gt;(sLine, bFuncValue));   }   \/\/\u0417\u0430\u043f\u0443\u0441\u043a \u0432 \u0440\u0430\u0431\u043e\u0442\u0443   DateTime DtStart = DateTime.Now;   Console.WriteLine(&quot;\u0421\u0442\u0430\u0440\u0442 - &quot; + DtStart.ToLongTimeString());   Quine_McCluskey Logic = new Quine_McCluskey();   Logic.Start(sFileName);   DateTime DtEnd = DateTime.Now;   TimeSpan Elapsed = DtEnd - DtStart;   Console.WriteLine(&quot;\u0417\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u0435 - &quot; + DtEnd.ToLongTimeString());   Console.WriteLine(&quot;\u0414\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c - &quot; + String.Format(&quot;{0:00}:{1:00}:{2:00}&quot;,     Elapsed.Hours, Elapsed.Minutes, Elapsed.Seconds));   \/\/\u0421\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u0432   int iErrorsCounter = 0;   foreach (KeyValuePair&lt;string, bool&gt; kvp in FuncResult)   {     if (Logic.Result.Calculate(kvp.Key.ToArray()) != kvp.Value) iErrorsCounter++;   }   Console.WriteLine(&quot;\u041a\u043e\u043b-\u0432\u043e \u0442\u0435\u0440\u043c\u043e\u0432 = &quot; + Logic.Result.Terms.Count);   Console.WriteLine(&quot;\u041a\u043e\u043b-\u0432\u043e \u043e\u0448\u0438\u0431\u043e\u043a = &quot; + iErrorsCounter);   Console.ReadLine(); } <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  \u041f\u0440\u0438 \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430 \u041c\u0430\u043a-\u041a\u043b\u0430\u0441\u043a\u0438 \u0432\u044b\u044f\u0432\u043b\u0435\u043d \u0435\u0451 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043e\u043a, \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u044e\u0449\u0438\u0439\u0441\u044f \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u043f\u0440\u0438 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0435 \u0432\u0445\u043e\u0434\u043d\u044b\u0445 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u0432 \u0442\u0435\u0440\u043c\u0430\u0445 \u0431\u043e\u043b\u0435\u0435 \u0438\u043b\u0438 \u0440\u0430\u0432\u043d\u043e\u043c 16 \u0440\u0430\u0431\u043e\u0442\u0430 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u0437\u0430\u0432\u0435\u0440\u0448\u0430\u0435\u0442\u0441\u044f \u0432 \u0441\u0432\u044f\u0437\u0438 \u0441 \u043d\u0435\u0445\u0432\u0430\u0442\u043a\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u0438 \u0432 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0435 Skleivanie \u043d\u0430 \u0441\u0442\u0440\u043e\u043a\u0430\u0445:<\/p>\n<pre><code>X2Tree.Add(iCode, new TreeNodeEnd(x1.Value.Term, x1.Value, pSkleivNode, null, X2Tree.Count)); X2Tree.AddTerm(x1.Term, x1, kvp.Value); <\/code><\/pre>\n<p>  \u041f\u0440\u0438\u0447\u0451\u043c \u044d\u0442\u0430 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u0435\u0442 \u043f\u0440\u0438 \u0440\u0430\u0431\u043e\u0442\u0435 \u043a\u0430\u043a \u043f\u043e \u043f\u0435\u0440\u0432\u043e\u043c\u0443, \u0442\u0430\u043a \u0438 \u043f\u043e \u0432\u0442\u043e\u0440\u043e\u043c\u0443 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0443 \u0440\u0430\u0431\u043e\u0442\u044b \u043f\u0443\u043d\u043a\u0442\u0430 1 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u043f\u043e\u0440\u044f\u0434\u043a\u0443 \u0441\u0442\u0440\u043e\u043a \u0432\u044b\u0448\u0435, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043a\u0440\u0430\u0442\u043a\u043e \u043e\u043f\u0438\u0441\u0430\u043d\u044b \u0432 \u043d\u0430\u0447\u0430\u043b\u0435 \u0441\u0442\u0430\u0442\u044c\u0438.<\/p>\n<p>  \u041e\u0434\u043d\u0430\u043a\u043e \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u0437\u0430\u043c\u0435\u0442\u0438\u0442\u044c, \u0447\u0442\u043e \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u043d\u0435\u0445\u0432\u0430\u0442\u043a\u0438 \u043f\u0430\u043c\u044f\u0442\u0438 \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435, \u0435\u0441\u043b\u0438 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043d\u0430 \u043d\u0430\u0431\u043e\u0440\u0435 \u0432\u0445\u043e\u0434\u043d\u044b\u0445 \u0442\u0435\u0440\u043c \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u043c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043c\u0435\u043d\u044c\u0448\u0435 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 <math>$inline$2^N$inline$<\/math>, \u0433\u0434\u0435 <i>N<\/i> \u2013 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445. \u0415\u0441\u043b\u0438 \u0436\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0441\u043e\u043a\u0440\u0430\u0449\u0451\u043d\u043d\u044b\u0439 (\u043d\u0435\u043f\u043e\u043b\u043d\u044b\u0439) \u043d\u0430\u0431\u043e\u0440 \u0441 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e\u043c Q &lt; Q\u043f\u043e\u0440 &lt; <math>$inline$2^N$inline$<\/math>, \u0442\u043e \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u043d\u0435 \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u0435\u0442 \u0434\u043e \u0442\u043e\u0439 \u043f\u043e\u0440\u044b, \u043f\u043e\u043a\u0430 \u0440\u0430\u0437\u043c\u0435\u0440 \u0432\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u043d\u0430\u0431\u043e\u0440\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u043d\u0435 \u043f\u0435\u0440\u0435\u0440\u0430\u0441\u0442\u0451\u0442 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u0440\u043e\u0433 Q\u043f\u043e\u0440, \u043a\u0440\u0438\u0442\u0438\u0447\u043d\u044b\u0439 \u0434\u043b\u044f \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430.<\/p>\n<p>  \u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0445 \u043f\u0443\u0442\u0435\u0439 \u043f\u0440\u0435\u043e\u0434\u043e\u043b\u0435\u043d\u0438\u044f \u044d\u0442\u043e\u0439 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043b\u0430\u0441\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f TreeNodeEnd \u0438 TreeNodeMiddle \u043d\u0435 \u0432 \u0432\u0438\u0434\u0435 \u043a\u043b\u0430\u0441\u0441\u043e\u0432 \u044f\u0437\u044b\u043a\u0430 C#, \u0430 \u0432 \u0432\u0438\u0434\u0435 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440. \u041d\u043e \u0432 \u0441\u0432\u044f\u0437\u0438 \u0441 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0438\u0430\u043b\u044c\u043d\u044b\u043c \u043e\u0442\u043b\u0438\u0447\u0438\u0435\u043c \u043c\u0435\u0436\u0434\u0443 \u043a\u043b\u0430\u0441\u0441\u0430\u043c\u0438 \u0438 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430\u043c\u0438, \u0441\u043e\u0441\u0442\u043e\u044f\u0449\u0430\u044f \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u043d\u0435\u043b\u044c\u0437\u044f \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0441\u0441\u044b\u043b\u043a\u0443 \u043d\u0430 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443, \u044d\u0442\u043e\u0442 \u043f\u0443\u0442\u044c \u043e\u043a\u0430\u0437\u0430\u043b\u0441\u044f \u0442\u0443\u043f\u0438\u043a\u043e\u0432\u044b\u043c \u0432\u0441\u043b\u0435\u0434\u0441\u0442\u0432\u0438\u0435 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u0438\u0441\u0441\u043b\u0435\u0434\u0443\u0435\u043c\u0430\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0432 \u0441\u0432\u043e\u0435\u0439 \u0440\u0430\u0431\u043e\u0442\u0435 \u043e\u043f\u0438\u0440\u0430\u0435\u0442\u0441\u044f \u0438\u043c\u0435\u043d\u043d\u043e \u043d\u0430 \u0441\u0441\u044b\u043b\u043a\u0438 \u043a TreeNodeEnd \u0438 TreeNodeMiddle.<\/p>\n<p>  \u0414\u0440\u0443\u0433\u0438\u043c \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435\u043c \u043f\u0440\u0435\u043e\u0434\u043e\u043b\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u0441 \u043f\u0430\u043c\u044f\u0442\u044c\u044e \u0431\u044b\u043b\u043e \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u0430\u044f \u043e\u0447\u0438\u0441\u0442\u043a\u0430 \u043f\u0430\u043c\u044f\u0442\u0438 \u0441\u0431\u043e\u0440\u0449\u0438\u043a\u043e\u043c \u043c\u0443\u0441\u043e\u0440\u0430 \u043f\u0435\u0440\u0435\u0434 \u043a\u0430\u0436\u0434\u043e\u0439 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0435\u0439 \u0432 \u0432\u043d\u0443\u0442\u0440\u0438 \u043f. 1, \u0433\u0434\u0435 \u0438 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0447\u0440\u0435\u0437\u0432\u044b\u0447\u0430\u0439\u043d\u043e\u0435 \u043f\u043e\u0442\u0440\u0435\u0431\u043b\u0435\u043d\u0438\u0435 \u043f\u0430\u043c\u044f\u0442\u0438. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0432 \u043a\u043e\u0434 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 LogicFuncMinimize \u0431\u044b\u043b\u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u044b \u044f\u0432\u043d\u044b\u0435 \u0432\u044b\u0437\u043e\u0432\u044b \u0441\u0431\u043e\u0440\u0449\u0438\u043a\u0430 \u043c\u0443\u0441\u043e\u0440\u0430 (garbage collector). \u0412\u044b\u044f\u0441\u043d\u0438\u043b\u043e\u0441\u044c, \u0447\u0442\u043e \u0441 \u0443\u0431\u043e\u0440\u043a\u043e\u0439 \u043c\u0443\u0441\u043e\u0440\u0430 \u0432\u0440\u0435\u043c\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043c\u0435\u043d\u044c\u0448\u0435, \u0447\u0435\u043c \u0431\u0435\u0437 \u043d\u0435\u0451! \u0425\u043e\u0442\u044f, \u043a\u0430\u0437\u0430\u043b\u043e\u0441\u044c \u0431\u044b, \u043d\u0430 \u0440\u0430\u0431\u043e\u0442\u0443 \u0441\u0431\u043e\u0440\u0449\u0438\u043a\u0430 \u043c\u0443\u0441\u043e\u0440\u0430 \u0434\u043e\u043b\u0436\u043d\u043e \u0442\u0440\u0430\u0442\u0438\u0442\u044c\u0441\u044f \u0432\u0440\u0435\u043c\u044f, \u0447\u0442\u043e \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0443\u0445\u0443\u0434\u0448\u0438\u0442\u044c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442. \u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0435 \u043e\u0431\u044a\u044f\u0441\u043d\u0435\u043d\u0438\u0435 \u044d\u0442\u043e\u0433\u043e \u00ab\u0444\u0435\u043d\u043e\u043c\u0435\u043d\u0430\u00bb \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u043e\u0441\u0432\u043e\u0431\u043e\u0436\u0434\u0435\u043d\u0438\u0435 \u043f\u0430\u043c\u044f\u0442\u0438 \u0441\u0431\u043e\u0440\u0449\u0438\u043a\u043e\u043c \u0443\u043c\u0435\u043d\u044c\u0448\u0430\u0435\u0442 \u0435\u0451 \u0434\u0435\u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044e \u0432 \u043a\u0443\u0447\u0435, \u0447\u0442\u043e \u043f\u043e\u043b\u043e\u0436\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0441\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438 \u043f\u043e\u0438\u0441\u043a\u0430 \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u044b\u0445 \u0443\u0447\u0430\u0441\u0442\u043a\u043e\u0432 \u043f\u0440\u0438 \u043f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u043c \u0435\u0451 \u043c\u0430\u0441\u0441\u043e\u0432\u043e\u043c \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u0438\u0438.<\/p>\n<p>  \u041a\u0430\u043a\u0438\u0445-\u043b\u0438\u0431\u043e \u0438\u043d\u044b\u0445 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0435\u0439 \u043d\u0430 \u043f\u0440\u0435\u043e\u0434\u043e\u043b\u0435\u043d\u0438\u0435 \u043d\u0435\u043f\u0440\u0438\u044f\u0442\u043d\u043e\u0441\u0442\u0435\u0439 \u0441 \u043d\u0435\u0445\u0432\u0430\u0442\u043a\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u0438 \u044f \u043d\u0435 \u0432\u0438\u0436\u0443. \u0412 \u0441\u0432\u044f\u0437\u0438 \u0441 \u0447\u0435\u043c \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u0435\u0442 \u0432\u043e\u043f\u0440\u043e\u0441 \u043c\u043e\u0436\u043d\u043e \u043b\u0438 \u0447\u0442\u043e-\u0442\u043e \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c, \u0447\u0442\u043e\u0431\u044b \u0434\u043e\u0431\u0438\u0442\u044c\u0441\u044f \u0441\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u044b \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430 \u043d\u0430 \u043f\u043e\u043b\u043d\u043e\u043c \u043d\u0430\u0431\u043e\u0440\u0435 \u0432\u0445\u043e\u0434\u043d\u044b\u0445 \u0442\u0435\u0440\u043c \u0441 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e\u043c \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u0445\u043e\u0442\u044f \u0431\u044b \u0434\u043e 30? \u0418\u043b\u0438 \u044d\u0442\u043e \u0432\u0440\u043e\u0436\u0434\u0451\u043d\u043d\u043e\u0435 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e \u044d\u0442\u043e\u0433\u043e \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043d\u0435 \u043f\u043e\u0434\u0434\u0430\u0451\u0442\u0441\u044f \u043a\u043e\u0440\u0440\u0435\u043a\u0446\u0438\u0438?<\/p>\n<p>  \u0422\u0435\u043c \u043d\u0435 \u043c\u0435\u043d\u0435\u0435, \u043d\u0435\u0441\u043c\u043e\u0442\u0440\u044f \u043d\u0430 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0435 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u0441 \u043f\u0430\u043c\u044f\u0442\u044c\u044e, \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0435\u043d\u043d\u0430\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430 \u041c\u0430\u043a-\u041a\u043b\u0430\u0441\u043a\u0438 \u0432 \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0445 \u0437\u0430\u0434\u0430\u0447\u0430\u0445 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0430 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0431\u044b\u0441\u0442\u0440\u043e\u0433\u043e \u0438 \u043d\u0430\u0434\u0451\u0436\u043d\u043e\u0433\u043e \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0442\u043e\u0440\u0430 \u041b\u0424, \u0437\u0430\u0434\u0430\u043d\u043d\u044b\u0445 \u043d\u0430\u0431\u043e\u0440\u043e\u043c \u0442\u0435\u0440\u043c \u0441\u0432\u043e\u0438\u0445 \u0432\u0445\u043e\u0434\u043d\u044b\u0445 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445, \u043f\u0440\u0438 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u0438\u0441\u0442\u0438\u043d\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435, \u043a\u043e\u0433\u0434\u0430 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 <i>N<\/i>&lt;16 \u0438\u043b\u0438 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0442\u0435\u0440\u043c Q &lt;&lt; <math>$inline$2^N$inline$<\/math>.<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:\/\/habrahabr.ru\/post\/328506\/\"> https:\/\/habrahabr.ru\/post\/328506\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u041a \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u0438\u044e \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u0435\u0442\u0441\u044f \u043e\u0434\u043d\u0430 \u0438\u0437 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0445 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0439 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430 \u043c\u0438\u043d\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438 \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0438\u0445 (\u0431\u0443\u043b\u0435\u0432\u044b\u0445) \u0444\u0443\u043d\u043a\u0446\u0438\u0439 (\u041b\u0424) \u0437\u0430\u0434\u0430\u043d\u043d\u044b\u0445 \u0432 \u0432\u0438\u0434\u0435 \u0441\u043e\u0432\u0435\u0440\u0448\u0435\u043d\u043d\u043e\u0439 \u0434\u0438\u0437\u044a\u044e\u043d\u043a\u0442\u0438\u0432\u043d\u043e\u0439 \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e\u0439 \u0444\u043e\u0440\u043c\u044b (\u0421\u0414\u041d\u0424) \u043c\u0435\u0442\u043e\u0434\u043e\u043c \u041a\u0432\u0430\u0439\u043d\u0430\\\u041c\u0430\u043a-\u041a\u043b\u0430\u0441\u043a\u0438 (\u0434\u0430\u043b\u0435\u0435 \u043f\u0440\u043e\u0441\u0442\u043e \u041c\u0430\u043a-\u041a\u043b\u0430\u0441\u043a\u0438) \u0438 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b, \u0432\u044b\u044f\u0432\u043b\u0435\u043d\u043d\u044b\u0435 \u043f\u0440\u0438 \u0435\u0451 \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438. \u0412 \u0438\u0441\u0441\u043b\u0435\u0434\u0443\u0435\u043c\u043e\u043c \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0435 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u041c\u0430\u043a-\u041a\u043b\u0430\u0441\u043a\u0438 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d \u043d\u0430 \u044f\u0437\u044b\u043a\u0435 C# \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c Generic-\u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 .NET.<\/p>\n<p>  \u0425\u043e\u0442\u0435\u043b\u043e\u0441\u044c \u0431\u044b \u043e\u0442\u043c\u0435\u0442\u0438\u0442\u044c, \u0447\u0442\u043e \u0437\u0430\u0434\u0430\u0447\u0430 \u043c\u0438\u043d\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438 \u041b\u0424, \u043f\u043e \u043c\u043e\u0435\u043c\u0443 \u043c\u043d\u0435\u043d\u0438\u044e, \u043d\u0435\u0437\u0430\u0441\u043b\u0443\u0436\u0435\u043d\u043d\u043e \u043e\u0431\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0441\u0442\u043e\u0440\u043e\u043d\u043e\u0439 \u0432 \u0442\u0435\u043c\u0430\u0442\u0438\u043a\u0435 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u043e\u0432 \u043c\u0430\u0448\u0438\u043d\u043d\u043e\u0433\u043e \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u044f, \u0442. \u043a. \u043f\u043e \u0441\u0432\u043e\u0435\u043c\u0443 \u0441\u043c\u044b\u0441\u043b\u0443 \u043e\u043d\u0430 \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u0442 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0443 \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u044f \u0441 \u0443\u0447\u0438\u0442\u0435\u043b\u0435\u043c \u0434\u043b\u044f \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u043e\u0433\u043e \u043d\u0430\u0431\u043e\u0440\u0430 \u0432\u0445\u043e\u0434\u043d\u044b\u0445 \u0442\u0435\u0440\u043c (\u043f\u0440\u043e\u0441\u0442\u044b\u0445 \u043a\u043e\u043d\u044a\u044e\u043d\u043a\u0446\u0438\u0439), \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u0443\u0435\u043c\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u0438\u0441\u0442\u0438\u043d\u043d\u043e\u0435 (true) \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435. \u0421\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e, \u044d\u0442\u043e\u0442 \u043d\u0430\u0431\u043e\u0440 \u0432\u0445\u043e\u0434\u043d\u044b\u0445 \u0442\u0435\u0440\u043c, \u0438\u0437 \u043e\u0431\u0449\u0435\u0433\u043e \u0438\u0445 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0433\u043e \u0447\u0438\u0441\u043b\u0430 <math>$inline$2^N$inline$<\/math>, \u0433\u0434\u0435 <i>N<\/i> \u2013 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0434\u0432\u0443\u0445 \u043a\u043b\u0430\u0441\u0441\u043e\u0432\u044b\u0445 \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u0430\u043b\u044c\u043d\u044b\u0445 (\u0434\u0432\u043e\u0438\u0447\u043d\u044b\u0445) \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u0432 \u0442\u0435\u0440\u043c\u0430\u0445, \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043e\u0431\u0443\u0447\u0430\u044e\u0449\u0435\u0439 \u0432\u044b\u0431\u043e\u0440\u043a\u043e\u0439 \u0434\u043b\u044f \u0437\u0430\u0434\u0430\u0447\u0438 \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u044f \u0441 \u0443\u0447\u0438\u0442\u0435\u043b\u0435\u043c \u0441 \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u044b\u043c (\u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0438\u0441\u0442\u0438\u043d\u043d\u044b\u043c) \u0432\u044b\u0445\u043e\u0434\u043d\u044b\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435\u043c \u0446\u0435\u043b\u0435\u0432\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438. \u0414\u043b\u044f \u0432\u0441\u0435\u0445 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0445 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0445 \u0442\u0435\u0440\u043c, \u043d\u0435 \u0432\u0445\u043e\u0434\u044f\u0449\u0438\u0445 \u0432 \u043e\u0431\u0443\u0447\u0430\u044e\u0449\u0443\u044e \u0432\u044b\u0431\u043e\u0440\u043a\u0443, \u043c\u0438\u043d\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u0430\u044f \u041b\u0424 \u0434\u043e\u043b\u0436\u043d\u0430 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0442\u044c \u043b\u043e\u0436\u043d\u043e\u0435 (false) \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435.<\/p>\n<p>  \u041e\u0434\u043d\u0438\u043c \u0438\u0437 \u043b\u0435\u0433\u043a\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u043c\u044b\u0445 \u0434\u043b\u044f \u043b\u044e\u0431\u043e\u0433\u043e \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u0432\u0445\u043e\u0434\u043d\u044b\u0445 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u043e\u0432 \u043c\u0438\u043d\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438 \u041b\u0424 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043c\u0435\u0442\u043e\u0434 \u041c\u0430\u043a-\u041a\u043b\u0430\u0441\u043a\u0438. \u0421\u043e\u0433\u043b\u0430\u0441\u043d\u043e \u0442\u0435\u043e\u0440\u0438\u0438 \u043c\u0435\u0442\u043e\u0434 \u041c\u0430\u043a-\u041a\u043b\u0430\u0441\u043a\u0438 \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0438\u0437 \u0434\u0432\u0443\u0445 \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0445 \u044d\u0442\u0430\u043f\u043e\u0432:  <\/p>\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-286243","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/286243","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=286243"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/286243\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=286243"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=286243"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=286243"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}