рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рд╣рдо рдирдереБрде рдХреЗ "рдЕрд▓реНрдЧреЛрд░рд┐рдердо рдПрдХреНрд╕" рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рд╕реБрдбреЛрдХреВ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕рдХреЗ рдЖрд╡реЗрджрди рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рддреЗ рд╣реИрдВред рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреА рд╕реБрдВрджрд░рддрд╛ рдпрд╣ рд╣реИ рдХрд┐ рд╕реБрдбреЛрдХреВ рдХреЛ рдХрд┐рд╕реА рднреА рдЙрдиреНрдирдд рд╕рдорд╛рдзрд╛рди рддрдХрдиреАрдХреЛрдВ рдХреА рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХреЗ рдмрд┐рдирд╛ рдЬрд▓реНрджреА рд╕реЗ рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдпрд╣ рд╕рдм рд╢реБрд░реВ рд╣реБрдЖ, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдпреВрд▓рд░ рдХреЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд╕рд╛рде, рдЬрд╣рд╛рдВ, рдПрдХ рдЙрддреНрддрд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ 50 рд╕реБрдбреЛрдХреВ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдФрд░ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЙрдиреНрд╣реЛрдВрдиреЗ рдПрдХ рдореВрд░реНрдЦрддрд╛рдкреВрд░реНрдг рдЦреЛрдЬ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдХрд╛рд░реНрдпрдХреНрд░рдо рд▓рд┐рдЦрдХрд░ рдЗрд╕рдХрд╛ рдЙрддреНрддрд░ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛, рд▓реЗрдХрд┐рди рдХрд┐рд╕реА рддрд░рд╣ рд╕рдорд╛рдзрд╛рди рдХреА рдЧрддрд┐ рдХреЗ рд╕рд╛рде рдХреБрдЫ рдЕрд╕рдВрддреЛрд╖ рдерд╛ред рдпрд╣ рджреЗрдЦрдиреЗ рдХреЗ рдмрд╛рдж рдХрд┐ рд╕рд╛рдорд╛рдиреНрдп рд▓реЛрдЧ рд╕реБрдбреЛрдХреБ рдХреЛ рдХреИрд╕реЗ рд╣рд▓ рдХрд░рддреЗ рд╣реИрдВ, рдореИрдВрдиреЗ рдкрд╛рдпрд╛ рдХрд┐ рдбреЛрдирд╛рд▓реНрдб рдиреЙрдЯ рджреНрд╡рд╛рд░рд╛ рдЖрд╡рд┐рд╖реНрдХрд╛рд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдЕрд▓реНрдЧреЛрд░рд┐рдердо рдПрдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдЗрд╕рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИред
рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдПрдХреНрд╕
рдпрд╣ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рд╕реЗрдЯ рдХреЛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдХрд╡рд░ рдХрд░рдиреЗ рдХреА рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рддрд╛ рд╣реИред рдпрд╛, рдпрджрд┐ рдЖрдк рдЪрд╛рд╣реЗрдВ, рддреЛ рдпрд╣ рдПрдХ "рдЕрд╕рддрдд рдкрд╣реЗрд▓реА" рдПрдХрддреНрд░ рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдЙрдкрд▓рдмреНрдз рдЯреБрдХрдбрд╝реЛрдВ рдХреЗ рдЖрдХрд╛рд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рд░рдЦрддрд╛ рд╣реИред рдФрдкрдЪрд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ:
- рдХрдИ рдПрд╕ рд╣реИрдВ
- рдЗрд╕ рд╕реЗрдЯ рдХреЗ рд╕рдмрд╕реЗрдЯ Y рдХрд╛ рдПрдХ рд╕реЗрдЯ рд╣реИ
- рдХрд╛рд░реНрдп рд╡рд╛рдИ рд╕реЗ рдЪреБрдирдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИ рдРрд╕реЗ рддрддреНрд╡ рд╡рд╛рдИ * рдХрд┐ рдПрд╕ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рддрддреНрд╡ рд╡рд╛рдИ * рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХреЗрд╡рд▓ рдПрдХ рд╕реЗрдЯ рдореЗрдВ рдирд┐рд╣рд┐рдд рд╣реИред
- рдпрд╣реА рд╣реИ, Y рдореЗрдВ рд╕рднреА рд╕реЗрдЯреЛрдВ рдХрд╛ рдорд┐рд▓рди рд╕реЗрдЯ S рдХреЛ рдврдВрдХрддрд╛ рд╣реИ (рдХрд╡рд░ рдХрд░рддрд╛ рд╣реИ), рдФрд░ Y * рдореЗрдВ рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рдХреЛрдИ рдЬреЛрдбрд╝-рддреЛрдбрд╝ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд╕реЗрдЯ рдирд╣реАрдВ рд╣реИрдВ
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╕реЗрдЯреЛрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ
рдПрд╕ = {рез, реи, рей, рек, рел} рдФрд░
Y = { A = {1, 2},
рдмреА = {реи, рей},
C = {1, 5},
D = {1, 4},
E = {5}}
рд╕реЗрдЯ рдмреА , рдбреА, рдФрд░ рдИ рд╕реЗрдЯ рдПрд╕ рдХрд╛ рдПрдХ рд╕рдЯреАрдХ рдХрд╡рд░ рдмрдирд╛рддреЗ рд╣реИрдВ ред
рдПрдХреНрд╕ рдирде рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреЗ рд▓рд┐рдП, рд╕реЗрдЯ рд╡рд╛рдИ рдХреЛ рдПрдХ рджреНрд╡рд┐рдЖрдзрд╛рд░реА рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХреЗ рд░реВрдк рдореЗрдВ рджрд░реНрд╢рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд╣рд╛рдВ рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЗ рддрддреНрд╡ рд╡рд╛рдИ рд╕реЗ рдореЗрд▓ рдЦрд╛рддреЗ рд╣реИрдВ, рдФрд░ рдП рдЖрдИ, рдЬреЗ = 1, рдЕрдЧрд░ рдПрд╕ рдЬреЗ рд╡рд╛рдИ рдореЗрдВ рд╣реИ ред рдпрд╛рдиреА рдКрдкрд░ рджрд┐рдП рдЧрдП рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:
рд╕рдЯреАрдХ рдХрд╡рд░реЗрдЬ рдЦреЛрдЬ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ:
- рдЗрдирдкреБрдЯ рдбреЗрдЯрд╛: рд╕реЗрдЯ рдПрд╕ рдФрд░ рд╡рд╛рдИ ; рд╕рдВрднрд╛рд╡рд┐рдд рд░реВрдк рд╕реЗ рдХрд╡рд░реЗрдЬ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд┐рдП рдЧрдП рд╕реЗрдЯреЛрдВ рдХрд╛
Stack
(рд╢реБрд░реВ рдореЗрдВ рдЦрд╛рд▓реА рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдпрд╛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХреБрдЫ рддрддреНрд╡ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ)
- рдпрджрд┐ рд╕реЗрдЯ рдПрд╕ рдЦрд╛рд▓реА рд╣реИ, рддреЛ рд╡рд╛рдВрдЫрд┐рдд рдХрд╡рд░ рд╕реНрдЯреИрдХ рдкрд░ рд╣реИред
- рдпрджрд┐ рд╕реЗрдЯ рд╡рд╛рдИ рдЦрд╛рд▓реА рд╣реИ, рддреЛ рдХрд╡рд░рд┐рдВрдЧ рдирд╣реАрдВ рдорд┐рд▓реАред
- рд╣рдо рд╕реЗрдЯ S рдореЗрдВ рдЙрд╕ рддрддреНрд╡ рдХреА рддрд▓рд╛рд╢ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдЬреЛ Y рдореЗрдВ рд╕реЗрдЯ рдХреА рдиреНрдпреВрдирддрдо рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИ ред
- Y рд╕реЗ рдЪреБрдиреЗрдВ рд╕рднреА рдкрдВрдХреНрддрд┐рдпрд╛рдБ рд╣реИрдВ рдЬрд┐рдирдореЗрдВ X рд╣реИ ред
- рдкреНрд░рддреНрдпреЗрдХ рд╕реЗрдЯ рдПрдХреНрд╕ рдХреЗ рд▓рд┐рдП, 6-9 рджреЛрд╣рд░рд╛рдПрдВред
- рдПрдХ рд╕рдВрднрд╛рд╡рд┐рдд рдХрд╡рд░реЗрдЬ рддрддреНрд╡ рдХреЗ рд░реВрдк рдореЗрдВ X рдХреЛ рд╕реНрдЯреИрдХ рдореЗрдВ рдЬреЛрдбрд╝реЗрдВред
- рд╣рдо S ' рдФрд░ Y' рд╕реЗрдЯ рдХрд░рддреЗ рд╣реИрдВ: S ' S рд╡рд╣ рд╣реИ рдЬрд┐рд╕рд╕реЗ X рдореЗрдВ рдирд┐рд╣рд┐рдд рд╕рднреА рддрддреНрд╡ рд╣рдЯрд╛ рджрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ , Y' Y рд╕реЗ рдРрд╕реЗ рд╕реЗрдЯ рд╣реЛрддреЗ рд╣реИрдВ рдЬреЛ X рдХреЗ рд╕рд╛рде рдкреНрд░рддрд┐рдЪреНрдЫреЗрдж рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред
- рд╣рдо рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо X рдХреЛ S ' , Y' рдФрд░
Stack
ред - рдпрджрд┐ рдпрд╣ рдЪрд░рдг 7 рдореЗрдВ рдкрд╛рдпрд╛ рдЧрдпрд╛ рдХрд┐ рдХрд╡рд░реЗрдЬ рдЕрд╕рдВрднрд╡ рд╣реИ, рддреЛ
Stack
рдХреЗ рд╢реАрд░реНрд╖ рд╕реЗ рддрддреНрд╡ рдХреЛ рд╣рдЯрд╛ рджреЗрдВ рдФрд░ рдЕрдЧрд▓реЗ рдПрдХреНрд╕ рдкрд░ рдЬрд╛рдПрдВред рдпрджрд┐ рдХреЛрдИ рд╕рдорд╛рдзрд╛рди рдкрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд╣рдо рдЙрд╕реЗ рд╡рд╛рдкрд╕ рдХрд░ рджреЗрддреЗ рд╣реИрдВред - рдпрджрд┐ рдХрд┐рд╕реА рдПрдХреНрд╕ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рд╣реИ, рддреЛ рдЗрд╕ рдЗрдирдкреБрдЯ рдХреЗ рд▓рд┐рдП рдХрд╛рд░реНрдп рд╣рд▓ рдирд╣реАрдВ рд╣реИред
рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдХреБрдЫ рднреА рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЬрдЯрд┐рд▓ рдирд╣реАрдВ рд╣реИред рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ - рдЧрд╣рд░рд╛рдИ рдореЗрдВ рд╕рд╛рдорд╛рдиреНрдп рдЦреЛрдЬред рд╡реИрд╕реЗ, рд╣рдо рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдпрджрд┐ рдЖрдк рд╢реБрд░реВ рдореЗрдВ рд╕реНрдЯреИрдХ рдХреЛ рдЧреИрд░-рд░рд┐рдХреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реЗрдЯ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╕рдорд╕реНрдпрд╛ рдХреЛ "рд╕рдЯреАрдХ рдХрд╡рд░реЗрдЬ рдЦреЛрдЬреЗрдВ рдЬрд┐рд╕рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕реНрдЯреИрдХ рдкрд░ рдЭреВрда рдмреЛрд▓рдиреЗ рд╡рд╛рд▓реЗ рддрддреНрд╡ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ" рдХреЗ рд░реВрдк рдореЗрдВ рддреИрдпрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рд╕реВрдХреНрд╖реНрдорддрд╛ рдпрд╣ рд╣реИ рдХрд┐ рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ рдЗрд╕ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдЙрди рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрд╣рд╛рдВ рд╡рд╛рдИ рдореЗрдВ рд╕реЗрдЯ "рдЫреЛрдЯрд╛" рд╣реИ, рдЕрд░реНрдерд╛рддред рдореИрдЯреНрд░рд┐рдХреНрд╕ рдмрд╣реБрдд рд╡рд┐рд░рд▓ рд╣реИ, рдЬрд┐рд╕рдХреЗ рдХрд╛рд░рдг, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХреЗ рд░реВрдк рдореЗрдВ рдорд╛рдирдХ рднрдВрдбрд╛рд░рдг рдХреЗ рджреМрд░рд╛рди рд╕реНрддрдВрднреЛрдВ рдХреЗ рдмреАрдЪ рдЪреМрд░рд╛рд╣реЛрдВ рдХреА рдЦреЛрдЬ рдХрд░рдиреЗ рдореЗрдВ рдЕрд╕реНрд╡реАрдХрд╛рд░реНрдп рд░реВрдк рд╕реЗ рд▓рдВрдмрд╛ рд╕рдордп рд▓рдЧрддрд╛ рд╣реИред
рдЗрд╕рд▓рд┐рдП, рдирдЯ рдЗрд╕ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреЛ "рдбрд╛рдВрд╕рд┐рдВрдЧ рд▓рд┐рдВрдХ" рддрдВрддреНрд░ рдХреЗ рд╕рд╛рде рдкреВрд░рдХ рдХрд░рддрд╛ рд╣реИ ред рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХреЛ рджреНрд╡рд┐-рдЖрдпрд╛рдореА рджреЛрдЧреБрдиреА рд▓рд┐рдВрдХреНрдб рд╕реВрдЪреА рдХреЗ рд░реВрдк рдореЗрдВ рджрд░реНрд╢рд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ: рд╕реВрдЪреА рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рдкрдВрдХреНрддрд┐ рдХреЗ рд▓рд┐рдП рдХреЗрд╡рд▓ рд╕реНрддрдВрдн рд╕рдВрдЦреНрдпрд╛рдПрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рд╣реИрдВ, рдЬрд╣рд╛рдВ рдЗрд╕ рдкрдВрдХреНрддрд┐ рдореЗрдВ рдЗрдХрд╛рдЗрдпрд╛рдВ рд╣реИрдВред рд╕реВрдЪреА рдореЗрдВ рдкрдВрдХреНрддрд┐ рдФрд░ рд╕реНрддрдВрдн рдореЗрдВ рдЕрдЧрд▓реЗ рдФрд░ рдкрд┐рдЫрд▓реЗ рддрддреНрд╡ рдХреЗ рд▓рд┐рдВрдХ рднреА рд╣реИрдВред рдпрд╣ рд╕рдВрдЧрдарди рдЖрдкрдХреЛ рджреЛ-рдЖрдпрд╛рдореА рд╕рд░рдгреА рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рд╣реЛрдиреЗ рдкрд░ O ( m * n ) рдХреА рддреБрд▓рдирд╛ рдореЗрдВ O (1) рд╕рдордп рдХреЗ рджреМрд░рд╛рди рдПрдХ рд╡рд┐рд░рд▓ рдореИрдЯреНрд░рд┐рдХреНрд╕ рд╕реЗ рдХреЙрд▓рдо рдФрд░ рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЛ рд╣рдЯрд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
рдпрд╣ рджрд┐рд▓рдЪрд╕реНрдк рд╣реИ рдХрд┐ рдЕрд▓реА рдЕрд╕рдл рд╕рд╣рдпреЛрдЧреА рд╕реВрдЪрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдбрд╛рдВрд╕рд┐рдВрдЧ рд▓рд┐рдВрдХ рдХреЗ рддрдВрддреНрд░ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рдХрд▓реНрдк рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдЖрдкрдХреЛ рдЙрдЪреНрдЪ рд╕реНрддрд░ рдХреА рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рд╢рд╛рдмреНрджрд┐рдХ рд░реВрдк рд╕реЗ рдХрдИ рджрд░реНрдЬрди рд▓рд╛рдЗрдиреЛрдВ рдореЗрдВ рдПрдХреНрд╕ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
рд╡рд┐рдЪрд╛рд░, рджреЛрдиреЛрдВ рд╕реНрддрдВрднреЛрдВ рдФрд░ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЛ рд╕рд╛рд╣рдЪрд░реНрдп рд╕реВрдЪрд┐рдпреЛрдВ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдирд╛ рд╣реИред рд╕реНрддрдВрднреЛрдВ рдореЗрдВ рд╣рдо рдкрдВрдХреНрддрд┐ рд╕реВрдЪрдХрд╛рдВрдХреЛрдВ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддреЗ рд╣реИрдВ, рдЪреМрд░рд╛рд╣реЗ рдкрд░ рдЬрд┐рд╕рдореЗрдВ рдкрдВрдХреНрддрд┐рдпреЛрдВ рдореЗрдВ, рдХреНрд░рдорд╢рдГ, рд╕реНрддрдВрдн рд╕реВрдЪрдХрд╛рдВрдХреЛрдВ рдореЗрдВ рдЧреИрд░-рдЕрдХреНрд╖реАрдп рддрддреНрд╡ рд╣реЛрддреЗ рд╣реИрдВред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╣рдо рдЕрдиреБрдХреНрд░рдорд┐рдд рддрд░реАрдХреЗ рд╕реЗ рдкрдВрдХреНрддрд┐рдпреЛрдВ рдореЗрдВ рдЕрдиреБрдХреНрд░рдорд┐рдд рдХрд░реЗрдВрдЧреЗ, рдПрдХ рд╕рд░рдгреА рдореЗрдВ, рд╣рдо рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдирде рдХреЗ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдореЗрдВ, рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдХрд┐рд╕реА рдкрдВрдХреНрддрд┐ рд╕реЗ рдХрд┐рд╕реА рддрддреНрд╡ рдХреЛ рдЬрд▓реНрджреА рд╕реЗ рд╣рдЯрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдиреБрдХреВрд▓рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рд▓реЗрдХрд┐рди рдХреЙрд▓рдо рд╕реЗрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реЗрдЯ рдХрд┐рдП рдЬрд╛рдПрдВрдЧреЗ, рдХреНрдпреЛрдВрдХрд┐ рдореИрдЯреНрд░рд┐рдХреНрд╕ рд╕реЗ рдПрдХ рдкрдВрдХреНрддрд┐ рд╣рдЯрд╛рддреЗ рд╕рдордп, рд╕рднреА рд╕реНрддрдВрднреЛрдВ рд╕реЗ рдЗрд╕рдХреА рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рдХреЛ рд╣рдЯрд╛рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реЛрддрд╛ рд╣реИ (рдФрд░ рдЬрдм рдЗрд╕реЗ рд╕рднреА рд╕реНрддрдВрднреЛрдВ рд╕реЗ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдкрдВрдХреНрддрд┐ "рд╕реНрд╡рдпрдВ" рдЧрд╛рдпрдм рд╣реЛ рдЬрд╛рддреА рд╣реИ)ред
рдЬреВрд▓рд┐рдпрд╛ рдкрд░ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред
рдЙрджрд╛рд╣рд░рдг рд╕реЗ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдЕрдм рдЗрд╕ рддрд░рд╣ рджрд┐рдЦреЗрдЧрд╛:
Y = Dict( 'A' => [1, 2], 'B' => [2, 3], 'C' => [1, 5], 'D' => [1, 4], 'E' => [5] ) S = Dict( 1 => Set(['A', 'C', 'D']), 2 => Set(['A', 'B']), 3 => Set(['B']), 4 => Set(['D']), 5 => Set(['C', 'E']) )
рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреЛ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рдЬреЛ рдореИрдЯреНрд░рд┐рдХреНрд╕ рд╕реЗ рд▓рд╛рдЗрдиреЛрдВ рдХреЛ рдирд┐рдХрд╛рд▓рддрд╛ рд╣реИ рдЬреЛ рджрд┐рдП рдЧрдП рдПрдХ рдХреЗ рд╕рд╛рде рдкреНрд░рддрд┐рдЪреНрдЫреЗрдж рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдЬреЛ рдЗрди рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЛ рдЙрдирдХреЗ рд╕реНрдерд╛рди рдкрд░ рд▓реМрдЯрд╛рддрд╛ рд╣реИред
function extract_intersects!(rows, columns, base_row) buf = [] for elt in rows[base_row]
рдЗрди рджреЛ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЬреИрд╕рд╛ рдХрд┐ рдЙрдиреНрд╣реЗрдВ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдмрд╕ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХреА рдкрдВрдХреНрддрд┐рдпреЛрдВ рдореЗрдВ рддрддреНрд╡реЛрдВ рдХреЗ рднрдВрдбрд╛рд░рдг рдХрд╛ рдЖрджреЗрд╢ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред extract_intersects!()
рдлрд╝рдВрдХреНрд╢рди, рдмрд╛рд╣рд░реА рд▓реВрдк рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдкрд░, рдЙрди рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЛ рдЬреЛ base_row
рд╕рд╛рде рдкреНрд░рддрд┐рдЪреНрдЫреЗрдж рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдкрд┐рдЫрд▓реЗ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпреЛрдВ рдореЗрдВ рджреЗрдЦреЗ рдЧрдП рддрддреНрд╡реЛрдВ рдХреЛ рдореИрдЯреНрд░рд┐рдХреНрд╕ рд╕реЗ рд╣рдЯрд╛рдпрд╛ рдирд╣реАрдВ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдЬрдм рд╣рдо push!(columns[col], added_row)
рдореЗрдВ columns[col]
push!(columns[col], added_row)
рдХреЙрд▓ push!(columns[col], added_row)
рдХреЗ рд╕рдордп рдЕрдВрддрд░рддрдо рд▓реВрдк рдореЗрдВ, рд░рд┐рд╡рд░реНрд╕ рдСрд░реНрдбрд░ рдореЗрдВ push!(columns[col], added_row)
extract_intersects!()
рдХреЙрд▓рдо рд╕реЗ рддрддреНрд╡ рдЕрдкрдиреЗ рдореВрд▓ рд╕реНрдерд╛рди рдкрд░ рд╡рд╛рдкрд╕ рдЖ рдЬрд╛рдПрдВрдЧреЗред
рдЕрдм рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо X рд╣реА:
function algorithm_x(rows, columns, cover = []) if isempty(columns) return cover else
рд╕реБрдбреЛрдХреВ
рдПрдХ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рд╣реИ, рдорд╛рдорд▓рд╛ рдЫреЛрдЯрд╛ рд╣реИ - рд╕рдЯреАрдХ рдХрд╡рд░реЗрдЬ рдЦреЛрдЬрдиреЗ рдХреЗ рдХрд╛рд░реНрдп рдХреЗ рд░реВрдк рдореЗрдВ рд╕реБрдбреЛрдХреВ рдкреЗрд╢ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред
рд╣рдо рдЙрди рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЛ рддреИрдпрд╛рд░ рдХрд░рддреЗ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдПрдХ рд╣рд▓ рдХрд┐рдП рдЧрдП рд╕реБрдбреЛрдХреВ рджреНрд╡рд╛рд░рд╛ рдкреВрд░рд╛ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП:
- рдкреНрд░рддреНрдпреЗрдХ рд╕реЗрд▓ рдореЗрдВ 1 рд╕реЗ 9 рддрдХ рдХреА рд╕рдВрдЦреНрдпрд╛ рд╣реЛрддреА рд╣реИ (рдпрд╛ рдПрдХ рдЕрд▓рдЧ рдЖрдХрд╛рд░ рдХреЗ рд╡рд░реНрдЧ рд╣рд▓ рд╣реЛрдиреЗ рдкрд░ n 2 рддрдХ )ред
- рдкреНрд░рддреНрдпреЗрдХ рдкрдВрдХреНрддрд┐ рдореЗрдВ, рдкреНрд░рддреНрдпреЗрдХ рд╕рдВрдЦреНрдпрд╛ рдПрдХ рдмрд╛рд░ рд╣реЛрддреА рд╣реИред
- рдкреНрд░рддреНрдпреЗрдХ рдХреЙрд▓рдо рдореЗрдВ, рдкреНрд░рддреНрдпреЗрдХ рд╕рдВрдЦреНрдпрд╛ рдПрдХ рдмрд╛рд░ рд╣реЛрддреА рд╣реИред
- рдкреНрд░рддреНрдпреЗрдХ рдЪрддреБрд░реНрдерд╛рдВрд╢ рдореЗрдВ, рдкреНрд░рддреНрдпреЗрдХ рд╕рдВрдЦреНрдпрд╛ рдПрдХ рдмрд╛рд░ рд╣реЛрддреА рд╣реИред
рдЗрдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЛ рдареАрдХ 1 рдмрд╛рд░ рдкреВрд░рд╛ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЕрд░реНрдерд╛рдд рд╡реЗ рд╕реЗрдЯ рдмрдирд╛рддреЗ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдХрд╡рд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдЗрд╕рдореЗрдВ 4 n 2 рддрддреНрд╡ (рдореИрдЯреНрд░рд┐рдХреНрд╕ рдореЗрдВ рдХреЙрд▓рдо) рд╣реИрдВред
рдЬрд┐рди рд╕рдмрд╕реЗрдЯреНрд╕ рдкрд░ рд╣рдо рд╡рд┐рдЪрд╛рд░ рдХрд░рддреЗ рд╣реИрдВ, рд╡реЗ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕реЗрд▓ рдореЗрдВ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдХреЗ рдмрдирддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, 1 рдкрдВрдХреНрддрд┐ рдФрд░ 4 рд╕реНрддрдВрднреЛрдВ рдХреЗ рдЪреМрд░рд╛рд╣реЗ рдкрд░ рдирдВрдмрд░ 9 рд╕реЗрд▓ рдореЗрдВ "рдПрдХ рдЙрдкрд╕рдореВрд╣" рдХреЛ рдХрд╡рд░ рдХрд░рддрд╛ рд╣реИ (1,4) рдПрдХ рд╕рдВрдЦреНрдпрд╛ рд╣реИ, 1 рдкрдВрдХреНрддрд┐ рдореЗрдВ рдПрдХ рдирдВрдмрд░ 9 рд╣реИ, 4 рд╕реНрддрдВрднреЛрдВ рдореЗрдВ рдПрдХ рд╕рдВрдЦреНрдпрд╛ 9 рд╣реИ, 2 рдЪрддреБрд░реНрдерд╛рдВрд╢реЛрдВ рдореЗрдВ рдПрдХ рд╕рдВрдЦреНрдпрд╛ 9 рд╣реИ (рд╕рд╛рдорд╛рдиреНрдп рдХрд╛ рдЕрд░реНрде рд╣реИ) рд╕реБрдбреЛрдХреВ 9 ├Ч 9)ред
рдЙрд╕рдХреЗ рдмрд╛рдж, рд╕рдорд╛рдзрд╛рди рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреЛ рддреБрдЪреНрдЫ рд░реВрдк рд╕реЗ рд▓рд┐рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдЖрдЗрдП рдХреБрдЫ рдЙрджрд╛рд╣рд░рдг рджреЗрдЦреЗрдВ:
julia> @time xsudoku([0 0 0 0 0 0 4 0 0; 3 0 6 0 0 0 0 0 0; 0 0 0 1 9 6 0 3 0; 0 7 0 0 0 0 0 1 0; 8 0 0 2 5 0 0 9 0; 0 4 0 0 0 0 8 0 0; 0 6 0 4 0 9 0 0 8; 0 0 5 0 0 0 0 2 0; 0 0 0 5 0 0 0 0 7]) 0.006326 seconds (54.91 k allocations: 3.321 MiB) 9├Ч9 Array{Int64,2}: 1 5 7 8 3 2 4 6 9 3 9 6 7 4 5 2 8 1 2 8 4 1 9 6 7 3 5 6 7 2 9 8 4 5 1 3 8 3 1 2 5 7 6 9 4 5 4 9 6 1 3 8 7 2 7 6 3 4 2 9 1 5 8 4 1 5 3 7 8 9 2 6 9 2 8 5 6 1 3 4 7
рдпрд╣ рдХрд╛рдо рдХрд░рдиреЗ рд▓рдЧрддрд╛ рд╣реИ, рдФрд░ рдЧрддрд┐ рд╕реНрд╡реАрдХрд╛рд░реНрдп рд╣реИред
рдпрд╣ рдзреНрдпрд╛рди рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рд╕реБрдбреЛрдХреВ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рддрдХрдиреАрдХ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрд╣рд╛рдВ рдпрд╛ рдпрд╣рд╛рдВ ) рд╡рд╛рдВрдЫрд┐рдд рд╕реЗрдЯ рдФрд░ рдХрд╡рд░ рддрддреНрд╡реЛрдВ рдХреЗ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХреЛ рдЫреЛрдбрд╝рдХрд░, рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдореЗрдВ рд░рдЦреА рдирд╣реАрдВ рдЧрдИ рдереАред