- ΠΠ°ΡΠ΅ΠΌ ΠΈΠ·ΡΡΠ°ΡΡ Π°Π»Π³ΠΎΡΠΈΡΠΌΡ?
- ΠΠ½ΠΈΠ³ΠΈ ΠΏΡΠΎ Π°Π»Π³ΠΎΡΠΈΡΠΌΡ
- ΠΠ»Π³ΠΎΡΠΈΡΠΌΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΠΌΠ΅ΡΠΎΠ΄ ΡΠ΅ΡΠ΅Π½ΠΈΡ Π·Π°Π΄Π°Ρ
- Sorting Algorithms
- Searching Algorithms
- Bit Manipulation/Bit Masking
- ΠΠΎΠΌΠ±ΠΈΠ½Π°ΡΠΎΡΠΈΠΊΠ°
- ΠΠ°Π΄Π°ΡΠ° NP-ΠΏΠΎΠ»Π½Π°Ρ
- ΠΡΠΈΠΌΠΏΡΠΎΡΠΈΡΠ΅ΡΠΊΠ°Ρ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡΡ Π°Π»Π³ΠΎΡΠΈΡΠΌΠΎΠ²
- ΠΡΠΈΠΌΠΏΡΠΎΡΠΈΡΠ΅ΡΠΊΠ°Ρ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡΡ Ρ-ΡΠΈΠΉ Π² Π½ΠΎΡΠ°ΡΠΈΠΈ Big-O
- Top 20 LeetCode Patterns
- ΠΠ»Π³ΠΎΡΠΈΡΠΌΡ - ΡΡΠΎ ΠΏΡΠΎ ΡΠΏΠΎΡΠΎΠ± ΠΌΡΡΠ»ΠΈΡΡ ΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ°Ρ
- ΠΡ ΡΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΠΈΡΠ°ΡΡ ΠΎΠΏΡΠΈΠΌΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ ΠΈ ΠΌΠ°ΡΡΡΠ°Π±ΠΈΡΡΠ΅ΠΌΡΠΉ ΠΊΠΎΠ΄ - ΠΏΠΎΠ»ΡΡΠΈΠ² Π·Π½Π°Π½ΠΈΡ ΠΎ ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ ΡΡΡΡΠΊΡΡΡΠ°Ρ Π΄Π°Π½Π½ΡΡ ΠΈ Π°Π»Π³ΠΎΡΠΈΡΠΌΠ°Ρ , Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ, ΠΊΠ°ΠΊΡΡ Π²ΡΠ±ΡΠ°ΡΡ ΡΡΡΡΠΊΡΡΡΡ Π΄Π°Π½Π½ΡΡ ΠΈ Π°Π»Π³ΠΎΡΠΈΡΠΌ Π² ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ ΡΡΠ»ΠΎΠ²ΠΈΡΡ .
- ΠΡΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ ΠΈ ΠΏΠ°ΠΌΡΡΠΈ. ΠΠ½Π°Π½ΠΈΠ΅ ΡΡΡΡΠΊΡΡΡ Π΄Π°Π½Π½ΡΡ ΠΈ Π°Π»Π³ΠΎΡΠΈΡΠΌΠΎΠ² ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ Π²Π°ΠΌ ΠΏΠΈΡΠ°ΡΡ ΠΊΠΎΠ΄, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Π±ΡΡΡΡΠ΅Π΅ ΠΈ ΡΡΠ΅Π±ΡΠ΅Ρ ΠΌΠ΅Π½ΡΡΠ΅Π³ΠΎ ΠΎΠ±ΡΠ΅ΠΌΠ° ΠΏΠ°ΠΌΡΡΠΈ.
- ΠΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π² Π°Π»Π³ΠΎΡΠΈΡΠΌΡ, Π’ΠΎΠΌΠ°Ρ Π₯. ΠΠΎΡΠΌΠ΅Π½ - ΡΡΠΎ ΠΎΠ΄Π½Π° ΠΈΠ· Π»ΡΡΡΠΈΡ ΠΊΠ½ΠΈΠ³ ΠΏΠΎ Π°Π»Π³ΠΎΡΠΈΡΠΌΠ°ΠΌ, Π² ΠΊΠΎΡΠΎΡΠΎΠΉ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎ ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°Π΅ΡΡΡ ΡΠΈΡΠΎΠΊΠΈΠΉ ΡΠΏΠ΅ΠΊΡΡ Π°Π»Π³ΠΎΡΠΈΡΠΌΠΎΠ².
- "Algorithms" Π ΠΎΠ±Π΅ΡΡΠ° Π‘Π΅Π΄ΠΆΠ²ΠΈΠΊΠ° - ΡΡΠΎ Π²Π΅Π΄ΡΡΠΈΠΉ ΡΡΠ΅Π±Π½ΠΈΠΊ ΠΏΠΎ Π°Π»Π³ΠΎΡΠΈΡΠΌΠ°ΠΌ, ΡΠΈΡΠΎΠΊΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΠΉ Π² ΠΊΠΎΠ»Π»Π΅Π΄ΠΆΠ°Ρ ΠΈ ΡΠ½ΠΈΠ²Π΅ΡΡΠΈΡΠ΅ΡΠ°Ρ .
- ΠΡΠΊΡΡΡΡΠ²ΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ, ΠΠΎΠ½Π°Π»ΡΠ΄ Π. ΠΠ½ΡΡ - ΡΡΠ° ΠΊΠ½ΠΈΠ³Π° ΡΡΠΈΡΠ°Π΅ΡΡΡ Π»ΡΡΡΠ΅ΠΉ, Π΅ΡΠ»ΠΈ Π²Ρ Π·Π½Π°ΠΊΠΎΠΌΡ Ρ ΠΏΡΠ΅Π΄ΠΌΠ΅ΡΠΎΠΌ ΠΈ ΠΈΡΠ΅ΡΠ΅ Π±ΠΎΠ»Π΅Π΅ Π³Π»ΡΠ±ΠΎΠΊΠΎΠ΅ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅.
- "Introduction to Algorithms" (Π’ΠΎΠΌΠ°Ρ ΠΠΎΡΠΌΠ΅Π½, Π§Π°ΡΠ»ΡΠ· ΠΠ΅ΠΉΠ·Π΅ΡΡΠΎΠ½, Π ΠΎΠ½Π°Π»ΡΠ΄ Π ΠΈΠ²Π΅ΡΡ, ΠΠ»ΠΈΡΠΎΡΠ΄ Π¨ΡΠ°ΠΉΠ½) ΠΡΠ° ΠΊΠ½ΠΈΠ³Π°, ΡΠ°ΡΡΠΎ Π½Π°Π·ΡΠ²Π°Π΅ΠΌΠ°Ρ CLRS ΠΏΠΎ ΡΠ°ΠΌΠΈΠ»ΠΈΡΠΌ Π°Π²ΡΠΎΡΠΎΠ², ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· ΡΠ°ΠΌΡΡ ΠΈΠ·Π²Π΅ΡΡΠ½ΡΡ ΠΈ ΠΏΠΎΠΏΡΠ»ΡΡΠ½ΡΡ ΠΊΠ½ΠΈΠ³ ΠΏΠΎ Π°Π»Π³ΠΎΡΠΈΡΠΌΠ°ΠΌ. ΠΠ½Π° ΠΎΡ Π²Π°ΡΡΠ²Π°Π΅Ρ ΡΠΈΡΠΎΠΊΠΈΠΉ ΡΠΏΠ΅ΠΊΡΡ ΡΠ΅ΠΌ ΠΈ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΡΡΠ° ΠΊΠ°ΠΊ Π΄Π»Ρ Π½Π°ΡΠΈΠ½Π°ΡΡΠΈΡ , ΡΠ°ΠΊ ΠΈ Π΄Π»Ρ ΠΏΡΠΎΠ΄Π²ΠΈΠ½ΡΡΡΡ ΡΡΡΠ΄Π΅Π½ΡΠΎΠ².
-
Brute-Force - ΠΏΠ΅ΡΠ΅Π±ΠΈΡΠ°ΠΉΡΠ΅ Π²ΡΠ΅ Π²Π°ΡΠΈΠ°Π½ΡΡ Π² Π»ΠΎΠ±.
Π ΡΠ΅ΠΌ ΡΠ°Π·Π½ΠΈΡΠ° ΠΌΠ΅ΠΆΠ΄Ρ Π°Π»Π³ΠΎΡΠΈΡΠΌΠΎΠΌ
Backtracking AlgorithmΠΈ Π°Π»Π³ΠΎΡΠΈΡΠΌΠΎΠΌBrute-force?Π ΡΠ²ΡΠ·ΠΈ Ρ ΡΠ΅ΠΌ, ΡΡΠΎ Π°Π»Π³ΠΎΡΠΈΡΠΌ ΠΏΠΎΠΈΡΠΊΠ°
BacktrackingΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ Π΄Π»Ρ ΠΏΡΠΈΠ½ΡΡΠΈΡ ΡΠ΅ΡΠ΅Π½ΠΈΡ Π²ΡΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΡΠ΅ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΡ, Ρ ΡΡΠΎΠΉ ΡΠΎΡΠΊΠΈ Π·ΡΠ΅Π½ΠΈΡ ΠΎΠ½ ΠΏΠΎΠ΄ΠΎΠ±Π΅Π½ Π°Π»Π³ΠΎΡΠΈΡΠΌΡBrute-force. Π Π°Π·Π½ΠΈΡΠ° ΡΠΎΡΡΠΎΠΈΡ Π² ΡΠΎΠΌ, ΡΡΠΎ ΠΈΠ½ΠΎΠ³Π΄Π°BacktrackingΠΌΠΎΠΆΠ΅Ρ ΠΎΠ±Π½Π°ΡΡΠΆΠΈΡΡ, ΡΡΠΎ ΠΏΠΎΠ»Π½ΡΠΉ ΠΏΠ΅ΡΠ΅Π±ΠΎΡ Π½Π΅ Π½ΡΠΆΠ΅Π½, ΠΈ, ΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎ, ΠΌΠΎΠΆΠ΅Ρ ΡΠ°Π±ΠΎΡΠ°ΡΡ Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ Π»ΡΡΡΠ΅.
...
-
Divide and Conquer - ΡΠ°Π·Π±ΠΈΠ²Π°ΠΉΡΠ΅ Π·Π°Π΄Π°ΡΡ Π½Π° ΠΏΠΎΠ΄Π·Π°Π΄Π°ΡΠΈ ΠΈ ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡΡΠΉΡΠ΅ ΠΈΡ (ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡ Π² Π°Π»Π³ΠΎΡΠΈΠΌΠ°Ρ
Merge sortΠΈBinary Search). Π Π°Π·Π΄Π΅Π»ΡΠΉ ΠΈ Π²Π»Π°ΡΡΠ²ΡΠΉ β ΡΡΠΎ ΠΏΠ°ΡΠ°Π΄ΠΈΠ³ΠΌΠ° ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ Π°Π»Π³ΠΎΡΠΈΡΠΌΠ°, ΠΎΡΠ½ΠΎΠ²Π°Π½Π½Π°Ρ Π½Π° ΠΌΠ½ΠΎΠ³ΠΎΠ²Π΅ΡΠ²ΡΡΠ΅ΠΉΡΡ ΡΠ΅ΠΊΡΡΡΠΈΠΈ. ΠΠ»Π³ΠΎΡΠΈΡΠΌDivide and ConquerΡΠ°Π·Π±ΠΈΠ²Π°Π΅Ρ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ Π½Π° ΠΏΠΎΠ΄Π·Π°Π΄Π°ΡΠΈ ΡΠΎΠ³ΠΎ ΠΆΠ΅ ΠΈΠ»ΠΈ ΡΠΎΠ΄ΡΡΠ²Π΅Π½Π½ΠΎΠ³ΠΎ ΡΠΈΠΏΠ°, ΠΏΠΎΠΊΠ° ΠΎΠ½ΠΈ Π½Π΅ ΡΡΠ°Π½ΡΡ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΠΏΡΠΎΡΡΡΠΌΠΈ, ΡΡΠΎΠ±Ρ ΠΈΡ ΠΌΠΎΠΆΠ½ΠΎ Π±ΡΠ»ΠΎ ΡΠ΅ΡΠΈΡΡ Π½Π°ΠΏΡΡΠΌΡΡ.ΠΠ»Π³ΠΎΡΠΈΡΠΌΡ Β«ΡΠ°Π·Π΄Π΅Π»ΡΠΉ ΠΈ Π²Π»Π°ΡΡΠ²ΡΠΉΒ» ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΡΡ ΡΠΎΠ±ΠΎΠΉ ΠΏΠ°ΡΠ°Π΄ΠΈΠ³ΠΌΡ ΡΠ΅ΡΠ΅Π½ΠΈΡ Π·Π°Π΄Π°Ρ, Π²ΠΊΠ»ΡΡΠ°ΡΡΠΈΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΎΡΠ½ΠΎΠ²Π½ΡΡ ΡΠ°Π³ΠΎΠ². Π‘Π½Π°ΡΠ°Π»Π° ΠΌΡ Π΄Π΅Π»ΠΈΠΌ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ Π½Π° Π±ΠΎΠ»Π΅Π΅ ΠΌΠ΅Π»ΠΊΠΈΠ΅ ΡΠ°ΡΡΠΈ ΠΈ ΡΠ°Π±ΠΎΡΠ°Π΅ΠΌ Π½Π°Π΄ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ΠΌ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΠ· Π½ΠΈΡ Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΠΎ. ΠΠΎΡΠ»Π΅ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΌΡ ΡΠ΅ΡΠΈΠ»ΠΈ Π²ΡΠ΅ ΡΠ°ΡΡΠΈ, ΠΌΡ Π±Π΅ΡΠ΅ΠΌ Π²ΡΠ΅ ΠΏΠΎΠ»ΡΡΠ΅Π½Π½ΡΠ΅ Π±ΠΎΠ»Π΅Π΅ ΠΌΠ΅Π»ΠΊΠΈΠ΅ ΡΠ΅ΡΠ΅Π½ΠΈΡ ΠΈ ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½ΡΠ΅ΠΌ ΠΈΡ Π² ΠΎΠ΄Π½ΠΎ ΠΈΠ½ΡΠ΅Π³ΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΠΊΠΎΠΌΠΏΠ»Π΅ΠΊΡΠ½ΠΎΠ΅ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅.
ΠΡΠΎΡ ΠΏΡΠΎΡΠ΅ΡΡ ΠΌΠΎΠΆΠ΅Ρ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ ΡΠ΅ΠΊΡΡΡΠΈΠ²Π½ΠΎ; ΡΠΎ Π΅ΡΡΡ ΠΊΠ°ΠΆΠ΄Π°Ρ Β«ΠΏΠΎΠ΄Π·Π°Π΄Π°ΡΠ°Β» ΡΠ°ΠΌΠ° ΠΏΠΎ ΡΠ΅Π±Π΅ ΠΏΡΠΈ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΡΠ°Π·Π΄Π΅Π»Π΅Π½Π° Π½Π° Π΅ΡΠ΅ Π±ΠΎΠ»Π΅Π΅ ΠΌΠ΅Π»ΠΊΠΈΠ΅ ΡΠ°ΡΡΠΈ. ΠΡΠΎ ΡΠ΅ΠΊΡΡΡΠΈΠ²Π½ΠΎΠ΅ Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π·Π°Π΄Π°ΡΠΈ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ Π΄ΠΎ ΡΠ΅Ρ ΠΏΠΎΡ, ΠΏΠΎΠΊΠ° ΠΊΠ°ΠΆΠ΄Π°Ρ ΠΎΡΠ΄Π΅Π»ΡΠ½Π°Ρ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° Π½Π΅ ΡΡΠ°Π½Π΅Ρ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΠΌΠ°Π»Π΅Π½ΡΠΊΠΎΠΉ, ΡΡΠΎΠ±Ρ Π΅Π΅ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ ΡΡΠ°Π»ΠΎ ΠΎΡΠ½ΠΎΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΡΡΠΈΠ²ΠΈΠ°Π»ΡΠ½ΡΠΌ.
ΠΠ΅ΠΊΠΎΡΠΎΡΡΠΌΠΈ ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½Π΅Π½Π½ΡΠΌΠΈ ΠΏΡΠΈΠΌΠ΅ΡΠ°ΠΌΠΈ Π·Π°Π΄Π°Ρ, ΠΊΠΎΡΠΎΡΡΠ΅ Ρ ΠΎΡΠΎΡΠΎ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΡΡ Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ ΠΏΠΎΠ΄Ρ ΠΎΠ΄Π°, ΡΠ²Π»ΡΡΡΡΡ
Binary Search, Π°Π»Π³ΠΎΡΠΈΡΠΌΡ ΡΠΎΡΡΠΈΡΠΎΠ²ΠΊΠΈ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ,Merge sort,Quicksort), ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡ ΡΠ»ΠΎΠΆΠ½ΡΡ Π² Π²ΡΡΠΈΡΠ»ΠΈΡΠ΅Π»ΡΠ½ΠΎΠΌ ΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΠΈ ΠΌΠ°ΡΠ΅ΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ (Π²ΠΎΠ·Π²Π΅Π΄Π΅Π½ΠΈΠ΅ Π² ΡΡΠ΅ΠΏΠ΅Π½Ρ, ΠΠΠ€, Π°Π»Π³ΠΎΡΠΈΡΠΌ Π¨ΡΡΠ°ΡΡΠ΅Π½Π°) ΠΈ Π΄ΡΡΠ³ΠΈΠ΅.ΠΠΈΠΆΠ΅ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Ρ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠ΅ Π°Π»Π³ΠΎΡΠΈΡΠΌΡ, ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠ΅ Π°Π»Π³ΠΎΡΠΈΡΠΌΡ
Divide and Conquer.Quicksortβ ΡΡΠΎ Π°Π»Π³ΠΎΡΠΈΡΠΌ ΡΠΎΡΡΠΈΡΠΎΠ²ΠΊΠΈ. ΠΠ»Π³ΠΎΡΠΈΡΠΌ Π²ΡΠ±ΠΈΡΠ°Π΅Ρ ΠΎΠΏΠΎΡΠ½ΡΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ ΠΈ ΠΏΠ΅ΡΠ΅ΡΠΏΠΎΡΡΠ΄ΠΎΡΠΈΠ²Π°Π΅Ρ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ ΠΌΠ°ΡΡΠΈΠ²Π° ΡΠ°ΠΊ, ΡΡΠΎΠ±Ρ Π²ΡΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ, ΠΌΠ΅Π½ΡΡΠΈΠ΅, ΡΠ΅ΠΌ Π²ΡΠ±ΡΠ°Π½Π½ΡΠΉ ΠΎΠΏΠΎΡΠ½ΡΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ, ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ°Π»ΠΈΡΡ Π² Π»Π΅Π²ΡΡ ΡΡΠΎΡΠΎΠ½Ρ ΠΎΠΏΠΎΡΠ½ΠΎΠ³ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°, Π° Π²ΡΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ Π±ΠΎΠ»ΡΡΠ΅Π³ΠΎ ΡΠ°Π·ΠΌΠ΅ΡΠ° ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ°Π»ΠΈΡΡ Π² ΠΏΡΠ°Π²ΡΡ ΡΡΠΎΡΠΎΠ½Ρ. ΠΠ°ΠΊΠΎΠ½Π΅Ρ, Π°Π»Π³ΠΎΡΠΈΡΠΌ ΡΠ΅ΠΊΡΡΡΠΈΠ²Π½ΠΎ ΡΠΎΡΡΠΈΡΡΠ΅Ρ ΠΏΠΎΠ΄ΠΌΠ°ΡΡΠΈΠ²Ρ ΡΠ»Π΅Π²Π° ΠΈ ΡΠΏΡΠ°Π²Π° ΠΎΡ ΠΎΠΏΠΎΡΠ½ΠΎΠ³ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°.Merge sortΡΠ°ΠΊΠΆΠ΅ ΡΠ²Π»ΡΠ΅ΡΡΡ Π°Π»Π³ΠΎΡΠΈΡΠΌΠΎΠΌ ΡΠΎΡΡΠΈΡΠΎΠ²ΠΊΠΈ. ΠΠ»Π³ΠΎΡΠΈΡΠΌ Π΄Π΅Π»ΠΈΡ ΠΌΠ°ΡΡΠΈΠ² Π½Π° Π΄Π²Π΅ ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½Ρ, ΡΠ΅ΠΊΡΡΡΠΈΠ²Π½ΠΎ ΡΠΎΡΡΠΈΡΡΠ΅Ρ ΠΈΡ ΠΈ, Π½Π°ΠΊΠΎΠ½Π΅Ρ, ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½ΡΠ΅Ρ Π΄Π²Π΅ ΠΎΡΡΠΎΡΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅ ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½Ρ.- ΠΠ»ΠΈΠΆΠ°ΠΉΡΠ°Ρ ΠΏΠ°ΡΠ° ΡΠΎΡΠ΅ΠΊ. ΠΠ°Π΄Π°ΡΠ° ΡΠΎΡΡΠΎΠΈΡ Π² ΡΠΎΠΌ, ΡΡΠΎΠ±Ρ Π½Π°ΠΉΡΠΈ Π±Π»ΠΈΠΆΠ°ΠΉΡΡΡ ΠΏΠ°ΡΡ ΡΠΎΡΠ΅ΠΊ Π² Π½Π°Π±ΠΎΡΠ΅ ΡΠΎΡΠ΅ΠΊ Π² ΠΏΠ»ΠΎΡΠΊΠΎΡΡΠΈ
xy. ΠΡΠΎΠ±Π»Π΅ΠΌΡ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΅ΡΠΈΡΡ Π·Π° Π²ΡΠ΅ΠΌΡO(n^2), Π²ΡΡΠΈΡΠ»ΠΈΠ² ΡΠ°ΡΡΡΠΎΡΠ½ΠΈΡ Π΄ΠΎ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΏΠ°ΡΡ ΡΠΎΡΠ΅ΠΊ ΠΈ ΡΡΠ°Π²Π½ΠΈΠ² ΡΠ°ΡΡΡΠΎΡΠ½ΠΈΡ, ΡΡΠΎΠ±Ρ Π½Π°ΠΉΡΠΈ ΠΌΠΈΠ½ΠΈΠΌΡΠΌ. ΠΠ»Π³ΠΎΡΠΈΡΠΌ Β«ΡΠ°Π·Π΄Π΅Π»ΡΠΉ ΠΈ Π²Π»Π°ΡΡΠ²ΡΠΉΒ» ΡΠ΅ΡΠ°Π΅Ρ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ Π·Π° Π²ΡΠ΅ΠΌΡO(N log N). - ΠΠ»Π³ΠΎΡΠΈΡΠΌ Π¨ΡΡΠ°ΡΡΠ΅Π½Π° β ΡΡΠΎ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΡΠΉ Π°Π»Π³ΠΎΡΠΈΡΠΌ ΡΠΌΠ½ΠΎΠΆΠ΅Π½ΠΈΡ Π΄Π²ΡΡ
ΠΌΠ°ΡΡΠΈΡ. ΠΡΠΎΡΡΠΎΠΉ ΠΌΠ΅ΡΠΎΠ΄ ΡΠΌΠ½ΠΎΠΆΠ΅Π½ΠΈΡ Π΄Π²ΡΡ
ΠΌΠ°ΡΡΠΈΡ ΡΡΠ΅Π±ΡΠ΅Ρ ΡΡΠ΅Ρ
Π²Π»ΠΎΠΆΠ΅Π½Π½ΡΡ
ΡΠΈΠΊΠ»ΠΎΠ² ΠΈ ΡΠ°Π²Π΅Π½
O(n^3). ΠΠ»Π³ΠΎΡΠΈΡΠΌ Π¨ΡΡΠ°ΡΡΠ΅Π½Π° ΡΠΌΠ½ΠΎΠΆΠ°Π΅Ρ Π΄Π²Π΅ ΠΌΠ°ΡΡΠΈΡΡ Π·Π° Π²ΡΠ΅ΠΌΡO(n^2,8974). - ΠΠ»Π³ΠΎΡΠΈΡΠΌ Π±ΡΡΡΡΠΎΠ³ΠΎ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΡ Π€ΡΡΡΠ΅ (ΠΠΠ€) ΠΡΠ»ΠΈ β Π’ΡΡΠΊΠΈ ΡΠ²Π»ΡΠ΅ΡΡΡ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½Π΅Π½Π½ΡΠΌ Π°Π»Π³ΠΎΡΠΈΡΠΌΠΎΠΌ ΠΠΠ€. ΠΡΠΎ Π°Π»Π³ΠΎΡΠΈΡΠΌ Β«ΡΠ°Π·Π΄Π΅Π»ΡΠΉ ΠΈ Π²Π»Π°ΡΡΠ²ΡΠΉΒ», ΠΊΠΎΡΠΎΡΡΠΉ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Π·Π° Π²ΡΠ΅ΠΌΡ
O(N log N). - ΠΠ»Π³ΠΎΡΠΈΡΠΌ ΠΠ°ΡΠ°ΡΡΠ±Ρ Π΄Π»Ρ Π±ΡΡΡΡΠΎΠ³ΠΎ ΡΠΌΠ½ΠΎΠΆΠ΅Π½ΠΈΡ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅Ρ ΡΠΌΠ½ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π΄Π²ΡΡ n - Π·Π½Π°ΡΠ½ΡΡ ΡΠΈΡΠ΅Π»
DAC(a, i, j) { if(small(a, i, j)) return(Solution(a, i, j)) else mid = divide(a, i, j) // f1(n) b = DAC(a, i, mid) // T(n/2) c = DAC(a, mid+1, j) // T(n/2) d = combine(b, c) // f2(n) return(d) } -
Dynamic Programming - ΠΠ΅ΡΠΈΡΡΠΉΡΠ΅ ΠΏΡΠΎΠΌΠ΅ΠΆΡΡΠΎΡΠ½ΡΠ΅ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΡ Π΄Π»Ρ ΠΈΡ ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎΠ³ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ.
DP = Recursion + some memoryΠΠΎΠ΄Ρ ΠΎΠ΄
Memoization(Π‘Π²Π΅ΡΡ Ρ ΠΠ½ΠΈΠ·) - ΠΊΠ΅ΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠΎΠ² ΠΏΠΎΠ²ΡΠΎΡΡΡΡΠΈΡ ΡΡ ΡΠ°ΡΡΠ΅ΡΠΎΠ² Π² ΡΠ°Π±Π»ΠΈΡΡ ΠΈ ΠΈΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΠΏΠΎ ΠΌΠ΅ΡΠ΅ Ρ ΠΎΠ΄Π° Π°Π»Π³ΠΎΡΠΈΡΠΌΠ°.ΠΠΎΠ΄Ρ ΠΎΠ΄
Tabulation(Π‘Π½ΠΈΠ·Ρ ΠΠ²Π΅ΡΡ) - ΠΊΠ΅ΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Π²ΡΠ΅Ρ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠΎΠ² ΠΏΠΎΠ΄Π·Π°Π΄Π°Ρ Π² ΡΠ°Π±Π»ΠΈΡΡ ΠΈ ΠΏΠΎΡΠ»Π΅ Π² Π½ΡΠΆΠ½ΠΎΠΉ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ ΡΠ±ΠΎΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠΎΠ². ΠΡΠΈΠΌΠ΅Ρ, Π·Π°Π΄Π°ΡΠ° ΠΎ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠΉ Π²ΠΌΠ΅ΡΡΠΈΠΌΠΎΡΡΠΈ ΡΡΠΊΠ·Π°ΠΊΠ°, Π΄Π»Ρ ΠΏΠ΅ΡΠ΅Π±ΠΎΡΠ° Π²ΡΠ΅Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΡΡ Π²Π°ΡΠΈΠ°Π½ΡΠΎΠ²O(2^N), Π±ΡΡΡΡΠ΅Π΅ ΡΠ΅ΡΠ°ΡΡ ΠΏΠΎΠ΄Π·Π°Π΄Π°ΡΠΈO(N^2).ΠΠΎΠ΄Ρ ΠΎΠ΄
Memoization. Π€ΡΠ½ΠΊΡΠΈΠΈ ΠΌΠΎΠ³ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΡ Π΄Π»Ρ Π·Π°ΠΏΠΎΠΌΠΈΠ½Π°Π½ΠΈΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠΎΠ² ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠΈΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ, ΡΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΈΠ·Π±Π΅ΠΆΠ°ΡΡ Π½Π΅Π½ΡΠΆΠ½ΠΎΠΉ ΡΠ°Π±ΠΎΡΡ. Π’Π°ΠΊΠ°Ρ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡ Π½Π°Π·ΡΠ²Π°Π΅ΡΡΡ ΠΌΠ΅ΠΌΠΎΠΈΠ·Π°ΡΠΈΠ΅ΠΉ . ΠΠ΅ΠΌΠΎΠΈΠ·Π°ΡΠΈΡ Π€ΠΈΠ±ΠΎΠ½Π°ΡΡΠΈ. ΠΠ»Π³ΠΎΡΠΈΡΠΌ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΡ ΡΠΈΡΠ΅Π» Π€ΠΈΠ±ΠΎΠ½Π°ΡΡΠΈ. ΠΠ³ΠΎ Π΄Π΅ΡΠ΅Π²ΠΎ ΡΠ΅ΠΊΡΡΡΠΈΠ²Π½ΡΡ Π²ΡΠ·ΠΎΠ²ΠΎΠ² ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°Π΅Ρ, ΡΡΠΎ fib(3) Π²ΡΡΠΈΡΠ»ΡΠ΅ΡΡΡ ΠΌΠ½ΠΎΠ³ΠΎΠΊΡΠ°ΡΠ½ΠΎ. ΠΡ ΠΌΠΎΠΆΠ΅ΠΌ ΡΡΠΎ ΠΈΡΠΏΡΠ°Π²ΠΈΡΡ, ΡΠΎΡ ΡΠ°Π½ΡΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΡ ΠΏΠΎ ΠΌΠ΅ΡΠ΅ ΠΈΡ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΡ ΠΈ Π΄Π΅Π»Π°Ρ Π½ΠΎΠ²ΡΠ΅ Π²ΡΠ·ΠΎΠ²Ρ fib ΡΠΎΠ»ΡΠΊΠΎ Π΄Π»Ρ ΡΠ΅Ρ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΠΉ, ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠΎΠ² ΠΊΠΎΡΠΎΡΡΡ Π΅ΡΠ΅ Π½Π΅Ρ Π² ΠΏΠ°ΠΌΡΡΠΈ ΠΌΠ½ΠΎΠ³ΠΎΠΊΡΠ°ΡΠ½ΠΎΠ³ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΠΏΡΠΎΠΌΠ΅ΠΆΡΡΠΎΡΠ½ΡΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠΎΠ² Π½Π°Π·ΡΠ²Π°Π΅ΡΡΡ ΠΌΠ΅ΠΌΠΎΠΈΠ·Π°ΡΠΈΠ΅ΠΉ.ΠΠ°ΠΊ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ, Π²ΡΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ, ΡΡΠ΅Π±ΡΡΡΠΈΠ΅ ΠΌΠ°ΠΊΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈ ΠΈΠ»ΠΈ ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΡ Π²Π΅Π»ΠΈΡΠΈΠ½, ΠΈΠ»ΠΈ Π·Π°Π΄Π°ΡΠΈ ΠΏΠΎΠ΄ΡΡΠ΅ΡΠ°, ΡΡΠ΅Π±ΡΡΡΠΈΠ΅ ΠΏΠΎΠ΄ΡΡΠ΅ΡΠ° ΠΊΠΎΠΌΠΏΠΎΠ·ΠΈΡΠΈΠΉ ΠΏΡΠΈ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΡ ΡΡΠ»ΠΎΠ²ΠΈΡΡ , ΠΈΠ»ΠΈ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ Π²Π΅ΡΠΎΡΡΠ½ΠΎΡΡΠΈ, ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ ΡΠ΅ΡΠ΅Π½Ρ Ρ ΠΏΠΎΠΌΠΎΡΡΡ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ.
ΠΡΠ΅ Π·Π°Π΄Π°ΡΠΈ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΡΠ΄ΠΎΠ²Π»Π΅ΡΠ²ΠΎΡΡΡΡ ΡΠ²ΠΎΠΉΡΡΠ²Ρ ΠΏΠ΅ΡΠ΅ΠΊΡΡΠ²Π°ΡΡΠΈΡ ΡΡ ΠΏΠΎΠ΄Π·Π°Π΄Π°Ρ, Π° Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²ΠΎ ΠΊΠ»Π°ΡΡΠΈΡΠ΅ΡΠΊΠΈΡ Π·Π°Π΄Π°Ρ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΡΠ°ΠΊΠΆΠ΅ ΡΠ΄ΠΎΠ²Π»Π΅ΡΠ²ΠΎΡΡΡΡ ΡΠ²ΠΎΠΉΡΡΠ²Ρ ΠΎΠΏΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠΉ ΠΏΠΎΠ΄ΡΡΡΡΠΊΡΡΡΡ. ΠΠ°ΠΊ ΡΠΎΠ»ΡΠΊΠΎ ΠΌΡ ΠΎΠ±Π½Π°ΡΡΠΆΠΈΠΌ ΡΡΠΈ ΡΠ²ΠΎΠΉΡΡΠ²Π° Π² Π΄Π°Π½Π½ΠΎΠΉ Π·Π°Π΄Π°ΡΠ΅, Π±ΡΠ΄ΡΡΠ΅ ΡΠ²Π΅ΡΠ΅Π½Ρ, ΡΡΠΎ Π΅Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΅ΡΠΈΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ.
Dynamic Programming topcoder - ΠΠ΅ΡΠΈΡΡΠΉΡΠ΅ ΠΏΡΠΎΠΌΠ΅ΠΆΡΡΠΎΡΠ½ΡΠ΅ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΡ Π΄Π»Ρ ΠΈΡ ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎΠ³ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ.
-
Greedy Algorithm - ΠΏΡΡΠ°ΠΉΡΠ΅ΡΡ Π²Π·ΡΡΡ ΡΡΠΎ-ΡΠΎ Π²ΡΠ³ΠΎΠ΄Π½ΠΎΠ΅ Π² ΠΏΠ΅ΡΠ²ΡΡ ΠΎΡΠ΅ΡΠ΅Π΄Ρ (ΠΆΠ°Π΄Π½ΡΠΉ Π°Π»Π³ΠΎΡΠΈΡΠΌ). ΠΠ°Π΄Π½ΡΠ΅ Π°Π»Π³ΠΎΡΠΈΡΠΌΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ Π΄Π»Ρ ΡΠ΅ΡΠ΅Π½ΠΈΡ Π·Π°Π΄Π°Ρ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈ, Π΄Π΅Π»Π°Ρ Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎ ΠΎΠΏΡΠΈΠΌΠ°Π»ΡΠ½ΡΠΉ Π²ΡΠ±ΠΎΡ Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΡΠ°Π³Π΅. Π ΡΡΠΈΡ Π°Π»Π³ΠΎΡΠΈΡΠΌΠ°Ρ ΡΠ΅ΡΠ΅Π½ΠΈΡ ΠΏΡΠΈΠ½ΠΈΠΌΠ°ΡΡΡΡ Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ, Π΄ΠΎΡΡΡΠΏΠ½ΠΎΠΉ Π² ΡΠ΅ΠΊΡΡΠΈΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ, Π±Π΅Π· ΡΡΠ΅ΡΠ° ΠΏΠΎΡΠ»Π΅Π΄ΡΡΠ²ΠΈΠΉ ΡΡΠΈΡ ΡΠ΅ΡΠ΅Π½ΠΈΠΉ Π² Π±ΡΠ΄ΡΡΠ΅ΠΌ. ΠΡΠ½ΠΎΠ²Π½Π°Ρ ΠΈΠ΄Π΅Ρ ΡΠΎΡΡΠΎΠΈΡ Π² ΡΠΎΠΌ, ΡΡΠΎΠ±Ρ Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΡΡΠ°ΠΏΠ΅ Π²ΡΠ±ΡΠ°ΡΡ Π½Π°ΠΈΠ»ΡΡΡΠΈΠΉ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΡΠΉ Π²Π°ΡΠΈΠ°Π½Ρ, Π²Π΅Π΄ΡΡΠΈΠΉ ΠΊ ΡΠ΅ΡΠ΅Π½ΠΈΡ, ΠΊΠΎΡΠΎΡΠΎΠ΅ Π½Π΅ Π²ΡΠ΅Π³Π΄Π° ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΡΠ°ΠΌΡΠΌ ΠΎΠΏΡΠΈΠΌΠ°Π»ΡΠ½ΡΠΌ, Π½ΠΎ ΡΠ°ΡΡΠΎ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ Ρ ΠΎΡΠΎΡΠΈΠΌ Π΄Π»Ρ ΠΌΠ½ΠΎΠ³ΠΈΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌ.
ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ:
- ΠΠΎΠ΄ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Π₯Π°ΡΡΠΌΠ°Π½Π° β ΡΡΠΎ Π°Π»Π³ΠΎΡΠΈΡΠΌ ΡΠΆΠ°ΡΠΈΡ Π΄Π°Π½Π½ΡΡ , ΠΊΠΎΡΠΎΡΡΠΉ ΡΠΎΡΠΌΡΠ»ΠΈΡΡΠ΅Ρ ΠΎΡΠ½ΠΎΠ²Π½ΡΡ ΠΈΠ΄Π΅Ρ ΡΠΆΠ°ΡΠΈΡ ΡΠ°ΠΉΠ»ΠΎΠ².
- ΠΡΠΎΠ±Π»Π΅ΠΌΠ° ΡΠ°Π·ΠΌΠ΅Π½Π° ΠΌΠΎΠ½Π΅Ρ. ΠΠ°Π΄Π½ΡΠΉ Π°Π»Π³ΠΎΡΠΈΡΠΌ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π΄Π»Ρ ΡΠ΄Π°ΡΠΈ Π·Π°Π΄Π°Π½Π½ΠΎΠΉ ΡΡΠΌΠΌΡ Ρ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΡΠΌ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎΠΌ ΠΌΠΎΠ½Π΅Ρ, Π²ΡΠ΅Π³Π΄Π° Π²ΡΠ±ΠΈΡΠ°Ρ ΠΌΠΎΠ½Π΅ΡΡ Ρ Π½Π°ΠΈΠ±ΠΎΠ»ΡΡΠ΅ΠΉ ΡΡΠΎΠΈΠΌΠΎΡΡΡΡ, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΌΠ΅Π½ΡΡΠ΅ ΠΎΡΡΠ°Π²ΡΠ΅ΠΉΡΡ ΡΡΠΌΠΌΡ, ΠΏΠΎΠ΄Π»Π΅ΠΆΠ°ΡΠ΅ΠΉ ΠΎΠ±ΠΌΠ΅Π½Ρ.
-
Blacktracking - (ΠΏΠΎΠΈΡΠΊ Ρ Π²ΠΎΠ·Π²ΡΠ°ΡΠΎΠΌ) ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡ
Brute-ForceΠΎΡΠΌΠ΅Π½ΡΡ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΠ΅ Π·Π°ΡΡΠ°ΡΠ½ΡΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ Π΅ΡΠ΅ Π΄ΠΎ Π½Π°ΡΠ°Π»Π° ΠΈΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ. Π’.Π΅. ΠΎΡΠ±ΡΠΎΡΠΈΡΡ Π·Π°Π²Π΅Π΄ΠΎΠΌΠΎ Π½Π΅Π²Π΅ΡΠ½ΡΠΉ ΠΏΡΡΡ, Π½Π΅Π΄ΠΎΠΏΡΡΡΠΈΠ² Π·Π°ΡΡΠ°Ρ Π½Π° Π΅Π³ΠΎ ΡΠ°ΡΡΠ΅Ρ Π΅ΡΠ΅ Π΄ΠΎ Π½Π°ΡΠ°Π»Π° ΡΠ°ΠΌΠΎΠ³ΠΎ ΡΠ°ΡΡΠ΅ΡΠ°. ΠΡΠΎ ΠΎΠ±ΡΠΈΠΉ ΠΌΠ΅ΡΠΎΠ΄ Π½Π°Ρ ΠΎΠΆΠ΄Π΅Π½ΠΈΡ ΡΠ΅ΡΠ΅Π½ΠΈΠΉ Π·Π°Π΄Π°ΡΠΈ, Π² ΠΊΠΎΡΠΎΡΠΎΠΉ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ ΠΏΠΎΠ»Π½ΡΠΉ ΠΏΠ΅ΡΠ΅Π±ΠΎΡ Π²ΡΠ΅Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΡΡ Π²Π°ΡΠΈΠ°Π½ΡΠΎΠ² Π² Π½Π΅ΠΊΠΎΡΠΎΡΠΎΠΌ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π΅ Π. ΠΡΠΎ ΡΠ°ΠΌΠ° ΠΏΠΎ ΡΠ΅Π±Π΅ ΡΠ΅ΠΊΡΡΡΠΈΡ, Π½ΠΎ Π·Π΄Π΅ΡΡ Π΅ΡΡΡ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ ΡΡΠ»ΠΎΠ²ΠΈΡ, ΠΊΠΎΡΠΎΡΡΠ΅ Π΄Π΅Π»Π°ΡΡ Π΅Π΅ Π±ΠΎΠ»Π΅Π΅ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎΠΉ.ΠΡΠΎΠ±Π»Π΅ΠΌΡ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΎΠ±ΡΡΠ½ΠΎ ΡΠ΅ΡΠ°ΡΡΡΡ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΌΠ΅ΡΠΎΠ΄Π° ΠΎΠ±ΡΠ°ΡΠ½ΠΎΠ³ΠΎ ΠΎΡΡΠ»Π΅ΠΆΠΈΠ²Π°Π½ΠΈΡ, ΠΈΠΌΠ΅ΡΡ ΡΠ»Π΅Π΄ΡΡΡΠ΅Π΅ ΠΎΠ±ΡΠ΅Π΅ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ. ΠΡΠΈ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΅ΡΠΈΡΡ, ΡΠΎΠ»ΡΠΊΠΎ ΠΏΠ΅ΡΠ΅ΠΏΡΠΎΠ±ΠΎΠ²Π°Π² Π²ΡΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΡΠ΅ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ, ΠΏΡΠΈΡΠ΅ΠΌ ΠΊΠ°ΠΆΠ΄Π°Ρ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ ΠΏΡΠΎΠ²Π΅ΡΡΠ΅ΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄ΠΈΠ½ ΡΠ°Π·. ΠΠ°ΠΈΠ²Π½ΠΎΠ΅ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ ΡΡΠΈΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌ β ΠΏΠΎΠΏΡΠΎΠ±ΠΎΠ²Π°ΡΡ Π²ΡΠ΅ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ ΠΈ Π²ΡΠ²Π΅ΡΡΠΈ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ, ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΡΡ Π·Π°Π΄Π°Π½Π½ΡΠΌ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡΠΌ Π·Π°Π΄Π°ΡΠΈ. ΠΠ±ΡΠ°ΡΠ½ΠΎΠ΅ ΠΎΡΡΠ»Π΅ΠΆΠΈΠ²Π°Π½ΠΈΠ΅ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΠΏΠΎΡΡΠ΅ΠΏΠ΅Π½Π½ΠΎ ΠΈ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠΎΠ±ΠΎΠΉ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡ ΠΏΠΎ ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ Ρ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ΠΌ
Naive, ΠΏΡΠΈ ΠΊΠΎΡΠΎΡΠΎΠΌ Π³Π΅Π½Π΅ΡΠΈΡΡΡΡΡΡ ΠΈ ΠΎΠΏΡΠΎΠ±ΡΡΡΡΡ Π²ΡΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΡΠ΅ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ.ΠΠ°ΠΊ ΡΠΏΠΎΠΌΠΈΠ½Π°Π»ΠΎΡΡ ΡΠ°Π½Π΅Π΅, Π°Π»Π³ΠΎΡΠΈΡΠΌ
BlacktrackingΡΠ²Π»ΡΠ΅ΡΡΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΡΠΌ ΠΎΡ Π°Π»Π³ΠΎΡΠΈΡΠΌΠ° ΡΠ΅ΠΊΡΡΡΠΈΠΈ ΠΈ ΠΈΠΌΠ΅Π΅Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ Π²Π΅ΡΠ½ΡΡΡΡΡ Π² ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠ΅ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ Π² ΡΠ»ΡΡΠ°Π΅ ΡΠ±ΠΎΡ ΡΠ΅ΠΊΡΡΡΠΈΠ²Π½ΠΎΠ³ΠΎ ΡΠ΅ΡΠ΅Π½ΠΈΡ, Ρ. Π΅. Π² ΡΠ»ΡΡΠ°Π΅ ΡΠ±ΠΎΡ ΡΠ΅ΡΠ΅Π½ΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΡΡΡ ΠΊ ΠΌΠΎΠΌΠ΅Π½ΡΡ, ΠΊΠΎΠ³Π΄Π° ΠΎΠ½ΠΎ ΠΏΠΎΡΠ΅ΡΠΏΠ΅Π»ΠΎ Π½Π΅ΡΠ΄Π°ΡΡ, ΠΈ ΠΎΡΠ½ΠΎΠ²ΡΠ²Π°Π΅ΡΡΡ Π½Π° Π΄ΡΡΠ³ΠΎΠΌ ΡΠ΅ΡΠ΅Π½ΠΈΠΈ. ΠΠΎ ΡΡΡΠΈ, ΠΎΠ½ ΠΏΡΠΎΠ±ΡΠ΅Ρ Π²ΡΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΡΠ΅ ΡΠ΅ΡΠ΅Π½ΠΈΡ ΠΈ Π½Π°Ρ ΠΎΠ΄ΠΈΡ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎΠ΅.ΠΠ±Ρ ΠΎΠ΄ Ρ Π²ΠΎΠ·Π²ΡΠ°ΡΠΎΠΌ β ΡΡΠΎ Π°Π»Π³ΠΎΡΠΈΡΠΌΠΈΡΠ΅ΡΠΊΠΈΠΉ ΠΌΠ΅ΡΠΎΠ΄ ΡΠ΅ΡΠ΅Π½ΠΈΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌ ΡΠ΅ΠΊΡΡΡΠΈΠ²Π½ΠΎ, ΠΏΡΡΠ°ΡΡΡ ΠΏΠΎΡΡΡΠΎΠΈΡΡ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ ΠΏΠΎΡΡΠ΅ΠΏΠ΅Π½Π½ΠΎ, ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΌΡ ΡΡΠ°Π³ΠΌΠ΅Π½ΡΡ Π·Π° ΡΠ°Π·, ΡΠ΄Π°Π»ΡΡ ΡΠ΅ ΡΠ΅ΡΠ΅Π½ΠΈΡ, ΠΊΠΎΡΠΎΡΡΠ΅ Π½Π΅ ΡΠ΄ΠΎΠ²Π»Π΅ΡΠ²ΠΎΡΡΡΡ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡΠΌ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ Π² Π»ΡΠ±ΠΎΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ (ΠΏΠΎΠ΄ Π²ΡΠ΅ΠΌΠ΅Π½Π΅ΠΌ Π·Π΄Π΅ΡΡ ΠΏΠΎΠ΄ΡΠ°Π·ΡΠΌΠ΅Π²Π°Π΅ΡΡΡ Π²ΡΠ΅ΠΌΡ, ΠΏΡΠΎΡΠ΅Π΄ΡΠ΅Π΅ Π΄ΠΎ Π΄ΠΎΡΡΠΈΠΆΠ΅Π½ΠΈΡ Π»ΡΠ±ΠΎΠ³ΠΎ ΡΡΠΎΠ²Π½Ρ Π΄Π΅ΡΠ΅Π²Π° ΠΏΠΎΠΈΡΠΊΠ°).
ΠΠ΅ΠΊΠΎΡΠΎΡΡΠ΅ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ:
- ΠΠ°Π΄Π°ΡΠ° ΡΠ΅ΡΠ΅Π½ΠΈΡ ΡΡΠ΄ΠΎΠΊΡ
- ΠΡΡΡΠ° Π² Π»Π°Π±ΠΈΡΠΈΠ½ΡΠ΅
- Π‘ΡΠΌΠΌΠ° ΠΊΠΎΠΌΠ±ΠΈΠ½Π°ΡΠΈΠΈ, Π‘ΡΠΌΠΌΠ° ΠΊΠΎΠΌΠ±ΠΈΠ½Π°ΡΠΈΠΈ II, Π‘ΡΠΌΠΌΠ° ΠΊΠΎΠΌΠ±ΠΈΠ½Π°ΡΠΈΠΈ III
- ΠΡΠΎΠ±Π»Π΅ΠΌΠ° Ρ ΠΊΠΎΡΠΎΠ»Π΅Π²ΠΎΠΉ N
- ΠΡΠΎΠ±Π»Π΅ΠΌΠ° N-ΡΠ΅ΡΠ·Π΅ΠΉ
-
Local Search - ΠΏΡΡΠ°ΠΉΡΠ΅ΡΡ Π²ΡΠ±ΡΠ°ΡΡ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ ΠΊΠΎΡΠΎΡΠΎΠ΅ Π½Π΅ Ρ ΡΠΆΠ΅ ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠ΅Π³ΠΎ (Π³ΡΠ°Π΄ΠΈΠ΅Π½ΡΠ½ΡΠΉ ΡΠΏΡΡΠΊ/ΠΏΠΎΠ΄ΡΠ΅ΠΌ).
ΠΡΠΈΠΌΠ΅ΡΠΎΠΌ Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠΈΡΠΊΠ° ΡΠ²Π»ΡΠ΅ΡΡΡ Π°Π»Π³ΠΎΡΠΈΡΠΌ Β«ΠΠΎΡΡ ΠΎΠΆΠ΄Π΅Π½ΠΈΠ΅ Π½Π° Ρ ΠΎΠ»ΠΌΒ». ΠΠ½ Π½Π°ΡΠΈΠ½Π°Π΅ΡΡΡ Ρ ΠΏΠ΅ΡΠ²ΠΎΠ½Π°ΡΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΡΠ΅ΡΠ΅Π½ΠΈΡ ΠΈ ΠΈΡΠ΅ΡΠ°ΡΠΈΠ²Π½ΠΎ Π²Π½ΠΎΡΠΈΡ Π½Π΅Π±ΠΎΠ»ΡΡΠΈΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ Π΄Π»Ρ ΡΠ»ΡΡΡΠ΅Π½ΠΈΡ ΡΠ΅ΠΊΡΡΠ΅Π³ΠΎ ΡΠ΅ΡΠ΅Π½ΠΈΡ Ρ ΡΠ΅Π»ΡΡ Π½Π°ΠΉΡΠΈ Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎ ΠΎΠΏΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠ΅ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ Π² ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½Π½ΠΎΠΉ ΡΠ°ΡΡΠΈ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΡΠ΅ΡΠ΅Π½ΠΈΠΉ.
-
Transform and Conquer - ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ Π΄Π°Π½Π½ΡΡ Π΄Π»Ρ Π»ΡΡΡΠ΅Π³ΠΎ ΠΈΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΠΈΠ»ΠΈ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠ°ΠΌΠΎΠΉ Π·Π°Π΄Π°ΡΠΈ (ΠΈΠ½Π΄Π΅ΠΊΡ Π² Π±Π°Π·Π°Ρ Π΄Π°Π½Π½ΡΡ , ΡΠ°Π·ΠΌΠ΅ΡΡΠΈΡΡ Π΄Π°Π½Π½ΡΠ΅ ΠΎΡΠΎΠ±ΡΠΌ ΡΠΏΠΎΡΠΎΠ±ΠΎΠΌ Π΄Π»Ρ Π±ΡΡΡΡΠΎΠ³ΠΎ ΠΏΠΎΠΈΡΠΊΠ°. ΠΠ½Π²Π΅ΡΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅ ΠΈΠ½Π΄Π΅ΠΊΡ ΠΈ Column-oriented DB MS).
Π‘ΠΏΠΎΡΠΎΠ±Ρ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΡ:
-
Π£ΠΏΡΠΎΡΠ΅Π½ΠΈΠ΅ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠ°: ΠΡΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°ΡΡ, ΡΠΌΠ΅Π½ΡΡΠΈΠ² ΡΠ°Π·ΠΌΠ΅Ρ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ, ΡΠ°Π·Π±ΠΈΠ² Π΅Π΅ Π½Π° Π±ΠΎΠ»Π΅Π΅ ΠΌΠ΅Π»ΠΊΠΈΠ΅ ΡΠ°ΡΡΠΈ ΠΈΠ»ΠΈ ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ² ΡΡΡΡΠΊΡΡΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ. ΠΡΠΎΡ ΠΌΠ΅ΡΠΎΠ΄ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π΄Π»Ρ ΡΠΏΡΠΎΡΠ΅Π½ΠΈΡ Π·Π°Π΄Π°Ρ, ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠ»ΠΈΡΠΊΠΎΠΌ Π²Π΅Π»ΠΈΠΊΠΈ Π΄Π»Ρ ΡΠ΅ΡΠ΅Π½ΠΈΡ ΡΡΠ°Π΄ΠΈΡΠΈΠΎΠ½Π½ΡΠΌΠΈ ΠΌΠ΅ΡΠΎΠ΄Π°ΠΌΠΈ.
-
Π£ΠΌΠ΅Π½ΡΡΠ΅Π½ΠΈΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ: ΠΠ΄Π΅Ρ ΡΠΎΠΊΡΠ°ΡΠ΅Π½ΠΈΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌ ΡΠΎΡΡΠΎΠΈΡ Π² ΡΠΎΠΌ, ΡΡΠΎΠ±Ρ ΠΏΡΠ΅Π²ΡΠ°ΡΠΈΡΡ Π΄Π°Π½Π½ΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ Π² Π΄ΡΡΠ³ΡΡ, ΠΊΠΎΡΠΎΡΡΡ Π»Π΅Π³ΡΠ΅ ΡΠ΅ΡΠΈΡΡ. ΠΡΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°ΡΡ, ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π² ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ Π² Π΄ΡΡΠ³ΡΡ ΡΠΎΡΠΌΡ ΠΈΠ»ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΡΠ²ΡΠΈΡΡΠΈΠΊΡ Π΄Π»Ρ ΠΏΠΎΠΈΡΠΊΠ° ΡΠ΅ΡΠ΅Π½ΠΈΡ.
-
ΠΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΡ: ΠΡΠ½ΠΎΠ²Π½Π°Ρ ΠΈΠ΄Π΅Ρ ΡΡΠΎΠ³ΠΎ ΠΌΠ΅ΡΠΎΠ΄Π° β ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Π΄Π°Π½Π½ΡΡ , ΡΡΠΎΠ±Ρ ΠΈΡ ΠΌΠΎΠΆΠ½ΠΎ Π±ΡΠ»ΠΎ ΡΠΏΡΠΎΡΡΠΈΡΡ. ΠΡΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°ΡΡ ΠΏΡΡΠ΅ΠΌ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ Π²Ρ ΠΎΠ΄Π½ΡΡ Π΄Π°Π½Π½ΡΡ ΠΈΠ»ΠΈ Π²ΡΡ ΠΎΠ΄Π½ΡΡ Π΄Π°Π½Π½ΡΡ .
-
-
Randomized algorithm - (ΡΠ°Π½Π΄ΠΎΠΌΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ Π°Π»Π³ΠΎΡΠΈΡΠΌ) ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡ ΡΠ»ΡΡΠ°ΠΉΠ½ΠΎΡΡΡ Π΄Π»Ρ ΡΠ΅ΡΠ΅Π½ΠΈΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ. ΠΡΠΎ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ Π΄Π»Ρ ΡΠ΅ΡΠ΅Π½ΠΈΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌ, ΠΊΠΎΡΠΎΡΡΠ΅ Π½Π΅ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ ΡΠ΅ΡΠ΅Π½Ρ Π΄Π΅ΡΠ΅ΡΠΌΠΈΠ½ΠΈΡΡΠΈΡΠ΅ΡΠΊΠΈ, ΠΈΠ»ΠΈ Π΄Π»Ρ ΠΏΠΎΠ²ΡΡΠ΅Π½ΠΈΡ ΡΡΠ΅Π΄Π½Π΅ΠΉ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡΠΈ Π·Π°Π΄Π°ΡΠΈ. Π Π°Π½Π΄ΠΎΠΌΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½Π°Ρ Π±ΡΡΡΡΠ°Ρ ΡΠΎΡΡΠΈΡΠΎΠ²ΠΊΠ°: Π²Π°ΡΠΈΠ°Π½Ρ Π°Π»Π³ΠΎΡΠΈΡΠΌΠ° Π±ΡΡΡΡΠΎΠΉ ΡΠΎΡΡΠΈΡΠΎΠ²ΠΊΠΈ, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ ΡΠΎΡΠΊΠ° ΠΎΠΏΠΎΡΡ Π²ΡΠ±ΠΈΡΠ°Π΅ΡΡΡ ΡΠ»ΡΡΠ°ΠΉΠ½ΡΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ.
Π‘ΠΎΡΡΠΈΡΠΎΠ²ΠΊΠ° ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΡΠ½Π΄Π°ΠΌΠ΅Π½ΡΠ°Π»ΡΠ½ΠΎΠΉ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠ΅ΠΉ Π² ΠΊΠΎΠΌΠΏΡΡΡΠ΅ΡΠ½ΡΡ
Π½Π°ΡΠΊΠ°Ρ
, ΠΈ Π΄Π»Ρ Π½Π΅Ρ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΡΡ
Π°Π»Π³ΠΎΡΠΈΡΠΌΠΎΠ², ΡΠ°ΠΊΠΈΡ
ΠΊΠ°ΠΊ Quicksort, Merge sort ΠΈ Heapsort.
Radix Sort β ΡΠΎΡΡΠΈΡΠΎΠ²ΠΊΠ° ΠΏΠΎ ΠΎΡΠ½ΠΎΠ²Π°Π½ΠΈΡ ΡΠΈΡΡΠ΅ΠΌΡ ΡΡΠΈΡΠ»Π΅Π½ΠΈΡ.
ΠΠ»Π°Π²Π½ΠΎΠ΅ ΠΊΠΎΡΠΎΡΠΊΠΎ: Π°Π»Π³ΠΎΡΠΈΡΠΌ ΠΏΠΎΡΠ°Π·ΡΡΠ΄Π½ΠΎΠΉ ΡΠΎΡΡΠΈΡΠΎΠ²ΠΊΠΈ Π³Π΅Π½ΠΈΠ°Π»Π΅Π½ Π² ΡΠΎΠΌ, ΡΡΠΎ ΡΠΎΡΡΠΈΡΡΠ΅Ρ Π½Π΅ ΡΠΈΡΠ»Π° ΡΠ΅Π»ΠΈΠΊΠΎΠΌ, Π° Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΡΠ°Π·ΡΡΠ΄ΠΎΠ². ΠΠΎΠ»ΡΡΠ°Π΅ΡΡΡ, ΡΡΠΎ ΠΎΠ½ ΠΊΠ°ΠΊ Π±Ρ ΡΠ°Π·Π±ΠΈΡΠ°Π΅ΡΡΡ Ρ ΡΠΈΡΠ»Π°ΠΌΠΈ Π½Π° ΡΡΠΎΠ²Π½Π΅ Π΅Π΄ΠΈΠ½ΠΈΡ, Π΄Π΅ΡΡΡΠΊΠΎΠ², ΡΠΎΡΠ΅Π½ ΠΈ Ρ. Π΄. ΠΈ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΠΎΡΠΎΠΌ ΠΎΠ½ Π΄Π΅Π»Π°Π΅Ρ ΠΎΠ±ΡΡΡ ΡΠΎΡΡΠΈΡΠΎΠ²ΠΊΡ. ΠΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π΅ΠΌΡ Π½Π΅ Π±Π΅Π³Π°ΡΡ ΠΏΠΎ Π²ΡΠ΅ΠΌ ΡΡΠ°Π²Π½ΠΈΠ²Π°Π΅ΠΌΡΠΌ ΡΠΈΡΠ»Π°ΠΌ ΠΈ Π½Π΅ Π΄Π΅Π»Π°ΡΡ ΠΌΠΈΠ»Π»ΠΈΠΎΠ½ ΡΡΠ°Π²Π½Π΅Π½ΠΈΠΉ. ΠΡΡΡΠ΄Π° ΠΈ ΡΠΊΠΎΠ½ΠΎΠΌΠΈΡ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ.
ΠΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡΡ Radix Sort O(d * (n + b)) , Π³Π΄Π΅ d β ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΠΈΡΡ, n β ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ², Π° b β ΠΎΡΠ½ΠΎΠ²Π° ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΡ ΡΡΠΈΡΠ»Π΅Π½ΠΈΡ.
Π ΠΏΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈΡ
ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡΡ
ΠΏΠΎΡΠ°Π·ΡΡΠ΄Π½Π°Ρ ΡΠΎΡΡΠΈΡΠΎΠ²ΠΊΠ° Radix Sort ΡΠ°ΡΡΠΎ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Π±ΡΡΡΡΠ΅Π΅, ΡΠ΅ΠΌ Π΄ΡΡΠ³ΠΈΠ΅ Π°Π»Π³ΠΎΡΠΈΡΠΌΡ ΡΠΎΡΡΠΈΡΠΎΠ²ΠΊΠΈ Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ, ΡΠ°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ Quicksort ΠΈΠ»ΠΈ Merge sort, Π΄Π»Ρ Π±ΠΎΠ»ΡΡΠΈΡ
Π½Π°Π±ΠΎΡΠΎΠ² Π΄Π°Π½Π½ΡΡ
, ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎ ΠΊΠΎΠ³Π΄Π° ΠΊΠ»ΡΡΠΈ ΡΠΎΠ΄Π΅ΡΠΆΠ°Ρ ΠΌΠ½ΠΎΠ³ΠΎ ΡΠΈΡΡ. ΠΠ΄Π½Π°ΠΊΠΎ Π΅Π³ΠΎ Π²ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡΡ ΡΠ°ΡΡΠ΅Ρ Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎ Ρ ΡΠ²Π΅Π»ΠΈΡΠ΅Π½ΠΈΠ΅ΠΌ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Π° ΡΠΈΡΡ, ΠΏΠΎΡΡΠΎΠΌΡ ΠΎΠ½ Π½Π΅ ΡΠ°ΠΊ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π΅Π½ Π΄Π»Ρ Π½Π΅Π±ΠΎΠ»ΡΡΠΈΡ
Π½Π°Π±ΠΎΡΠΎΠ² Π΄Π°Π½Π½ΡΡ
.
ΠΡΠΏΠΎΠΌΠΎΠ³Π°ΡΠ΅Π»ΡΠ½ΠΎΠ΅ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ Radix Sort O(n + b), Π³Π΄Π΅ n β ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ², Π° b β ΠΎΡΠ½ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠΈΡΡΠ΅ΠΌΡ ΡΡΠΈΡΠ»Π΅Π½ΠΈΡ.
ΠΠΎΠΈΡΠΊ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° Π² Π±ΠΎΠ»ΡΡΠΎΠΌ Π½Π°Π±ΠΎΡΠ΅ Π΄Π°Π½Π½ΡΡ β ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½Π΅Π½Π½Π°Ρ Π·Π°Π΄Π°ΡΠ°, ΠΈ Π΄Π»Ρ Π½Π΅Ρ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΡΡ Π°Π»Π³ΠΎΡΠΈΡΠΌΠΎΠ², ΡΠ°ΠΊΠΈΡ ΠΊΠ°ΠΊ Π±ΠΈΠ½Π°ΡΠ½ΡΠΉ ΠΏΠΎΠΈΡΠΊ ΠΈ Ρ Π΅Ρ-ΡΠ°Π±Π»ΠΈΡΡ.
...
ΠΠ°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½Π΅Π½Π½ΡΠ΅ Π°Π»Π³ΠΎΡΠΈΡΠΌΡ ΠΏΠΎΠΈΡΠΊΠ°:
Linear Search(ΠΠΈΠ½Π΅ΠΉΠ½ΡΠΉ ΠΏΠΎΠΈΡΠΊ)O(n)- ΠΏΡΠΎΠ²Π΅ΡΡΠ΅ΠΌ ΡΠ»Π΅ΠΌΠ΅Π½Ρ ΠΈΡΠ΅ΡΠ°ΡΠΈΠ²Π½ΠΎ ΠΎΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ½ΡΠ° ΠΊ Π΄ΡΡΠ³ΠΎΠΌΡ.Binary Search(ΠΠ²ΠΎΠΈΡΠ½ΡΠΉ ΠΏΠΎΠΈΡΠΊ)O(log n)- ΡΠ°Π·Π±ΠΈΠ²Π°Π΅ΠΌ ΡΡΡΡΠΊΡΡΡΡ Π΄Π°Π½Π½ΡΡ Π½Π° Π΄Π²Π΅ ΡΠ°Π²Π½ΡΠ΅ ΡΠ°ΡΡΠΈ ΠΈ ΠΏΡΡΠ°Π΅ΠΌΡΡ ΡΠ΅ΡΠΈΡΡ, Π² ΠΊΠ°ΠΊΠΎΠΉ ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½Π΅ Π½Π°ΠΌ Π½ΡΠΆΠ½ΠΎ Π½Π°ΠΉΡΠΈ ΡΠ»Π΅ΠΌΠ΅Π½Ρ.Ternary Search(Π’Π΅ΡΠ½Π°ΡΠ½ΡΠΉ ΠΏΠΎΠΈΡΠΊ)O(2 * log3n)- ΠΌΠ°ΡΡΠΈΠ² Π΄Π΅Π»ΠΈΡΡΡ Π½Π° ΡΡΠΈ ΡΠ°ΡΡΠΈ, ΠΈ Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ Π² ΠΏΠΎΠ·ΠΈΡΠΈΡΡ ΡΠ°Π·Π΄Π΅Π»Π΅Π½ΠΈΡ ΠΌΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΠΌ ΡΠ΅Π³ΠΌΠ΅Π½Ρ, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ Π½Π°ΠΌ Π½ΡΠΆΠ½ΠΎ Π½Π°ΠΉΡΠΈ Π½ΡΠΆΠ½ΡΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ.Jump SearchΠΌΠ΅ΠΆΠ΄ΡO(n)ΠΈ Π΄Π²ΠΎΠΈΡΠ½ΡΠΌ ΠΏΠΎΠΈΡΠΊΠΎΠΌO(Log n)- ΡΡΠΎ Π°Π»Π³ΠΎΡΠΈΡΠΌ ΠΏΠΎΠΈΡΠΊΠ° Π² ΠΎΡΡΠΎΡΡΠΈΡΠΎΠ²Π°Π½Π½ΡΡ ΠΌΠ°ΡΡΠΈΠ²Π°Ρ . ΠΡΠ½ΠΎΠ²Π½Π°Ρ ΠΈΠ΄Π΅Ρ ΡΠΎΡΡΠΎΠΈΡ Π² ΡΠΎΠΌ, ΡΡΠΎΠ±Ρ ΠΏΡΠΎΠ²Π΅ΡΡΡΡ ΠΌΠ΅Π½ΡΡΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² (ΠΏΠΎ ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ Ρ Π»ΠΈΠ½Π΅ΠΉΠ½ΡΠΌ ΠΏΠΎΠΈΡΠΊΠΎΠΌ ), ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄Ρ Π²ΠΏΠ΅ΡΠ΅Π΄ Π½Π° ΡΠΈΠΊΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅ ΡΠ°Π³ΠΈ ΠΈΠ»ΠΈ ΠΏΡΠΎΠΏΡΡΠΊΠ°Ρ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ Π²ΠΌΠ΅ΡΡΠΎ ΠΏΠΎΠΈΡΠΊΠ° ΠΏΠΎ Π²ΡΠ΅ΠΌ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΠΌ. ΠΡΠ»ΠΈ ΠΌΡ ΡΡΠ°Π²Π½ΠΈΠΌ Π΅Π³ΠΎ Ρ Π»ΠΈΠ½Π΅ΠΉΠ½ΡΠΌ ΠΈ Π±ΠΈΠ½Π°ΡΠ½ΡΠΌ ΠΏΠΎΠΈΡΠΊΠΎΠΌ, ΡΠΎ ΠΎΠΊΠ°ΠΆΠ΅ΡΡΡ, ΡΡΠΎ ΠΎΠ½ Π»ΡΡΡΠ΅, ΡΠ΅ΠΌ Π»ΠΈΠ½Π΅ΠΉΠ½ΡΠΉ ΠΏΠΎΠΈΡΠΊ, Π½ΠΎ Π½Π΅ Π»ΡΡΡΠ΅, ΡΠ΅ΠΌ Π±ΠΈΠ½Π°ΡΠ½ΡΠΉ ΠΏΠΎΠΈΡΠΊ.Interpolation SearchO(log 2 (log 2 n))Π΄Π»Ρ ΡΡΠ΅Π΄Π½Π΅Π³ΠΎ ΡΠ»ΡΡΠ°Ρ ΠΈO(n)Π΄Π»Ρ Π½Π°ΠΈΡ ΡΠ΄ΡΠ΅Π³ΠΎ ΡΠ»ΡΡΠ°Ρ - ΡΡΠΎ ΡΠ»ΡΡΡΠ΅Π½ΠΈΠ΅ ΠΏΠΎ ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ Ρ Π΄Π²ΠΎΠΈΡΠ½ΡΠΌ ΠΏΠΎΠΈΡΠΊΠΎΠΌ Π΄Π»Ρ ΡΠ»ΡΡΠ°Π΅Π², ΠΊΠΎΠ³Π΄Π° Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π² ΠΎΡΡΠΎΡΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠΌ ΠΌΠ°ΡΡΠΈΠ²Π΅ ΡΠ°ΡΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Ρ ΡΠ°Π²Π½ΠΎΠΌΠ΅ΡΠ½ΠΎ. ΠΠ½ΡΠ΅ΡΠΏΠΎΠ»ΡΡΠΈΡ ΡΠΎΠ·Π΄Π°Π΅Ρ Π½ΠΎΠ²ΡΠ΅ ΡΠΎΡΠΊΠΈ Π΄Π°Π½Π½ΡΡ Π² Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π΅ Π΄ΠΈΡΠΊΡΠ΅ΡΠ½ΠΎΠ³ΠΎ Π½Π°Π±ΠΎΡΠ° ΠΈΠ·Π²Π΅ΡΡΠ½ΡΡ ΡΠΎΡΠ΅ΠΊ Π΄Π°Π½Π½ΡΡ . ΠΠ²ΠΎΠΈΡΠ½ΡΠΉ ΠΏΠΎΠΈΡΠΊ Π²ΡΠ΅Π³Π΄Π° ΠΎΠ±ΡΠ°ΡΠ°Π΅ΡΡΡ ΠΊ ΡΡΠ΅Π΄Π½Π΅ΠΌΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ Π΄Π»Ρ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ. Π‘ Π΄ΡΡΠ³ΠΎΠΉ ΡΡΠΎΡΠΎΠ½Ρ, ΠΈΠ½ΡΠ΅ΡΠΏΠΎΠ»ΡΡΠΈΠΎΠ½Π½ΡΠΉ ΠΏΠΎΠΈΡΠΊ ΠΌΠΎΠΆΠ΅Ρ ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΡΡΡΡ Π² ΡΠ°Π·Π½ΡΡ ΠΌΠ΅ΡΡΠ°Ρ Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΈΡΠΊΠΎΠΌΠΎΠ³ΠΎ ΠΊΠ»ΡΡΠ°. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π΅ΡΠ»ΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΊΠ»ΡΡΠ° Π±Π»ΠΈΠΆΠ΅ ΠΊ ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅ΠΌΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ, ΠΈΠ½ΡΠ΅ΡΠΏΠΎΠ»ΡΡΠΈΠΎΠ½Π½ΡΠΉ ΠΏΠΎΠΈΡΠΊ, ΡΠΊΠΎΡΠ΅Π΅ Π²ΡΠ΅Π³ΠΎ, Π½Π°ΡΠ½Π΅Ρ ΠΏΠΎΠΈΡΠΊ Π² Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠΈ ΠΊΠΎΠ½Π΅ΡΠ½ΠΎΠΉ ΡΡΠΎΡΠΎΠ½Ρ.Exponential SearchO(log n)- ΠΠ½ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Π»ΡΡΡΠ΅, ΡΠ΅ΠΌ Π΄Π²ΠΎΠΈΡΠ½ΡΠΉ ΠΏΠΎΠΈΡΠΊ, Π΄Π»Ρ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½Π½ΡΡ ΠΌΠ°ΡΡΠΈΠ²ΠΎΠ², Π° ΡΠ°ΠΊΠΆΠ΅ ΠΊΠΎΠ³Π΄Π° ΠΈΡΠΊΠΎΠΌΡΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡ Π±Π»ΠΈΠΆΠ΅ ΠΊ ΠΏΠ΅ΡΠ²ΠΎΠΌΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ.
Binary Search ΠΈ Exponential Search ΡΡΠΎ Π°Π»Π³ΠΎΡΠΈΡΠΌΡ ΠΏΠΎΠΈΡΠΊΠ° Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π² ΠΎΡΡΠΎΡΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠΌ (ΠΏΠΎΠ΄Π³ΠΎΡΠΎΠ²Π»Π΅Π½Π½ΠΎΠΌ) Π½Π°Π±ΠΎΡΠ΅ Π΄Π°Π½Π½ΡΡ
, Π½ΠΎ Π΅ΡΠ»ΠΈ Ρ
Π°ΡΠ°ΠΊΡΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΠΏΠΎΠ΄ΡΠ°Π·ΡΠΌΠ΅Π²Π°Π΅Ρ ΠΏΠΎΡΡΠΎΡΠ½Π½ΠΎΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π½Π°Π±ΠΎΡΠ° Π΄Π°Π½Π½ΡΡ
, ΡΠΎ ΡΡΠΈ Π°Π»Π³ΠΎΡΠΈΡΠΌΡ Π±ΡΠ΄ΡΡ ΠΈΠΌΠ΅ΡΡ Π·Π½Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΌΠ΅Π½ΡΡΡΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ ΡΠ΅ΠΌ Red Black Tree
ΠΠ΅ΡΠΎΡΡΠ½ΠΎΡΡΠ½ΡΠ΅ ΡΡΡΡΠΊΡΡΡΡ Π΄Π°Π½Π½ΡΡ . ΠΠ½ΠΈ Π΄Π°ΡΡ ΠΎΡΠ²Π΅Ρ,ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΠΎΠΆΠ΅Ρ ΠΎΠΊΠ°Π·Π°ΡΡΡΡ Π»ΠΎΠΆΠ½ΡΠΌ, Π½ΠΎ Ρ Π±ΠΎΠ»ΡΡΠΎΠΉ Π²Π΅ΡΠΎΡΡΠ½ΠΎΡΡΡΡ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΡΠΌ. Π€ΠΈΠ»ΡΡΡΡ ΠΠ»ΡΠΌΠ° ΠΎΡΠ΅Π½Ρ ΡΠ΄ΠΎΠ±Π½Ρ ΡΠΎΠ³Π΄Π°, ΠΊΠΎΠ³Π΄Π° Π½Π΅ Π½ΡΠΆΠ½ΠΎ Ρ ΡΠ°Π½ΠΈΡΡ ΡΠΎΡΠ½ΡΠΉ ΠΎΡΠ²Π΅Ρ. ΠΡΠΈΠΌΠ΅Ρ, ΡΡΠΎ Π±Ρ ΡΠΌΠ΅Π½ΡΡΠΈΡΡ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΏΡΠΎΠ²Π΅ΡΠΎΠΊ Π½Π°Π»ΠΈΡΠΈΡ ΠΊΠ»ΡΡΠ° Π² Π±Π°Π·Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡΡΠΈΡΡ Π²Π΅ΡΠΎΡΡΠ½ΡΠΉ ΠΎΡΠ²Π΅Ρ Π½Π°Π»ΠΈΡΠΈΡ ΠΈΠ»ΠΈ ΡΠΎΡΠ½ΠΎ ΠΎΡΡΠΈΡΠ°ΡΠ΅Π»ΡΠ½ΡΠΉ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ Π€ΠΈΠ»ΡΡΡ ΠΠ»ΡΠΌΠ°
ΠΠΈΠ½Π΅ΠΉΠ½ΠΎΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π»Ρ ΠΌΠ°ΠΊΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈ Π½Π΅ΠΊΠΎΡΠΎΡΠΎΠΉ Ρ Π°ΡΠ°ΠΊΡΠ΅ΡΠΈΡΡΠΈΠΊΠΈ ΠΏΡΠΈ Π·Π°Π΄Π°Π½Π½ΡΡ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡΡ . ΠΡΠ΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Π²Π°ΡΠ° ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΡ Π²ΡΠΏΡΡΠΊΠ°Π΅Ρ Π΄Π²Π° ΠΏΡΠΎΠ΄ΡΠΊΡΠ°: ΡΡΠ±Π°ΡΠΊΠΈ ΠΈ ΡΡΠΌΠΊΠΈ. ΠΠ° ΡΡΠ±Π°ΡΠΊΡ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ 1 ΠΌ 5 ΠΏΡΠ³ΠΎΠ²ΠΈΡ. ΠΠ° ΠΈΠ·Π³ΠΎΡΠΎΠ²Π»Π΅Π½ΠΈΠ΅ ΡΡΠΌΠΊΠΈ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ 2 ΠΌ ΡΠΊΠ°Π½ΠΈ ΠΈ 2 ΠΏΡΠ³ΠΎΠ²ΠΈΡΡ. Π£ Π²Π°Ρ Π΅ΡΡΡ 11 ΠΌ ΡΠΊΠ°Π½ΠΈ ΠΈ 20 ΠΏΡΠ³ΠΎΠ²ΠΈΡ. Π ΡΠ±Π°ΡΠΊΠ° ΠΏΡΠΈΠ½ΠΎΡΠΈΡ ΠΏΡΠΈΠ±ΡΠ»Ρ $2, Π° ΡΡΠΌΠΊΠ° - $3. Π‘ΠΊΠΎΠ»ΡΠΊΠΎ ΡΡΠ±Π°ΡΠ΅ΠΊ ΠΈ ΡΡΠΌΠΎΠΊ ΡΠ»Π΅Π΄ΡΠ΅Ρ ΠΈΠ·Π³ΠΎΡΠΎΠ²ΠΈΡΡ Π΄Π»Ρ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ ΡΠΊΠ°Π½ΠΈ ΠΈ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠΉ ΠΏΡΠΈΠ±ΡΠ»ΠΈ?
Π§ΡΠΎΠ±Ρ Π΄Π²Π΅ ΡΠΈΡΡΡ ΠΎΡ 0-9 ΠΌΠΎΠΆΠ½ΠΎ Π±ΡΠ»ΠΎ Π·Π°ΠΊΠΎΠ΄ΠΈΡΠΎΠ²Π°ΡΡ Π² ΠΎΠ΄Π½ΠΎΠΌ Π±Π°ΠΉΡΠ΅
AND (&)
OR (|)
XOR (^)
NOT (~)
Left Shift (<<)
Right Shift(>>)
Data Compression: Bit-Packing 101
ΠΠΎΠΌΠ±ΠΈΠ½Π°ΡΠΎΜΡΠΈΠΊΠ° β ΡΠ°Π·Π΄Π΅Π» ΠΌΠ°ΡΠ΅ΠΌΠ°ΡΠΈΠΊΠΈ, ΠΏΠΎΡΠ²ΡΡΡΠ½Π½ΡΠΉ ΡΠ΅ΡΠ΅Π½ΠΈΡ Π·Π°Π΄Π°Ρ, ΡΠ²ΡΠ·Π°Π½Π½ΡΡ Ρ Π²ΡΠ±ΠΎΡΠΎΠΌ ΠΈ ΡΠ°ΡΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² Π½Π΅ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ (ΡΠ°ΡΠ΅ Π²ΡΠ΅Π³ΠΎ ΠΊΠΎΠ½Π΅ΡΠ½ΠΎΠ³ΠΎ) ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π° Π² ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΠΈ Ρ Π·Π°Π΄Π°Π½Π½ΡΠΌΠΈ ΠΏΡΠ°Π²ΠΈΠ»Π°ΠΌΠΈ.
Π’ΠΈΠΏ Π·Π°Π΄Π°Ρ, ΠΏΡΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°ΡΠΈΡ
ΠΊΠ»Π°ΡΡΡ NP (non-deterministic polynomial β Β«Π½Π΅Π΄Π΅ΡΠ΅ΡΠΌΠΈΠ½ΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅ Ρ ΠΏΠΎΠ»ΠΈΠ½ΠΎΠΌΠΈΠ°Π»ΡΠ½ΡΠΌ Π²ΡΠ΅ΠΌΠ΅Π½Π΅ΠΌΒ» O(N^2), O(N^3)), Π΄Π»Ρ ΠΊΠΎΡΠΎΡΡΡ
ΠΎΡΡΡΡΡΡΠ²ΡΡΡ Π±ΡΡΡΡΡΠ΅ Π°Π»Π³ΠΎΡΠΈΡΠΌΡ ΡΠ΅ΡΠ΅Π½ΠΈΡ. ΠΡΠ΅ΠΌΡ ΡΠ°Π±ΠΎΡΡ Π°Π»Π³ΠΎΡΠΈΡΠΌΠΎΠ² ΡΠ΅ΡΠ΅Π½ΠΈΡ ΡΠ°ΠΊΠΈΡ
Π·Π°Π΄Π°Ρ ΡΡΡΠ΅ΡΡΠ²Π΅Π½Π½ΠΎ (ΠΎΠ±ΡΡΠ½ΠΎ, ΡΠΊΡΠΏΠΎΠ½Π΅Π½ΡΠΈΠ°Π»ΡΠ½ΠΎ) Π²ΠΎΠ·ΡΠ°ΡΡΠ°Π΅Ρ Ρ ΡΠ²Π΅Π»ΠΈΡΠ΅Π½ΠΈΠ΅ΠΌ ΠΎΠ±ΡΠ΅ΠΌΠ° Π²Ρ
ΠΎΠ΄Π½ΡΡ
Π΄Π°Π½Π½ΡΡ
.
ΠΡΠΊΠ²Π° P Π² Π½Π°Π·Π²Π°Π½ΠΈΠΈ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ ΠΏΠΎΠ»ΠΈΠ½ΠΎΠΌΠΈΠ°Π»ΡΠ½ΡΡ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡΡ Π°Π»Π³ΠΎΡΠΈΡΠΌΠ° A_0X^n + ... + A_n
ΠΡΠΊΠ²Π° N - ΠΎΡΠ΅Π½ΠΊΠ° ΡΠ»ΠΎΠΆΠ½ΠΎΡΡΠΈ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΠ΅Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π½Π° Π½Π΅Π΄Π΅ΡΠ΅ΡΠΌΠΈΠ½ΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠΉ ΠΌΠ°ΡΠΈΠ½Π΅ Π’ΡΡΡΠΈΠ½Π³Π°, ΠΈΠ½Π°ΡΠ΅ β ΠΎΠ±ΡΡΠ½ΠΎΠΉ.
ΠΠ΄Π½Π°ΠΊΠΎ, Π΅ΡΠ»ΠΈ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²ΠΈΡΡ Π°Π»Π³ΠΎΡΠΈΡΠΌΡ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ ΡΠ²Π΅Π΄Π΅Π½ΠΈΡ, ΡΠΎ Π²ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ Π·Π°ΡΡΠ°ΡΡ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ ΡΡΡΠ΅ΡΡΠ²Π΅Π½Π½ΠΎ ΡΠ½ΠΈΠΆΠ΅Π½Ρ. ΠΡΠΈ ΡΡΠΎΠΌ, Π΅ΡΠ»ΠΈ Π±ΡΠ΄Π΅Ρ Π½Π°ΠΉΠ΄Π΅Π½ Π±ΡΡΡΡΡΠΉ Π°Π»Π³ΠΎΡΠΈΡΠΌ Π΄Π»Ρ ΠΊΠ°ΠΊΠΎΠΉ-Π»ΠΈΠ±ΠΎ ΠΈΠ· NP-ΠΏΠΎΠ»Π½ΡΡ Π·Π°Π΄Π°Ρ, ΡΠΎ Π΄Π»Ρ Π»ΡΠ±ΠΎΠΉ Π΄ΡΡΠ³ΠΎΠΉ Π·Π°Π΄Π°ΡΠΈ ΠΈΠ· ΠΊΠ»Π°ΡΡΠ° NP ΠΌΠΎΠΆΠ½ΠΎ Π±ΡΠ΄Π΅Ρ Π½Π°ΠΉΡΠΈ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠ΅Π΅ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅.
Π ΠΊΠ»Π°ΡΡΡ NP-ΠΏΠΎΠ»Π½ΡΡ ΠΎΡΠ½ΠΎΡΡΡΡΡ Π·Π°Π΄Π°ΡΠ° ΠΎ ΠΊΠΎΠΌΠΌΠΈΠ²ΠΎΡΠΆΠ΅ΡΠ΅, ΠΎ Π²Π΅ΡΡΠΈΠ½Π½ΠΎΠΌ ΠΏΠΎΠΊΡΡΡΠΈΠΈ ΠΈ ΠΏΠΎΠΊΡΡΡΠΈΠΈ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ², Π²ΠΎΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ ΠΏΠΎΠ²ΡΠ΅ΠΆΠ΄Π΅Π½Π½ΡΡ ΡΠ°ΠΉΠ»ΠΎΠ², ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡ ΠΌΠ°ΡΡΡΡΡΠΎΠ², ΡΠ»ΠΎΠΆΠ½ΡΠ΅ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΡ Π² Π±ΠΈΠΎΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΊΠ΅.
ΠΡΠΈΠΏΡΠΎΠ³ΡΠ°ΡΠΈΡ ΠΎΡΠΊΡΡΡΡΡ
ΠΊΠ»ΡΡΠ΅ΠΉ ΠΎΡΠ½ΠΎΠ²ΡΠ²Π°Π΅ΡΡΡ Π½Π° ΠΏΡΠ΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ, ΡΡΠΎ NP β P. ΠΡΠ»ΠΈ Π½Π°ΠΉΠ΄Π΅ΡΡΡ ΡΠΏΠΎΡΠΎΠ± ΡΠ΅ΡΠ°ΡΡ Π·Π°Π΄Π°ΡΠΈ ΡΡΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ° Π·Π° ΠΏΠΎΠ»ΠΈΠ½ΠΎΠΌΠΈΠ°Π»ΡΠ½ΠΎΠ΅ Π²ΡΠ΅ΠΌΡ, ΡΠΎ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ ΠΌΠ΅ΡΠΎΠ΄Ρ Π·Π°ΡΠΈΡΡ Π±ΠΎΠ»ΡΡΠ΅ Π½Π΅ Π±ΡΠ΄ΡΡ ΠΈΠΌΠ΅ΡΡ ΡΠΌΡΡΠ»Π°.
ΠΠ²ΡΠΌΡ ΡΡΠ½Π΄Π°ΠΌΠ΅Π½ΡΠ°Π»ΡΠ½ΡΠΌΠΈ ΠΏΠΎΠ½ΡΡΠΈΡΠΌΠΈ Π² ΡΡΠΎΠΉ ΠΎΠ±Π»Π°ΡΡΠΈ ΡΠ²Π»ΡΡΡΡΡ Π²ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡΡ ΠΈ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π΅Π½Π½Π°Ρ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡΡ
Big O - ΠΎΠΏΠΈΡΡΠ²Π°Π΅Ρ Π½Π°ΠΈΡ
ΡΠ΄ΡΠΈΠΉ ΡΡΠ΅Π½Π°ΡΠΈΠΉ ΡΠΎΠ³ΠΎ, ΡΠΊΠΎΠ»ΡΠΊΠΎ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ ΠΏΠΎΡΡΠ΅Π±ΡΠ΅ΡΡΡ Π°Π»Π³ΠΎΡΠΈΡΠΌΡ Π΄Π»Ρ ΡΠ΅ΡΠ΅Π½ΠΈΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ ΠΏΠΎ ΠΌΠ΅ΡΠ΅ ΡΠΎΡΡΠ° Π²Ρ
ΠΎΠ΄Π½ΡΡ
Π΄Π°Π½Π½ΡΡ
. ΠΠ½ ΠΎΡΠ²Π΅ΡΠ°Π΅Ρ Π½Π° Π²ΠΎΠΏΡΠΎΡ: "Π§ΡΠΎ ΠΏΡΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ, Π΅ΡΠ»ΠΈ ΠΌΡ ΠΏΠΎΠ΄Π°Π΄ΠΈΠΌ Π½Π° Π²Ρ
ΠΎΠ΄ Π°Π»Π³ΠΎΡΠΈΡΠΌΡ ΠΎΠ³ΡΠΎΠΌΠ½ΡΠΉ, Π³ΠΈΠΏΠΎΡΠ΅ΡΠΈΡΠ΅ΡΠΊΠΈ Π±Π΅ΡΠΊΠΎΠ½Π΅ΡΠ½ΡΠΉ ΠΎΠ±ΡΠ΅ΠΌ Π΄Π°Π½Π½ΡΡ
?". ΠΡΠΎ ΠΈ Π΅ΡΡΡ Π°ΡΠΈΠΌΠΏΡΠΎΡΠΈΡΠ΅ΡΠΊΠΈΠΉ Π°Π½Π°Π»ΠΈΠ· β Π°Π½Π°Π»ΠΈΠ· ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΡ Π½Π° Π±Π΅ΡΠΊΠΎΠ½Π΅ΡΠ½ΠΎΡΡΠΈ.
Big O Space - ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΏΠ°ΠΌΡΡΠΈ (ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° Π΄Π»Ρ Ρ
ΡΠ°Π½Π΅Π½ΠΈΡ) ΡΡΠ΅Π±ΡΠ΅ΡΡΡ Π°Π»Π³ΠΎΡΠΈΡΠΌΡ Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ Π²Ρ
ΠΎΠ΄Π½ΡΠΌΠΈ Π΄Π°Π½Π½ΡΠΌΠΈ.
ΠΡΠΊΠ²Π° Π ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠΎΠ±ΠΎΠΉ ΡΠΎΠΊΡΠ°ΡΠ΅Π½ΠΈΠ΅ ΠΎΡ ΡΠ»ΠΎΠ²Π° order ("ΠΏΠΎΡΡΠ΄ΠΎΠΊ"). ΠΡΠ½ΠΎΠ²Π½ΡΠΌ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠΌ O-ΠΎΡΠ΅Π½ΠΊΠΈ ΡΠ²Π»ΡΠ΅ΡΡΡ n, Ρ.Π΅. ΡΠ°Π·ΠΌΠ΅Ρ ΠΈΡΡΠ»Π΅Π΄ΡΠ΅ΠΌΠΎΠΉ Π·Π°Π΄Π°ΡΠΈ, ΠΏΡΠΈΡΠ΅ΠΌ Π²ΡΠ΅ΠΌΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π°Π»Π³ΠΎΡΠΈΡΠΌΠ° ΠΈΠ»ΠΈ Π΅Π³ΠΎ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡΡ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅ΡΡΡ Π² Π²ΠΈΠ΄Π΅ ΡΡΠ½ΠΊΡΠΈΠΈ n.
Π‘Π»ΠΎΠΆΠ½ΠΎΡΡΡ Π°Π»Π³ΠΎΡΠΈΡΠΌΠ° - ΡΡΠΎ ΡΠΎ, ΠΊΠ°ΠΊ Π±ΡΠ΄Π΅Ρ ΡΠ°ΡΡΠΈ ΠΏΠΎΡΡΠ΅Π±Π»Π΅Π½ΠΈΠ΅ ΡΠ΅ΡΡΡΡΠΎΠ² Ρ ΡΠ²Π΅Π»ΠΈΡΠ΅Π½ΠΈΠ΅ΠΌ N ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Π° Π΅Π»Π΅ΠΌΠ΅Π½ΡΠΎΠ² Π΄ΠΎ Π±Π΅ΡΠΊΠΎΠ½Π΅ΡΠ½ΠΎΡΡΠΈ. ΠΠ°ΠΈΠ²Π½Π°Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ Π°Π»Π³ΠΎΡΠΈΡΠΌΠ°/Π·Π°Π΄Π°ΡΠΈ ΠΊΠΎΡΠΎΡΠ°Ρ ΠΏΡΠ΅Π²ΡΡΠ°Π΅Ρ Π·Π°Π΄Π°Π½Π½ΡΠΉ Π»ΠΈΠΌΠΈΡ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΡΡΠ΅Π±ΡΠ΅Ρ Π΄ΡΡΠ³ΠΎΠ³ΠΎ ΡΠ΅ΡΠ΅Π½ΠΈΡ Ρ ΡΡΠ΅ΡΠΎΠΌ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Π° ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ ΠΈ Π²ΡΠ΄Π΅Π»Π΅Π½Π½ΡΡ
ΡΠ΅ΡΡΡΡΠΎΠ². ΠΡΠ»ΠΈ Π²Π°ΡΠ΅ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ Π½Π΅ ΡΠΊΠ»Π°Π΄ΡΠ²Π°Π΅ΡΡΡ Π² ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠ΅ ΠΏΠΎ ΠΏΠ°ΠΌΡΡΠΈ, ΠΎΠ½ΠΎ ΡΠΊΠΎΡΠ΅Π΅ Π²ΡΠ΅Π³ΠΎ Π½Π΅ ΡΠ»ΠΎΠΆΠΈΡΡΡ ΠΈ Π² ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠ΅ ΠΏΠΎ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ.
ΠΠ° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ΅ Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡΡ Π·Π½Π°ΡΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ ΠΎΡΠ»ΠΈΡΠΈΡ Π² Π΄Π΅ΡΠ°Π»ΡΡ
Π°ΡΠΈΠΌΠΏΡΠΎΡΠΈΡΠ΅ΡΠΊΠΈΡ
ΠΎΡΠ΅Π½ΠΎΠΊ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π°Π»Π³ΠΎΡΠΈΡΠΌ ΠΏΠΎΡΡΠ΄ΠΊΠ° O(n2) Ρ Π½Π΅Π±ΠΎΠ»ΡΡΠΈΠΌ ΠΊΠΎΡΡΡΠΈΡΠΈΠ΅Π½ΡΠΎΠΌ ΠΏΡΠΎΠΏΠΎΡΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΡΡΠΈ ΠΌΠΎΠΆΠ΅Ρ ΡΠ°Π±ΠΎΡΠ°ΡΡ Π±ΡΡΡΡΠ΅Π΅, ΡΠ΅ΠΌ Π°Π»Π³ΠΎΡΠΈΡΠΌ ΠΏΠΎΡΡΠ΄ΠΊΠ° O(n log n) Ρ Π²ΡΡΠΎΠΊΠΈΠΌ ΠΊΠΎΡΡΡΠΈΡΠΈΠ΅Π½ΡΠΎΠΌ Π΄Π»Ρ ΠΎΡΠ½ΠΎΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΌΠ°Π»ΡΡ
n, Π½ΠΎ ΠΏΠΎ ΠΌΠ΅ΡΠ΅ ΡΠΎΡΡΠ° n ΠΏΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ²ΠΎ Π±ΡΠ΄Π΅Ρ ΠΎΡΡΠ°Π²Π°ΡΡΡΡ Π·Π° Π°Π»Π³ΠΎΡΠΈΡΠΌΠΎΠΌ Ρ ΠΌΠ΅Π΄Π»Π΅Π½Π½Π΅Π΅ ΡΠ°ΡΡΡΡΠ΅ΠΉ ΡΡΠ½ΠΊΡΠΈΠ΅ΠΉ Π² O-ΠΎΡΠ΅Π½ΠΊΠ΅. Π‘Π»Π΅Π΄ΡΠ΅Ρ ΡΠ°ΠΊΠΆΠ΅ ΡΠ°Π·Π»ΠΈΡΠ°ΡΡ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π°Π»Π³ΠΎΡΠΈΡΠΌΠΎΠ² Π² Π½Π°ΠΈΡ
ΡΠ΄ΡΠ΅ΠΌ ΠΈ ΡΡΠ΅Π΄Π½Π΅ΡΡΠ°ΡΠΈΡΡΠΈΡΠ΅ΡΠΊΠΎΠΌ ΡΠ»ΡΡΠ°ΡΡ
. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π΄Π»Ρ Π°Π»Π³ΠΎΡΠΈΡΠΌΠ° Π±ΡΡΡΡΠΎΠΉ ΡΠΎΡΡΠΈΡΠΎΠ²ΠΊΠΈ Π½Π°ΠΈΡ
ΡΠ΄ΡΠΈΠΉ ΡΠ»ΡΡΠ°ΠΉ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΠ΅Ρ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Ρ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ ΠΏΠΎΡΡΠ΄ΠΊΠ° O(n2), Π° Π΅Π³ΠΎ ΡΡΠ΅Π΄Π½Π΅Π΅ Π±ΡΡΡΡΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ Ρ
Π°ΡΠ°ΠΊΡΠ΅ΡΠΈΠ·ΡΠ΅ΡΡΡ ΠΎΡΠ΅Π½ΠΊΠΎΠΉ O(n log n). ΠΡΡΠΊΠΈΠΉ ΡΠ°Π· ΡΡΠ°ΡΠ΅Π»ΡΠ½ΠΎ Π²ΡΠ±ΠΈΡΠ°Ρ ΠΎΠΏΠΎΡΠ½ΡΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ, ΠΌΠΎΠΆΠ½ΠΎ ΡΠ²Π΅ΡΡΠΈ Π²Π΅ΡΠΎΡΡΠ½ΠΎΡΡΡ ΠΊΠ²Π°Π΄ΡΠ°ΡΠΈΡΠ½ΠΎΠ³ΠΎ, Ρ.Π΅. O(n2), ΠΎΠ±ΡΠ΅ΠΌΠ° ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ ΠΏΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ ΠΊ Π½ΡΠ»Ρ.
ΠΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ Π΄Π»Ρ n = 10_000 Π΅Π»Π΅ΠΌΠ΅Π½ΡΠΎΠ²:
| ΠΡΠ΅Π½ΠΊΠ° | Π₯Π°ΡΠ°ΠΊΡΠ΅Ρ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ | ΠΡΠΈΠΌΠ΅Ρ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ |
|---|---|---|
O(1) |
ΠΠΎΠ½ΡΡΠ°Π½ΡΠ½Π°Ρ β 1 ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ | ΠΠ±ΡΠ°ΡΠ΅Π½ΠΈΠ΅ ΠΏΠΎ ΠΈΠ½Π΄Π΅ΠΊΡΡ |
O(log n) |
ΠΠΎΠ³Π°ΡΠΈΡΠΌΠΈΡΠ΅ΡΠΊΠ°Ρ (ΠΊΠ°ΠΊ Π² Π±ΠΈΠ½Π°ΡΠ½ΠΎΠΌ ΠΏΠΎΠΈΡΠΊΠ΅) β ~13 ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ | ΠΠΈΠ½Π°ΡΠ½ΡΠΉ ΠΏΠΎΠΈΡΠΊ |
O(βn) |
ΠΠΎΡΠ½Π΅Π²Π°Ρ β10 000 = 100 ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ | ΠΡΠΎΠ²Π΅ΡΠΊΠ° ΠΏΡΠΎΡΡΠΎΡΡ ΠΏΠ΅ΡΠ΅Π±ΠΎΡΠΎΠΌ Π΄Π΅Π»ΠΈΡΠ΅Π»Π΅ΠΉ Π΄ΠΎ βn |
O(n) |
ΠΠΈΠ½Π΅ΠΉΠ½Π°Ρ β 10 000 ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ (β 10 ΠΌΠΊΡ ΠΏΡΠΈ 1 Π½Ρ/ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ) | ΠΠΎΠ»Π½ΡΠΉ ΠΏΠ΅ΡΠ΅Π±ΠΎΡ ΠΌΠ°ΡΡΠΈΠ²Π°. Π‘ΡΠ°Π²Π½Π΅Π½ΠΈΠ΅ ΡΡΡΠΎΠΊ |
O(n log n) |
ΠΡΠΎΠΏΠΎΡΡΠΈΠΎΠ½Π°Π»ΡΠ½Π°Ρ/ΠΠΈΠ½Π΅ΠΉΠ½ΠΎ-Π»ΠΎΠ³Π°ΡΠΈΡΠΌΠΈΡΠ΅ΡΠΊΠ°Ρ (quicksort) β 10 000 Γ 13 β 130 000 (β 130 ΠΌΠΊΡ ΠΏΡΠΈ 1 Π½Ρ/ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ) | ΠΡΡΡΡΠ°Ρ ΡΠΎΡΡΠΈΡΠΎΠ²ΠΊΠ° |
O(nΒ²) |
ΠΠ²Π°Π΄ΡΠ°ΡΠΈΡΠ½Π°Ρ β 100 000 000 ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ (β 0.1 Ρ ΠΏΡΠΈ 1 Π½Ρ/ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ) | Π‘ΠΎΡΡΠΈΡΠΎΠ²ΠΊΠ° Π²ΡΡΠ°Π²ΠΊΠ°ΠΌΠΈ |
O(nΒ³) |
ΠΡΠ±ΠΈΡΠ΅ΡΠΊΠ°Ρ (ΡΡΠΎΠΉΠ½ΠΎΠΉ Π²Π»ΠΎΠΆΠ΅Π½Π½ΡΠΉ ΡΠΈΠΊΠ») β 1 000 000 000 000 ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ (β 17 ΠΌΠΈΠ½ ΠΏΡΠΈ 1 Π½Ρ/ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ) | Π£ΠΌΠ½ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΌΠ°ΡΡΠΈΡ |
O(2^n) |
ΠΠΊΡΠΏΠΎΠ½Π΅Π½ΡΠΈΠ°Π»ΡΠ½Π°Ρ β 2^10 000 β 10^3010 (Π½Π΅Π΄ΠΎΡΡΠΈΠΆΠΈΠΌΠΎ) | Π Π΅ΡΠ΅Π½ΠΈΠ΅ Π·Π°Π΄Π°ΡΠΈ ΠΊΠΎΠΌΠΌΠΈΠ²ΠΎΡΠΆΡΡΠ° ΠΏΠΎΠ»Π½ΡΠΌ ΠΏΠ΅ΡΠ΅Π±ΠΎΡΠΎΠΌ |
O(n!) |
Π€Π°ΠΊΡΠΎΡΠΈΠ°Π»ΡΠ½Π°Ρ β 10 000 000 000 000 000 000 000 000 ... ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ | ΠΠ΅ΡΠ΅Π±ΠΎΡ Π²ΡΠ΅Ρ ΠΏΠ΅ΡΠ΅ΡΡΠ°Π½ΠΎΠ²ΠΎΠΊ |
- ΠΊΠΎΠ½ΡΡΠ°Π½ΡΠ½Π°Ρ
O(1) - Π»ΠΎΠ³Π°ΡΠΈΡΠΌΠΈΡΠ΅ΡΠΊΠ°Ρ
O(log N),O(log^2 N) - ΠΊΠΎΡΠ΅Π½Ρ ΠΈΠ· N
O(sqrt N) - Π»ΠΈΠ½Π΅ΠΉΠ½Π°Ρ
O(N) - Π»ΠΈΠ½Π΅ΠΉΠ½Π°Ρ
O(N+M) - Π»ΠΈΠ½Π΅Π°ΡΠΈΡΠΌΠΈΡΠ΅ΡΠΊΠ°Ρ/linearithmic
O(N*log N),O(N*log^2 N)ΠΈΠ»ΠΈO(N*M),O(N*sqrt M) - ΠΏΠΎΠ»ΠΈΠ½ΠΎΠΌΠΈΠ°Π»ΡΠ½Π°Ρ ΠΊΠ²Π°Π΄ΡΠ°ΡΠΈΡΠ½Π°Ρ
O(N^2),O(N^2*log N)ΠΈΠ»ΠΈ ΠΊΡΠ±ΠΈΡΠ΅ΡΠΊΠ°ΡO(N^3) - ΡΠΊΡΠΏΠΎΠ½Π΅Π½ΡΠΈΠ°Π»ΡΠ½Π°Ρ
O(2^N) - ΡΠ°ΠΊΡΠΎΡΠΈΠ°Π»
O(n!)
ΠΡΠ΅Π½Π΅Π±ΡΠ΅ΠΆΠ΅Π½ΠΈΠ΅ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΠ°ΠΌΠΈ:
ΠΠΎΡΠ΅ΠΌΡ ΠΌΡ Π³ΠΎΠ²ΠΎΡΠΈΠΌ, ΡΡΠΎ O(2n + 5) β ΡΡΠΎ ΡΠΎ ΠΆΠ΅ ΡΠ°ΠΌΠΎΠ΅, ΡΡΠΎ O(n)? ΠΠΎΡΠΎΠΌΡ ΡΡΠΎ ΠΏΡΠΈ ΡΡΡΠ΅ΠΌΠ»Π΅Π½ΠΈΠΈ n ΠΊ Π±Π΅ΡΠΊΠΎΠ½Π΅ΡΠ½ΠΎΡΡΠΈ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΡ 2 ΠΈ 5 ΡΡΠ°Π½ΠΎΠ²ΡΡΡΡ ΠΏΡΠ΅Π½Π΅Π±ΡΠ΅ΠΆΠΈΠΌΠΎ ΠΌΠ°Π»ΡΠΌΠΈ.
Π‘ΡΠ°Π²Π½ΠΈΡΠ΅: n = 1 000 000. 2n + 5 = 2 000 005. ΠΡΠΎ Π²ΡΠ΅Π³ΠΎ Π»ΠΈΡΡ ΠΏΡΠΈΠΌΠ΅ΡΠ½ΠΎ Π² 2 ΡΠ°Π·Π° Π±ΠΎΠ»ΡΡΠ΅, ΡΠ΅ΠΌ n. Π ΠΎΡΡ ΠΎΡΡΠ°Π΅ΡΡΡ Π»ΠΈΠ½Π΅ΠΉΠ½ΡΠΌ.
Π Π²ΠΎΡ ΡΠ°Π·Π½ΠΈΡΠ° ΠΌΠ΅ΠΆΠ΄Ρ O(n) ΠΈ O(nΒ²) ΠΏΡΠΈ n = 1 000 000 β ΡΡΠΎ ΡΠΆΠ΅ ΡΠ°Π·Π½ΠΈΡΠ° ΠΌΠ΅ΠΆΠ΄Ρ 1 000 000 ΠΈ 1 000 000 000 000. ΠΡΠ° ΡΠ°Π·Π½ΠΈΡΠ° Π±ΡΠ΄Π΅Ρ ΡΠΎΠ»ΡΠΊΠΎ Π±Π΅ΡΠΊΠΎΠ½Π΅ΡΠ½ΠΎ ΡΠ²Π΅Π»ΠΈΡΠΈΠ²Π°ΡΡΡΡ Ρ ΡΠΎΡΡΠΎΠΌ n
Π’Π°ΠΊ ΠΆΠ΅:
| ΠΏΡΠΈΠΌΠ΅Ρ ΠΏΠΎΡΠ»Π΅ ΡΠ°ΡΡΠ΅ΡΠ° | ΡΠ΅Π°Π»ΡΠ½Π°Ρ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡΡ | ΠΏΡΠΈΡΠΈΠ½Π° |
|---|---|---|
O(nΒ² + n) |
O(nΒ²) |
nΒ² Π·Π½Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎ Π±ΠΎΠ»ΡΡΠ΅ n |
O(n + log n) |
O(n) |
n Π·Π½Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎ Π±ΠΎΠ»ΡΡΠ΅ log n |
O(5 * 2^n + 10 * n^100) |
O(2^n) |
2^n Π·Π½Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎ Π±ΠΎΠ»ΡΡΠ΅ n^100 |
O(nΒ² + B) |
O(nΒ² + B) |
Π΅ΡΠ»ΠΈ ΠΌΡ Π½Π΅ Π·Π½Π°Π΅ΠΌ ΡΡΠΎ ΡΠ°ΠΊΠΎΠ΅ B |
ΠΠ°ΠΊ ΡΡΠΈΡΠ°ΡΡ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡΠΈ:
Π‘Π»ΠΎΠΆΠ½ΠΎΡΡΡ O(A+B) - ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΡΠΉ ΠΏΠ΅ΡΠ΅Π±ΠΎΡ Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΡΡ
Π½Π°Π±ΠΎΡΠΎΠ², ΡΠΏΠ΅ΡΠ²Π° Π½Π°Π±ΠΎΡΠ° Π΄Π°Π½Π½ΡΡ
A ΠΏΠΎΡΠΎΠΌ B
for (int a: arrA){
print(a);
}
for (int b: arrB){
print(b);
}Π‘Π»ΠΎΠΆΠ½ΠΎΡΡΡ O(A*B) - Π·Π°Π²ΠΈΡΠΈΠΌΡΠΉ ΠΏΠ΅ΡΠ΅Π±ΠΎΡ Π΄Π°Π½Π½ΡΡ
, Π½Π° ΠΊΠ°ΠΆΠ΄ΡΠΉ Π΅Π»Π΅ΠΌΠ΅Π½Ρ Π½Π°Π±ΠΎΠ° A Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ ΠΏΠΎΠ»Π½ΡΠΉ ΠΏΠ΅ΡΠ΅Π±ΠΎΡ Π½Π°Π±ΠΎΡΠ° B
for (int a: arrA){
for (int b: arrB){
print(a, b);
}
}Π‘Π»ΠΎΠΆΠ½ΠΎΡΡΡ O(N+N)=O(N) - ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΡΠΉ ΠΏΠ΅ΡΠ΅Π±ΠΎΡ Π·Π°Π²ΠΈΡΠΈΠΌΡΡ
Π½Π°Π±ΠΎΡΠΎΠ²
for (int a: arrA){
print(a);
}
for (int a: arrA){
print(a);
}Π‘Π»ΠΎΠΆΠ½ΠΎΡΡΡ O(nΒ²) - Π·Π°Π²ΠΈΡΠΈΠΌΡΠΉ ΠΏΠ΅ΡΠ΅Π±ΠΎΡ Π΄Π°Π½Π½ΡΡ
, ΠΊΠΎΠ³Π΄Π° Π½Π° ΠΊΠ°ΠΆΠ΄ΡΠΉ Π΅Π»Π΅ΠΌΠ΅Π½Ρ Π½Π°Π±ΠΎΠ° A Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ ΠΏΠΎΠ»Π½ΡΠΉ ΠΏΠ΅ΡΠ΅Π±ΠΎΡ ΡΠΎΠ³ΠΎ ΠΆΠ΅ Π½Π°Π±ΠΎΡΠ° A
for (int a: arrA){
for (int b: arrA){
print(a, b);
}
}Π‘Π»ΠΎΠΆΠ½ΠΎΡΡΡ O(βn) - ΠΊΠΎΠ³Π΄Π° ΠΏΠ΅ΡΠ΅Π±ΠΎΡ ΠΈΠ΄Π΅Ρ Π΄ΠΎ ΠΊΠΎΡΠ½Ρ ΠΈΠ· n. ΠΠΌΠ΅ΡΡΠΎ ΠΏΠ΅ΡΠ΅Π±ΠΎΡΠ° Π²ΡΠ΅Ρ
n ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ², ΠΌΡ ΠΏΠ΅ΡΠ΅Π±ΠΈΡΠ°Π΅ΠΌ ΡΠΎΠ»ΡΠΊΠΎ βn ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ².
Π§ΡΠΎ ΡΠ°ΠΊΠΎΠ΅ ΠΊΠΎΡΠ΅Π½Ρ:
βn = ΡΠΈΡΠ»ΠΎ, ΠΊΠΎΡΠΎΡΠΎΠ΅ ΡΠΌΠ½ΠΎΠΆΠΈΠ»ΠΈ Π‘ΠΠΠ ΠΠ Π‘ΠΠΠ― ΠΈ ΠΏΠΎΠ»ΡΡΠΈΠ»ΠΈ n
β25 = 5, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ 5 Γ 5 = 25
O(βn) Π³ΠΎΡΠ°Π·Π΄ΠΎ Π»ΡΡΡΠ΅ ΡΠ΅ΠΌ O(n), Π½ΠΎ Ρ
ΡΠΆΠ΅ ΡΠ΅ΠΌ O(log n):
// ΠΡΠΎΠ²Π΅ΡΡΠ΅ΠΌ, ΡΠ²Π»ΡΠ΅ΡΡΡ Π»ΠΈ ΡΠΈΡΠ»ΠΎ n ΠΏΡΠΎΡΡΡΠΌ
bool isPrime(int n) {
if (n < 2) return false;
// ΠΠ΅ΡΠ΅Π±ΠΈΡΠ°Π΅ΠΌ Π΄Π΅Π»ΠΈΡΠ΅Π»ΠΈ ΡΠΎΠ»ΡΠΊΠΎ Π΄ΠΎ sqrt(n)
for (int i = 2; i * i <= n; i++) {
if (n % i == 0) {
return false; // ΠΠ°ΡΠ»ΠΈ Π΄Π΅Π»ΠΈΡΠ΅Π»Ρ - ΡΠΈΡΠ»ΠΎ Π½Π΅ ΠΏΡΠΎΡΡΠΎΠ΅
}
}
return true; // ΠΠ΅Π»ΠΈΡΠ΅Π»Π΅ΠΉ Π½Π΅ Π½Π°ΠΉΠ΄Π΅Π½ΠΎ - ΡΠΈΡΠ»ΠΎ ΠΏΡΠΎΡΡΠΎΠ΅
}Π‘Π»ΠΎΠΆΠ½ΠΎΡΡΡ O(log n) - Π°Π»Π³ΠΎΡΠΈΡΠΌ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΎΡΠ±ΡΠ°ΡΡΠ²Π°Π΅Ρ ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½Ρ Π΄Π°Π½Π½ΡΡ
Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΡΠ°Π³Π΅. ΠΠ° ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΡΠ΅ΡΠ°ΡΠΈΠΈ ΡΠΈΠΊΠ»Π° ΠΈΠ»ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΡΠ°Π³Π΅ ΡΠ΅ΠΊΡΡΡΠΈΠΈ Π°Π»Π³ΠΎΡΠΈΡΠΌ ΡΠΌΠ΅Π½ΡΡΠ°Π΅Ρ ΠΎΠ±ΡΠ΅ΠΌ Π·Π°Π΄Π°ΡΠΈ Π² 2 ΠΈΠ»ΠΈ Π±ΠΎΠ»Π΅Π΅ ΡΠ°Π·. ΠΡΠΎ ΠΎΡΠ΅Π½Ρ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΠ°Π³ΠΎΠ² ΡΠ°ΡΡΠ΅Ρ ΠΎΡΠ΅Π½Ρ ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ Π΄Π°ΠΆΠ΅ ΠΏΡΠΈ ΠΎΠ³ΡΠΎΠΌΠ½ΠΎΠΌ n.
int n = 100;
while (n > 1) {
n = n / 2; // ΠΠ° ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΡΠ°Π³Π΅ Π΄Π΅Π»ΠΈΠΌ ΠΏΠΎΠΏΠΎΠ»Π°ΠΌ
printf("%d\n", n);
}Π‘Π»ΠΎΠΆΠ½ΠΎΡΡΡ O(2^n) - ΠΊΠΎΠ³Π΄Π° Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ΅ Π²Π΅ΡΠ²ΠΈΠΌΡΡ Π½Π° 2 Π²Π°ΡΠΈΠ°Π½ΡΠ°, ΡΡΠΎ ΠΎΡΠ΅Π½Ρ ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ. Π£ΠΆΠ΅ ΠΏΡΠΈ n=60, 2βΏ Π±ΠΎΠ»ΡΡΠ΅ ΡΠ΅ΠΌ ΡΠΈΡΠ»ΠΎ Π°ΡΠΎΠΌΠΎΠ² Π² Π½Π°Π±Π»ΡΠ΄Π°Π΅ΠΌΠΎΠΉ Π²ΡΠ΅Π»Π΅Π½Π½ΠΎΠΉ!
Π‘Π°ΠΌΡΠΉ ΠΏΡΠΎΡΡΠΎΠΉ ΠΏΡΠΈΠΌΠ΅Ρ: ΠΡΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΡΠ΅ ΠΏΠΎΠ΄ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π° ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π°:
// n = 3 ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°: {A, B, C}
// ΠΡΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΡΠ΅ ΠΏΠΎΠ΄ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π°:
{}
{A}
{B}
{C}
{A, B}
{A, C}
{B, C}
{A, B, C}
void generateSubsets(int[] arr, int n) {
// 2^n Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΡΡ
ΠΏΠΎΠ΄ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²
for (int i = 0; i < (1 << n); i++) {
printf("{ ");
for (int j = 0; j < n; j++) {
// ΠΡΠΎΠ²Π΅ΡΡΠ΅ΠΌ j-ΠΉ Π±ΠΈΡ
if (i & (1 << j)) {
printf("%d ", arr[j]);
}
}
printf("}\n");
}
}Π‘Π»ΠΎΠΆΠ½ΠΎΡΡΡ O(n!) - ΠΊΠΎΠ³Π΄Π° ΠΏΠ΅ΡΠ΅Π±ΠΈΡΠ°Π΅ΠΌ Π²ΡΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΡΠ΅ ΠΏΠ΅ΡΠ΅ΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ, ΡΡΠΎ ΠΊΠ°ΡΠ°ΡΡΡΠΎΡΠΈΡΠ΅ΡΠΊΠΈ ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ. Π£ΠΆΠ΅ ΠΏΡΠΈ n=20 ΠΏΠ΅ΡΠ΅Π±ΠΈΡΠ°ΡΡ Π²ΡΠ΅ Π²Π°ΡΠΈΠ°Π½ΡΡ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ β ΠΈΡ
Π±ΠΎΠ»ΡΡΠ΅ ΡΠ΅ΠΌ Π°ΡΠΎΠΌΠΎΠ² Π²ΠΎ ΠΡΠ΅Π»Π΅Π½Π½ΠΎΠΉ!
n = 10 β 10! = 3_628_800 ΠΏΠ΅ΡΠ΅ΡΡΠ°Π½ΠΎΠ²ΠΎΠΊ
ΠΠ΄Π΅ Π²ΡΡΡΠ΅ΡΠ°Π΅ΡΡΡ O(n!):
- ΠΠ°Π΄Π°ΡΠ° ΠΊΠΎΠΌΠΌΠΈΠ²ΠΎΡΠΆΠ΅ΡΠ° (ΠΌΠ°ΡΡΡΡΡ ΡΠ΅ΡΠ΅Π· N Π³ΠΎΡΠΎΠ΄ΠΎΠ²)
- Π Π°ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠ° N ΡΠ΅ΡΠ·Π΅ΠΉ Π½Π° ΡΠ°Ρ ΠΌΠ°ΡΠ½ΠΎΠΉ Π΄ΠΎΡΠΊΠ΅
- ΠΡΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΡΠ΅ Π°Π½Π°Π³ΡΠ°ΠΌΠΌΡ ΡΠ»ΠΎΠ²Π°
- ΠΡΠ±Π°Ρ Π·Π°Π΄Π°ΡΠ° "ΠΏΠ΅ΡΠ΅Π±ΡΠ°ΡΡ Π²ΡΠ΅ Π²Π°ΡΠΈΠ°Π½ΡΡ ΠΏΠΎΡΡΠ΄ΠΊΠ°"
ΠΡΠΈΠΌΠ΅ΡΡ:
/*
ΠΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡΡ Π°Π»Π³ΠΎΡΠΈΡΠΌΠ° - ΠΊΠΎΠ½ΡΡΠ°Π½ΡΠ½Π°Ρ O(1)
ΠΡΠΎ Π»ΡΡΡΠ΅Π΅.
ΠΠ»Π³ΠΎΡΠΈΡΠΌ Π²ΡΠ΅Π³Π΄Π° Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ, Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΠΎ ΠΎΡ ΠΎΠ±ΡΠ΅ΠΌΠ° Π΄Π°Π½Π½ΡΡ
.
ΠΡΠΈΠΌΠ΅Ρ: ΠΏΠΎΠΈΡΠΊ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° ΠΌΠ°ΡΡΠΈΠ²Π° ΠΏΠΎ Π΅Π³ΠΎ ΠΈΠ½Π΄Π΅ΠΊΡΡ.
*/
fn algo_1(v: &[i32], index: usize) -> Option<i32>{
if index < v.len(){
return Some(v[index]);
}
None
}
// ΠΈΠ»ΠΈ
let x = &[1, 2, 4];
unsafe {
assert_eq!(x.get_unchecked(1), &2);
}
// ΠΈΠ»ΠΈ
vec.push(), vec.pop()/*
ΠΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡΡ Π°Π»Π³ΠΎΡΠΈΡΠΌΠ° - Π»ΠΎΠ³Π°ΡΠΈΡΠΌΠΈΡΠ΅ΡΠΊΠ°Ρ O(log N)
(`log N` ΡΡΠΎ `log _2 N` Π² ΠΊΠ°ΠΊΠΎΠΉ ΡΡΠ΅ΠΏΠ΅Π½ΠΈ Π΄ΠΎΠ»ΠΆΠ½Π° Π±ΡΡΡ Π΄Π²ΠΎΠΉΠΊΠ° ΡΡΠΎΠ±Ρ ΠΏΠΎΠ»ΡΡΠΈΠ»ΠΎΡΡ N,
ΡΡΠΎ ΠΈ Π±ΡΠ΄Π΅Ρ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ)
ΠΊΠ°ΠΆΠ΄Π°Ρ ΠΈΡΠ΅ΡΠ°ΡΠΈΡ ΡΠΎΠΊΡΠ°ΡΠ°Π΅Ρ Π²Π΄Π²ΠΎΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ²/Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ
ΠΠ΅ΡΠ΅Π²ΠΎΠ΄ ΡΠΈΡΠ»Π° Π² Π΄Π²ΠΎΠΈΡΠ½ΠΎΠ΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅
TODO: ΠΠΎΠ³Π°ΡΠΈΡΠΌ ΠΏΠΎ ΠΎΡΠ½ΠΎΠ²Π°Π½ΠΈΡ `a` ΠΎΡ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ° `x` β ΡΡΠΎ ΡΡΠ΅ΠΏΠ΅Π½Ρ,
Π² ΠΊΠΎΡΠΎΡΡΡ Π½Π°Π΄ΠΎ Π²ΠΎΠ·Π²Π΅ΡΡΠΈ ΡΠΈΡΠ»ΠΎ `a`, ΡΡΠΎΠ±Ρ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΡΠΈΡΠ»ΠΎ `x`
log_2 64 = 6 ΡΠ°ΠΊ ΠΊΠ°ΠΊ 2^6=64
ΠΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ Π·Π΄ΠΎΡΠΎΠ²ΠΎ. ΠΠΎΠ΄ΠΎΠ±Π½ΡΠ΅ Π°Π»Π³ΠΎΡΠΈΡΠΌΡ ΡΠΌΠ΅Π½ΡΡΠ°ΡΡ Π²Π΄Π²ΠΎΠ΅ ΠΎΠ±ΡΠ΅ΠΌ Π΄Π°Π½Π½ΡΡ
Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΡΠ΅ΡΠ°ΡΠΈΠΈ.
ΠΡΠ»ΠΈ Ρ Π²Π°Ρ 100 ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ², ΡΠΎ ΡΡΠΎΠ±Ρ Π½Π°ΠΉΡΠΈ ΠΎΡΠ²Π΅Ρ, ΠΏΠΎΡΡΠ΅Π±ΡΠ΅ΡΡΡ ΠΎΠΊΠΎΠ»ΠΎ 7 ΡΠ°Π³ΠΎΠ².
ΠΡΠΈ Π½Π°Π»ΠΈΡΠΈΠΈ 1000 ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² ΡΡΠ΅Π±ΡΠ΅ΡΡΡ 10 ΡΠ°Π³ΠΎΠ².
Π Π΄Π»Ρ 1 000 000 ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² ΡΡΠ΅Π±ΡΠ΅ΡΡΡ Π²ΡΠ΅Π³ΠΎ 20 ΡΠ°Π³ΠΎΠ².
ΠΡΠΎ ΠΎΡΠ΅Π½Ρ Π±ΡΡΡΡΠΎ Π΄Π°ΠΆΠ΅ Π΄Π»Ρ Π±ΠΎΠ»ΡΡΠΈΡ
ΠΎΠ±ΡΠ΅ΠΌΠΎΠ² Π΄Π°Π½Π½ΡΡ
.
ΠΡΠΈΠΌΠ΅Ρ: Π±ΠΈΠ½Π°ΡΠ½ΡΠΉ ΠΏΠΎΠΈΡΠΊ.
*/
fn algo_2(mut decimal:u8) -> Option<String>{
if decimal == 0 {return None;}
let mut binary = String::from("");
while decimal > 0 {
binary = format!("{}{}",decimal%2,binary);
decimal = decimal.div_floor(2);
}
Some(binary)
}
// ΠΈΠ»ΠΈ
let j = 1
while j < n {
// do constant time stuff
j *= 2
}/*
ΠΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡΡ Π°Π»Π³ΠΎΡΠΈΡΠΌΠ° - ΠΊΠΎΡΠ΅Π½Ρ ΠΈΠ· N (sqrt N)
ΡΡΠ»ΠΎΠ²ΠΈΠ΅ Π²ΡΡ
ΠΎΠ΄Π° ΠΈΠ· ΡΠΈΠΊΠ»Π° x^2 ΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎ ΡΠΈΠΊΠ» ΠΏΡΠ΅ΠΊΡΠ°ΡΠΈΡΡΡ ΠΊΠΎΠ³Π΄Π° x >= sqrt N
TODO: ΠΠΎΡΠ΅Π½Ρ `n-ΠΉ` ΡΡΠ΅ΠΏΠ΅Π½ΠΈ ΠΈΠ· ΡΠΈΡΠ»Π° `a` ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΡΡΡ ΠΊΠ°ΠΊ ΡΠ°ΠΊΠΎΠ΅ ΡΠΈΡΠ»ΠΎ `b`, ΡΡΠΎ `b^n=a`
ΠΠ΄Π΅ΡΡ `n` β Π½Π°ΡΡΡΠ°Π»ΡΠ½ΠΎΠ΅ ΡΠΈΡΠ»ΠΎ, Π½Π°Π·ΡΠ²Π°Π΅ΠΌΠΎΠ΅ ΠΏΠΎΠΊΠ°Π·Π°ΡΠ΅Π»Π΅ΠΌ ΠΊΠΎΡΠ½Ρ (ΠΈΠ»ΠΈ ΡΡΠ΅ΠΏΠ΅Π½ΡΡ ΠΊΠΎΡΠ½Ρ);
ΠΊΠ°ΠΊ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ, ΠΎΠ½ΠΎ Π±ΠΎΠ»ΡΡΠ΅ ΠΈΠ»ΠΈ ΡΠ°Π²Π½ΠΎ 2, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΡΠ»ΡΡΠ°ΠΉ `n=1` Π½Π΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ°.
ΠΡΠΈΠΌΠ΅Ρ: ΠΠΎΡΠ½ΡΠΌΠΈ 2-ΠΉ ΡΡΠ΅ΠΏΠ΅Π½ΠΈ ΠΈΠ· ΡΠΈΡΠ»Π° 9 ΡΠ²Π»ΡΡΡΡΡ +/-3 Ρ.Π΅. `9 sqrt^2=3`
ΡΠ°ΠΊ ΠΊΠ°ΠΊ 3^2=9,Π° `64 sqrt^3=4` ΡΠ°ΠΊ ΠΊΠ°ΠΊ 4^3=64
Π Π³ΡΠ°ΡΠΈΠΊ O(sqrt N) Π±ΡΠ΄Π΅Ρ ΡΠ°ΡΡΠΈ Π±ΡΡΡΡΠ΅Π΅, ΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎ ΠΌΠ΅Π΄Π»Π΅Π½Π½Π΅Π΅ ΡΠ°Π±ΠΎΡΠ°ΡΡ ΡΠ΅ΠΌ Π³ΡΠ°ΡΠΈΠΊ O(log N)
ΡΠ°ΠΊ ΠΊΠ°ΠΊ Π΄Π»Ρ N=64 => `log_2 64 = 2^6 = 64 => 6` ΡΡΠΎ < `64 sqrt^2 = 8^2 = 64 => 8`
Ρ.Π΅. Π΄Π»Ρ log ΠΌΡ Π΄Π²ΠΎΠΉΠΊΡ Π²ΠΎΠ·Π²ΠΎΠ΄ΠΈΠΌ Π² Π½ΡΠΆΠ½ΡΡ ΡΡΠ΅ΠΏΠ΅Π½Ρ,
Π° Π΄Π»Ρ sqrt Π½ΡΠΆΠ½ΠΎ ΡΠ°ΠΌΠΎ ΡΠΈΡΠ»ΠΎ Π΄Π»Ρ Π²ΠΎΠ·Π²Π΅Π΄Π΅Π½ΠΈΡ Π² ΠΊΠ²Π°Π΄ΡΠ°Ρ
*/
fn algo_sqrt(v:&Vec<i32>){
let mut x = 0;
while x*x < v.len() {
x+=1;
}
}/*
ΠΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡΡ Π°Π»Π³ΠΎΡΠΈΡΠΌΠ° - Π»ΠΈΠ½Π΅ΠΉΠ½Π°Ρ O(N)
ΠΡΠ΅ΠΌΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΡΠ²Π΅Π»ΠΈΡΠΈΠ²Π°Π΅ΡΡΡ ΠΏΡΠΎΠΏΠΎΡΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎ ΡΠ°Π·ΠΌΠ΅ΡΡ Π·Π°Π΄Π°ΡΠΈ.
Π₯ΠΎΡΠΎΡΠ°Ρ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ. ΠΡΠ»ΠΈ Ρ Π²Π°Ρ 100 ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ², ΡΡΠΎ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅Ρ 100 Π΅Π΄ΠΈΠ½ΠΈΡ ΡΠ°Π±ΠΎΡΡ.
ΠΡΠΈ ΡΠ΄Π²ΠΎΠ΅Π½ΠΈΠΈ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Π° ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² Π°Π»Π³ΠΎΡΠΈΡΠΌ Π±ΡΠ΄Π΅Ρ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ ΡΠΎΠ²Π½ΠΎ Π² Π΄Π²Π° ΡΠ°Π·Π° Π΄ΠΎΠ»ΡΡΠ΅ (200 Π΅Π΄. ΡΠ°Π±ΠΎΡΡ).
ΠΡΠΈΠΌΠ΅Ρ: ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΡΠΉ ΠΏΠΎΠΈΡΠΊ.
*/
fn algo_3(v:&Vec<i32>,n:i32) -> bool{
for i in v{
if i == &n{
return true;
}
}
false
}// ΠΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡΡ Π°Π»Π³ΠΎΡΠΈΡΠΌΠ° - Π»ΠΈΠ½Π΅ΠΉΠ½Π°Ρ O(N + M)
fn algo_5(n:&Vec<i32>,m:&Vec<i32>,element:&i32) -> Option<i32>{
let mut value:i32 = 0;
for i_n in n{
if i_n > element{
value = *i_n;
}
}
if value == 0{return None};
for i_m in m {
if &value == i_m{
return Some(*i_m);
}
}
None
}/*
ΠΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡΡ Π°Π»Π³ΠΎΡΠΈΡΠΌΠ° - Π»ΠΈΠ½Π΅Π°ΡΠΈΡΠΌΠΈΡΠ΅ΡΠΊΠ°Ρ O(N * M)
ΠΠΎΡΡΠΎΠΉΠ½Π°Ρ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ. ΠΡΠΎ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ Ρ
ΡΠΆΠ΅ Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎΠ³ΠΎ, Π½ΠΎ Π½Π΅ ΡΠ°ΠΊ ΡΠΆ ΠΏΠ»ΠΎΡ
ΠΎ.
ΠΡΠΈΠΌΠ΅Ρ: ΡΠ°ΠΌΡΠ΅ Π±ΡΡΡΡΡΠ΅ Π°Π»Π³ΠΎΡΠΈΡΠΌΡ ΡΠΎΡΡΠΈΡΠΎΠ²ΠΊΠΈ ΠΎΠ±ΡΠ΅Π³ΠΎ Π½Π°Π·Π½Π°ΡΠ΅Π½ΠΈΡ.
*/
fn algo_6(n:&Vec<i32>,m:&Vec<i32>) -> Option<i32>{
for i_n in n{
for i_m in m{
if i_n == i_m{
return Some(*i_m);
}
}
}
None
}/*
ΠΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡΡ Π°Π»Π³ΠΎΡΠΈΡΠΌΠ° - ΠΏΠΎΠ»ΠΈΠ½ΠΎΠΌΠΈΠ°Π»ΡΠ½Π°Ρ (ΠΊΠ²Π°Π΄ΡΠ°ΡΠΈΡΠ½Π°Ρ) ΡΠ»ΠΎΠΆΠ½ΠΎΡΡΡ O(N^2)
1 + 2 + 3 + 4 + ... + N => O(N^2)
N-1 * N-1 = N^2
Π§Π°ΡΡΠΎ Π²ΡΡΡΠ΅ΡΠ°Π΅ΡΡΡ Π² Π°Π»Π³ΠΎΡΠΈΡΠΌΠ°Ρ
Ρ Π²Π»ΠΎΠΆΠ΅Π½Π½ΡΠΌΠΈ ΡΠΈΠΊΠ»Π°ΠΌΠΈ.
ΠΠ°ΠΊ-ΡΠΎ ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ. ΠΡΠ»ΠΈ Ρ Π²Π°Ρ 100 ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ², ΡΡΠΎ 100^2 = 10 000 Π΅Π΄ΠΈΠ½ΠΈΡ ΡΠ°Π±ΠΎΡΡ.
Π£Π΄Π²ΠΎΠ΅Π½ΠΈΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Π° ΠΏΡΠ΅Π΄ΠΌΠ΅ΡΠΎΠ² Π΄Π΅Π»Π°Π΅Ρ ΠΏΡΠΎΡΠ΅ΡΡ ΠΌΠ΅Π΄Π»Π΅Π½Π½Π΅Π΅ Π² ΡΠ΅ΡΡΡΠ΅ ΡΠ°Π·Π°
(ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ 2 Π² ΠΊΠ²Π°Π΄ΡΠ°ΡΠ΅ ΡΠ°Π²Π½ΠΎ 4).
ΠΡΠΈΠΌΠ΅Ρ: Π°Π»Π³ΠΎΡΠΈΡΠΌΡ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΠΈΠ΅ Π²Π»ΠΎΠΆΠ΅Π½Π½ΡΠ΅ ΡΠΈΠΊΠ»Ρ, ΡΠ°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ ΡΠΎΡΡΠΈΡΠΎΠ²ΠΊΠ° Π²ΡΡΠ°Π²ΠΊΠ°ΠΌΠΈ.
*/
fn algo_6_bubble_sort(v:&mut Vec<i32>){
for i in 0..v.len()-1 {
for j in 0..v.len()-1 {
if v[j] > v[j+1]{
let swap = v[j];
v[j]=v[j+1];
v[j+1]=swap;
}
}
}
}
// ΠΈΠ»ΠΈ
for i in 0..n {
for j in 0..n {
...
}
}/*
ΠΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡΡ Π°Π»Π³ΠΎΡΠΈΡΠΌΠ° - ΠΏΠΎΠ»ΠΈΠ½ΠΎΠΌΠΈΠ°Π»ΡΠ½Π°Ρ (ΠΊΡΠ±ΠΈΡΠ΅ΡΠΊΠ°Ρ) ΡΠ»ΠΎΠΆΠ½ΠΎΡΡΡ O(N^3)
Π¨Π°Π³ Π·Π° ΠΏΡΠ΅Π΄Π΅Π»Ρ ΠΊΠ²Π°Π΄ΡΠ°ΡΠΈΡΠ½ΠΎΠΉ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡΠΈ.
ΠΠΎ ΠΌΠ΅ΡΠ΅ ΡΠ²Π΅Π»ΠΈΡΠ΅Π½ΠΈΡ ΡΠ°Π·ΠΌΠ΅ΡΠ° Π·Π°Π΄Π°ΡΠΈ Π²ΡΠ΅ΠΌΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΡΠ²Π΅Π»ΠΈΡΠΈΠ²Π°Π΅ΡΡΡ Π΅ΡΠ΅ Π±ΡΡΡΡΠ΅Π΅.
ΠΡΠΎ ΠΏΡΠΎΠΈΡΡ
ΠΎΠ΄ΠΈΡ Π² Π°Π»Π³ΠΎΡΠΈΡΠΌΠ°Ρ
Ρ ΡΡΠ΅ΠΌΡ Π²Π»ΠΎΠΆΠ΅Π½Π½ΡΠΌΠΈ ΡΠΈΠΊΠ»Π°ΠΌΠΈ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ Π² Π°Π»Π³ΠΎΡΠΈΡΠΌΠ°Ρ
Ρ ΡΡΠ΅Ρ
ΠΌΠ΅ΡΠ½ΡΠΌΠΈ ΠΌΠ°ΡΡΠΈΠ²Π°ΠΌΠΈ.
ΠΠΈΠ·ΠΊΠ°Ρ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ. ΠΡΠ»ΠΈ Ρ Π²Π°Ρ 100 ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ², ΡΡΠΎ 100^3 = 1 000 000 Π΅Π΄ΠΈΠ½ΠΈΡ ΡΠ°Π±ΠΎΡΡ.
Π£Π΄Π²ΠΎΠ΅Π½ΠΈΠ΅ Π²Ρ
ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΡΠ°Π·ΠΌΠ΅ΡΠ° Π΄Π΅Π»Π°Π΅Ρ Π΅Π³ΠΎ Π² Π²ΠΎΡΠ΅ΠΌΡ ΡΠ°Π· ΠΌΠ΅Π΄Π»Π΅Π½Π½Π΅Π΅. ΠΡΠΈΠΌΠ΅Ρ: ΡΠΌΠ½ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΌΠ°ΡΡΠΈΡΡ.
*/
for i in 0..n {
for j in 0..n {
for k in 0..n {
...
}
}
}/*
ΠΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡΡ Π°Π»Π³ΠΎΡΠΈΡΠΌΠ° - ΡΠΊΡΠΏΠΎΠ½Π΅Π½ΡΠΈΠ°Π»ΡΠ½Π°Ρ O(2^N)
2^0 + 2^1 + 2^3 + ... + 2^N => O(2^N)
ΠΡΠ΅Π½Ρ ΠΏΠ»ΠΎΡ
Π°Ρ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ.
ΠΡ Ρ
ΠΎΡΠΈΡΠ΅ ΠΈΠ·Π±Π΅ΠΆΠ°ΡΡ ΠΏΠΎΠ΄ΠΎΠ±Π½ΡΡ
Π°Π»Π³ΠΎΡΠΈΡΠΌΠΎΠ², Π½ΠΎ ΠΈΠ½ΠΎΠ³Π΄Π° Ρ Π²Π°Ρ Π½Π΅Ρ Π²ΡΠ±ΠΎΡΠ°.
ΠΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ Π²ΡΠ΅Π³ΠΎ Π»ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ Π±ΠΈΡΠ° ΠΊ Π²Ρ
ΠΎΠ΄Π½ΡΠΌ Π΄Π°Π½Π½ΡΠΌ ΡΠ΄Π²Π°ΠΈΠ²Π°Π΅Ρ Π²ΡΠ΅ΠΌΡ ΡΠ°Π±ΠΎΡΡ.
ΠΡΠΈΠΌΠ΅Ρ: Π·Π°Π΄Π°ΡΠ° ΠΊΠΎΠΌΠΌΠΈΠ²ΠΎΡΠΆΠ΅ΡΠ°.
cargo +nightly run
*/
fn main() {
aasert_eq!(Some("11111110"),algo_2(254));
let mut v = vec![5,7,1,4];
algo_7_bubble_sort(&mut v);
assert_eq!(vec![1,4,5,7],v);
}/*
ΠΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡΡ Π°Π»Π³ΠΎΡΠΈΡΠΌΠ° - ΡΠ°ΠΊΡΠΎΡΠΈΠ°Π» O(n!)
ΠΠ½ΠΈ Π² ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ Π² ΠΏΠ΅ΡΠ΅ΡΡΠ°Π½ΠΎΠ²ΠΎΡΠ½ΡΡ
ΠΈ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°ΡΠΎΡΠ½ΡΡ
Π·Π°Π΄Π°ΡΠ°Ρ
.
ΠΠ΅Π²ΡΠ½ΠΎΡΠΈΠΌΠΎ ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ. ΠΡΠΊΠ²Π°Π»ΡΠ½ΠΎ Π½Π° ΡΠΎ, ΡΡΠΎΠ±Ρ ΡΡΠΎ-ΡΠΎ ΡΠ΄Π΅Π»Π°ΡΡ, ΡΡ
ΠΎΠ΄ΠΈΡ ΠΌΠΈΠ»Π»ΠΈΠΎΠ½ Π»Π΅Ρ.
Π Π·Π°Π΄Π°ΡΠ΅ "ΠΠΎΠΌΠΈΠΈΠ²ΠΎΡΠΆΠΎΡΠ°" - ΠΏΠΎΡΡΡΠΎΠ΅Π½ΠΈΠ΅ Π²ΡΠ΅Ρ
Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΡΡ
ΠΌΠ°ΡΡΡΡΡΠΎΠ²,
ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π² ΠΊΠ°ΡΡΠ°Ρ
ΠΈΠ»ΠΈ ΠΏΡΠΎΡΡΠΎ ΡΠ΅ΠΊΡΡΡΠΈΡ
*/
fn factorial(n: i32) {
for i in 0..n {
factorial(n - 1)
}
}-
ΠΠ°Π΄Π°ΡΠΈ Π½Π° ΠΎΡΡΠΎΡΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅ ΠΌΠ°ΡΡΠΈΠ²Ρ, ΠΏΠΎΠ΄ΡΡΡΠΎΠΊΠΈ, ΡΠ΄Π°Π»Π΅Π½ΠΈΠ΅ Π΄ΡΠ±Π»ΠΈΠΊΠ°ΡΠΎΠ².
-
ΠΡΠΈΠΌΠ΅ΡΡ:
- Remove Duplicates from Sorted Array
- 3Sum
-
ΠΠΎΠΈΡΠΊ ΠΏΠΎΠ΄ΠΎΡΡΠ΅Π·ΠΊΠΎΠ² ΠΌΠ°ΡΡΠΈΠ²Π°/ΡΡΡΠΎΠΊΠΈ Ρ Π½ΡΠΆΠ½ΡΠΌΠΈ ΡΠ²ΠΎΠΉΡΡΠ²Π°ΠΌΠΈ.
-
ΠΡΠΈΠΌΠ΅ΡΡ:
- Longest Substring Without Repeating Characters
- Minimum Window Substring
-
ΠΠ΅ ΡΠΎΠ»ΡΠΊΠΎ Π½Π° ΡΠΈΡΠ»Π°Ρ , Π½ΠΎ ΠΈ Π½Π° "ΠΎΡΠ²Π΅ΡΠ΅" (Binary Search on Answer).
-
ΠΡΠΈΠΌΠ΅ΡΡ:
- Search in Rotated Sorted Array
- Median of Two Sorted Arrays
-
ΠΠ°Π΄Π°ΡΠΈ ΡΠΈΠΏΠ° "ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·ΠΈΡΡΠΉ/ΠΌΠ°ΠΊΡΠΈΠΌΠΈΠ·ΠΈΡΡΠΉ ΡΡΠ»ΠΎΠ²ΠΈΠ΅".
-
ΠΡΠΈΠΌΠ΅ΡΡ:
- Koko Eating Bananas
- Split Array Largest Sum
-
ΠΠΎΠ³Π΄Π° ΠΏΠΎΡΡΠ΄ΠΎΠΊ Π²Π°ΠΆΠ΅Π½ Π΄Π»Ρ ΠΎΠΏΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΡΠ΅ΡΠ΅Π½ΠΈΡ.
-
ΠΡΠΈΠΌΠ΅ΡΡ:
- Meeting Rooms II
- Non-overlapping Intervals
-
ΠΡΡΡΡΠ°Ρ ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° ΠΏΡΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ½ΠΎΡΡΠΈ, ΠΏΠΎΠ΄ΡΡΡΡΡ.
-
ΠΡΠΈΠΌΠ΅ΡΡ:
- Two Sum
- Group Anagrams
-
ΠΠ»Ρ ΠΏΠ°Ρ ΡΠΊΠΎΠ±ΠΎΠΊ, ΠΌΠΎΠ½ΠΎΡΠΎΠ½Π½ΡΡ ΡΡΠ΅ΠΊΠΎΠ², Next Greater Element.
-
ΠΡΠΈΠΌΠ΅ΡΡ:
- Valid Parentheses
- Largest Rectangle in Histogram
-
ΠΡΠΎΠ±Π΅Π½Π½ΠΎ Π΄Π»Ρ Sliding Window Maximum.
-
ΠΡΠΈΠΌΠ΅ΡΡ:
- Sliding Window Maximum
- Rotting Oranges
-
ΠΠΎΠ΄ΡΠ°Π·Π΄Π΅Π»Ρ:
- 1D DP (Fibonacci, House Robber)
- 2D DP (Unique Paths, Coin Change)
- DP Π½Π° ΠΏΠΎΠ΄ΡΡΡΠΎΠΊΠ°Ρ (Palindrome Partitioning)
-
ΠΡΡΡΡΡΠ΅ ΡΠΎΡΡΠΈΡΠΎΠ²ΠΊΠΈ, ΡΠ°Π±ΠΎΡΠ° Ρ Π΄Π΅ΡΠ΅Π²ΡΡΠΌΠΈ, ΠΏΠΎΠ΄Π·Π°Π΄Π°ΡΠΈ.
-
ΠΡΠΈΠΌΠ΅ΡΡ:
- Merge Sort
- Maximum Subarray (Kadane / Divide & Conquer Π²Π΅ΡΡΠΈΡ)
-
ΠΡΠ°ΡΡ, ΠΌΠ°ΡΡΠΈΡΡ, Π΄Π΅ΡΠ΅Π²ΡΡ.
-
ΠΡΠΈΠΌΠ΅ΡΡ:
- Number of Islands
- Path Sum
-
ΠΡΠ°ΡΡΠ°ΠΉΡΠΈΠ΅ ΠΏΡΡΠΈ, ΡΡΠΎΠ²Π½Π΅Π²ΡΠΉ ΠΎΠ±Ρ ΠΎΠ΄.
-
ΠΡΠΈΠΌΠ΅ΡΡ:
- Word Ladder
- Binary Tree Level Order Traversal
-
ΠΠ΅ΡΠ΅ΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ, ΠΊΠΎΠΌΠ±ΠΈΠ½Π°ΡΠΈΠΈ, N-Queens.
-
ΠΡΠΈΠΌΠ΅ΡΡ:
- Permutations
- Combination Sum
-
ΠΠ»Π°ΡΡΠΈΡΠΈΠΊΠ°ΡΠΈΡ Π³ΡΠ°ΡΠΎΠ², ΠΎΡΡΡΠΎΠ²Π°, Kruskal.
-
ΠΡΠΈΠΌΠ΅ΡΡ:
- Number of Connected Components in Graph
- Redundant Connection
-
ΠΠ°Π΄Π°ΡΠΈ Π½Π° Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ.
-
ΠΡΠΈΠΌΠ΅ΡΡ:
- Course Schedule
- Alien Dictionary
-
ΠΡΡΠ°Π²ΠΊΠΈ, ΡΠ΄Π°Π»Π΅Π½ΠΈΡ, ΠΏΠΎΠΈΡΠΊ K-th smallest/largest.
-
ΠΡΠΈΠΌΠ΅ΡΡ:
- Validate BST
- Lowest Common Ancestor of a BST
-
k-ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ², ΠΌΠ΅Π΄ΠΈΠ°Π½Ρ, ΠΈΠ½ΡΠ΅ΡΠ²Π°Π»Ρ.
-
ΠΡΠΈΠΌΠ΅ΡΡ:
- Merge k Sorted Lists
- Find Median from Data Stream
-
ΠΠ»Ρ ΠΏΠΎΠ΄ΠΎΡΡΠ΅Π·ΠΊΠΎΠ² ΡΠΈΡΠ΅Π» ΠΈΠ»ΠΈ ΡΡΡΠΎΠΊ.
-
ΠΡΠΈΠΌΠ΅ΡΡ:
- Subarray Sum Equals K
- Range Sum Query
-
ΠΠΎΠ±ΠΈΡΠΎΠ²ΡΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ, ΠΏΠΎΠ΄ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π°.
-
ΠΡΠΈΠΌΠ΅ΡΡ:
- Single Number
- Subsets II
-
Π§Π°ΡΡΠΎ Ρ ΠΈΡΡΡΠ΅ Π·Π°Π΄Π°ΡΠΈ ΡΠ΅ΡΠ°ΡΡΡΡ ΡΠ΅ΡΠ΅Π· ΡΠΎΡΠΌΡΠ»Ρ.
-
ΠΡΠΈΠΌΠ΅ΡΡ:
- Pow(x, n)
- Rotate Image
p.s. ΡΡΠ΅Π±Π½ΡΠΉ ΡΠΎΠ°Π΄ΠΌΠ°ΠΏ Ρ ΠΏΠΎΠ΄Π±ΠΎΡΠΊΠΎΠΉ 1β2 ΠΊΠ»Π°ΡΡΠΈΡΠ΅ΡΠΊΠΈΡ Π·Π°Π΄Π°Ρ ΠΏΠΎ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡ ΠΏΠ°ΡΡΠ΅ΡΠ½Ρ
Algorithmic complexity / Big-O / Asymptotic analysis


