ΠΡΠΎ ΠΌΠ°ΡΠ΅ΡΠ½ΡΠΉ ΡΠ·ΡΠΊ Π² ΠΌΠΈΡΠ΅ ΡΠ·ΡΠΊΠΎΠ² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ, Π³Π΄Π΅ ΠΏΡΠΎΡΡΡΠΌΠΈ Π²ΡΡΠ°Π·ΠΈΡΠ΅Π»ΡΠ½ΡΠΌΠΈ ΡΡΠ΅Π΄ΡΡΠ²Π°ΠΌΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΊΠ°Π·Π°ΡΡ Π±ΠΎΠ»ΡΡΠ΅, ΡΠ΅ΠΌ Π½Π° ΡΠΎΠ΄Π½ΠΎΠΌ ΡΠ·ΡΠΊΠ΅. ΠΠ»ΡΡ gofmt ΡΠ½ΠΈΠΌΠ°Π΅Ρ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ Ρ Π²ΡΠ±ΠΎΡΠΎΠΌ ΡΠ΅Π΄Π°ΠΊΡΠΎΡΠ°.
- ΠΠ·Π΅Π½ Go
- The Zen of Go
- ΠΠ·ΡΡΠΈΡΠ΅ X Π·Π° Y ΠΌΠΈΠ½ΡΡ ΠΠ΄Π΅ X=Go
- A Tour of Go
- Golang | ΠΡΠ΅ ΠΡΠ½ΠΎΠ²Ρ Π·Π° 4 Π§Π°ΡΠ° ΠΠ»Ρ ΠΠ°ΡΠΈΠ½Π°ΡΡΠΈΡ
- Go Π² ΠΏΡΠΈΠΌΠ΅ΡΠ°Ρ
- ΠΡΡΡ Go: ΠΎΠ½Π»Π°ΠΉΠ½ ΠΎΠ±ΡΡΠ΅Π½ΠΈΠ΅ Ρ Π½ΡΠ»Ρ
- ΠΡΡΡ ΠΏΠΎ ΠΈΠ·ΡΡΠ΅Π½ΠΈΡ Golang Π΄Π»Ρ Π½Π°ΡΠΈΠ½Π°ΡΡΠΈΡ
- golang-book.ru
- Effective Go (RU)
- roadmap
- Π¨ΠΏΠ°ΡΠ³Π°Π»ΠΊΠ° Π΄Π»Ρ ΡΠΎΠ±Π΅ΡΠ° ΠΏΠΎ GoLang
- ΠΡΠ°ΠΊΡΠΈΠΊΠ° Go β ΠΡΠ½ΠΎΠ²Ρ
- ΠΡΠ°ΠΊΡΠΈΠΊΠ° Go β Concurrency
- ΠΡΠ°ΠΊΡΠΈΠΊΠ° Go β ΠΠ±ΡΠ°Π±ΠΎΡΠΊΠ° ΠΎΡΠΈΠ±ΠΎΠΊ (1 ΡΠ°ΡΡΡ)
- ΠΡΠ°ΠΊΡΠΈΠΊΠ° Go β ΠΠ±ΡΠ°Π±ΠΎΡΠΊΠ° ΠΎΡΠΈΠ±ΠΎΠΊ (2 ΡΠ°ΡΡΡ)
- ΠΠ»Π°Π½ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Π² Go: Π§Π°ΡΡΡ III β ΠΠΎΠ½ΠΊΡΡΠ΅Π½ΡΠ½ΠΎΡΡΡ
- ΠΠΎΠ½ΠΊΡΡΠ΅Π½ΡΠ½ΠΎΡΡΡ β ΡΡΠΎ Π½Π΅ ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΠΈΠ·ΠΌ
- ΠΡΠΈΠ±ΠΊΠΈ ΡΡΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ
- ΠΠΎΡΠ΅ΠΌΡ Β«ΠΎΡΠΈΠ±ΠΊΠΈ ΡΡΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡΒ» Π² Go
- Π¨ΠΠ 2023
- ΠΠ°ΠΉΡΡ Π°ΠΊΠΈ Π΄Π»Ρ ΠΊΠΎΠ΄Π° Π±Π΅Π· ΠΏΠΎΠ±ΠΎΡΠ½ΡΡ ΡΡΡΠ΅ΠΊΡΠΎΠ²: ΠΏΠΈΡΠ΅ΠΌ Π½Π° Go ΠΈ ΠΊΡΠ°ΡΠΈΠ²ΠΎ, ΠΈ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ
- ΠΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡ ΠΏΠ°ΠΌΡΡΠΈ ΠΈ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΡΠ±ΠΎΡΡΠΈΠΊΠΎΠΌ ΠΌΡΡΠΎΡΠ° Π² Go: GOGC ΠΈ GOMEMLIMIT
- Go To Memory
- Understanding Real-World Concurrency Bugs in Go
- Interfaces in Go
- Π’ΡΡΠΎΡΠΈΠ°Π» ΠΏΠΎ Π΄ΠΆΠ΅Π½Π΅ΡΠΈΠΊΠ°ΠΌ Π² Go
- DataDog/go-profiler-notes
- Go Developer Survey 2021 Results
- ΠΠ΅ΠΊΡΠΈΠΈ Π΄Π»Ρ ΠΌΠΈΠ΄Π»ΠΎΠ² Π² OZON
- What's in a name?
- uber-go-guide-ru
- Standard Go Project Layout
- Organizing a Go module
- 50 ΠΎΡΡΠ΅Π½ΠΊΠΎΠ² Go
- ΠΠ°ΡΡΠ΅ΡΠ½Ρ ΠΏΡΠΎΠ΅ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ (Ρ ΠΊΠ°ΡΡΠΈΠ½ΠΊΠ°ΠΌΠΈ)
- ΠΠ°ΡΡΠ΅ΡΠ½Ρ ΠΏΡΠΎΠ΅ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ (Ρ ΡΠ΅ΡΡΠ°ΠΌΠΈ)
- Go Clean Architecture
- Communicating sequential processes(CSP) for Go developer in a nutshell
- ΠΠ°ΠΊ Π½Π΅ ΠΎΡΠΈΠ±ΠΈΡΡΡΡ Ρ ΠΊΠΎΠ½ΠΊΡΡΠ΅Π½ΡΠ½ΠΎΡΡΡΡ Π² Go
- ΠΠ°ΠΊ ΠΈΠ·Π±Π΅ΠΆΠ°ΡΡ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΡ ORM Π΄Π»Ρ Go, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΡΠΈΡΡΡΠΉ SQL
- Go Concurrency Patterns
- Go Concurrency Exercises
- ΠΠ°ΠΊ Π½Π΅ Π½Π°ΡΡΡΠΏΠ°ΡΡ Π½Π° Π³ΡΠ°Π±Π»ΠΈ Π² Go
- Web Frameworks:
- Π’ΡΠΌΠ½ΡΠ΅ Π²Π΅ΠΊΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΠΎΠ³ΠΎ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠ΅Π½ΠΈΡ
- Π‘ΠΎΠ±ΡΡΠΈΠΉΠ½ΠΎΠ΅ ΠΌΠΎΠ΄Π΅Π»ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΡΡΠ°Π΄ΠΈΡΠΈΠΎΠ½Π½ΡΡ ΡΠΈΡΡΠ΅ΠΌ
- Event Modeling Cheat Sheet
- ΠΠ°ΡΠ΅ΠΌ Π½ΡΠΆΠ½Ρ ΠΌΠΎΠ΄ΡΠ»ΡΠ½ΡΠ΅ ΡΠ΅ΡΡΡ ΠΈ ΠΊΠ°ΠΊ Π·Π°ΡΡΠ°Π²ΠΈΡΡ ΠΈΡ ΡΠ°Π±ΠΎΡΠ°ΡΡ Π½Π° Π²Π°Ρ
- ΠΠ°ΡΡΡΠ°Π±ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΡΠΈΡΠΌΠΎΡΠ½ΡΡ ΡΠ΅ΡΡΠΎΠ²
- Π Π°Π±ΠΎΡΠ° Π±Π΅Π· ΠΈΠΌΠΈΡΠ°ΡΠΎΡΠΎΠ²
- ΠΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π² ΠΏΡΠΈΡΠΌΠΎΡΠ½ΡΠ΅ ΡΠ΅ΡΡΡ
- ΠΠ½ΡΠΈΠΏΠ°ΡΡΠ΅ΡΠ½Ρ Π² TDD
- Idiomatic Go
- Go Patterns
- ΠΡΠΎΠ±Π»Π΅ΠΌΡ ΡΡΠ½ΠΊΡΠΈΠΈ Golang init
- ΠΠ΅ΡΠΎΠ΄ΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°ΡΠΈΠΈ ΠΏΠΎ Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΡ Go ΠΊΠΎΠ΄Π° ΠΎΡ Uber
- Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π°ΡΠΎΠΌΠ°ΡΠ½ΡΡ ΠΊΠΎΠΌΠΌΠΈΡΠΎΠ² Π² Git
- Β«ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡ-ΠΏΡΠ°Π³ΠΌΠ°ΡΠΈΠΊ. ΠΡΡΡ ΠΎΡ ΠΏΠΎΠ΄ΠΌΠ°ΡΡΠ΅ΡΡΡ ΠΊ ΠΌΠ°ΡΡΠ΅ΡΡΒ»: ΠΊΠΎΡΠΎΡΠΊΠΎ ΠΎ Π³Π»Π°Π²Π½ΠΎΠΌ (ΡΠ°ΡΡΡ ΠΏΠ΅ΡΠ²Π°Ρ)
- Β«ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡ-ΠΏΡΠ°Π³ΠΌΠ°ΡΠΈΠΊ. ΠΡΡΡ ΠΎΡ ΠΏΠΎΠ΄ΠΌΠ°ΡΡΠ΅ΡΡΡ ΠΊ ΠΌΠ°ΡΡΠ΅ΡΡΒ»: ΠΊΠΎΡΠΎΡΠΊΠΎ ΠΎ Π³Π»Π°Π²Π½ΠΎΠΌ (ΡΠ°ΡΡΡ Π²ΡΠΎΡΠ°Ρ)
- Golang design: Generics vs Interfaces, How It Really Works Under the Hood
- Go Style Decisions
- ΠΡΠΏΡΠ°Π²ΠΊΠ° Π½Π° nil-ΠΊΠ°Π½Π°Π» Π±Π»ΠΎΠΊΠΈΡΡΠ΅ΡΡΡ Π½Π°Π²ΡΠ΅Π³Π΄Π° (fatal error "deadlock" Π±Π΅Π· recover)
- ΠΡΠΈΡΠΌ ΠΎΡ nil-ΠΊΠ°Π½Π°Π»Π° Π±Π»ΠΎΠΊΠΈΡΡΠ΅ΡΡΡ Π½Π°Π²ΡΠ΅Π³Π΄Π° (fatal error "deadlock" Π±Π΅Π· recover)
- ΠΡΠΏΡΠ°Π²ΠΊΠ° Π² Π·Π°ΠΊΡΡΡΡΠΉ ΠΊΠ°Π½Π°Π» ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡ ΠΊ ΠΏΠ°Π½ΠΈΠΊΠ΅ (ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±ΡΠ°Π±ΠΎΡΠ°ΡΡ recover)
- ΠΡΠΈΡΠΌ ΠΈΠ· Π·Π°ΠΊΡΡΡΠΎΠ³ΠΎ ΠΊΠ°Π½Π°Π»Π° Π½Π΅ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Π½ΡΠ»Π΅Π²ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ (ΡΠΈΡΠΎΠΊΠΎΠΏΠΎΠ»ΠΎΡΠ½ΠΎ, Ρ.Π΅. Π²ΡΠ΅ΠΌ ΡΠ»ΡΡΠ°ΡΠ΅Π»ΡΠΌ ΠΊΠ°Π½Π°Π»Π°)
Π ΠΌΠΈΡΠ΅ Go ΡΡΡΠ΅ΡΡΠ²ΡΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΈΠ·Π²Π΅ΡΡΠ½ΡΡ "ΠΏΠΎΡΠ»ΠΎΠ²ΠΈΡ" ΠΈΠ»ΠΈ ΠΏΡΠΈΠ½ΡΠΈΠΏΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ ΠΎΡΡΠ°ΠΆΠ°ΡΡ ΡΠΈΠ»ΠΎΡΠΎΡΠΈΡ ΡΠ·ΡΠΊΠ° ΠΈ Π΅Π³ΠΎ Π»ΡΡΡΠΈΠ΅ ΠΏΡΠ°ΠΊΡΠΈΠΊΠΈ. ΠΠΎΡ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΠΈΠ· Π½ΠΈΡ :
ΠΡΠ°Π²ΠΈΠ»ΠΎ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ: "ΠΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΠ΅ΡΡΡ Π²ΡΡ". Go ΡΡΡΠ΅ΠΌΠΈΡΡΡ Π±ΡΡΡ ΡΠ·ΡΠΊΠΎΠΌ Ρ Ρ ΠΎΡΠΎΡΠ΅ΠΉ ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠΉ ΡΠΈΠΏΠΈΠ·Π°ΡΠΈΠ΅ΠΉ ΠΈ ΡΡΡΠΎΠ³ΠΈΠΌ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠΎΠΌ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ Π²ΡΡΠ²Π»ΡΡΡ ΠΎΡΠΈΠ±ΠΊΠΈ Π½Π° ΡΡΠ°ΠΏΠ΅ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ.
ΠΡΠ°Π²ΠΈΠ»ΠΎ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎΡΡΠΈ: "ΠΠ°Π½Π°Π»Ρ, Π° Π½Π΅ ΡΠ°Π·Π΄Π΅Π»ΡΠ΅ΠΌΠ°Ρ ΠΏΠ°ΠΌΡΡΡ, Π΄Π»Ρ ΠΎΠ±ΡΠ΅Π½ΠΈΡ ΠΌΠ΅ΠΆΠ΄Ρ Π³ΠΎΡΡΡΠΈΠ½Π°ΠΌΠΈ". Go ΠΏΠΎΠΎΡΡΡΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΊΠ°Π½Π°Π»ΠΎΠ² Π΄Π»Ρ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΠΈΠΈ ΠΈ ΠΎΠ±ΠΌΠ΅Π½Π° Π΄Π°Π½Π½ΡΠΌΠΈ ΠΌΠ΅ΠΆΠ΄Ρ Π³ΠΎΡΡΡΠΈΠ½Π°ΠΌΠΈ, Π° Π½Π΅ ΠΎΠ±ΡΡΡ ΠΏΠ°ΠΌΡΡΡ, ΡΡΠΎΠ±Ρ ΠΈΠ·Π±Π΅ΠΆΠ°ΡΡ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ Π³ΠΎΠ½ΠΊΠΈ ΠΈ Π΄ΡΡΠ³ΠΈΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌ ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΠΈ.
ΠΡΠ°Π²ΠΈΠ»ΠΎ ΡΠΈΡΠ°Π΅ΠΌΠΎΡΡΠΈ: "ΠΠΎΠ΄ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ ΠΏΠΎΠ½ΡΡΠ΅Π½ Π΄Π»Ρ Π»ΡΠ΄Π΅ΠΉ, Π° Π½Π΅ Π΄Π»Ρ ΠΌΠ°ΡΠΈΠ½". Go ΡΡΠ°Π²ΠΈΡ Π°ΠΊΡΠ΅Π½Ρ Π½Π° ΡΠΈΡΠ°Π΅ΠΌΠΎΡΡΡ ΠΊΠΎΠ΄Π° ΠΈ ΠΏΡΠΈΠ·ΡΠ²Π°Π΅Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΎΠ² ΠΏΠΈΡΠ°ΡΡ ΡΠΈΡΡΡΠΉ, ΠΏΠΎΠ½ΡΡΠ½ΡΠΉ ΠΈ ΠΏΡΠΎΡΡΠΎΠΉ ΠΊΠΎΠ΄, ΠΊΠΎΡΠΎΡΡΠΉ Π»Π΅Π³ΠΊΠΎ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡ ΠΈ ΠΏΠΎΠ½ΠΈΠΌΠ°ΡΡ.
ΠΡΠ°Π²ΠΈΠ»ΠΎ ΠΏΡΠΎΡΡΠΎΡΡ: "ΠΡΠΎΡΡΠΎΡΠ° Π»ΡΡΡΠ΅ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡΠΈ". Go ΡΡΡΠ΅ΠΌΠΈΡΡΡ ΠΊ ΠΏΡΠΎΡΡΠΎΡΠ΅ Π² Π΄ΠΈΠ·Π°ΠΉΠ½Π΅ ΡΠ·ΡΠΊΠ° ΠΈ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ΅, ΡΡΠΎΠ±Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡΠ°ΠΌ Π±ΡΠ»ΠΎ Π»Π΅Π³ΡΠ΅ ΠΏΠΈΡΠ°ΡΡ, ΡΠΈΡΠ°ΡΡ ΠΈ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡ ΠΊΠΎΠ΄.
ΠΡΠ°Π²ΠΈΠ»ΠΎ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ ΠΎΡΠΈΠ±ΠΎΠΊ: "ΠΡΠΎΠ²Π΅ΡΠΊΠ° ΠΎΡΠΈΠ±ΠΎΠΊ ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½Π° ΠΈ Π΄ΠΎΠ»ΠΆΠ½Π° Π±ΡΡΡ ΡΠ²Π½ΠΎΠΉ". Go ΠΏΡΠΈΠ·ΡΠ²Π°Π΅Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΎΠ² ΡΠ²Π½ΠΎ ΠΏΡΠΎΠ²Π΅ΡΡΡΡ ΠΎΡΠΈΠ±ΠΊΠΈ ΠΈ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°ΡΡ ΠΈΡ , ΡΡΠΎΠ±Ρ ΠΏΡΠ΅Π΄ΠΎΡΠ²ΡΠ°ΡΠΈΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΡΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ ΠΈ ΡΠ»ΡΡΡΠΈΡΡ Π½Π°Π΄Π΅ΠΆΠ½ΠΎΡΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ.
ΠΡΠ°Π²ΠΈΠ»ΠΎ ΠΎΠ΄Π½ΠΎΠ·Π½Π°ΡΠ½ΠΎΡΡΠΈ: "Π§ΡΡΠΊΠΎ Π²ΡΡΠ°ΠΆΠ°ΠΉΡΠ΅ ΡΠ²ΠΎΠΈ Π½Π°ΠΌΠ΅ΡΠ΅Π½ΠΈΡ". Go ΡΡΠ°Π²ΠΈΡ Π°ΠΊΡΠ΅Π½Ρ Π½Π° ΡΡΠ½ΠΎΠ΅ ΠΈ ΠΎΠ΄Π½ΠΎΠ·Π½Π°ΡΠ½ΠΎΠ΅ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ Π½Π°ΠΌΠ΅ΡΠ΅Π½ΠΈΠΉ Π² ΠΊΠΎΠ΄Π΅, ΡΡΠΎΠ±Ρ ΠΈΠ·Π±Π΅ΠΆΠ°ΡΡ Π΄Π²ΡΡΠΌΡΡΠ»Π΅Π½Π½ΠΎΡΡΠΈ ΠΈ ΡΠ»ΡΡΡΠΈΡΡ Π΅Π³ΠΎ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅.
ΠΡΠ°Π²ΠΈΠ»ΠΎ ΡΠΎΠ±Π»ΡΠ΄Π΅Π½ΠΈΡ ΡΡΠ°Π½Π΄Π°ΡΡΠΎΠ²: "ΠΡΠ΅Π³Π΄Π° ΡΠ»Π΅Π΄ΡΠΉΡΠ΅ ΡΠΎΠ³Π»Π°ΡΠ΅Π½ΠΈΡΠΌ ΠΎ ΡΠΎΡΠΌΠ°ΡΠΈΡΠΎΠ²Π°Π½ΠΈΠΈ ΠΊΠΎΠ΄Π°". Go ΠΈΠΌΠ΅Π΅Ρ ΡΡΡΠΎΠ³ΠΈΠ΅ ΡΠΎΠ³Π»Π°ΡΠ΅Π½ΠΈΡ ΠΎ ΡΠΎΡΠΌΠ°ΡΠΈΡΠΎΠ²Π°Π½ΠΈΠΈ ΠΊΠΎΠ΄Π°, ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΠ΅ Π² ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ΅, ΠΈ ΠΏΡΠΈΠ·ΡΠ²Π°Π΅Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΎΠ² ΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΡ ΠΈΠΌ Π΄Π»Ρ ΠΏΠΎΠ²ΡΡΠ΅Π½ΠΈΡ ΡΠΎΠ³Π»Π°ΡΠΎΠ²Π°Π½Π½ΠΎΡΡΠΈ ΠΈ ΡΠΈΡΠ°Π΅ΠΌΠΎΡΡΠΈ ΠΊΠΎΠ΄Π°.
ΠΡΠΈ ΠΏΡΠΈΠ½ΡΠΈΠΏΡ ΠΎΡΡΠ°ΠΆΠ°ΡΡ ΡΠΈΠ»ΠΎΡΠΎΡΠΈΡ Go ΠΈ ΠΏΠΎΠΌΠΎΠ³Π°ΡΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ°ΠΌ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΡΠ΅, ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΡΠ΅ ΠΈ ΠΏΠΎΠ½ΡΡΠ½ΡΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ.
Inversion of Control (IoC) ΠΈ Dependency Injection (DI) - ΡΡΠΎ Π΄Π²Π° Π²Π·Π°ΠΈΠΌΠΎΡΠ²ΡΠ·Π°Π½Π½ΡΡ ΠΏΡΠΈΠ½ΡΠΈΠΏΠ°, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΠ΅ Π² ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΠΎΠ³ΠΎ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠ΅Π½ΠΈΡ Π΄Π»Ρ ΡΠΌΠ΅Π½ΡΡΠ΅Π½ΠΈΡ ΡΠ²ΡΠ·Π°Π½Π½ΠΎΡΡΠΈ ΠΈ ΡΠ»ΡΡΡΠ΅Π½ΠΈΡ ΠΌΠΎΠ΄ΡΠ»ΡΠ½ΠΎΡΡΠΈ ΠΊΠΎΠ΄Π°.
IoC - ΡΡΠΎ ΠΎΠ±ΡΠΈΠΉ ΠΏΡΠΈΠ½ΡΠΈΠΏ, ΠΊΠΎΡΠΎΡΡΠΉ Π³ΠΎΠ²ΠΎΡΠΈΡ ΠΎ ΡΠΎΠΌ, ΡΡΠΎ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΠΉ ΠΊΠΎΠ΄ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠ°ΠΌΠΎΡΡΠΎΡΡΠ΅Π»ΡΠ½ΠΎ ΡΠΏΡΠ°Π²Π»ΡΡΡ ΠΏΠΎΡΠΎΠΊΠΎΠΌ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ. ΠΠΌΠ΅ΡΡΠΎ ΡΡΠΎΠ³ΠΎ ΠΏΠΎΡΠΎΠΊ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°Π΅ΡΡΡ ΡΠ΅Π½ΡΡΠ°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½ΡΠΌ ΠΈΠ»ΠΈ Π²Π½Π΅ΡΠ½ΠΈΠΌ ΡΠ΅ΡΠ²ΠΈΡΠΎΠΌ. ΠΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΡ Π½Π΅ ΡΠΎΠ·Π΄Π°ΡΡ Π΄ΡΡΠ³ΠΈΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΡ, Π½Π° ΠΊΠΎΡΠΎΡΡΠ΅ ΠΎΠ½ΠΈ ΠΏΠΎΠ»Π°Π³Π°ΡΡΡΡ Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ. ΠΠΌΠ΅ΡΡΠΎ ΡΡΠΎΠ³ΠΎ ΠΎΠ½ΠΈ ΠΏΠΎΠ»ΡΡΠ°ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΡ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΈΠΌ Π½ΡΠΆΠ½Ρ, ΠΎΡ Π²Π½Π΅ΡΠ½Π΅Π³ΠΎ ΠΈΡΡΠΎΡΠ½ΠΈΠΊΠ°.
DI - ΡΡΠΎ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½Π°Ρ ΡΠΎΡΠΌΠ° IoC, Π³Π΄Π΅ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΡΡΡΡ Π²Π½Π΅ΡΠ½ΠΈΠΌ ΡΠ΅ΡΠ²ΠΈΡΠΎΠΌ. DI ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π½Π°ΠΌ ΡΠ°Π·ΡΠ°Π±Π°ΡΡΠ²Π°ΡΡ ΡΠ»Π°Π±ΠΎ ΡΠ²ΡΠ·Π°Π½Π½ΡΠ΅ ΠΌΠΎΠ΄ΡΠ»ΠΈ. ΠΠ½Π΅Π΄ΡΠ΅Π½ΠΈΠ΅ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠ΅ΠΉ ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΠ΅ΡΡΡ ΠΏΡΡΠ΅ΠΌ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»Π΅Π½ΠΈΡ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΠ±ΡΠ΅ΠΊΡΡ (ΠΊΠ»ΠΈΠ΅Π½ΡΡ), Π° Π½Π΅ ΠΏΡΡΠ΅ΠΌ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ Π²Π½ΡΡΡΠΈ ΠΎΠ±ΡΠ΅ΠΊΡΠ°.
Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΠΌΠΎΠΆΠ½ΠΎ ΡΠΊΠ°Π·Π°ΡΡ, ΡΡΠΎ DI - ΡΡΠΎ ΡΠΏΠΎΡΠΎΠ± ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ IoC. ΠΠ½ΠΈ ΠΎΠ±Π° ΡΠ°Π±ΠΎΡΠ°ΡΡ Π²ΠΌΠ΅ΡΡΠ΅ Π΄Π»Ρ Π΄ΠΎΡΡΠΈΠΆΠ΅Π½ΠΈΡ ΡΠ»Π°Π±ΠΎΠΉ ΡΠ²ΡΠ·Π°Π½Π½ΠΎΡΡΠΈ ΠΈ Π»ΡΡΡΠ΅ΠΉ ΠΌΠΎΠ΄ΡΠ»ΡΠ½ΠΎΡΡΠΈ Π² ΠΊΠΎΠ΄Π΅.
- Dependency Injection Π½Π° ΠΏΡΠΈΠΌΠ΅ΡΠ΅ Uber fx
- ΠΠ΅ΡΠΎΠ΄Ρ ΠΎΡΠ³Π°Π½ΠΈΠ·Π°ΡΠΈΠΈ DI ΠΈ ΠΆΠΈΠ·Π½Π΅Π½Π½ΠΎΠ³ΠΎ ΡΠΈΠΊΠ»Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π² GO
ΠΠ΅ ΠΏΡΡΠ°ΡΡ Ρ Dependency Inversion Principle - ΡΡΠΎ ΠΏΡΠΈΠ½ΡΠΈΠΏ SOLID Π² ΠΎΠ±ΡΠ΅ΠΊΡΠ½ΠΎ-ΠΎΡΠΈΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠΌ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠΈ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ ΡΠΌΠ΅Π½ΡΡΠΈΡΡ ΡΠ²ΡΠ·Π°Π½Π½ΠΎΡΡΡ Π² ΠΊΠΎΠ΄Π΅. ΠΠ½ Π³Π»Π°ΡΠΈΡ: "ΠΠΎΠ΄ΡΠ»ΠΈ Π²Π΅ΡΡ Π½Π΅Π³ΠΎ ΡΡΠΎΠ²Π½Ρ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ Π·Π°Π²ΠΈΡΠ΅ΡΡ ΠΎΡ ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ Π½ΠΈΠΆΠ½Π΅Π³ΠΎ ΡΡΠΎΠ²Π½Ρ. ΠΠ±Π° Π΄ΠΎΠ»ΠΆΠ½Ρ Π·Π°Π²ΠΈΡΠ΅ΡΡ ΠΎΡ Π°Π±ΡΡΡΠ°ΠΊΡΠΈΠΉ. ΠΠ±ΡΡΡΠ°ΠΊΡΠΈΠΈ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ Π·Π°Π²ΠΈΡΠ΅ΡΡ ΠΎΡ Π΄Π΅ΡΠ°Π»Π΅ΠΉ. ΠΠ΅ΡΠ°Π»ΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ Π·Π°Π²ΠΈΡΠ΅ΡΡ ΠΎΡ Π°Π±ΡΡΡΠ°ΠΊΡΠΈΠΉ".
"Don't communicate by sharing memory, share memory by communicating"
ΠΠ°Π΄Π°ΡΠ°: Π Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°ΡΡ ΡΡΡΡΠΊΡΡΡΡ-ΡΡΠ΅ΡΡΠΈΠΊ, ΠΊΠΎΡΠΎΡΠ°Ρ Π±ΡΠ΄Π΅Ρ ΠΈΠ½ΠΊΡΠ΅ΠΌΠ΅Π½ΡΠΈΡΠΎΠ²Π°ΡΡΡΡ Π² ΠΊΠΎΠ½ΠΊΡΡΠ΅Π½ΡΠ½ΠΎΠΉ ΡΡΠ΅Π΄Π΅. ΠΠΎ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° Π΄ΠΎΠ»ΠΆΠ½Π° Π²ΡΠ²ΠΎΠ΄ΠΈΡΡ ΠΈΡΠΎΠ³ΠΎΠ²ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΡΠ΅ΡΡΠΈΠΊΠ°.
Π£ΡΠ»ΠΎΠ²ΠΈΠ΅: ΠΠ΅Π· ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΡ ΠΏΡΠΈΠΌΠΈΡΠΈΠ²ΠΎΠ² ΠΈΠ· ΠΏΠ°ΠΊΠ΅ΡΠ° sync, ΠΈΡΠΊΠ»ΡΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΠΊΠ°Π½Π°Π» Π΄Π»Ρ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠ΅Π½ΠΈΡ ΠΏΠΎΡΠΎΠΊΠΎΠ±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΠΉ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠΈ/ΠΏΡΠΈΡΠΌΠ° Π΄Π°Π½Π½ΡΡ .
package main
import (
"context"
"fmt"
"os"
"os/signal"
"sync"
)
type Counter chan int
func NewCounter(ctx context.Context) Counter {
counter := make(Counter)
go func() {
var count int
for {
select {
case v := <-counter:
count += v
case counter <- count:
case <-ctx.Done():
return
}
}
}()
return counter
}
func main() {
ctx, cancel := signal.NotifyContext(context.Background(), os.Interrupt)
defer cancel()
counter := NewCounter(ctx)
var wg sync.WaitGroup
const total = 1_000_000
wg.Add(total)
for i := 0; i < total; i++ {
go func() {
counter <- 1
wg.Done()
}()
}
wg.Wait()
fmt.Println(<-counter)
}ch := make(chan string)- Π±Π»ΠΎΠΊΠΈΡΡΠ΅Ρ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡΠΈΠΊ, ΠΏΠΎΠΊΠ° Π½Π΅ Π³ΠΎΡΠΎΠ² ΠΏΡΠΈΡΠΌΠ½ΠΈΠΊbufferedCh := make(chan string, 1)- Π½Π΅Π±Π»ΠΎΠΊΠΈΡΡΠ΅Ρ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡΠΈΠΊ, ΠΏΠΎΠΊΠ° Π½Π΅ Π³ΠΎΡΠΎΠ² ΠΏΡΠΈΡΠΌΠ½ΠΈΠΊ
package main
import "fmt"
func main() {
ch := make(chan string, 0) // ΠΠ΅ΡΠ΅ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ Π½Π° Π±ΡΡΠ΅ΡΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ ΠΊΠ°Π½Π°Π» ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅
go func() {
msg := <-ch
fmt.Println("ΠΠΎΠ»ΡΡΠ΅Π½ΠΎ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅:", msg)
}()
ch <- "ΠΡΠΈΠ²Π΅Ρ, ΠΌΠΈΡ!" // ΠΡΠ° ΡΡΡΠΎΠΊΠ° Π±Π»ΠΎΠΊΠΈΡΡΠ΅ΡΡΡ Π΄ΠΎ ΡΠ΅Ρ
ΠΏΠΎΡ, ΠΏΠΎΠΊΠ° Π³ΠΎΡΡΡΠΈΠ½Π° Π½Π΅ ΠΏΡΠΎΡΠΈΡΠ°Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΈΠ· ΠΊΠ°Π½Π°Π»Π°
fmt.Println("ΠΠ»Π°Π²Π½Π°Ρ Π³ΠΎΡΡΡΠΈΠ½Π° Π·Π°Π²Π΅ΡΡΠ΅Π½Π°")
}package main
import (
"fmt"
"time"
)
func main() {
ch := make(chan int)
done := make(chan bool)
go func() {
for i := range ch {
if i == 20 {
done <- true
return
}
fmt.Printf("%d\n", i)
}
}()
go func() {
for i := 0; i < 10; i++ {
select {
case ch <- i:
time.Sleep(1 * time.Second)
case <-done:
return
}
}
}()
go func() {
for i := 10; i <= 20; i++ {
select {
case ch <- i:
time.Sleep(1 * time.Second)
case <-done:
return
}
}
}()
<-done
}package main
import (
"fmt"
"time"
)
func main() {
ch := make(chan int)
done := make(chan bool)
go func() {
for i := range ch {
fmt.Printf("reader1: %d\n", i)
}
done <- true
}()
go func() {
for i := range ch {
fmt.Printf("reader2: %d\n", i)
}
done <- true
}()
go func() {
for i := range ch {
fmt.Printf("reader3: %d\n", i)
}
done <- true
}()
for i := 0; i <= 300; i++ {
if i == 300 {
close(ch)
return
}
time.Sleep(1 * time.Second)
ch <- i
}
<-done
}Π GoLang Π½Π΅ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΠΈ ΠΎΠ±ΡΠ΅ΠΊΡΠ½ΠΎ-ΠΎΡΠΈΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ, ΡΠ°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΊΠ»Π°ΡΡΠΎΠ² ΠΈ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΡ. ΠΠ΄Π½Π°ΠΊΠΎ, Go ΠΏΡΠ΅Π΄Π»Π°Π³Π°Π΅Ρ Π΄ΡΡΠ³ΠΈΠ΅ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌΡ Π΄Π»Ρ Π΄ΠΎΡΡΠΈΠΆΠ΅Π½ΠΈΡ ΡΠ΅Ρ ΠΆΠ΅ ΡΠ΅Π»Π΅ΠΉ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π²ΡΡΡΠ°ΠΈΠ²Π°Π½ΠΈΠ΅ ΡΡΡΡΠΊΡΡΡ ΠΈ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΡ.
ΠΠ½ΠΊΠ°ΠΏΡΡΠ»ΡΡΠΈΡ Π΄ΠΎΡΡΠΈΠ³Π°Π΅ΡΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½ΡΡ ΠΈ Π½Π΅ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½ΡΡ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠΎΠ² (ΠΏΡΠ±Π»ΠΈΡΠ½ΡΠ΅ ΠΈ ΠΏΡΠΈΠ²Π°ΡΠ½ΡΠ΅). ΠΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΡ, Π½Π°ΡΠΈΠ½Π°ΡΡΠΈΠ΅ΡΡ Ρ Π·Π°Π³Π»Π°Π²Π½ΠΎΠΉ Π±ΡΠΊΠ²Ρ, ΡΠ²Π»ΡΡΡΡΡ ΠΏΡΠ±Π»ΠΈΡΠ½ΡΠΌΠΈ ΠΈ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ Π΄ΠΎΡΡΡΠΏΠ½ΡΠΌΠΈ ΠΈΠ· Π΄ΡΡΠ³ΠΈΡ ΠΏΠ°ΠΊΠ΅ΡΠΎΠ². ΠΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΡ, Π½Π°ΡΠΈΠ½Π°ΡΡΠΈΠ΅ΡΡ Ρ ΠΌΠ°Π»Π΅Π½ΡΠΊΠΎΠΉ Π±ΡΠΊΠ²Ρ, ΡΠ²Π»ΡΡΡΡΡ ΠΏΡΠΈΠ²Π°ΡΠ½ΡΠΌΠΈ ΠΈ Π΄ΠΎΡΡΡΠΏΠ½Ρ ΡΠΎΠ»ΡΠΊΠΎ Π² ΠΏΡΠ΅Π΄Π΅Π»Π°Ρ ΡΠ²ΠΎΠ΅Π³ΠΎ ΠΏΠ°ΠΊΠ΅ΡΠ°. ΠΠ΄Π½Π°ΠΊΠΎ, Π² Go Π½Π΅Ρ ΡΡΡΠΎΠ³ΠΎΠΉ ΠΏΡΠΈΠ²Π°ΡΠ½ΠΎΡΡΠΈ, ΠΈ Π΄ΡΡΠ³ΠΈΠ΅ ΠΏΠ°ΠΊΠ΅ΡΡ ΠΌΠΎΠ³ΡΡ ΠΈΠΌΠ΅ΡΡ Π΄ΠΎΡΡΡΠΏ ΠΊ ΠΏΡΠΈΠ²Π°ΡΠ½ΡΠΌ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠ°ΠΌ, Π΅ΡΠ»ΠΈ ΠΎΠ½ΠΈ Π½Π°Ρ ΠΎΠ΄ΡΡΡΡ Π² ΡΠΎΠΌ ΠΆΠ΅ ΠΏΠ°ΠΊΠ΅ΡΠ΅ ΠΈΠΌΠΏΠΎΡΡΠ°.
ΠΠΎΠ»ΠΈΠΌΠΎΡΡΠΈΠ·ΠΌ Π΄ΠΎΡΡΠΈΠ³Π°Π΅ΡΡΡ ΡΠ΅ΡΠ΅Π· ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΡ. ΠΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΡ Π² Go ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ ΠΎΠ±ΡΠΈΠ΅ ΡΠΈΠΏΡ Π΄Π°Π½Π½ΡΡ , ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ ΡΠ°Π·Π½ΡΠΌΠΈ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΡΠΌΠΈ ΡΠΈΠΏΠ°ΠΌΠΈ. ΠΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΡΠΈ ΡΠΈΠΏΡ Π΄Π°Π½Π½ΡΡ Π² ΠΎΠ±ΡΠ΅ΠΌ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ΅ ΠΈ Π²ΡΠ·ΡΠ²Π°ΡΡ ΠΈΡ ΠΌΠ΅ΡΠΎΠ΄Ρ Π±Π΅Π· Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ Π·Π½Π°ΡΡ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΡΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, Π² GoLang ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΡΡΠΈΡΡ ΠΏΠΎΠ»ΠΈΠΌΠΎΡΡΠΈΠ·ΠΌΠ°, Ρ ΠΎΡΡ ΡΡΠΎ Π½Π΅ ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΉ Π°ΠΊΡΠ΅Π½Ρ Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΡΠ·ΡΠΊΠ°.
ΠΡΡΡ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° Π°Π±ΡΡΡΠ°ΠΊΡΠΈΠΈ ΡΠ΅ΡΠ΅Π· ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΡ. ΠΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΡ Π² Go ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ Π½Π°Π±ΠΎΡ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ Π΄ΠΎΠ»ΠΆΠ½Ρ Π±ΡΡΡ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ Π΄Π»Ρ ΡΠΈΠΏΠ° Π΄Π°Π½Π½ΡΡ . ΠΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ Π°Π±ΡΡΡΠ°ΠΊΡΠ½ΡΠ΅ ΡΠΈΠΏΡ Π΄Π°Π½Π½ΡΡ ΠΈ ΡΠ°Π±ΠΎΡΠ°ΡΡ Ρ Π½ΠΈΠΌΠΈ, Π½Π΅ Π·Π°Π²ΠΈΡΡ ΠΎΡ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎΠΉ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ.
ΠΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠ΅ ΠΈΠ»ΠΈ ΠΏΡΠΈΠ²ΡΠ·ΠΊΠ° ΡΡΡΡΠΊΡΡΡΡ ΠΊ ΠΌΠ΅ΡΠΎΠ΄Ρ Π½Π°Π·ΡΠ²Π°Π΅ΡΡΡ "ΠΌΠ΅ΡΠΎΠ΄ΠΎΠΌ-ΠΏΠΎΠ»ΡΡΠ°ΡΠ΅Π»Π΅ΠΌ" (method receiver). ΠΡΠΈ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠΈ ΠΌΠ΅ΡΠΎΠ΄Π° Π΄Π»Ρ ΡΡΡΡΠΊΡΡΡΡ, ΡΠΊΠ°Π·ΡΠ²Π°Π΅ΡΡΡ ΠΏΠΎΠ»ΡΡΠ°ΡΠ΅Π»Ρ - ΡΠΈΠΏ ΡΡΡΡΠΊΡΡΡΡ, ΠΊ ΠΊΠΎΡΠΎΡΠΎΠΌΡ ΠΏΡΠΈΠ²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ ΠΌΠ΅ΡΠΎΠ΄. ΠΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π²ΡΠ·ΡΠ²Π°ΡΡ ΠΌΠ΅ΡΠΎΠ΄Ρ Π½Π° ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠ°Ρ ΡΡΠΎΠΉ ΡΡΡΡΠΊΡΡΡΡ.
ΠΡΠ·ΠΎΠ² ΠΌΠ΅ΡΠΎΠ΄Π° Π½Π° nil ΡΠΊΠ°Π·Π°ΡΠ΅Π»Π΅ - Π²Π°Π»ΠΈΠ΄Π½Π°Ρ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ. Π Π²ΠΎΡ Π΅ΡΠ»ΠΈ ΠΌΠ΅ΡΠΎΠ΄ ΠΏΠΎΠΏΡΡΠ°Π΅ΡΡΡ ΠΎΠ±ΡΠ°ΡΠΈΡΡΡΡ ΠΊ Π΄Π°Π½Π½ΡΠΌ (Π½Π΅ ΠΌΠ΅ΡΠΎΠ΄Π°ΠΌ) ΠΎΠ±ΡΠ΅ΠΊΡΠ°, ΡΠΎ Π²ΠΎΡ ΡΡΡ ΠΈ Π±ΡΠ΄Π΅Ρ "nil dereference".
package main
import "fmt"
type MyStruct struct {
data string
}
func (m *MyStruct) PrintData() {
if m != nil {
fmt.Println(m.data)
} else {
fmt.Println("nil dereference")
}
}
func main() {
var ptr *MyStruct = nil
ptr.PrintData() // Π²ΡΠ·ΠΎΠ² ΠΌΠ΅ΡΠΎΠ΄Π° Π½Π° nil ΡΠΊΠ°Π·Π°ΡΠ΅Π»Π΅
}- [0-15) ΠΏΠΎΠ»ΡΠΈΠ½ΡΠ΅ΡΠ²Π°Π» Π½Π° ΡΠΈΡΠ»ΠΎΠ²ΡΡ ΠΏΡΡΠΌΡΡ
- ΠΊΠΎΠΌΠΏΠΎΡΠ°ΡΠΎΡ - ΡΡΠ½ΠΊΡΠΈΡ, ΠΊΠΎΡΠΎΡΠ°Ρ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ -1 || 0 || 1
- ΡΠ΅ΡΠΈΠ²Π΅Ρ β ΡΡΠΎ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠ΅ ΡΠΈΠΏΠ°, Π΄Π»Ρ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ Π²Ρ Ρ ΠΎΡΠΈΡΠ΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ ΠΌΠ΅ΡΠΎΠ΄.
-
*- ΡΠ°Π·ΡΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ (ΠΏΡΠΈΠΌΠ΅Ρ: a := *b), Π½ΠΎ Π΄Π»Ρ Π°ΡΡΠΌΠ΅Π½ΡΠΎΠ² ΡΡΠ½ΠΊΡΠΈΠΈ - ΡΠΈΠΏ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ -
&- Π²Π·ΡΡΠΈΠ΅ Π°Π΄ΡΠ΅ΡΠ° (ΠΏΡΠΈΠΌΠ΅Ρ: a := &b - ΠΏΠΎΠ»ΠΎΠΆΠΈΡΡ Π² ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅) -
Π² GΠΎ Π½Π΅Ρ ΡΡΡΠ»ΠΎΠΊ, ΡΠΎΠ»ΡΠΊΠΎ ΡΠΊΠ°Π·Π°ΡΠ΅Π»ΠΈ (ΡΡΡΠ»ΠΊΠΈ Π΅ΡΡΡ Π² c/c++).
-
Ρ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½ΠΎΠΉ Π΅ΡΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅, Π°Π΄ΡΠ΅Ρ ΡΡΡΠ»ΠΊΠΈ ΡΡΠΎ Π°Π΄ΡΠ΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΡ, Π° ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΈΠΌΠ΅Π΅Ρ ΡΠ²ΠΎΠΉ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠΉ Π°Π΄ΡΠ΅Ρ (βΡΡΠΎ ΠΎΡΠ΅Π½Ρ Π³ΡΡΠ±ΠΎΠ΅ ΠΎΠ±ΡΡΡΠ½Π΅Π½ΠΈΠ΅).
-
ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΠΈΠΌ Π΄ΠΎΠΌ, ΡΡΠΎΡΡΠΈΠΉ Π½Π° ΠΏΠ΅ΡΠ΅ΡΠ΅ΡΠ΅Π½ΠΈΠΈ ΡΠ»ΠΈΡ ΠΠ΅Π½ΠΈΠ½Π° 43 ΠΈ ΠΠ΅Π½Π΄Π΅Π»Π΅Π΅Π²Π° 77, ΡΠΎΠ³Π΄Π° ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ Π·Π°ΠΊΠ°Π·Π°ΡΡ ΡΠ°ΠΊΡΠΈ Π½Π° Π»ΡΠ±ΠΎΠΉ ΠΈΠ· ΡΡΠΈΡ Π°Π΄ΡΠ΅ΡΠΎΠ² ΠΈ ΠΎΠ½ΠΎ ΠΏΡΠΈΠ΅Π΄Π΅Ρ Π² ΠΎΠ΄Π½ΠΎ ΠΈ ΡΠΎ ΠΆΠ΅ ΠΌΠ΅ΡΡΠΎ. ΡΡΠΎ Π°Π΄ΡΠ΅Ρ. ΠΌΠΎΠΆΠ½ΠΎ ΡΠΊΠ°Π·Π°ΡΡ ΡΡΠΎ Π°Π΄ΡΠ΅Ρ ΡΡΠΎ Π²ΡΠΎΡΠΎΠ΅ ΠΈΠΌΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ, Π° ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ ΡΡΠΎ ΠΊΠΎΡΠΎΠ±ΠΊΠ° ΠΏΡΠΈ ΠΎΡΠΊΡΡΡΠΈΠΈ ΠΊΠΎΡΠΎΡΠΎΠΉ Π½Π°ΠΌ ΡΠΊΠ°ΠΆΡΡ ΠΏΠΎ ΠΊΠ°ΠΊΠΎΠΌΡ Π°Π΄ΡΠ΅ΡΡ Π»Π΅ΠΆΠΈΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅. ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½ΡΠΆΠ½ΠΎ ΡΠ°Π·ΡΠΌΠ΅Π½ΠΎΠ²ΡΠ²Π°ΡΡ. Π°Π΄ΡΠ΅Ρ Π½Π΅Ρ.
ΠΠ°ΡΠ΅ΠΌ Π² Go Π°ΠΌΠΏΠ΅ΡΡΠ°Π½Π΄ ΠΈ Π·Π²ΡΠ·Π΄ΠΎΡΠΊΠ° (& ΠΈ *)?
- Π°Π»ΠΈΠ°Ρ any
- x.(MyType) - ΡΡΠΎ "ΡΡΠ²Π΅ΡΠΆΠ΄Π΅Π½ΠΈΠ΅ ΡΠΈΠΏΠ°" / "type assertion" (Π° Π½Π΅ "ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΡΠΈΠΏΠ°", ΠΊΠ°ΠΊ Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ: float64 ΠΊ int)
- x.(type) - ΡΡΠΎ "ΠΈΠ·Π²Π»Π΅ΡΠ΅Π½ΠΈΠ΅ ΡΠΈΠΏΠ°" / "type extraction", ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΡΠΎΠ»ΡΠΊΠΎ Π΄Π»Ρ
switch, ΠΈΠ½Π°ΡΠ΅ ΡΠ°ΠΊ ΠΈ Π½Π°Π·ΡΠ²Π°Π΅ΡΡΡ "Π²ΡΠ±ΠΎΡ ΡΠΈΠΏΠ°" / "type switch"
Π ΡΠ·ΡΠΊΠ΅ Go ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π° (sets) Π½Π΅ ΡΠ²Π»ΡΡΡΡΡ Π²ΡΡΡΠΎΠ΅Π½Π½ΠΎΠΉ ΡΠ°ΡΡΡΡ ΡΠ·ΡΠΊΠ°, Π² ΠΎΡΠ»ΠΈΡΠΈΠ΅ ΠΎΡ Π½Π΅ΠΊΠΎΡΠΎΡΡΡ Π΄ΡΡΠ³ΠΈΡ ΡΠ·ΡΠΊΠΎΠ² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ, ΡΠ°ΠΊΠΈΡ ΠΊΠ°ΠΊ Python. ΠΠ΄Π½Π°ΠΊΠΎ, Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄ΠΎΡΡΠΈΡΡ ΠΏΠΎΡ ΠΎΠΆΠ΅Π³ΠΎ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΊΠ°ΡΡΡ.
type Set[V comparable] map[V]struct{}
func NewSet[V comparable](capacity int) Set[V] {
return make(Set[V], capacity)
}
// or
func NewSetWithValue[V comparable](value ...V) Set[V] {
set := make(Set[V], len(value))
for _, v := range value {
set[v] = struct{}{}
}
return set
}Π ΡΠ·ΡΠΊΠ΅ Go ΠΊΠΎΡΡΠ΅ΠΆΠΈ (tuples) Π½Π΅ ΡΠ²Π»ΡΡΡΡΡ Π²ΡΡΡΠΎΠ΅Π½Π½ΠΎΠΉ ΡΠ°ΡΡΡΡ ΡΠ·ΡΠΊΠ°, Π² ΠΎΡΠ»ΠΈΡΠΈΠ΅ ΠΎΡ Π½Π΅ΠΊΠΎΡΠΎΡΡΡ Π΄ΡΡΠ³ΠΈΡ ΡΠ·ΡΠΊΠΎΠ² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ, ΡΠ°ΠΊΠΈΡ ΠΊΠ°ΠΊ Python. ΠΠ΄Π½Π°ΠΊΠΎ, Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄ΠΎΡΡΠΈΡΡ ΠΏΠΎΡ ΠΎΠΆΠ΅Π³ΠΎ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΡΡΡΠΊΡΡΡ ΠΈΠ»ΠΈ ΡΠ»Π°ΠΉΡΠΎΠ².
Π‘ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΡΡΡΡΠΊΡΡΡ, Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ ΡΠΈΠΏ Π΄Π°Π½Π½ΡΡ , ΠΊΠΎΡΠΎΡΡΠΉ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΏΠΎΠ»Π΅ΠΉ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ ΡΠ°Π·Π½ΠΎΠ³ΠΎ ΡΠΈΠΏΠ°. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ:
type Tuple struct {
Field1 int
Field2 string
Field3 float64
}
func main() {
tuple := Tuple{Field1: 1, Field2: "Hello", Field3: 3.14}
fmt.Println(tuple.Field1, tuple.Field2, tuple.Field3)
}ΠΡ ΡΠ°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠ»Π°ΠΉΡΡ (slices) Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΊΠΎΠ»Π»Π΅ΠΊΡΠΈΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ Π±Π΅Π· ΡΠ²Π½ΠΎΠ³ΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΡΡΡΡΠΊΡΡΡΡ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ:
func main() {
tuple := []interface{}{1, "Hello", 3.14}
fmt.Println(tuple[0], tuple[1], tuple[2])
}ΠΠ΄Π½Π°ΠΊΠΎ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΡΡΡΠΊΡΡΡ ΠΈΠ»ΠΈ ΡΠ»Π°ΠΉΡΠΎΠ² Π²ΠΌΠ΅ΡΡΠΎ ΠΊΠΎΡΡΠ΅ΠΆΠ΅ΠΉ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΌΠ΅Π½Π΅Π΅ ΡΠ΄ΠΎΠ±Π½ΡΠΌ, ΡΠ°ΠΊ ΠΊΠ°ΠΊ Π²Π°ΠΌ ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΡΡΠ΅Π±ΠΎΠ²Π°ΡΡΡΡ ΠΎΠ±ΡΠ°ΡΠ°ΡΡΡΡ ΠΊ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΠΌ ΠΏΠΎ ΠΈΠ½Π΄Π΅ΠΊΡΠ°ΠΌ ΠΈΠ»ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ ΡΠΈΠΏΠΎΠ².
Π ΡΠ·ΡΠΊΠ΅ Go Π½Π΅Ρ Π²ΡΡΡΠΎΠ΅Π½Π½ΠΎΠΉ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠΈ Π΄Π»Ρ ΡΡΠ½ΠΊΡΠΈΠΉ-Π³Π΅Π½Π΅ΡΠ°ΡΠΎΡΠΎΠ², ΠΊΠ°ΠΊ Π² Π½Π΅ΠΊΠΎΡΠΎΡΡΡ Π΄ΡΡΠ³ΠΈΡ ΡΠ·ΡΠΊΠ°Ρ , ΡΠ°ΠΊΠΈΡ ΠΊΠ°ΠΊ Python. Π€ΡΠ½ΠΊΡΠΈΠΈ-Π³Π΅Π½Π΅ΡΠ°ΡΠΎΡΡ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ ΠΈΡΠ΅ΡΠ°ΡΠΎΡΡ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠ³ΡΡ Π³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΏΠΎ Π·Π°ΠΏΡΠΎΡΡ, Π²ΠΌΠ΅ΡΡΠΎ ΡΠΎΠ³ΠΎ ΡΡΠΎΠ±Ρ ΡΡΠ°Π·Ρ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡ Π²ΡΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ.
ΠΠ΄Π½Π°ΠΊΠΎ Π² Go ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π³ΠΎΡΡΡΠΈΠ½Ρ ΠΈ ΠΊΠ°Π½Π°Π»Ρ Π΄Π»Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠ³ΠΎ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΡ. ΠΠΌΠ΅ΡΡΠΎ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡ Π²ΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΡΡΠ°Π·Ρ, Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π³ΠΎΡΡΡΠΈΠ½Ρ Π΄Π»Ρ Π³Π΅Π½Π΅ΡΠ°ΡΠΈΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ ΠΈ ΠΊΠ°Π½Π°Π» Π΄Π»Ρ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠΈ ΡΡΠΈΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ ΠΎΠ±ΡΠ°ΡΠ½ΠΎ Π²ΡΠ·ΡΠ²Π°ΡΡΠ΅ΠΉ ΡΡΠΎΡΠΎΠ½Π΅.
ΠΠΎΡ ΠΏΡΠΈΠΌΠ΅Ρ ΠΏΡΠΎΡΡΠΎΠΉ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ-Π³Π΅Π½Π΅ΡΠ°ΡΠΎΡΠ° Π² Go Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Π³ΠΎΡΡΡΠΈΠ½ ΠΈ ΠΊΠ°Π½Π°Π»ΠΎΠ²:
func generator() <-chan int {
ch := make(chan int)
go func() {
defer close(ch)
for i := 0; i < 10; i++ {
ch <- i
}
}()
return ch
}
func main() {
gen := generator()
for value := range gen {
fmt.Println(value)
}
}Π ΡΡΠΎΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΡ generator ΡΠΎΠ·Π΄Π°Π΅Ρ ΠΊΠ°Π½Π°Π» ΠΈ Π·Π°ΠΏΡΡΠΊΠ°Π΅Ρ Π³ΠΎΡΡΡΠΈΠ½Ρ, ΠΊΠΎΡΠΎΡΠ°Ρ Π³Π΅Π½Π΅ΡΠΈΡΡΠ΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΈ ΠΎΡΠΏΡΠ°Π²Π»ΡΠ΅Ρ ΠΈΡ
Π² ΠΊΠ°Π½Π°Π». Π€ΡΠ½ΠΊΡΠΈΡ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΠΊΠ°Π½Π°Π», ΠΏΠΎ ΠΊΠΎΡΠΎΡΠΎΠΌΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠ΅ΡΠΈΡΠΎΠ²Π°ΡΡΡΡ ΠΈ ΠΏΠΎΠ»ΡΡΠ°ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ.
ΠΠ°ΡΠ΅ΠΌ Π² ΡΡΠ½ΠΊΡΠΈΠΈ main ΠΌΡ ΠΏΠΎΠ»ΡΡΠ°Π΅ΠΌ ΠΊΠ°Π½Π°Π» ΠΈΠ· ΡΡΠ½ΠΊΡΠΈΠΈ-Π³Π΅Π½Π΅ΡΠ°ΡΠΎΡΠ° ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ ΡΠΈΠΊΠ» for range Π΄Π»Ρ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ ΠΈΠ· ΠΊΠ°Π½Π°Π»Π° ΠΈ Π²ΡΠ²ΠΎΠ΄Π° ΠΈΡ
Π½Π° ΡΠΊΡΠ°Π½.
ΠΡΠΎ ΠΏΡΠΎΡΡΠΎΠΉ ΠΏΡΠΈΠΌΠ΅Ρ, ΠΈ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»Π° ΡΡΠ½ΠΊΡΠΈΠΉ-Π³Π΅Π½Π΅ΡΠ°ΡΠΎΡΠΎΠ² ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π±ΠΎΠ»Π΅Π΅ ΡΠ»ΠΎΠΆΠ½ΠΎΠΉ Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ Π²Π°ΡΠΈΡ ΡΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΠΉ. ΠΠ΄Π½Π°ΠΊΠΎ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Π³ΠΎΡΡΡΠΈΠ½ ΠΈ ΠΊΠ°Π½Π°Π»ΠΎΠ² Π² Go Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄ΠΎΡΡΠΈΡΡ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠ³ΠΎ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΡ.
Π£ΠΊΠ°Π·Π°ΡΠ΅Π»ΡΠ½ΡΠ΅ ΡΠΈΠΏΡ Π΄Π°Π½Π½ΡΡ Π² GoLang - ΡΡΠΎ ΡΠΈΠΏΡ Π΄Π°Π½Π½ΡΡ , ΠΊΠΎΡΠΎΡΡΠ΅ Ρ ΡΠ°Π½ΡΡΡΡ Π² ΡΠΈΡΡΠ΅ΠΌΠ½ΠΎΠΉ ΠΊΡΡΠ΅ (heap) ΠΈ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡΡΡ ΠΏΠΎ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ, Π° Π½Π΅ ΠΏΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ. ΠΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ ΠΏΡΠΈ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠ΅ ΡΠΊΠ°Π·Π°ΡΠ΅Π»ΡΠ½ΠΎΠ³ΠΎ ΡΠΈΠΏΠ° Π΄Π°Π½Π½ΡΡ Π² ΡΡΠ½ΠΊΡΠΈΡ, ΡΡΠ½ΠΊΡΠΈΡ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Ρ ΠΎΡΠΈΠ³ΠΈΠ½Π°Π»ΡΠ½ΡΠΌ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠΌ, Π° Π½Π΅ Ρ Π΅Π³ΠΎ ΠΊΠΎΠΏΠΈΠ΅ΠΉ. ΠΠ΅ΠΊΠΎΡΠΎΡΡΠ΅ ΠΈΠ· ΡΠΊΠ°Π·Π°ΡΠ΅Π»ΡΠ½ΡΡ ΡΠΈΠΏΠΎΠ² Π΄Π°Π½Π½ΡΡ Π² GoLang:
- Π‘ΡΠ΅Π·Ρ (slices) - ΡΡΠΎ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΠΌΠ°ΡΡΠΈΠ²Ρ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΡΡ ΡΠΎΠ±ΠΎΠΉ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ ΡΠΈΠΏΠ°.
- ΠΠ°ΡΡΡ (maps) - ΡΡΠΎ Π°ΡΡΠΎΡΠΈΠ°ΡΠΈΠ²Π½ΡΠ΅ ΠΌΠ°ΡΡΠΈΠ²Ρ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΡΡ ΡΠΎΠ±ΠΎΠΉ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° Π½Π°Π±ΠΎΡ ΠΏΠ°Ρ ΠΊΠ»ΡΡ-Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅.
- ΠΠ°Π½Π°Π»Ρ (channels) - ΡΡΠΎ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌ Π΄Π»Ρ ΠΎΠ±ΠΌΠ΅Π½Π° Π΄Π°Π½Π½ΡΠΌΠΈ ΠΌΠ΅ΠΆΠ΄Ρ Π³ΠΎΡΡΡΠΈΠ½Π°ΠΌΠΈ (goroutines) Π² ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡΠΎΡΠ½ΠΎΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅.
- Π£ΠΊΠ°Π·Π°ΡΠ΅Π»ΠΈ (pointers) - ΡΡΠΎ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅, ΠΊΠΎΡΠΎΡΡΠ΅ Ρ ΡΠ°Π½ΡΡ Π°Π΄ΡΠ΅Ρ Π² ΠΏΠ°ΠΌΡΡΠΈ Π΄ΡΡΠ³ΠΎΠΉ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ.
- ?? Π‘ΡΡΡΠΊΡΡΡΡ (structs) - ΡΡΠΎ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΠ΅ ΡΠΈΠΏΡ Π΄Π°Π½Π½ΡΡ , ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠ³ΡΡ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΡ ΠΏΠΎΠ»Ρ ΡΠ°Π·Π½ΡΡ ΡΠΈΠΏΠΎΠ².
- ΠΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΡ (interfaces) - ΡΡΠΎ ΡΠΈΠΏΡ Π΄Π°Π½Π½ΡΡ , ΠΊΠΎΡΠΎΡΡΠ΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡΡ Π½Π°Π±ΠΎΡ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ Π΄ΠΎΠ»ΠΆΠ½Ρ Π±ΡΡΡ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ Π΄Π»Ρ ΡΠΈΠΏΠ° Π΄Π°Π½Π½ΡΡ , ΡΡΠΎΠ±Ρ ΠΎΠ½ ΡΠ΄ΠΎΠ²Π»Π΅ΡΠ²ΠΎΡΡΠ» ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΡ.
- Π€ΡΠ½ΠΊΡΠΈΠΈ (functions) - ΡΡΠΎ ΡΠΈΠΏΡ Π΄Π°Π½Π½ΡΡ , ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ ΠΏΠ΅ΡΠ΅Π΄Π°Π½Ρ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ² Π΄ΡΡΠ³ΠΈΠΌ ΡΡΠ½ΠΊΡΠΈΡΠΌ ΠΈΠ»ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ΅Π½Ρ ΠΈΠ· ΡΡΠ½ΠΊΡΠΈΠΉ.
ΠΡΠ΅ ΡΡΠΈ ΡΠΈΠΏΡ Π΄Π°Π½Π½ΡΡ ΡΠ²Π»ΡΡΡΡΡ ΡΠΊΠ°Π·Π°ΡΠ΅Π»ΡΠ½ΡΠΌΠΈ Π² GoLang ΠΈ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡΡΡ ΠΏΠΎ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ, Π° Π½Π΅ ΠΏΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ.
Π‘ΡΡΠΎΠΊΠΈ ΡΠ²Π»ΡΡΡΡΡ Π½Π΅ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅ΠΌΡΠΌΠΈ, ΡΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ Π²Ρ Π½Π΅ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ ΡΡΡΠΎΠΊΡ Π½Π°ΠΏΡΡΠΌΡΡ, ΠΈΠ·ΠΌΠ΅Π½ΡΡ Π±Π°ΠΉΡΡ, Π½Π° ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ ΡΡΡΠΎΠΊΠ°. Π₯ΠΎΡΡ ΡΡΡΠΎΠΊΠΈ ΡΠΎΠ΄Π΅ΡΠΆΠ°Ρ ΡΠΊΠ°Π·Π°ΡΠ΅Π»ΠΈ Π²Π½ΡΡΡΠΈ ΡΠ²ΠΎΠ΅ΠΉ ΡΡΡΡΠΊΡΡΡΡ, ΡΠ°ΠΌΠΈ ΡΡΡΠΎΠΊΠΈ Π½Π΅ ΡΡΠΈΡΠ°ΡΡΡΡ ΡΠΊΠ°Π·Π°ΡΠ΅Π»ΡΠ½ΡΠΌΠΈ ΡΠΈΠΏΠ°ΠΌΠΈ Π΄Π°Π½Π½ΡΡ . ΠΠΎ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΡΡΡΠΎΠΊΠ°, ΠΊΠ°ΠΊ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ, ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Π΅ΠΌ, Π²ΡΠ·ΠΎΠ² ΡΡΠ½ΠΊΡΠΈΠΈ Π΄Π»Ρ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠΈ ΡΡΡΠΎΠΊΠΈ Π½Π΅ ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡ ΠΊ Π³Π»ΡΠ±ΠΎΠΊΠΎΠΌΡ ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π±Π°ΠΉΡΠΎΠ². Π‘ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°Π½Π½Π°Ρ ΡΡΡΠΎΠΊΠ° ΠΏΠΎ-ΠΏΡΠ΅ΠΆΠ½Π΅ΠΌΡ Π±ΡΠ΄Π΅Ρ ΡΡΡΠ»Π°ΡΡΡΡ Π½Π° ΡΠΎΡ ΠΆΠ΅ ΡΠ΅Π·Π΅ΡΠ²Π½ΡΠΉ ΠΌΠ°ΡΡΠΈΠ².
ΠΠΎΠΏΡΠ°Π²ΠΊΠ°:
Π GoLang ΡΠΈΠΏ Π΄Π°Π½Π½ΡΡ
struct ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠΎΡΡΠ°Π²Π½ΡΠΌ ΡΠΈΠΏΠΎΠΌ Π΄Π°Π½Π½ΡΡ
, ΠΊΠΎΡΠΎΡΡΠΉ ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½ΡΠ΅Ρ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΏΠΎΠ»Π΅ΠΉ ΡΠ°Π·Π½ΡΡ
ΡΠΈΠΏΠΎΠ² Π΄Π°Π½Π½ΡΡ
Π² ΠΎΠ΄ΠΈΠ½ ΠΎΠ±ΡΠ΅ΠΊΡ. struct Π½Π΅ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠΊΠ°Π·Π°ΡΠ΅Π»ΡΠ½ΡΠΌ ΡΠΈΠΏΠΎΠΌ Π΄Π°Π½Π½ΡΡ
, Π° ΡΠ²Π»ΡΠ΅ΡΡΡ Π·Π½Π°ΡΠΈΠΌΡΠΌ ΡΠΈΠΏΠΎΠΌ Π΄Π°Π½Π½ΡΡ
, ΡΠΎ Π΅ΡΡΡ ΠΏΡΠΈ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠ΅ struct Π² ΡΡΠ½ΠΊΡΠΈΡ ΠΈΠ»ΠΈ ΠΏΡΠΈΡΠ²Π°ΠΈΠ²Π°Π½ΠΈΠΈ Π΅Π³ΠΎ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΏΡΠΎΠΈΡΡ
ΠΎΠ΄ΠΈΡ ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ Π΅Π³ΠΎ ΠΏΠΎΠ»Π΅ΠΉ. ΠΠ΄Π½Π°ΠΊΠΎ, ΠΏΡΠΈ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠ΅ struct Π² ΡΡΠ½ΠΊΡΠΈΡ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ°, ΠΏΡΠΎΠΈΡΡ
ΠΎΠ΄ΠΈΡ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠ° Π΅Π³ΠΎ ΠΊΠΎΠΏΠΈΠΈ, ΡΡΠΎ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π½Π΅ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎ Π΄Π»Ρ Π±ΠΎΠ»ΡΡΠΈΡ
struct. Π ΡΠ°ΠΊΠΈΡ
ΡΠ»ΡΡΠ°ΡΡ
ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠΊΠ°Π·Π°ΡΠ΅Π»ΠΈ Π½Π° struct.
ΠΠ»ΠΈΠ½Π° ΠΈ Π²ΠΌΠ΅ΡΡΠΈΠΌΠΎΡΡΡ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡΡΡ ΠΏΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ, Π½ΠΎ ΠΌΠ°ΡΡΠΈΠ² Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ ΠΏΠ΅ΡΠ΅Π΄Π°Π΅ΡΡΡ ΠΏΠΎ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ. ΠΡΠ»Π΅Π΄ΡΡΠ²ΠΈΠ΅ ΡΡΠΎΠ³ΠΎ ΠΏΠΎΠ»ΡΡΠ°Π΅ΡΡΡ Π½Π΅ΡΠ²Π½ΠΎΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅: Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π½ΡΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ Π½Π΅ ΡΠΎΡ ΡΠ°Π½ΡΡΡΡ Π² ΠΈΡΡ ΠΎΠ΄Π½ΡΠΉ ΡΠ»Π°ΠΉΡ, Π½ΠΎ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠΈΡ ΠΎΡΡΠ°Π½Π΅ΡΡΡ.
package main
import "fmt"
func main() {
cap := 4 // Π΅ΡΠ»ΠΈ 3, ΡΠΎ ΠΎΡΠ²Π΅ΡΡ ΡΠ°Π·Π½ΡΠ΅; Π΅ΡΠ»ΠΈ 4 - ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΡΠ΅
var a = make([]int, 0, cap)
a = append(a, 111, 222, 333)
fmt.Printf("%#v\n", getArray(a))
fmt.Printf("%#v\n", a)
}
func remove(slice []int, s int) []int {
return append(slice[:s], slice[s+1:]...)
}
func getArray(a []int) []int {
a = append(a, 444)
a = remove(a, 0)
return a
}ΠΠ±ΡΠΈΠΉ ΡΠΎΡΠΌΠ°Ρ ΡΡΠ΅Π·Π°: a[Π½Π°ΡΠ°Π»ΠΎ:ΠΊΠΎΠ½Π΅Ρ:ΡΠ°Π³]. ΠΡΠ»ΠΈ Π½Π°ΡΠ°Π»ΠΎ Π½Π΅ ΡΠΊΠ°Π·Π°Π½ΠΎ, ΡΠΎ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ Π½Π°ΡΠ°Π»ΠΎ ΡΡΠΈΡΠ°Π΅ΡΡΡ 0. ΠΡΠ»ΠΈ ΠΊΠΎΠ½Π΅Ρ Π½Π΅ ΡΠΊΠ°Π·Π°Π½, ΡΠΎ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ ΠΊΠΎΠ½Π΅Ρ ΡΡΠΈΡΠ°Π΅ΡΡΡ Π΄Π»ΠΈΠ½ΠΎΠΉ ΠΌΠ°ΡΡΠΈΠ²Π°. ΠΡΠ»ΠΈ ΡΠ°Π³ Π½Π΅ ΡΠΊΠ°Π·Π°Π½, ΡΠΎ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ ΡΠ°Π³ ΡΡΠΈΡΠ°Π΅ΡΡΡ ΡΠ°Π²Π½ΡΠΌ 1.
ΠΠΌΠΏΠΈΡΠΈΡΠ΅ΡΠΊΠΈ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ΠΎ. ΠΡΠ»ΠΈ ΠΎΡΡΠ΅Π·Π°ΡΡ ΡΠ»Π°ΠΉΡ ΡΠ½Π°ΡΠ°Π»Π°, ΡΠΎ capacity ΡΠΌΠ΅Π½ΡΡΠ°Π΅ΡΡΡ Π΄ΠΎ Π½ΠΎΠ²ΠΎΠΉ Π΄Π»ΠΈΠ½Ρ, Π° Π΅ΡΠ»ΠΈ Ρ ΠΊΠΎΠ½ΡΠ°, ΡΠΎ ΠΎΡΡΠ°ΡΡΡΡ ΡΠ°Π²Π΅Π½ ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠΌΡ ΡΠ°Π·ΠΌΠ΅ΡΡ ΡΠ»Π°ΠΉΡΠ°. Π’ΡΠ΅ΡΠΈΠΉ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΡΠΊΠ°Π·Π°ΡΡ capacity ΡΠ²Π½ΠΎ (Π½ΠΎ Π½Π΅ Π±ΠΎΠ»ΡΡΠ΅ ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ), ΠΈ ΠΎΠ½ ΡΠΎΠΆΠ΅ ΡΠΌΠ΅Π½ΡΡΠ°Π΅ΡΡΡ ΠΎΡ ΡΠΊΠ°Π·Π°Π½Π½ΠΎΠ³ΠΎ, Π΅ΡΠ»ΠΈ ΠΎΡΡΠ΅Π·Π°ΡΡ ΡΠ»Π°ΠΉΡ ΡΠ½Π°ΡΠ°Π»Π°.
ΠΡΠ»ΠΈ append() Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅Ρ Π½ΠΎΠ²ΡΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ Π² ΡΠ»Π°ΠΉΡ, Ρ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ ΠΏΡΠ΅Π²ΡΡΠ΅Π½Π° capacity, ΡΠΎ capacity ΡΠ²Π΅Π»ΠΈΡΠΈΠ²Π°Π΅ΡΡΡ Π² Π΄Π²Π° ΡΠ°Π·Π° ΠΎΡ ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ. ΠΠΎ Π΅ΡΠ»ΠΈ Π΄ΠΎΠ±Π°Π²Π»ΡΡΡ Π·Π° ΡΠ°Π· Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² (Π±ΠΎΠ»ΡΡΠ΅ ΡΠ΅ΠΌ Π² Π΄Π²Π° ΡΠ°Π·Π° ΠΎΡ ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ), ΡΠΎ Π΄Π°Π»ΡΡΠ΅ capacity ΡΠ²Π΅Π»ΠΈΡΠΈΠ²Π°Π΅ΡΡΡ Ρ ΡΠ°Π³ΠΎΠΌ Π΄Π²Π°.
ΠΠΈΠ΄Π΅ΠΎ: Π§ΡΠΎ Π½ΡΠΆΠ½ΠΎ Π·Π½Π°ΡΡ ΠΎ ΡΠ»Π°ΠΉΡΠ°Ρ Π² Go
package main
import (
"fmt"
)
// ΡΡΠΎ Π±ΡΠ΄Π΅Ρ Π²ΡΠ²Π΅Π΄Π΅Π½ΠΎ?
// Π΅ΡΠ»ΠΈ Π³Π΄Π΅-ΡΠΎ Π±ΡΠ΄Π΅Ρ ΠΏΠ°Π½ΠΈΠΊΠ°, ΡΠΎ Π² ΠΊΠ°ΠΊΠΎΠΉ ΡΡΠΎΡΠΊΠ΅ ΠΈ ΠΏΠΎΡΠ΅ΠΌΡ?
func example1Slice() {
var slice []int
fmt.Printf("slice is nil %t\n", slice == nil) // true (!)
slice2 := []int{}
fmt.Printf("slice2 is nil %t\n", slice2 == nil) // false
// append() ΡΠ²Π΅Π»ΠΈΡΠΈΠ²Π°Π΅Ρ Π΅ΠΌΠΊΠΎΡΡΡ ΡΡΠ΅Π·Π° Π² Π΄Π²Π° ΡΠ°Π·Π°:
slice = append(slice, 1)
fmt.Printf("slise = %+v len = %d; cap = %d;\n", slice, len(slice), cap(slice))
// slise = [1] len = 1 cap = 1
slice = append(slice, 2)
fmt.Printf("slice = %+v len = %d; cap = %d;\n", slice, len(slice), cap(slice))
// slise = [1, 2] len = 2 cap = 2
slice = append(slice, 3)
fmt.Printf("slice = %+v len = %d; cap = %d;\n", slice, len(slice), cap(slice))
// slise = [1, 2, 3] len = 3 cap = 4 (!)
}
func example2Slice() {
sl := []int{1, 2, 3, 4, 5, 6}
sl1 := sl[:3]
sl2 := sl[1:3:4]
fmt.Printf("sl1 = %+v len = %d; cap = %d;\n", sl1, len(sl1), cap(sl1))
// sl1 = [1, 2, 3] len = 3 cap = 6
fmt.Printf("sl2 = %+v len = %d; cap = %d;\n", sl2, len(sl2), cap(sl2))
// sl2 = [2, 3] len = 2 cap = 3
sl2 = append(sl2, 9)
sl1 = sl1[:4]
fmt.Printf("sl = %+v len = %d; cap = %d;\n", sl, len(sl), cap(sl))
// sl = [1, 2, 3, 9, 5, 6] len = 6 cap = 6
fmt.Printf("sl1 = %+v len = %d; cap = %d;\n", sl1, len(sl1), cap(sl1))
// sl1 = [1, 2, 3, 9] len = 4 cap = 6
fmt.Printf("sl2 = %+v len = %d; cap = %d;\n", sl2, len(sl2), cap(sl2))
// sl2 = [2, 3, 9] len = 3 cap = 3
add(sl1, 8)
fmt.Printf("sl = %+v len = %d; cap = %d;\n", sl, len(sl), cap(sl))
// sl = [1, 2, 3, 9, 8, 6] len = 6 cap = 6
fmt.Printf("sl1 = %+v len = %d; cap = %d;\n", sl1, len(sl1), cap(sl1))
// sl1 = [1, 2, 3, 9] len = 4 cap = 6
fmt.Printf("sl2 = %+v len = %d; cap = %d;\n", sl2, len(sl2), cap(sl2))
// sl2 = [2, 3, 9] len = 3 cap = 3
changeSlice(sl, 5, 20)
fmt.Printf("sl = %+v len = %d; cap = %d;\n", sl, len(sl), cap(sl))
// sl = [1, 2, 3, 9, 8, 20] len = 6 cap = 6
sl = append(sl, 7)
fmt.Printf("sl = %+v len = %d; cap = %d;\n", sl, len(sl), cap(sl))
// sl = [1, 2, 3, 9, 8, 20, 7] len = 7 cap = 12
// sl1 = sl1[:7] - panic, cap = 6
// fmt.Printf("sl1 = %+v len = %d; cap = %d;\n", sl1, len(sl1), cap(sl1))
// sl1 = [1, 2, 3, 9] len = 4 cap = 6
}
func example3Map() {
var myMap map[int]int
fmt.Printf("myMap is nil %t len = %d;\n", myMap == nil, len(myMap)) // true, len = 0
// myMap[5] = 55 // panic
// fmt.Printf("myMap is nil %t len = %d;\n", myMap == nil, len(myMap))
myMap = map[int]int{}
fmt.Printf("myMap is nil %t len = %d;\n", myMap == nil, len(myMap)) // false, len = 0
changeMap(myMap, 6, 66)
fmt.Printf("myMap is nil %t len = %d;\n", myMap == nil, len(myMap)) // false, len = 1
}
func changeSlice(sl []int, idx int, val int) {
if 0 <= idx && idx < len(sl) {
sl[idx] = val
}
}
func changeMap(myMap map[int]int, key int, val int) {
myMap[key] = val
}
func add(sl []int, val int) {
sl = append(sl, val)
}
func main() {
// example1Slice()
// example2Slice()
example3Map()
}ΠΠ°ΠΊ ΡΠ·Π½Π°ΡΡ, ΡΡΠΎ Π΄Π²Π° ΡΠ»Π°ΠΉΡΠ° ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡ ΠΎΠ΄ΠΈΠ½ Π±Π°Π·ΠΎΠ²ΡΠΉ ΠΌΠ°ΡΡΠΈΠ²?
package main
import "unsafe"
func slicesShareMemory[T any](inner, outer []T) bool {
if len(inner) == 0 || len(outer) == 0 {
return false
}
aFirstAddr := unsafe.Pointer(&inner[0])
bFirstAddr := unsafe.Pointer(&outer[0])
aLastAddr := unsafe.Add(aFirstAddr, uintptr(cap(inner)-1)*unsafe.Sizeof(inner[0]))
bLastAddr := unsafe.Add(bFirstAddr, uintptr(cap(outer)-1)*unsafe.Sizeof(outer[0]))
switch {
case uintptr(aFirstAddr) >= uintptr(bFirstAddr) && uintptr(aFirstAddr) <= uintptr(bLastAddr),
uintptr(bFirstAddr) >= uintptr(aFirstAddr) && uintptr(bFirstAddr) <= uintptr(aLastAddr):
return true
default:
return false
}
}
func main() {
a := []int{1, 2, 3}
b := a[1:2]
c := a[2:3]
d := []int{1, 2, 3}
e := append(a, 4)
println(slicesShareMemory(b, a))
println(slicesShareMemory(a, b))
println(slicesShareMemory(b, c))
println(slicesShareMemory(c, b))
println(slicesShareMemory(a, c))
println(slicesShareMemory(c, d))
println(slicesShareMemory(c, e))
}ΠΡΡΠ° (heap) - ΡΡΠΎ ΡΡΡΡΠΊΡΡΡΠ° Π΄Π°Π½Π½ΡΡ
, ΠΊΠΎΡΠΎΡΠ°Ρ ΡΠΏΠΎΡΡΠ΄ΠΎΡΠΈΠ²Π°Π΅Ρ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ Π² Π²ΠΈΠ΄Π΅ Π΄Π²ΠΎΠΈΡΠ½ΠΎΠ³ΠΎ Π΄Π΅ΡΠ΅Π²Π°, ΠΏΡΠΈ ΡΡΠΎΠΌ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΡΠ·Π΅Π» ΠΈΠΌΠ΅Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅, ΠΊΠΎΡΠΎΡΠΎΠ΅ Π½Π΅ ΠΌΠ΅Π½ΡΡΠ΅ (Π΄Π»Ρ ΠΊΡΡΠΈ ΠΌΠΈΠ½ΠΈΠΌΡΠΌΠΎΠ²) ΠΈΠ»ΠΈ Π½Π΅ Π±ΠΎΠ»ΡΡΠ΅ (Π΄Π»Ρ ΠΊΡΡΠΈ ΠΌΠ°ΠΊΡΠΈΠΌΡΠΌΠΎΠ²) Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ Π΅Π³ΠΎ ΠΏΠΎΡΠΎΠΌΠΊΠΎΠ². Π GoLang ΠΊΡΡΠ° ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½Π° ΡΠΈΠΏΠΎΠΌ heap.Interface, ΠΊΠΎΡΠΎΡΡΠΉ ΠΎΠΏΠΈΡΡΠ²Π°Π΅Ρ ΠΌΠ΅ΡΠΎΠ΄Ρ, Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΡΠ΅ Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ ΠΊΡΡΠ΅ΠΉ:
// heap.go
type Interface interface {
sort.Interface
Push(x any) // add x as element Len()
Pop() any // remove and return element Len() - 1.
}
// sort.go
type Interface interface {
// Len is the number of elements in the collection.
Len() int
// Less reports whether the element with index i
// must sort before the element with index j.
//
// If both Less(i, j) and Less(j, i) are false,
// then the elements at index i and j are considered equal.
// Sort may place equal elements in any order in the final result,
// while Stable preserves the original input order of equal elements.
//
// Less must describe a transitive ordering:
// - if both Less(i, j) and Less(j, k) are true, then Less(i, k) must be true as well.
// - if both Less(i, j) and Less(j, k) are false, then Less(i, k) must be false as well.
//
// Note that floating-point comparison (the < operator on float32 or float64 values)
// is not a transitive ordering when not-a-number (NaN) values are involved.
// See Float64Slice.Less for a correct implementation for floating-point values.
Less(i, j int) bool
// Swap swaps the elements with indexes i and j.
Swap(i, j int)
}ΠΠ° ΠΊΠ°ΡΡΠΈΠ½ΠΊΠ΅ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ ΡΠΏΡΠ°Π²Π°, ΠΊΠ°ΠΊ Π²ΡΠ³Π»ΡΠ΄ΠΈΡ ΠΊΡΡΠ° ΠΌΠΈΠ½ΠΈΠΌΡΠΌΠΎΠ² (i.e. "Priority Queue"), Π³Π΄Π΅ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΡΠ·Π΅Π» ΠΈΠΌΠ΅Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅, ΠΊΠΎΡΠΎΡΠΎΠ΅ Π½Π΅ ΠΌΠ΅Π½ΡΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ Π΅Π³ΠΎ ΠΏΠΎΡΠΎΠΌΠΊΠΎΠ². Π ΠΊΡΡΠ΅ ΠΌΠΈΠ½ΠΈΠΌΡΠΌΠΎΠ² Π½Π°ΠΈΠΌΠ΅Π½ΡΡΠΈΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ Π²ΡΠ΅Π³Π΄Π° Π½Π°Ρ
ΠΎΠ΄ΠΈΡΡΡ Π² ΠΊΠΎΡΠ½Π΅ Π΄Π΅ΡΠ΅Π²Π°, ΡΡΠΎ Π΄Π΅Π»Π°Π΅Ρ Π΅Π³ΠΎ ΠΏΠΎΠ»Π΅Π·Π½ΡΠΌ Π΄Π»Ρ ΡΠ΅ΡΠ΅Π½ΠΈΡ ΡΡΠ΄Π° Π·Π°Π΄Π°Ρ, ΡΠ°ΠΊΠΈΡ
ΠΊΠ°ΠΊ Π½Π°Ρ
ΠΎΠΆΠ΄Π΅Π½ΠΈΠ΅ k Π½Π°ΠΈΠΌΠ΅Π½ΡΡΠΈΡ
ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² Π² ΡΠΏΠΈΡΠΊΠ΅ ΠΈΠ»ΠΈ ΠΏΠΎΠΈΡΠΊ ΠΌΠ΅Π΄ΠΈΠ°Π½Ρ Π² ΠΏΠΎΡΠΎΠΊΠ΅ Π΄Π°Π½Π½ΡΡ
. ΠΠ»Ρ ΡΠ°Π±ΠΎΡΡ Ρ ΠΊΡΡΠ΅ΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΏΠ°ΠΊΠ΅Ρ container/heap, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΊΡΡΠΈ ΠΌΠΈΠ½ΠΈΠΌΡΠΌΠΎΠ² ΠΈ ΠΌΠ°ΠΊΡΠΈΠΌΡΠΌΠΎΠ², Π° ΡΠ°ΠΊΠΆΠ΅ ΠΌΠ΅ΡΠΎΠ΄Ρ Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ Π½Π΅ΠΉ, ΡΠ°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ Push(), Pop(), Fix(), Remove(), ΠΈ Π΄ΡΡΠ³ΠΈΠ΅.
ΠΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ Π½ΠΎΠ²ΠΎΠ³ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° Π² ΠΊΡΡΡ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ ΠΏΡΡΠ΅ΠΌ ΠΏΠΎΠΌΠ΅ΡΠ΅Π½ΠΈΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° Π² ΠΏΠΎΡΠ»Π΅Π΄Π½ΡΡ ΡΠ²ΠΎΠ±ΠΎΠ΄Π½ΡΡ ΠΏΠΎΠ·ΠΈΡΠΈΡ Π² ΠΌΠ°ΡΡΠΈΠ²Π΅ ΠΈ Π·Π°ΡΠ΅ΠΌ "Π²ΡΠΏΠ»ΡΡΠΈΡ" Π΅Π³ΠΎ Π²Π²Π΅ΡΡ ΠΏΠΎ Π΄Π΅ΡΠ΅Π²Ρ, ΠΏΠΎΠΊΠ° Π½Π΅ Π±ΡΠ΄Π΅Ρ Π½Π°ΠΉΠ΄Π΅Π½Π° Π΅Π³ΠΎ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½Π°Ρ ΠΏΠΎΠ·ΠΈΡΠΈΡ. Π£Π΄Π°Π»Π΅Π½ΠΈΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° Ρ Π½Π°ΠΈΠΌΠ΅Π½ΡΡΠΈΠΌ (Π½Π°ΠΈΠ±ΠΎΠ»ΡΡΠΈΠΌ) Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ΠΌ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ ΠΏΡΡΠ΅ΠΌ Π·Π°ΠΌΠ΅Π½Ρ Π΅Π³ΠΎ ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠΌ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠΌ Π² ΠΌΠ°ΡΡΠΈΠ²Π΅, ΠΏΠΎΡΠ»Π΅ ΡΠ΅Π³ΠΎ ΠΎΠ½ "ΠΏΡΠΎΡΠ΅ΠΈΠ²Π°Π΅ΡΡΡ" Π²Π½ΠΈΠ· ΠΏΠΎ Π΄Π΅ΡΠ΅Π²Ρ, ΠΏΠΎΠΊΠ° Π½Π΅ Π±ΡΠ΄Π΅Ρ Π½Π°ΠΉΠ΄Π΅Π½Π° Π΅Π³ΠΎ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½Π°Ρ ΠΏΠΎΠ·ΠΈΡΠΈΡ.
DFS (Depth-First Search) ΠΈ BFS (Breadth-First Search) - ΡΡΠΎ Π΄Π²Π° Π°Π»Π³ΠΎΡΠΈΡΠΌΠ° ΠΏΠΎΠΈΡΠΊΠ° Π² Π³ΡΠ°ΡΠ΅. DFS ΠΈΡΠ΅Ρ Π² Π³Π»ΡΠ±ΠΈΠ½Ρ, ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄Ρ Π½Π° ΠΊΠ°ΠΆΠ΄ΡΠΉ ΡΡΠΎΠ²Π΅Π½Ρ Π³ΡΠ°ΡΠ°, ΠΏΠΎΠΊΠ° Π½Π΅ Π±ΡΠ΄Π΅Ρ Π½Π°ΠΉΠ΄Π΅Π½ ΡΠ΅Π»Π΅Π²ΠΎΠΉ ΡΠ·Π΅Π» ΠΈΠ»ΠΈ Π½Π΅ Π±ΡΠ΄ΡΡ ΠΈΡΡΠ»Π΅Π΄ΠΎΠ²Π°Π½Ρ Π²ΡΠ΅ ΡΠ·Π»Ρ. BFS ΠΈΡΠ΅Ρ Π² ΡΠΈΡΠΈΠ½Ρ, ΠΏΠΎΡΠ΅ΡΠ°Ρ Π²ΡΠ΅ ΡΠ·Π»Ρ Π½Π° ΠΎΠ΄Π½ΠΎΠΌ ΡΡΠΎΠ²Π½Π΅ ΠΏΠ΅ΡΠ΅Π΄ ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄ΠΎΠΌ ΠΊ ΡΠ·Π»Π°ΠΌ ΡΠ»Π΅Π΄ΡΡΡΠ΅Π³ΠΎ ΡΡΠΎΠ²Π½Ρ. ΠΠ±Π° Π°Π»Π³ΠΎΡΠΈΡΠΌΠ° ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½Ρ Π΄Π»Ρ ΠΏΠΎΠΈΡΠΊΠ° ΠΊΡΠ°ΡΡΠ°ΠΉΡΠ΅Π³ΠΎ ΠΏΡΡΠΈ Π² Π½Π΅Π²Π·Π²Π΅ΡΠ΅Π½Π½ΠΎΠΌ Π³ΡΠ°ΡΠ΅, Π½ΠΎ ΡΠΎΠ»ΡΠΊΠΎ BFS ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ Π΄Π»Ρ ΡΡΠΎΠΉ ΡΠ΅Π»ΠΈ Π²ΠΎ Π²Π·Π²Π΅ΡΠ΅Π½Π½ΠΎΠΌ Π³ΡΠ°ΡΠ΅.
ΠΠ·Π²Π΅ΡΠ΅Π½Π½ΡΠΉ Π³ΡΠ°Ρ - ΡΡΠΎ Π³ΡΠ°Ρ, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡ ΡΠ΅Π±ΡΡ ΠΏΡΠΈΡΠ²ΠΎΠ΅Π½ΠΎ Π½Π΅ΠΊΠΎΡΠΎΡΠΎΠ΅ ΡΠΈΡΠ»ΠΎΠ²ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅, Π½Π°Π·ΡΠ²Π°Π΅ΠΌΠΎΠ΅ Π²Π΅ΡΠΎΠΌ. ΠΠ΅Ρ ΠΌΠΎΠΆΠ΅Ρ ΠΎΡΡΠ°ΠΆΠ°ΡΡ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠ°ΡΡΡΠΎΡΠ½ΠΈΠ΅ ΠΌΠ΅ΠΆΠ΄Ρ Π΄Π²ΡΠΌΡ Π²Π΅ΡΡΠΈΠ½Π°ΠΌΠΈ, ΡΡΠΎΠΈΠΌΠΎΡΡΡ ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄Π° ΠΎΡ ΠΎΠ΄Π½ΠΎΠΉ Π²Π΅ΡΡΠΈΠ½Ρ ΠΊ Π΄ΡΡΠ³ΠΎΠΉ ΠΈ Ρ.Π΄. ΠΠ·Π²Π΅ΡΠ΅Π½Π½ΡΠΉ Π³ΡΠ°Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π»Ρ ΡΠ΅ΡΠ΅Π½ΠΈΡ Π·Π°Π΄Π°Ρ, ΡΠ²ΡΠ·Π°Π½Π½ΡΡ Ρ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠ΅ΠΉ ΠΈ Π½Π°Ρ ΠΎΠΆΠ΄Π΅Π½ΠΈΠ΅ΠΌ ΠΊΡΠ°ΡΡΠ°ΠΉΡΠ΅Π³ΠΎ ΠΏΡΡΠΈ ΠΌΠ΅ΠΆΠ΄Ρ Π²Π΅ΡΡΠΈΠ½Π°ΠΌΠΈ. ΠΠ»Ρ ΠΏΠΎΠΈΡΠΊΠ° ΠΊΡΠ°ΡΡΠ°ΠΉΡΠ΅Π³ΠΎ ΠΏΡΡΠΈ Π² Π²Π·Π²Π΅ΡΠ΅Π½Π½ΠΎΠΌ Π³ΡΠ°ΡΠ΅ ΠΎΠ±ΡΡΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π°Π»Π³ΠΎΡΠΈΡΠΌ ΠΠ΅ΠΉΠΊΡΡΡΡ ΠΈΠ»ΠΈ Π°Π»Π³ΠΎΡΠΈΡΠΌ Π€Π»ΠΎΠΉΠ΄Π°-Π£ΠΎΡΡΠ΅Π»Π»Π°.
ΠΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΎΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ β ΡΠΏΠΎΡΠΎΠ± ΡΠ΅ΡΠ΅Π½ΠΈΡ ΡΠ»ΠΎΠΆΠ½ΡΡ Π·Π°Π΄Π°Ρ ΠΏΡΡΡΠΌ ΡΠ°Π·Π±ΠΈΠ΅Π½ΠΈΡ ΠΈΡ Π½Π° Π±ΠΎΠ»Π΅Π΅ ΠΏΡΠΎΡΡΡΠ΅ ΠΏΠΎΠ΄Π·Π°Π΄Π°ΡΠΈ. ΠΠ½ ΠΏΡΠΈΠΌΠ΅Π½ΠΈΠΌ ΠΊ Π·Π°Π΄Π°ΡΠ°ΠΌ Ρ ΠΎΠΏΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠΉ ΠΏΠΎΠ΄ΡΡΡΡΠΊΡΡΡΠΎΠΉ, ΠΊΠΎΡΠΎΡΡΠ΅ Π²ΡΠ³Π»ΡΠ΄ΡΡ ΠΊΠ°ΠΊ Π½Π°Π±ΠΎΡ ΠΏΠ΅ΡΠ΅ΠΊΡΡΠ²Π°ΡΡΠΈΡ ΡΡ ΠΏΠΎΠ΄Π·Π°Π΄Π°Ρ, ΡΠ»ΠΎΠΆΠ½ΠΎΡΡΡ ΠΊΠΎΡΠΎΡΡΡ ΡΡΡΡ ΠΌΠ΅Π½ΡΡΠ΅ ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠΉ. Π ΡΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ Π²ΡΠ΅ΠΌΡ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΠΉ, ΠΏΠΎ ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ Ρ Β«Π½Π°ΠΈΠ²Π½ΡΠΌΠΈΒ» ΠΌΠ΅ΡΠΎΠ΄Π°ΠΌΠΈ, ΠΌΠΎΠΆΠ½ΠΎ Π·Π½Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΡΠΎΠΊΡΠ°ΡΠΈΡΡ.
ΠΠ»ΡΡΠ΅Π²Π°Ρ ΠΈΠ΄Π΅Ρ Π² Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΎΠΌ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠΈ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΠΏΡΠΎΡΡΠ°. ΠΠ°ΠΊ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ, ΡΡΠΎΠ±Ρ ΡΠ΅ΡΠΈΡΡ ΠΏΠΎΡΡΠ°Π²Π»Π΅Π½Π½ΡΡ Π·Π°Π΄Π°ΡΡ, ΡΡΠ΅Π±ΡΠ΅ΡΡΡ ΡΠ΅ΡΠΈΡΡ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΠ΅ ΡΠ°ΡΡΠΈ Π·Π°Π΄Π°ΡΠΈ (ΠΏΠΎΠ΄Π·Π°Π΄Π°ΡΠΈ), ΠΏΠΎΡΠ»Π΅ ΡΠ΅Π³ΠΎ ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½ΠΈΡΡ ΡΠ΅ΡΠ΅Π½ΠΈΡ ΠΏΠΎΠ΄Π·Π°Π΄Π°Ρ Π² ΠΎΠ΄Π½ΠΎ ΠΎΠ±ΡΠ΅Π΅ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅. Π§Π°ΡΡΠΎ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ ΠΈΠ· ΡΡΠΈΡ ΠΏΠΎΠ΄Π·Π°Π΄Π°Ρ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ. ΠΠΎΠ΄Ρ ΠΎΠ΄ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΡΠΎΡΡΠΎΠΈΡ Π² ΡΠΎΠΌ, ΡΡΠΎΠ±Ρ ΡΠ΅ΡΠΈΡΡ ΠΊΠ°ΠΆΠ΄ΡΡ ΠΏΠΎΠ΄Π·Π°Π΄Π°ΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄ΠΈΠ½ ΡΠ°Π·, ΡΠΎΠΊΡΠ°ΡΠΈΠ² ΡΠ΅ΠΌ ΡΠ°ΠΌΡΠΌ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΠΉ. ΠΡΠΎ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ Π² ΡΠ»ΡΡΠ°ΡΡ , ΠΊΠΎΠ³Π΄Π° ΡΠΈΡΠ»ΠΎ ΠΏΠΎΠ²ΡΠΎΡΡΡΡΠΈΡ ΡΡ ΠΏΠΎΠ΄Π·Π°Π΄Π°Ρ ΡΠΊΡΠΏΠΎΠ½Π΅Π½ΡΠΈΠ°Π»ΡΠ½ΠΎ Π²Π΅Π»ΠΈΠΊΠΎ.
ΠΠ΅ΡΠΎΠ΄ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΡΠ²Π΅ΡΡ Ρ β ΡΡΠΎ ΠΏΡΠΎΡΡΠΎΠ΅ Π·Π°ΠΏΠΎΠΌΠΈΠ½Π°Π½ΠΈΠ΅ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠΎΠ² ΡΠ΅ΡΠ΅Π½ΠΈΡ ΡΠ΅Ρ ΠΏΠΎΠ΄Π·Π°Π΄Π°Ρ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠ³ΡΡ ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎ Π²ΡΡΡΠ΅ΡΠΈΡΡΡΡ Π² Π΄Π°Π»ΡΠ½Π΅ΠΉΡΠ΅ΠΌ. ΠΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΎΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠ½ΠΈΠ·Ρ Π²ΠΊΠ»ΡΡΠ°Π΅Ρ Π² ΡΠ΅Π±Ρ ΠΏΠ΅ΡΠ΅ΡΠΎΡΠΌΡΠ»ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠ»ΠΎΠΆΠ½ΠΎΠΉ Π·Π°Π΄Π°ΡΠΈ Π² Π²ΠΈΠ΄Π΅ ΡΠ΅ΠΊΡΡΡΠΈΠ²Π½ΠΎΠΉ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ Π±ΠΎΠ»Π΅Π΅ ΠΏΡΠΎΡΡΡΡ ΠΏΠΎΠ΄Π·Π°Π΄Π°Ρ.
Π Π°Π·Π½ΠΈΡΠ° ΠΌΠ΅ΠΆΠ΄Ρ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈΠΌ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΈ ΠΆΠ°Π΄Π½ΡΠΌΠΈ Π°Π»Π³ΠΎΡΠΈΡΠΌΠ°ΠΌΠΈ Π·Π°ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ Π² ΡΠΎΠΌ, ΡΡΠΎ ΠΏΡΠΈ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΎΠΌ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠΈ ΡΡΡΠ΅ΡΡΠ²ΡΡΡ ΠΏΠ΅ΡΠ΅ΠΊΡΡΠ²Π°ΡΡΠΈΠ΅ΡΡ ΠΏΠΎΠ΄ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ, ΠΈ ΡΡΠΈ ΠΏΠΎΠ΄ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ ΡΠ΅ΡΠ°ΡΡΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΌΠ΅ΠΌΠΎΠΈΠ·Π°ΡΠΈΠΈ. "ΠΠ΅ΠΌΠΎΠΈΠ·Π°ΡΠΈΡ" - ΡΡΠΎ ΡΠ΅Ρ Π½ΠΈΠΊΠ°, ΠΏΡΠΈ ΠΊΠΎΡΠΎΡΠΎΠΉ ΡΠ΅ΡΠ΅Π½ΠΈΡ ΠΏΠΎΠ΄ΠΏΡΠΎΠ±Π»Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ Π΄Π»Ρ Π±ΠΎΠ»Π΅Π΅ Π±ΡΡΡΡΠΎΠ³ΠΎ ΡΠ΅ΡΠ΅Π½ΠΈΡ Π΄ΡΡΠ³ΠΈΡ ΠΏΠΎΠ΄ΠΏΡΠΎΠ±Π»Π΅ΠΌ.
Π Π°Π·Π½ΠΈΡΠ° Π² ΡΠΎΠΌ, ΡΡΠΎ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΎΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΡΡΠ΅Π±ΡΠ΅Ρ Π·Π°ΠΏΠΎΠΌΠΈΠ½Π°Π½ΠΈΡ ΠΎΡΠ²Π΅ΡΠ° Π΄Π»Ρ ΠΌΠ΅Π½ΡΡΠΈΡ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΉ, Π² ΡΠΎ Π²ΡΠ΅ΠΌΡ ΠΊΠ°ΠΊ ΠΆΠ°Π΄Π½ΡΠΉ Π°Π»Π³ΠΎΡΠΈΡΠΌ ΡΠ²Π»ΡΠ΅ΡΡΡ Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΠΌ Π² ΡΠΎΠΌ ΡΠΌΡΡΠ»Π΅, ΡΡΠΎ Π²ΡΡ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠ°Ρ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡ Π² ΡΠ΅ΠΊΡΡΠ΅ΠΌ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ. ΠΠΎΠ½Π΅ΡΠ½ΠΎ, ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ Π½Π΅ΠΊΠΎΡΠΎΡΠΎΠ΅ ΠΏΠ΅ΡΠ΅ΡΠ΅ΡΠ΅Π½ΠΈΠ΅.
ΠΠ°Π΄Π½ΡΠΉ Π°Π»Π³ΠΎΡΠΈΡΠΌ β Π°Π»Π³ΠΎΡΠΈΡΠΌ, Π·Π°ΠΊΠ»ΡΡΠ°ΡΡΠΈΠΉΡΡ Π² ΠΏΡΠΈΠ½ΡΡΠΈΠΈ Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎ ΠΎΠΏΡΠΈΠΌΠ°Π»ΡΠ½ΡΡ ΡΠ΅ΡΠ΅Π½ΠΈΠΉ Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΡΡΠ°ΠΏΠ΅, Π΄ΠΎΠΏΡΡΠΊΠ°Ρ, ΡΡΠΎ ΠΊΠΎΠ½Π΅ΡΠ½ΠΎΠ΅ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ ΡΠ°ΠΊΠΆΠ΅ ΠΎΠΊΠ°ΠΆΠ΅ΡΡΡ ΠΎΠΏΡΠΈΠΌΠ°Π»ΡΠ½ΡΠΌ. Π ΠΎΠ±ΡΠ΅ΠΌ ΡΠ»ΡΡΠ°Π΅ Π½Π΅Π»ΡΠ·Ρ ΡΠΊΠ°Π·Π°ΡΡ, ΠΌΠΎΠΆΠ½ΠΎ Π»ΠΈ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΠΎΠΏΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠ΅ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΆΠ°Π΄Π½ΠΎΠ³ΠΎ Π°Π»Π³ΠΎΡΠΈΡΠΌΠ° ΠΏΡΠΈΠΌΠ΅Π½ΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΊ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎΠΉ Π·Π°Π΄Π°ΡΠ΅. ΠΠΎ Π΅ΡΡΡ Π΄Π²Π΅ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΠΈ, Ρ Π°ΡΠ°ΠΊΡΠ΅ΡΠ½ΡΠ΅ Π΄Π»Ρ Π·Π°Π΄Π°Ρ, ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠ΅ΡΠ°ΡΡΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΆΠ°Π΄Π½ΡΡ Π°Π»Π³ΠΎΡΠΈΡΠΌΠΎΠ²: ΠΏΡΠΈΠ½ΡΠΈΠΏ ΠΆΠ°Π΄Π½ΠΎΠ³ΠΎ Π²ΡΠ±ΠΎΡΠ° ΠΈ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ ΠΎΠΏΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΡΡΠΈ Π΄Π»Ρ ΠΏΠΎΠ΄Π·Π°Π΄Π°Ρ.
ΠΠΎΠ²ΠΎΡΡΡ, ΡΡΠΎ ΠΊ Π·Π°Π΄Π°ΡΠ΅ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈ ΠΏΡΠΈΠΌΠ΅Π½ΠΈΠΌ ΠΏΡΠΈΠ½ΡΠΈΠΏ ΠΆΠ°Π΄Π½ΠΎΠ³ΠΎ Π²ΡΠ±ΠΎΡΠ°, Π΅ΡΠ»ΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΡ Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎ ΠΎΠΏΡΠΈΠΌΠ°Π»ΡΠ½ΡΡ Π²ΡΠ±ΠΎΡΠΎΠ² Π΄Π°ΡΡ Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΠΎ ΠΎΠΏΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠ΅ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅. Π ΡΡΠΎΠΌ ΡΠΎΡΡΠΎΠΈΡ Π³Π»Π°Π²Π½ΠΎΠ΅ ΠΎΡΠ»ΠΈΡΠΈΠ΅ ΠΆΠ°Π΄Π½ΡΡ Π°Π»Π³ΠΎΡΠΈΡΠΌΠΎΠ² ΠΎΡ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ: Π²ΠΎ Π²ΡΠΎΡΠΎΠΌ ΠΏΡΠΎΡΡΠΈΡΡΠ²Π°ΡΡΡΡ ΡΡΠ°Π·Ρ ΠΏΠΎΡΠ»Π΅Π΄ΡΡΠ²ΠΈΡ Π²ΡΠ΅Ρ Π²Π°ΡΠΈΠ°Π½ΡΠΎΠ².
Π§ΡΠΎΠ±Ρ Π΄ΠΎΠΊΠ°Π·Π°ΡΡ, ΡΡΠΎ ΠΆΠ°Π΄Π½ΡΠΉ Π°Π»Π³ΠΎΡΠΈΡΠΌ Π΄Π°ΡΡ ΠΎΠΏΡΠΈΠΌΡΠΌ, Π½ΡΠΆΠ½ΠΎ ΠΏΠΎΠΏΡΡΠ°ΡΡΡΡ ΠΏΡΠΎΠ²Π΅ΡΡΠΈ Π΄ΠΎΠΊΠ°Π·Π°ΡΠ΅Π»ΡΡΡΠ²ΠΎ, Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ½ΠΎΠ΅ Π΄ΠΎΠΊΠ°Π·Π°ΡΠ΅Π»ΡΡΡΠ²Ρ Π°Π»Π³ΠΎΡΠΈΡΠΌΠ° Π·Π°Π΄Π°ΡΠΈ ΠΎ Π²ΡΠ±ΠΎΡΠ΅ Π·Π°ΡΠ²ΠΎΠΊ. Π‘Π½Π°ΡΠ°Π»Π° ΠΌΡ ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°Π΅ΠΌ, ΡΡΠΎ ΠΆΠ°Π΄Π½ΡΠΉ Π²ΡΠ±ΠΎΡ Π½Π° ΠΏΠ΅ΡΠ²ΠΎΠΌ ΡΠ°Π³Π΅ Π½Π΅ Π·Π°ΠΊΡΡΠ²Π°Π΅Ρ ΠΏΡΡΡ ΠΊ ΠΎΠΏΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠΌΡ ΡΠ΅ΡΠ΅Π½ΠΈΡ: Π΄Π»Ρ Π»ΡΠ±ΠΎΠ³ΠΎ ΡΠ΅ΡΠ΅Π½ΠΈΡ Π΅ΡΡΡ Π΄ΡΡΠ³ΠΎΠ΅, ΡΠΎΠ³Π»Π°ΡΠΎΠ²Π°Π½Π½ΠΎΠ΅ Ρ ΠΆΠ°Π΄Π½ΡΠΌ Π²ΡΠ±ΠΎΡΠΎΠΌ ΠΈ Π½Π΅ Ρ ΡΠΆΠ΅ ΠΏΠ΅ΡΠ²ΠΎΠ³ΠΎ. ΠΠΎΡΠΎΠΌ ΠΌΡ ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°Π΅ΠΌ, ΡΡΠΎ ΠΏΠΎΠ΄Π·Π°Π΄Π°ΡΠ°, Π²ΠΎΠ·Π½ΠΈΠΊΡΠ°Ρ ΠΏΠΎΡΠ»Π΅ ΠΆΠ°Π΄Π½ΠΎΠ³ΠΎ Π²ΡΠ±ΠΎΡΠ° Π½Π° ΠΏΠ΅ΡΠ²ΠΎΠΌ ΡΠ°Π³Π΅, Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ½Π° ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠΉ. ΠΠΎ ΠΈΠ½Π΄ΡΠΊΡΠΈΠΈ Π±ΡΠ΄Π΅Ρ ΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΡ, ΡΡΠΎ ΡΠ°ΠΊΠ°Ρ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΡ ΠΆΠ°Π΄Π½ΡΡ Π²ΡΠ±ΠΎΡΠΎΠ² Π΄Π°ΡΡ ΠΎΠΏΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠ΅ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅.
ΠΡΠΎ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ Π³ΠΎΠ²ΠΎΡΠΈΡ ΠΎ ΡΠΎΠΌ, ΡΡΠΎ ΠΎΠΏΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠ΅ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ Π²ΡΠ΅ΠΉ Π·Π°Π΄Π°ΡΠΈ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ Π² ΡΠ΅Π±Π΅ ΠΎΠΏΡΠΈΠΌΠ°Π»ΡΠ½ΡΠ΅ ΡΠ΅ΡΠ΅Π½ΠΈΡ ΠΏΠΎΠ΄Π·Π°Π΄Π°Ρ.
Π₯Π²ΠΎΡΡΠΎΠ²Π°Ρ ΡΠ΅ΠΊΡΡΡΠΈΡ - ΡΡΠΎ ΠΎΡΠΎΠ±ΡΠΉ ΡΠΈΠΏ ΡΠ΅ΠΊΡΡΡΠΈΠΈ, ΠΏΡΠΈ ΠΊΠΎΡΠΎΡΠΎΠΌ Π²ΡΠ·ΠΎΠ² ΡΠ΅ΠΊΡΡΡΠΈΠ²Π½ΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ Π² ΡΠ°ΠΌΠΎΠΌ ΠΊΠΎΠ½ΡΠ΅ ΡΠ΅Π»Π° ΡΡΠ½ΠΊΡΠΈΠΈ, ΠΏΠΎΡΠ»Π΅ Π΅Π΅ Π²ΡΡΠΈΡΠ»ΠΈΡΠ΅Π»ΡΠ½ΠΎΠΉ ΡΠ°Π±ΠΎΡΡ. Π’Π°ΠΊΠΎΠΉ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΡ ΠΈΠ»ΠΈ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡΡ ΠΎΠΏΡΠΈΠΌΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ ΠΊΠΎΠ΄ ΠΈ Π½Π΅ ΡΠΎΡ ΡΠ°Π½ΡΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π²ΡΠ΅Ρ ΠΏΡΠΎΠΌΠ΅ΠΆΡΡΠΎΡΠ½ΡΡ Π²ΡΠ·ΠΎΠ²ΠΎΠ² Π² ΡΡΠ΅ΠΊΠ΅ Π²ΡΠ·ΠΎΠ²ΠΎΠ², ΡΡΠΎ ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠΈΠ²Π΅ΡΡΠΈ ΠΊ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ°ΠΌ Ρ ΠΏΠ°ΠΌΡΡΡΡ. ΠΠΌΠ΅ΡΡΠΎ ΡΡΠΎΠ³ΠΎ, ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ ΠΈΠ»ΠΈ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡ ΠΌΠΎΠ³ΡΡ Π·Π°ΠΌΠ΅Π½ΠΈΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΡΡ Π²ΡΠ·ΠΎΠ²ΠΎΠ² ΡΠ΅ΠΊΡΡΡΠΈΠ²Π½ΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ Π½Π° ΠΎΠ΄ΠΈΠ½ Π²ΡΠ·ΠΎΠ², ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄ΠΈΠ½ ΡΡΠ΅ΠΉΠΌ ΡΡΠ΅ΠΊΠ° Π²ΡΠ·ΠΎΠ²ΠΎΠ². ΠΡΠΎ ΡΠ½ΠΈΠΆΠ°Π΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠ°ΠΌΡΡΠΈ ΠΈ ΠΏΠΎΠ²ΡΡΠ°Π΅Ρ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ.
Π₯Π²ΠΎΡΡΠΎΠ²Π°Ρ ΡΠ΅ΠΊΡΡΡΠΈΡ Π½Π΅ ΠΎΠΏΡΠΈΠΌΠΈΠ·ΠΈΡΡΠ΅ΡΡΡ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ Π² Go, ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΡΡΠΎ Π½Π΅ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠ°ΡΡΡΡ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ ΡΠ·ΡΠΊΠ°. ΠΠ΄Π½Π°ΠΊΠΎ, Π² Go ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°ΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Ρ Π²ΠΎΡΡΠΎΠ²ΠΎΠΉ ΡΠ΅ΠΊΡΡΡΠΈΠΈ Π²ΡΡΡΠ½ΡΡ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΡΠΈΠΊΠ»Ρ ΠΈΠ»ΠΈ Π³Π΅Π½Π΅ΡΠ°ΡΠΎΡΡ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΡΠ½ΠΊΡΠΈΡ Π΄Π»Ρ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΡ ΡΠ°ΠΊΡΠΎΡΠΈΠ°Π»Π° Ρ ΠΏΠΎΠΌΠΎΡΡΡ Ρ Π²ΠΎΡΡΠΎΠ²ΠΎΠΉ ΡΠ΅ΠΊΡΡΡΠΈΠΈ Π² Go ΠΌΠΎΠ³Π»Π° Π±Ρ Π²ΡΠ³Π»ΡΠ΄Π΅ΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ:
func factorialHelper(n int, acc int) int {
if n == 0 {
return acc
}
return factorialHelper(n-1, n*acc)
}
func factorial(n int) int {
return factorialHelper(n, 1)
}ΠΡΠ° ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ Π²ΡΠΏΠΎΠΌΠΎΠ³Π°ΡΠ΅Π»ΡΠ½ΡΡ ΡΡΠ½ΠΊΡΠΈΡ factorialHelper, ΠΊΠΎΡΠΎΡΠ°Ρ Π±Π΅ΡΠ΅Ρ Π΄Π²Π° Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ°: n - ΡΠΈΡΠ»ΠΎ, ΡΠ°ΠΊΡΠΎΡΠΈΠ°Π» ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ ΠΌΡ Ρ
ΠΎΡΠΈΠΌ Π²ΡΡΠΈΡΠ»ΠΈΡΡ, ΠΈ acc - Π°ΠΊΠΊΡΠΌΡΠ»ΡΡΠΎΡ, ΠΊΠΎΡΠΎΡΡΠΉ Π±ΡΠ΄Π΅Ρ Ρ
ΡΠ°Π½ΠΈΡΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΡ. Π€ΡΠ½ΠΊΡΠΈΡ factorial Π²ΡΠ·ΡΠ²Π°Π΅Ρ factorialHelper Ρ Π½Π°ΡΠ°Π»ΡΠ½ΡΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ΠΌ Π°ΠΊΠΊΡΠΌΡΠ»ΡΡΠΎΡΠ° ΡΠ°Π²Π½ΡΠΌ 1. ΠΠ°ΠΆΠ΄ΡΠΉ ΡΠ°Π·, ΠΊΠΎΠ³Π΄Π° factorialHelper Π²ΡΠ·ΡΠ²Π°Π΅Ρ ΡΠ°ΠΌΡ ΡΠ΅Π±Ρ, ΠΎΠ½Π° ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² n-1 ΠΈ n*acc. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΡΠ΅ΠΊΡΡΡΠΈΡ ΠΏΡΠ΅Π²ΡΠ°ΡΠ°Π΅ΡΡΡ Π² ΡΠΈΠΊΠ», ΠΊΠΎΡΠΎΡΡΠΉ Π·Π°Π²Π΅ΡΡΠ°Π΅ΡΡΡ, ΠΊΠΎΠ³Π΄Π° n ΡΠ°Π²Π½ΠΎ 0. ΠΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΈΠ·Π±Π΅ΠΆΠ°ΡΡ ΠΏΠ΅ΡΠ΅ΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΡΡΠ΅ΠΊΠ° ΠΈ ΡΠ΄Π΅Π»Π°ΡΡ ΡΡΠ½ΠΊΡΠΈΡ Π±ΠΎΠ»Π΅Π΅ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΠΉ.
Π₯Π²ΠΎΡΡΠΎΠ²Π°Ρ ΡΠ΅ΠΊΡΡΡΠΈΡ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Π° Π±ΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½Π° Π² ΡΠ΅Ρ ΡΠ»ΡΡΠ°ΡΡ , ΠΊΠΎΠ³Π΄Π° ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΈ Π·Π°Π²ΠΈΡΠΈΡ ΠΎΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ° Π²ΡΠ΅Ρ Π²ΡΠ·ΠΎΠ²ΠΎΠ² ΡΡΠ½ΠΊΡΠΈΠΈ Π² ΡΠ΅ΠΏΠΎΡΠΊΠ΅ ΡΠ΅ΠΊΡΡΡΠΈΠΈ, Π° Π½Π΅ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΡ ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅Π³ΠΎ Π²ΡΠ·ΠΎΠ²Π°. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ ΡΠ»Π΅Π΄ΡΡΡΡΡ ΡΠ΅ΠΊΡΡΡΠΈΠ²Π½ΡΡ ΡΡΠ½ΠΊΡΠΈΡ Π΄Π»Ρ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΡ ΡΠΈΡΠ΅Π» Π€ΠΈΠ±ΠΎΠ½Π°ΡΡΠΈ:
func fibonacci(n int) int {
if n == 0 {
return 0
} else if n == 1 {
return 1
} else {
return fibonacci(n-1) + fibonacci(n-2)
}
}ΠΠ΄Π΅ΡΡ Π΄Π»Ρ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΡ n-Π³ΠΎ ΡΠΈΡΠ»Π° Π€ΠΈΠ±ΠΎΠ½Π°ΡΡΠΈ ΡΡΠ½ΠΊΡΠΈΡ Π²ΡΠ·ΡΠ²Π°Π΅Ρ ΡΠ΅Π±Ρ Π΄Π²Π° ΡΠ°Π·Π° - Π΄Π»Ρ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΡ (n-1)-Π³ΠΎ ΠΈ (n-2)-Π³ΠΎ ΡΠΈΡΠ΅Π». ΠΠ°ΠΆΠ΄ΡΠΉ Π²ΡΠ·ΠΎΠ² ΡΡΠ½ΠΊΡΠΈΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ, ΠΊΠΎΡΠΎΡΡΠΉ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌ Π΄Π»Ρ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΡ ΠΈΡΠΎΠ³ΠΎΠ²ΠΎΠ³ΠΎ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ°. Π ΡΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅, Ρ
Π²ΠΎΡΡΠΎΠ²Π°Ρ ΡΠ΅ΠΊΡΡΡΠΈΡ Π½Π΅ ΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅ΡΡΡ, ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΠΏΡΠΈ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈ Ρ
Π²ΠΎΡΡΠΎΠ²ΠΎΠΉ ΡΠ΅ΠΊΡΡΡΠΈΠΈ ΡΠΎΡ
ΡΠ°Π½ΡΠ΅ΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠΉ Π²ΡΠ·ΠΎΠ² ΡΡΠ½ΠΊΡΠΈΠΈ, Π° ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΡ ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠΈΡ
Π²ΡΠ·ΠΎΠ²ΠΎΠ² ΡΠ΅ΡΡΡΡΡΡ. ΠΠΎΡΡΠΎΠΌΡ, Π΄Π»Ρ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΡ ΡΠΈΡΠ΅Π» Π€ΠΈΠ±ΠΎΠ½Π°ΡΡΠΈ, ΡΡΠ΅Π±ΡΠ΅ΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΎΠ±ΡΡΠ½ΡΡ ΡΠ΅ΠΊΡΡΡΠΈΡ.
Π‘Π»ΠΎΠΆΠ½ΠΎΡΡΡ Π°Π»Π³ΠΎΡΠΈΡΠΌΠ° ΡΡΠΎ Π²Π΅Π»ΠΈΡΠΈΠ½Π°, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΈΠ·ΠΌΠ΅ΡΡΠ΅Ρ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΉ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ° Π·Π°ΡΡΠ°ΡΠ΅Π½Π½ΠΎΠ΅ Π½Π° Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π°Π»Π³ΠΎΡΠΈΡΠΌΠ°.
ΠΡΠ»ΠΈ Π΅ΡΡΡ ΡΠΈΠΊΠ» ΠΏΡΠΎΠ±Π΅Π³Π°ΡΡΠΈΠΉ ΠΏΠΎ Π²ΡΠ΅ΠΌ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΠΌ ΠΌΠ°ΡΡΠΈΠ²Π° ΠΈΠ· n ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ², ΡΠΎ ΡΡΠΎ Π·Π½Π°ΡΠΈΡ ΡΡΠΎ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΡ ΠΏΠΎΡΡΠ΅Π±ΡΠ΅ΡΡΡ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ n ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΉ, ΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡΡ Π±ΡΠ΄Π΅Ρ O(n).
ΠΡΠΈ ΠΎΡΠ΅Π½ΠΊΠ΅ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡΠΈ Π²ΡΠ΅Π³Π΄Π° ΡΡΠΈΡΠ°Π΅ΡΡΡ Ρ ΡΠ΄ΡΠΈΠΉ ΡΠ»ΡΡΠ°ΠΉ, ΡΠΎ Π΅ΡΡΡ, Π΅ΡΠ»ΠΈ ΠΌΡ Π²ΡΡ ΠΎΠ΄ΠΈΠΌ ΠΈΠ· ΡΠΈΠΊΠ»Π° ΠΏΡΠΈ Π½Π°Ρ ΠΎΠΆΠ΄Π΅Π½ΠΈΠΈ ΠΎΡΠ²Π΅ΡΠ° ΡΠ°Π½ΡΡΠ΅, ΡΠΎ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡΡ Π²ΡΡ ΡΠ°Π²Π½ΠΎ Π±ΡΠ΄Π΅Ρ O(n), ΡΠ°ΠΊ ΠΊΠ°ΠΊ Π² Ρ ΡΠ΄ΡΠ΅ΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΎΡΠ²Π΅Ρ Π±ΡΠ΄Π΅Ρ Π² ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅ΠΌ βΡΠ»Π΅ΠΌΠ΅Π½ΡΠ΅ ΠΌΠ°ΡΡΠΈΠ²Π°.
ΠΠ· ΡΡΠΎΠ³ΠΎ ΡΠ»Π΅Π΄ΡΠ΅Ρ ΡΡΠΎ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡΡ Π°Π»Π³ΠΎΡΠΈΡΠΌΠ° Ρ Π΄Π²ΡΠΌΡ Π²Π»ΠΎΠΆΠ΅Π½Π½ΡΠΌΠΈ ΡΠΈΠΊΠ»Π°ΠΌΠΈ ΠΊΠ²Π°Π΄ΡΠ°ΡΠΈΡΠ½Π°, ΡΠΎ Π΅ΡΡΡ O(n^2) ΠΈ Ρ.Π΄.
ΠΡΠ»ΠΈ Π°Π»Π³ΠΎΡΠΈΡΠΌ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ Π·Π° ΡΡΡΠΎΠ³ΠΎ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½Π½ΠΎΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΉ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ ΠΎΠ±ΡΠ°ΡΠ΅Π½ΠΈΠ΅ ΠΊ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ ΠΌΠ°ΡΡΠΈΠ²Π° ΠΏΠΎ ΠΈΠ½Π΄Π΅ΠΊΡΡ), ΡΠΎ ΡΠ°ΠΊΠ°Ρ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡΡ Π½Π°Π·ΡΠ²Π°Π΅ΡΡΡ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΠ½ΠΎΠΉ O(1).
βΠΡΡΡ Π΅ΡΡ ΡΠ°ΠΊΡΠΎΡΠΈΠ°Π»ΡΠ½Π°Ρ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡΡ O(n!) ΡΠ°ΠΊΠ°Ρ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡΡ ΠΎΡΠ΅Π½Ρ ΠΏΠ»ΠΎΡ Π°, ΠΈ Π°Π»Π³ΠΎΡΠΈΡΠΌΡ Π²ΠΎΠΎΠ±ΡΠ΅ Π½Π΅ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½Ρ. Π’Π°ΠΊΠΆΠ΅ ΠΊΠ°ΠΊ ΠΈ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡΡ O(2^n). ΠΡΠΈΠΌΠ΅Ρ ΡΠ°ΠΊΠΎΠ³ΠΎ Π°Π»Π³ΠΎΡΠΈΡΠΌΠ° - ΡΠ΅ΠΊΡΡΡΠΈΠ²Π½ΠΎΠ΅ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΠ΅ ΡΠΈΡΠ΅Π» Π€ΠΈΠ±Π±Π°Π½Π°ΡΠΈ (Π²Π°ΡΠΈΠ°Π½Ρ Π±Π΅Π· ΠΌΠ΅ΠΌΠΎΠΈΠ·Π°ΡΠΈΠΈ).
ΠΠ°ΠΌΠ΅ΡΠ°Π½ΠΈΠ΅: O(n^2) Π½Π΅ ΡΠ°Π²Π½ΠΎ O(2^n). ΠΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡΡ O(n^2) ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ Π²ΡΠ΅ΠΌΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π°Π»Π³ΠΎΡΠΈΡΠΌΠ° ΡΠ²Π΅Π»ΠΈΡΠΈΠ²Π°Π΅ΡΡΡ ΠΊΠ²Π°Π΄ΡΠ°ΡΠΈΡΠ½ΠΎ Ρ ΡΠ²Π΅Π»ΠΈΡΠ΅Π½ΠΈΠ΅ΠΌ ΡΠ°Π·ΠΌΠ΅ΡΠ° Π²Ρ ΠΎΠ΄Π½ΡΡ Π΄Π°Π½Π½ΡΡ , ΡΠΎΠ³Π΄Π° ΠΊΠ°ΠΊ O(2^n) ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ ΡΠΊΡΠΏΠΎΠ½Π΅Π½ΡΠΈΠ°Π»ΡΠ½ΡΡ Π²ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡΡ, ΠΏΡΠΈ ΠΊΠΎΡΠΎΡΠΎΠΉ Π²ΡΠ΅ΠΌΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π°Π»Π³ΠΎΡΠΈΡΠΌΠ° ΡΠ²Π΅Π»ΠΈΡΠΈΠ²Π°Π΅ΡΡΡ ΡΠΊΡΠΏΠΎΠ½Π΅Π½ΡΠΈΠ°Π»ΡΠ½ΠΎ Ρ ΡΠ²Π΅Π»ΠΈΡΠ΅Π½ΠΈΠ΅ΠΌ ΡΠ°Π·ΠΌΠ΅ΡΠ° Π²Ρ ΠΎΠ΄Π½ΡΡ Π΄Π°Π½Π½ΡΡ .
Π‘ΡΠΎΠΈΡ ΠΎΠ³ΠΎΠ²ΠΎΡΠΈΡΡΡΡ, Π΅ΡΠ»ΠΈ Π½Π°Ρ ΠΏΡΠΎΡΡΡ ΠΎΡΠ΅Π½ΠΈΡΡ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠ»ΠΎΠΆΠ½ΠΎΡΡΡ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° Π² ΠΌΠ°ΡΡΠΈΠ², ΡΠΎ ΡΡΡ Π±ΡΠ΄Π΅Ρ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡΡ O(1*), ΡΠ°ΠΊ Π½Π°Π·ΡΠ²Π°Π΅ΠΌΠ°Ρ Π°ΠΌΠΎΡΡΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½Π°Ρ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡΡ. Π’ΠΎ Π΅ΡΡΡ Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅ΠΌ ΡΠ»Π΅ΠΌΠ΅Π½Ρ Π²ΡΠ΅Π³Π΄Π° Π·Π° O(1), Π½ΠΎ ΠΊΠΎΠ³Π΄Π° Π½Π°ΠΌ Π½ΡΠΆΠ½ΠΎ Π·Π°ΠΏΡΠΎΡΠΈΡΡ Π½ΠΎΠ²ΡΡ ΠΏΠ°ΠΌΡΡΡ Π΄Π»Ρ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° ΠΏΡΠΈ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΠΈ ΡΠΎΠ·Π΄Π°ΡΡΡΡ Π½ΠΎΠ²ΡΠΉ ΠΌΠ°ΡΡΠΈΠ² ΠΈ ΡΡΠ΄Π° Π²ΡΡ ΡΠΊΠΎΠΏΠΈΡΡΠ΅ΡΡΡ. Π‘Π»ΠΎΠΆΠ½ΠΎΡΡΡ Π±ΡΠ΄Π΅Ρ O(n).
ΠΠΎΡΡΠ½Π΅Π½ΠΈΡ: O β ΠΎΡΠ΅Π½ΠΊΠ° Π΄Π»Ρ Ρ ΡΠ΄ΡΠ΅Π³ΠΎ ΡΠ»ΡΡΠ°Ρ, Ξ© β ΠΎΡΠ΅Π½ΠΊΠ° Π΄Π»Ρ Π»ΡΡΡΠ΅Π³ΠΎ ΡΠ»ΡΡΠ°Ρ, Ξ β ΠΎΡΠ΅Π½ΠΊΠ° Π΄Π»Ρ ΡΡΠ΅Π΄Π½Π΅Π³ΠΎ ΡΠ»ΡΡΠ°Ρ.
O(log n) - ΡΡΠΎ Π°Π»Π³ΠΎΡΠΈΡΠΌΠΈΡΠ΅ΡΠΊΠ°Ρ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡΡ, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ Π²ΡΠ΅ΠΌΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π°Π»Π³ΠΎΡΠΈΡΠΌΠ° ΡΠ²Π΅Π»ΠΈΡΠΈΠ²Π°Π΅ΡΡΡ Π½Π΅ ΠΏΡΠΎΠΏΠΎΡΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎ ΡΠ°Π·ΠΌΠ΅ΡΡ Π²Ρ ΠΎΠ΄Π½ΡΡ Π΄Π°Π½Π½ΡΡ (n), Π° ΠΏΠΎ Π»ΠΎΠ³Π°ΡΠΈΡΠΌΠΈΡΠ΅ΡΠΊΠΎΠΉ ΡΠΊΠ°Π»Π΅. Π’ΠΎ Π΅ΡΡΡ, ΠΏΡΠΈ ΡΠ²Π΅Π»ΠΈΡΠ΅Π½ΠΈΠΈ n Π² 10 ΡΠ°Π·, Π²ΡΠ΅ΠΌΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π°Π»Π³ΠΎΡΠΈΡΠΌΠ° ΡΠ²Π΅Π»ΠΈΡΠΈΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ Π½Π° Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ Π΅Π΄ΠΈΠ½ΠΈΡ.
ΠΡΠΎ ΠΎΡΠ΅Π½Ρ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½Π°Ρ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡΡ, ΠΈ ΠΎΠ½Π° ΡΠ°ΡΡΠΎ Π²ΡΡΡΠ΅ΡΠ°Π΅ΡΡΡ Π² Π°Π»Π³ΠΎΡΠΈΡΠΌΠ°Ρ , ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠ°Π±ΠΎΡΠ°ΡΡ Ρ ΠΎΡΡΠΎΡΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΌΠΈ Π΄Π°Π½Π½ΡΠΌΠΈ, ΡΠ°ΠΊΠΈΠΌΠΈ ΠΊΠ°ΠΊ Π±ΠΈΠ½Π°ΡΠ½ΡΠΉ ΠΏΠΎΠΈΡΠΊ. Π Π±ΠΈΠ½Π°ΡΠ½ΠΎΠΌ ΠΏΠΎΠΈΡΠΊΠ΅ ΠΌΡ Π΄Π΅Π»ΠΈΠΌ ΠΎΡΡΠΎΡΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ ΠΌΠ°ΡΡΠΈΠ² ΠΏΠΎΠΏΠΎΠ»Π°ΠΌ Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΡΠ°Π³Π΅, ΡΡΠΎ Π΄Π°Π΅Ρ Π½Π°ΠΌ O(log n) Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ.
ΠΠ΄Π½Π°ΠΊΠΎ, Π½Π΅ Π²ΡΠ΅ Π°Π»Π³ΠΎΡΠΈΡΠΌΡ ΠΌΠΎΠ³ΡΡ ΡΠ°Π±ΠΎΡΠ°ΡΡ Ρ O(log n) ΡΠ»ΠΎΠΆΠ½ΠΎΡΡΡΡ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠΎΡΡΠΈΡΠΎΠ²ΠΊΠ° ΠΏΡΠ·ΡΡΡΠΊΠΎΠΌ ΠΈΠΌΠ΅Π΅Ρ O(n^2) ΡΠ»ΠΎΠΆΠ½ΠΎΡΡΡ, ΡΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ Π²ΡΠ΅ΠΌΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π°Π»Π³ΠΎΡΠΈΡΠΌΠ° ΡΠ²Π΅Π»ΠΈΡΠΈΠ²Π°Π΅ΡΡΡ ΠΏΡΠΎΠΏΠΎΡΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎ ΠΊΠ²Π°Π΄ΡΠ°ΡΡ ΡΠ°Π·ΠΌΠ΅ΡΠ° Π²Ρ ΠΎΠ΄Π½ΡΡ Π΄Π°Π½Π½ΡΡ . ΠΠΎΡΡΠΎΠΌΡ Π²Π°ΠΆΠ½ΠΎ Π²ΡΠ±ΠΈΡΠ°ΡΡ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΡΡΠΈΠΉ Π°Π»Π³ΠΎΡΠΈΡΠΌ Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ Π·Π°Π΄Π°ΡΠΈ, ΠΊΠΎΡΠΎΡΡΡ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΡΠ΅ΡΠΈΡΡ.
O(n * log(n)) ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ Π²ΡΠ΅ΠΌΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π°Π»Π³ΠΎΡΠΈΡΠΌΠ° ΡΠ²Π΅Π»ΠΈΡΠΈΠ²Π°Π΅ΡΡΡ Π² Π»ΠΎΠ³Π°ΡΠΈΡΠΌΠΈΡΠ΅ΡΠΊΠΎΠΉ ΠΏΡΠΎΠΏΠΎΡΡΠΈΠΈ Ρ ΡΠ²Π΅Π»ΠΈΡΠ΅Π½ΠΈΠ΅ΠΌ ΡΠ°Π·ΠΌΠ΅ΡΠ° Π²Ρ ΠΎΠ΄Π½ΡΡ Π΄Π°Π½Π½ΡΡ . ΠΡΠΎ Π²ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡΡ, ΠΊΠΎΡΠΎΡΠ°Ρ ΡΠ²Π»ΡΠ΅ΡΡΡ Π±ΠΎΠ»Π΅Π΅ Π±ΡΡΡΡΠΎΠΉ, ΡΠ΅ΠΌ ΠΊΠ²Π°Π΄ΡΠ°ΡΠΈΡΠ½Π°Ρ O(n^2), Π½ΠΎ ΠΌΠ΅Π΄Π»Π΅Π½Π½Π΅Π΅, ΡΠ΅ΠΌ Π»ΠΈΠ½Π΅ΠΉΠ½Π°Ρ O(n) ΠΈΠ»ΠΈ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΠ½Π°Ρ O(1). ΠΠ»Π³ΠΎΡΠΈΡΠΌΡ Ρ Π²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡΡΡ O(n log n) ΡΠ°ΡΡΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ Π² ΡΠΎΡΡΠΈΡΠΎΠ²ΠΊΠ΅ Π΄Π°Π½Π½ΡΡ , Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π±ΡΡΡΡΠΎΠΉ ΡΠΎΡΡΠΈΡΠΎΠ²ΠΊΠ΅ (quicksort) ΠΈΠ»ΠΈ ΡΠΎΡΡΠΈΡΠΎΠ²ΠΊΠ΅ ΡΠ»ΠΈΡΠ½ΠΈΠ΅ΠΌ (merge sort).
ΠΠ»Ρ ΠΈΠ·ΡΡΠ΅Π½ΠΈΡ ΠΎΡΠ΅Π½ΠΊΠΈ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡΠΈ Π°Π»Π³ΠΎΡΠΈΡΠΌΠ° ΠΏΠΎ "time complexity" & "space complexity" ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΡΠ°ΡΡ Ρ ΠΊΠ½ΠΈΠ³ΠΈ "Introduction to Algorithms" Π°Π²ΡΠΎΡΠΎΠ² ΠΠΎΡΠΌΠ΅Π½Π°, ΠΠ΅ΠΉΠ·Π΅ΡΡΠΎΠ½Π°, Π ΠΈΠ²Π΅ΡΡΠ° ΠΈ Π¨ΡΠ°ΠΉΠ½Π°. ΠΡΠΎ ΠΎΠ±ΡΠ΅ΠΏΡΠΈΠ·Π½Π°Π½Π½Π°Ρ ΠΊΠ½ΠΈΠ³Π° ΠΏΠΎ Π°Π»Π³ΠΎΡΠΈΡΠΌΠ°ΠΌ, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΏΠΎΠΊΡΡΠ²Π°Π΅Ρ Π±Π°Π·ΠΎΠ²ΡΠ΅ Π°Π»Π³ΠΎΡΠΈΡΠΌΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΠΊΠΎΠ½ΡΠ΅ΠΏΡΠΈΠΈ, Π²ΠΊΠ»ΡΡΠ°Ρ ΠΎΡΠ΅Π½ΠΊΡ Π²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΈ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π΅Π½Π½ΠΎΠΉ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡΠΈ. ΠΠ½ΠΈΠ³Π° ΡΠ°ΠΊΠΆΠ΅ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ ΠΏΡΠΈΠΌΠ΅ΡΠΎΠ² ΠΈ Π·Π°Π΄Π°Ρ Π΄Π»Ρ ΠΏΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΡ.
ΠΠ»ΠΈ ΠΆΠ΅ ΠΊΠ½ΠΈΠΆΠΊΠ° "ΠΡΠΎΠΊΠ°Π΅ΠΌ Π°Π»Π³ΠΎΡΠΈΡΠΌΡ".
ΠΠ»ΠΈ Π΅ΡΡ ΠΡΠ½ΠΎΠ²Ρ Π°Π»Π³ΠΎΡΠΈΡΠΌΠΎΠ² - ΠΈΠ½ΡΠ΅ΡΠ°ΠΊΡΠΈΠ² ΠΎΡ Yandex
ΠΠ· YouTube: ΠΠ‘Π― Π‘ΠΠΠΠΠΠ‘Π’Π¬ ΠΠΠΠΠ ΠΠ’ΠΠΠ ΠΠ 11 ΠΠΠΠ£Π’
/article - Π°Π»Π³ΠΎΡΠΈΡΠΌΠΈΡΠ΅ΡΠΊΠΈΠ΅ Π·Π°Π΄Π°ΡΠΈ
ΠΠ°Π½Ρ Π΄Π²Π΅ ΡΡΡΠΎΠΊΠΈ ΡΡΡΠΎΡΠ½ΡΡ Π»Π°ΡΠΈΠ½ΡΠΊΠΈΡ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ²: ΡΡΡΠΎΠΊΠ° J ΠΈ ΡΡΡΠΎΠΊΠ° S. Π‘ΠΈΠΌΠ²ΠΎΠ»Ρ, Π²Ρ ΠΎΠ΄ΡΡΠΈΠ΅ Π² ΡΡΡΠΎΠΊΡ J, β Β«Π΄ΡΠ°Π³ΠΎΡΠ΅Π½Π½ΠΎΡΡΠΈΒ», Π²Ρ ΠΎΠ΄ΡΡΠΈΠ΅ Π² ΡΡΡΠΎΠΊΡ S β Β«ΠΊΠ°ΠΌΠ½ΠΈΒ». ΠΡΠΆΠ½ΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ, ΠΊΠ°ΠΊΠΎΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ² ΠΈΠ· S ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ ΡΠ²Π»ΡΡΡΡΡ Β«Π΄ΡΠ°Π³ΠΎΡΠ΅Π½Π½ΠΎΡΡΡΠΌΠΈΒ». ΠΡΠΎΡΠ΅ Π³ΠΎΠ²ΠΎΡΡ, Π½ΡΠΆΠ½ΠΎ ΠΏΡΠΎΠ²Π΅ΡΠΈΡΡ, ΠΊΠ°ΠΊΠΎΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ² ΠΈΠ· S Π²Ρ ΠΎΠ΄ΠΈΡ Π² J.
ΠΡΠΎ ΠΎΡΠ΅Π½Ρ ΠΏΡΠΎΡΡΠ°Ρ ΡΠ°Π·ΠΌΠΈΠ½ΠΎΡΠ½Π°Ρ Π·Π°Π΄Π°ΡΠ°, ΠΊ ΠΊΠΎΡΠΎΡΠΎΠΉ ΠΏΡΠΈΠ»Π°Π³Π°ΡΡΡΡ ΡΠ΅ΡΠ΅Π½ΠΈΡ Π½Π° Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ ΡΠ·ΡΠΊΠ°Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ, ΡΡΠΎΠ±Ρ ΡΡΠ°ΡΡΠ½ΠΈΠΊΠΈ ΠΌΠΎΠ³Π»ΠΈ ΠΎΡΠ²ΠΎΠΈΡΡΡΡ Ρ ΠΏΡΠΎΠ²Π΅ΡΡΡΡΠ΅ΠΉ ΡΠΈΡΡΠ΅ΠΌΠΎΠΉ.
ΠΠ»Π³ΠΎΡΠΈΡΠΌ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΠΏΡΠΎΡΡΠΎΠΉ: ΠΈΠ· ΡΡΡΠΎΠΊΠΈ Ρ Β«Π΄ΡΠ°Π³ΠΎΡΠ΅Π½Π½ΠΎΡΡΡΠΌΠΈΒ» Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠΎΡΡΡΠΎΠΈΡΡ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ, Π·Π°ΡΠ΅ΠΌ ΠΏΡΠΎΠΉΡΠΈΡΡ ΠΏΠΎ ΡΡΡΠΎΠΊΠ΅ Ρ Β«ΠΊΠ°ΠΌΠ½ΡΠΌΠΈΒ» ΠΈ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΡΠΈΠΌΠ²ΠΎΠ» ΠΏΡΠΎΠ²Π΅ΡΠΈΡΡ Π½Π° Π²Ρ ΠΎΠΆΠ΄Π΅Π½ΠΈΠ΅ Π² ΡΡΠΎ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ. ΠΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ ΡΠ°ΠΊΡΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π°, ΡΡΠΎΠ±Ρ Π³Π°ΡΠ°Π½ΡΠΈΡΠΎΠ²Π°ΡΡ Π»ΠΈΠ½Π΅ΠΉΠ½ΡΡ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡΡ ΠΏΠΎΠ»ΡΡΠ΅Π½Π½ΠΎΠ³ΠΎ ΡΠ΅ΡΠ΅Π½ΠΈΡ, Π½Π΅ΡΠΌΠΎΡΡΡ Π½Π° ΡΠΎ, ΡΡΠΎ Π²Ρ ΠΎΠ΄Π½ΡΠ΅ ΡΡΡΠΎΠΊΠΈ ΠΎΡΠ΅Π½Ρ ΠΊΠΎΡΠΎΡΠΊΠΈΠ΅ ΠΈ ΠΏΠΎΡΡΠΎΠΌΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π°ΡΡ Π΄Π°ΠΆΠ΅ ΠΊΠ²Π°Π΄ΡΠ°ΡΠΈΡΠ½ΡΠΉ ΠΏΠΎ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡΠΈ Π°Π»Π³ΠΎΡΠΈΡΠΌ.
Π’ΡΠ΅Π±ΡΠ΅ΡΡΡ Π½Π°ΠΉΡΠΈ Π² Π±ΠΈΠ½Π°ΡΠ½ΠΎΠΌ Π²Π΅ΠΊΡΠΎΡΠ΅ ΡΠ°ΠΌΡΡ Π΄Π»ΠΈΠ½Π½ΡΡ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΡ Π΅Π΄ΠΈΠ½ΠΈΡ ΠΈ Π²ΡΠ²Π΅ΡΡΠΈ Π΅Ρ Π΄Π»ΠΈΠ½Ρ.
ΠΠ»Π³ΠΎΡΠΈΡΠΌ ΡΠ΅ΡΠ΅Π½ΠΈΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ: ΠΏΡΠΎΠΉΡΠΈΡΡ ΠΏΠΎ Π²ΡΠ΅ΠΌ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΠΌ ΠΌΠ°ΡΡΠΈΠ²Π°; Π²ΡΡΡΠ΅ΡΠΈΠ² Π΅Π΄ΠΈΠ½ΠΈΡΡ, Π½ΡΠΆΠ½ΠΎ ΡΠ²Π΅Π»ΠΈΡΠΈΡΡ ΡΡΡΡΡΠΈΠΊ Π΄Π»ΠΈΠ½Ρ ΡΠ΅ΠΊΡΡΠ΅ΠΉ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ, Π°, Π²ΡΡΡΠ΅ΡΠΈΠ² Π½ΠΎΠ»Ρ, Π½ΡΠΆΠ½ΠΎ ΠΎΠ±Π½ΡΠ»ΠΈΡΡ ΡΡΠΎΡ ΡΡΡΡΡΠΈΠΊ. Π ΠΊΠΎΠ½ΡΠ΅ Π½ΡΠΆΠ½ΠΎ Π²ΡΠ²Π΅ΡΡΠΈ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠ΅ ΠΈΠ· Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π» ΡΡΡΡΡΠΈΠΊ.
ΠΡΠΎΠ²Π΅ΡΡΡΠ΅, ΡΡΠΎ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°Π΅ΡΠ΅ ΡΠΈΡΡΠ°ΡΠΈΡ, ΠΊΠΎΠ³Π΄Π° ΠΌΠ°ΡΡΠΈΠ² Π·Π°ΠΊΠ°Π½ΡΠΈΠ²Π°Π΅ΡΡΡ Π½Π° ΠΈΡΠΊΠΎΠΌΡΡ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΡ Π΅Π΄ΠΈΠ½ΠΈΡ. ΠΡΠΈ Π°ΠΊΠΊΡΡΠ°ΡΠ½ΠΎΠΉ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΡΠ°ΠΊΠ°Ρ ΡΠΈΡΡΠ°ΡΠΈΡ Π½Π΅ ΠΏΠΎΡΡΠ΅Π±ΡΠ΅Ρ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΠΎΠΉ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ.
ΠΠΎΡΡΠ°ΡΠ°ΠΉΡΠ΅ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π»ΠΈΡΡ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΠ½ΡΠΉ ΠΎΠ±ΡΡΠΌ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΠΎΠΉ ΠΏΠ°ΠΌΡΡΠΈ.
ΠΠ°Π½ ΡΠΏΠΎΡΡΠ΄ΠΎΡΠ΅Π½Π½ΡΠΉ ΠΏΠΎ Π½Π΅ΡΠ±ΡΠ²Π°Π½ΠΈΡ ΠΌΠ°ΡΡΠΈΠ² ΡΠ΅Π»ΡΡ 32-ΡΠ°Π·ΡΡΠ΄Π½ΡΡ ΡΠΈΡΠ΅Π». Π’ΡΠ΅Π±ΡΠ΅ΡΡΡ ΡΠ΄Π°Π»ΠΈΡΡ ΠΈΠ· Π½Π΅Π³ΠΎ Π²ΡΠ΅ ΠΏΠΎΠ²ΡΠΎΡΠ΅Π½ΠΈΡ.
ΠΡΠ°Π²ΠΈΠ»ΡΠ½ΡΠΉ Π°Π»Π³ΠΎΡΠΈΡΠΌ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°Π΅Ρ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ ΠΌΠ°ΡΡΠΈΠ²Π°, ΡΡΠ°Π²Π½ΠΈΠ²Π°Ρ ΠΈΡ Ρ ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠΌ Π²ΡΠ²Π΅Π΄Π΅Π½Π½ΡΠΌ. ΠΡΠΆΠ½ΠΎ Π½Π΅ Π·Π°Π±ΡΡΡ ΠΎΠ±Π½ΠΎΠ²Π»ΡΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΡΡ ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠΉ Π²ΡΠ²Π΅Π΄Π΅Π½Π½ΡΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ ΠΈ, ΠΊΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ, Π½Π΅ ΠΎΡΠΈΠ±ΠΈΡΡΡΡ ΠΏΡΠΈ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ΅ ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅Π³ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°.
ΠΡΠΈ ΡΠ΅ΡΠ΅Π½ΠΈΠΈ ΡΡΠΎΠΉ Π·Π°Π΄Π°ΡΠΈ ΡΠ°ΠΊΠΆΠ΅ Π½Π΅ Π½ΡΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΡ ΠΏΠ°ΠΌΡΡΡ.
ΠΠ°Π½ΠΎ ΡΠ΅Π»ΠΎΠ΅ ΡΠΈΡΠ»ΠΎ n. Π’ΡΠ΅Π±ΡΠ΅ΡΡΡ Π²ΡΠ²Π΅ΡΡΠΈ Π²ΡΠ΅ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΡΠ΅ ΡΠΊΠΎΠ±ΠΎΡΠ½ΡΠ΅ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ Π΄Π»ΠΈΠ½Ρ 2 * n, ΡΠΏΠΎΡΡΠ΄ΠΎΡΠ΅Π½Π½ΡΠ΅ Π»Π΅ΠΊΡΠΈΠΊΠΎΠ³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ (ΡΠΌ. https://ru.wikipedia.org/wiki/ΠΠ΅ΠΊΡΠΈΠΊΠΎΠ³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠΉ_ΠΏΠΎΡΡΠ΄ΠΎΠΊ). Π Π·Π°Π΄Π°ΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΊΡΡΠ³Π»ΡΠ΅ ΡΠΊΠΎΠ±ΠΊΠΈ.
ΠΡΠΎ ΠΏΡΠΈΠΌΠ΅Ρ ΠΎΡΠ½ΠΎΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΡΠ»ΠΎΠΆΠ½ΠΎΠΉ Π°Π»Π³ΠΎΡΠΈΡΠΌΠΈΡΠ΅ΡΠΊΠΎΠΉ Π·Π°Π΄Π°ΡΠΈ. ΠΡΠ΄Π΅ΠΌ Π³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°ΡΡ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΡ ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΌΡ ΡΠΈΠΌΠ²ΠΎΠ»Ρ; Π² ΠΊΠ°ΠΆΠ΄ΡΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΠΊ ΡΠ΅ΠΊΡΡΠ΅ΠΉ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ ΠΏΡΠΈΠΏΠΈΡΠ°ΡΡ Π»ΠΈΠ±ΠΎ ΠΎΡΠΊΡΡΠ²Π°ΡΡΡΡ ΡΠΊΠΎΠ±ΠΊΡ, Π»ΠΈΠ±ΠΎ Π·Π°ΠΊΡΡΠ²Π°ΡΡΡΡ. ΠΡΠΊΡΡΠ²Π°ΡΡΡΡ ΡΠΊΠΎΠ±ΠΊΡ ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠΏΠΈΡΠ°ΡΡ, Π΅ΡΠ»ΠΈ Π΄ΠΎ ΡΡΠΎΠ³ΠΎ Π±ΡΠ»ΠΎ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΎ ΠΌΠ΅Π½Π΅Π΅ n ΠΎΡΠΊΡΡΠ²Π°ΡΡΠΈΡ ΡΠΊΠΎΠ±ΠΎΠΊ, Π° Π·Π°ΠΊΡΡΠ²Π°ΡΡΡΡ β Π΅ΡΠ»ΠΈ Π² ΡΠ΅ΠΊΡΡΠ΅ΠΉ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΎΡΠΊΡΡΠ²Π°ΡΡΠΈΡ ΡΠΊΠΎΠ±ΠΎΠΊ ΠΏΡΠ΅Π²ΠΎΡΡ ΠΎΠ΄ΠΈΡ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ Π·Π°ΠΊΡΡΠ²Π°ΡΡΠΈΡ . Π’Π°ΠΊΠΎΠΉ Π°Π»Π³ΠΎΡΠΈΡΠΌ ΠΏΡΠΈ Π°ΠΊΠΊΡΡΠ°ΡΠ½ΠΎΠΉ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ Π³Π°ΡΠ°Π½ΡΠΈΡΡΠ΅Ρ Π»Π΅ΠΊΡΠΈΠΊΠΎΠ³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠΉ ΠΏΠΎΡΡΠ΄ΠΎΠΊ Π² ΠΎΡΠ²Π΅ΡΠ΅; ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Π·Π° Π²ΡΠ΅ΠΌΡ, ΠΏΡΠΎΠΏΠΎΡΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΠ΅ ΠΏΡΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΡ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Π° ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² Π² ΠΎΡΠ²Π΅ΡΠ΅ Π½Π° n; ΠΏΡΠΈ ΡΡΠΎΠΌ ΡΡΠ΅Π±ΡΠ΅Ρ Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΠΎΠΉ ΠΏΠ°ΠΌΡΡΠΈ.
ΠΡΠΈΠΌΠ΅ΡΠΎΠΌ Π½Π΅ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎΠ³ΠΎ Π°Π»Π³ΠΎΡΠΈΡΠΌΠ° Π±ΡΠ» Π±Ρ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ: ΡΠ³Π΅Π½Π΅ΡΠΈΡΡΠ΅ΠΌ Π²ΡΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΡΠ΅ ΡΠΊΠΎΠ±ΠΎΡΠ½ΡΠ΅ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ, Π° Π·Π°ΡΠ΅ΠΌ Π²ΡΠ²Π΅Π΄Π΅ΠΌ Π»ΠΈΡΡ ΡΠ΅ ΠΈΠ· Π½ΠΈΡ , ΡΡΠΎ ΠΎΠΊΠ°ΠΆΡΡΡΡ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΡΠΌΠΈ. ΠΡΠΈ ΡΡΠΎΠΌ ΠΎΠ±ΡΡΠΌ ΠΎΡΠ²Π΅ΡΠ° Π½Π΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ ΡΠ΅ΡΠΈΡΡ Π·Π°Π΄Π°ΡΡ Π±ΡΡΡΡΠ΅Π΅, ΡΠ΅ΠΌ ΡΠΎΡ Π°Π»Π³ΠΎΡΠΈΡΠΌ, ΡΡΠΎ ΠΏΡΠΈΠ²Π΅Π΄ΡΡ Π²ΡΡΠ΅.
ΠΡΠ° Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΠΏΡΠΎΡΡΠ°Ρ Π·Π°Π΄Π°ΡΠ° β ΡΠΈΠΏΠΈΡΠ½ΡΠΉ ΠΏΡΠΈΠΌΠ΅Ρ Π·Π°Π΄Π°ΡΠΈ, Π΄Π»Ρ ΡΠ΅ΡΠ΅Π½ΠΈΡ ΠΊΠΎΡΠΎΡΠΎΠΉ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π°ΡΡΠΎΡΠΈΠ°ΡΠΈΠ²Π½ΡΠ΅ ΠΌΠ°ΡΡΠΈΠ²Ρ. ΠΡΠΈ ΡΠ΅ΡΠ΅Π½ΠΈΠΈ Π½ΡΠΆΠ½ΠΎ ΡΡΠΈΡΡΠ²Π°ΡΡ, ΡΡΠΎ ΡΠΈΠΌΠ²ΠΎΠ»Ρ ΠΌΠΎΠ³ΡΡ ΠΏΠΎΠ²ΡΠΎΡΡΡΡΡΡ, ΠΏΠΎΡΡΠΎΠΌΡ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π½Π΅ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π°, Π° ΡΠ»ΠΎΠ²Π°ΡΠΈ. ΠΠΎΡΡΠΎΠΌΡ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ Π±ΡΠ΄Π΅Ρ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ: ΡΠΎΡΡΠ°Π²ΠΈΠΌ ΠΈΠ· ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ ΠΏΠΎ ΡΠ»ΠΎΠ²Π°ΡΡ, ΠΊΠΎΡΠΎΡΡΠΉ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡΠΈΠΌΠ²ΠΎΠ»Π° Π±ΡΠ΄Π΅Ρ Ρ ΡΠ°Π½ΠΈΡΡ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ Π΅Π³ΠΎ ΠΏΠΎΠ²ΡΠΎΡΠ΅Π½ΠΈΠΉ; Π·Π°ΡΠ΅ΠΌ ΡΡΠ°Π²Π½ΠΈΠΌ ΠΏΠΎΠ»ΡΡΠΈΠ²ΡΠΈΠ΅ΡΡ ΡΠ»ΠΎΠ²Π°ΡΠΈ. ΠΡΠ»ΠΈ ΠΎΠ½ΠΈ ΡΠΎΠ²ΠΏΠ°Π΄Π°ΡΡ, Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π²ΡΠ²Π΅ΡΡΠΈ Π΅Π΄ΠΈΠ½ΠΈΡΡ, Π² ΠΏΡΠΎΡΠΈΠ²Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ β Π½ΠΎΠ»Ρ.
ΠΠ»ΡΡΠ΅ΡΠ½Π°ΡΠΈΠ²Π½ΠΎΠ΅ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅: ΠΎΡΡΠΎΡΡΠΈΡΡΠ΅ΠΌ Π²Ρ ΠΎΠ΄Π½ΡΠ΅ ΡΡΡΠΎΠΊΠΈ, Π° Π·Π°ΡΠ΅ΠΌ ΡΡΠ°Π²Π½ΠΈΠΌ ΠΈΡ . ΠΡΠΎ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ Ρ ΡΠΆΠ΅ Π² ΡΠΎΠΌ, ΡΡΠΎ ΠΎΠ½ΠΎ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΠΌΠ΅Π΄Π»Π΅Π½Π½Π΅Π΅, Π° ΡΠ°ΠΊΠΆΠ΅ ΠΌΠ΅Π½ΡΠ΅Ρ Π²Ρ ΠΎΠ΄Π½ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅. ΠΠ°ΡΠΎ ΡΠ°ΠΊΠΎΠ΅ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΠΎΠΉ ΠΏΠ°ΠΌΡΡΠΈ.
ΠΡΠ»ΠΈ Π² ΠΏΡΠΎΡΠ΅ΡΡΠ΅ ΡΠΎΠ±Π΅ΡΠ΅Π΄ΠΎΠ²Π°Π½ΠΈΡ Ρ Π²Π°Ρ Π²ΠΎΠ·Π½ΠΈΠΊΠ»ΠΎ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ Π²Π°ΡΠΈΠ°Π½ΡΠΎΠ² ΡΠ΅ΡΠ΅Π½ΠΈΡ, ΠΎΡΠ»ΠΈΡΠ°ΡΡΠΈΡ ΡΡ ΡΠ²ΠΎΠΈΠΌΠΈ ΠΏΠΎ ΡΠ²ΠΎΠΈΠΌ Ρ Π°ΡΠ°ΠΊΡΠ΅ΡΠΈΡΡΠΈΠΊΠ°ΠΌ, ΡΠ°ΡΡΠΊΠ°ΠΆΠΈΡΠ΅ ΠΎΠ± ΡΡΠΎΠΌ. ΠΡΠ΅Π³Π΄Π° Π·Π΄ΠΎΡΠΎΠ²ΠΎ, ΠΊΠΎΠ³Π΄Π° ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊ Π·Π½Π°Π΅Ρ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ Π²Π°ΡΠΈΠ°Π½ΡΠΎΠ² ΡΠ΅ΡΠ΅Π½ΠΈΡ Π·Π°Π΄Π°ΡΠΈ ΠΈ ΠΌΠΎΠΆΠ΅Ρ ΡΠ°ΡΡΠΊΠ°Π·Π°ΡΡ ΠΎΠ± ΠΈΡ ΡΠΈΠ»ΡΠ½ΡΡ ΠΈ ΡΠ»Π°Π±ΡΡ ΡΡΠΎΡΠΎΠ½Π°Ρ .
ΠΠ°Π½Ρ k ΠΎΡΡΠΎΡΡΠΈΡΠΎΠ²Π°Π½Π½ΡΡ Π² ΠΏΠΎΡΡΠ΄ΠΊΠ΅ Π½Π΅ΡΠ±ΡΠ²Π°Π½ΠΈΡ ΠΌΠ°ΡΡΠΈΠ²ΠΎΠ² Π½Π΅ΠΎΡΡΠΈΡΠ°ΡΠ΅Π»ΡΠ½ΡΡ ΡΠ΅Π»ΡΡ ΡΠΈΡΠ΅Π», ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ ΠΈΠ· ΠΊΠΎΡΠΎΡΡΡ Π½Π΅ ΠΏΡΠ΅Π²ΠΎΡΡ ΠΎΠ΄ΠΈΡ 100. Π’ΡΠ΅Π±ΡΠ΅ΡΡΡ ΠΏΠΎΡΡΡΠΎΠΈΡΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ ΠΈΡ ΡΠ»ΠΈΡΠ½ΠΈΡ: ΠΎΡΡΠΎΡΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ Π² ΠΏΠΎΡΡΠ΄ΠΊΠ΅ Π½Π΅ΡΠ±ΡΠ²Π°Π½ΠΈΡ ΠΌΠ°ΡΡΠΈΠ², ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠΈΠΉ Π²ΡΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ ΠΈΡΡ ΠΎΠ΄Π½ΡΡ k ΠΌΠ°ΡΡΠΈΠ²ΠΎΠ². ΠΠ»ΠΈΠ½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΌΠ°ΡΡΠΈΠ²Π° Π½Π΅ ΠΏΡΠ΅Π²ΠΎΡΡ ΠΎΠ΄ΠΈΡ 10 * k.
ΠΠ»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΌΠ°ΡΡΠΈΠ²Π° ΡΠΎΠ·Π΄Π°Π΄ΠΈΠΌ ΠΏΠΎ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ; ΠΈΠ·Π½Π°ΡΠ°Π»ΡΠ½ΠΎ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ ΡΠ°ΡΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ Π² Π½Π°ΡΠ°Π»Π΅ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠ΅Π³ΠΎ ΠΌΠ°ΡΡΠΈΠ²Π°. ΠΠ»Π΅ΠΌΠ΅Π½ΡΡ, ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠ΅ ΠΏΠΎΠ·ΠΈΡΠΈΡΠΌ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Π΅ΠΉ, ΠΏΠΎΠΌΠ΅ΡΡΠΈΠΌ Π² Π»ΡΠ±ΡΡ ΡΡΡΡΠΊΡΡΡΡ Π΄Π°Π½Π½ΡΡ , ΠΊΠΎΡΠΎΡΠ°Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ ΠΈΠ·Π²Π»Π΅ΡΠ΅Π½ΠΈΠ΅ ΠΌΠΈΠ½ΠΈΠΌΡΠΌΠ° β ΡΡΠΎ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΌΡΠ»ΡΡΠΈΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ ΠΈΠ»ΠΈ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΊΡΡΠ°. ΠΠ°Π»Π΅Π΅ Π±ΡΠ΄Π΅ΠΌ ΠΈΠ·Π²Π»Π΅ΠΊΠ°ΡΡ ΠΈΠ· ΡΡΠΎΠΉ ΡΡΡΡΠΊΡΡΡΡ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΡΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ, ΠΏΠΎΠΌΠ΅ΡΠ°ΡΡ Π΅Π³ΠΎ Π² ΠΎΡΠ²Π΅Ρ, ΡΠ΄Π²ΠΈΠ³Π°ΡΡ ΠΏΠΎΠ·ΠΈΡΠΈΡ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π² ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠ΅ΠΌ ΠΌΠ°ΡΡΠΈΠ²Π΅ ΠΈ ΠΏΠΎΠΌΠ΅ΡΠ°ΡΡ Π² ΡΡΡΡΠΊΡΡΡΡ Π΄Π°Π½Π½ΡΡ ΠΎΡΠ΅ΡΠ΅Π΄Π½ΠΎΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ ΠΈΠ· ΡΡΠΎΠ³ΠΎ ΠΌΠ°ΡΡΠΈΠ²Π°.
Π ΡΡΠΎΠΉ Π·Π°Π΄Π°ΡΠ΅ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ ΠΈΡΠΏΡΡΡΠ²Π°ΡΡ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡΠΈ Ρ ΡΠΎΡΠΌΠ°ΡΠΎΠΌ Π²Π²ΠΎΠ΄Π°. ΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° ΡΠΎ, ΡΡΠΎ ΠΏΠ΅ΡΠ²ΡΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ ΡΡΡΠΎΠΊ Π½Π΅ ΠΎΠΏΠΈΡΡΠ²Π°ΡΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ ΠΌΠ°ΡΡΠΈΠ²ΠΎΠ², ΠΎΠ½ΠΈ ΠΎΠΏΠΈΡΡΠ²Π°ΡΡ Π΄Π»ΠΈΠ½Ρ ΠΌΠ°ΡΡΠΈΠ²ΠΎΠ²!
Π Π΄Π°Π½Π½ΠΎΠΌ ΠΊΠΎΠ΄Π΅ ΠΌΡ ΡΠΎΠ·Π΄Π°Π΅ΠΌ ΡΡΡΡΠΊΡΡΡΡ Item, ΠΊΠΎΡΠΎΡΠ°Ρ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°, Π½ΠΎΠΌΠ΅Ρ ΠΌΠ°ΡΡΠΈΠ²Π°, ΠΈΠ· ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ Π±ΡΠ» Π²Π·ΡΡ ΡΠ»Π΅ΠΌΠ΅Π½Ρ, ΠΈ ΠΈΠ½Π΄Π΅ΠΊΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° Π² ΠΌΠ°ΡΡΠΈΠ²Π΅. ΠΠ°ΡΠ΅ΠΌ ΠΌΡ ΡΠΎΠ·Π΄Π°Π΅ΠΌ ΠΏΡΠΈΠΎΡΠΈΡΠ΅ΡΠ½ΡΡ ΠΎΡΠ΅ΡΠ΅Π΄Ρ PriorityQueue Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ ΡΡΠΎΠΉ ΡΡΡΡΠΊΡΡΡΡ, ΠΊΠΎΡΠΎΡΠ°Ρ Π±ΡΠ΄Π΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ Π΄Π»Ρ ΠΈΠ·Π²Π»Π΅ΡΠ΅Π½ΠΈΡ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°.
ΠΠ°Π»Π΅Π΅ ΠΌΡ ΡΠΎΠ·Π΄Π°Π΅ΠΌ ΡΠΊΠ°Π·Π°ΡΠ΅Π»ΠΈ Π½Π° Π½Π°ΡΠ°Π»ΠΎ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΌΠ°ΡΡΠΈΠ²Π° ΠΈ Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅ΠΌ ΠΏΠ΅ΡΠ²ΡΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΌΠ°ΡΡΠΈΠ²Π° Π² ΠΏΡΠΈΠΎΡΠΈΡΠ΅ΡΠ½ΡΡ ΠΎΡΠ΅ΡΠ΅Π΄Ρ. ΠΠ°ΡΠ΅ΠΌ ΠΌΡ Π½Π°ΡΠΈΠ½Π°Π΅ΠΌ ΠΈΠ·Π²Π»Π΅ΠΊΠ°ΡΡ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΡΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ ΠΈΠ· ΠΎΡΠ΅ΡΠ΅Π΄ΠΈ, Π΄ΠΎΠ±Π°Π²Π»ΡΡ ΠΈΡ Π² ΡΠ΅Π·ΡΠ»ΡΡΠΈΡΡΡΡΠΈΠΉ ΠΌΠ°ΡΡΠΈΠ² ΠΈ ΡΠ΄Π²ΠΈΠ³Π°Ρ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠΉ ΠΌΠ°ΡΡΠΈΠ². ΠΡΠ»ΠΈ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π΅ Π΄ΠΎΡΡΠΈΠ³ ΠΊΠΎΠ½ΡΠ° ΠΌΠ°ΡΡΠΈΠ²Π°, ΠΌΡ Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅ΠΌ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ ΠΈΠ· ΡΡΠΎΠ³ΠΎ ΠΌΠ°ΡΡΠΈΠ²Π° Π² ΠΏΡΠΈΠΎΡΠΈΡΠ΅ΡΠ½ΡΡ ΠΎΡΠ΅ΡΠ΅Π΄Ρ.
Π ΠΈΡΠΎΠ³Π΅ ΠΌΡ ΠΏΠΎΠ»ΡΡΠ°Π΅ΠΌ ΠΎΡΡΠΎΡΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ Π² ΠΏΠΎΡΡΠ΄ΠΊΠ΅ Π½Π΅ΡΠ±ΡΠ²Π°Π½ΠΈΡ ΠΌΠ°ΡΡΠΈΠ², ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠΈΠΉ Π²ΡΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ ΠΈΡΡ ΠΎΠ΄Π½ΡΡ k ΠΌΠ°ΡΡΠΈΠ²ΠΎΠ². Π ΠΏΡΠΈΠΌΠ΅ΡΠ΅ Π²ΡΡΠ΅ ΠΌΡ ΠΏΠ΅ΡΠ΅Π΄Π°Π΅ΠΌ Π² ΡΡΠ½ΠΊΡΠΈΡ mergeArrays ΡΡΠΈ ΠΎΡΡΠΎΡΡΠΈΡΠΎΠ²Π°Π½Π½ΡΡ ΠΌΠ°ΡΡΠΈΠ²Π° ΠΈ ΠΏΠΎΠ»ΡΡΠ°Π΅ΠΌ ΠΎΡΡΠΎΡΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ ΠΌΠ°ΡΡΠΈΠ² [0 0 3 5 6 6 7 28].
Π ΡΡΠΎΠΌ ΠΊΠΎΠ΄Π΅ ΠΌΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ ΡΠ΅ ΠΆΠ΅ ΡΠ°ΠΌΡΠ΅ ΡΡΡΡΠΊΡΡΡΡ Π΄Π°Π½Π½ΡΡ ΠΈ Π°Π»Π³ΠΎΡΠΈΡΠΌ, ΡΡΠΎ ΠΈ Π² ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠ΅ΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅, Π½ΠΎ Π±ΠΎΠ»Π΅Π΅ Π»Π°ΠΊΠΎΠ½ΠΈΡΠ½ΠΎ Π·Π°ΠΏΠΈΡΡΠ²Π°Π΅ΠΌ ΠΊΠΎΠ΄. ΠΡ ΡΠΎΠ·Π΄Π°Π΅ΠΌ ΠΌΠ°ΡΡΠΈΠ² pointers Π΄Π»Ρ Ρ ΡΠ°Π½Π΅Π½ΠΈΡ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Π΅ΠΉ Π½Π° ΡΠ΅ΠΊΡΡΠΈΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΠΌΠ°ΡΡΠΈΠ²Π΅, ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΡΠ΅ΠΌ Π΅Π³ΠΎ Π½ΡΠ»ΡΠΌΠΈ ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ Π΅Π³ΠΎ Π΄Π»Ρ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ Π΄ΠΎΡΡΠΈΠΆΠ΅Π½ΠΈΡ ΠΊΠΎΠ½ΡΠ° ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΌΠ°ΡΡΠΈΠ²Π°.
Π’Π°ΠΊΠΆΠ΅ ΠΌΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ append Π΄Π»Ρ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² Π² ΡΠ΅Π·ΡΠ»ΡΡΠΈΡΡΡΡΠΈΠΉ ΠΌΠ°ΡΡΠΈΠ², Π²ΠΌΠ΅ΡΡΠΎ ΡΠ²Π½ΠΎΠ³ΠΎ ΡΠΊΠ°Π·Π°Π½ΠΈΡ ΠΈΠ½Π΄Π΅ΠΊΡΠ°. ΠΡΠΎ Π΄Π΅Π»Π°Π΅Ρ ΠΊΠΎΠ΄ Π±ΠΎΠ»Π΅Π΅ ΡΠΈΡΠ°Π΅ΠΌΡΠΌ ΠΈ Π»Π°ΠΊΠΎΠ½ΠΈΡΠ½ΡΠΌ.
Π ΠΈΡΠΎΠ³Π΅ ΠΌΡ ΠΏΠΎΠ»ΡΡΠ°Π΅ΠΌ ΡΠΎΡ ΠΆΠ΅ ΠΎΡΡΠΎΡΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ Π² ΠΏΠΎΡΡΠ΄ΠΊΠ΅ Π½Π΅ΡΠ±ΡΠ²Π°Π½ΠΈΡ ΠΌΠ°ΡΡΠΈΠ², ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠΈΠΉ Π²ΡΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ ΠΈΡΡ ΠΎΠ΄Π½ΡΡ k ΠΌΠ°ΡΡΠΈΠ²ΠΎΠ².
ΠΡΠΎΡ ΠΊΠΎΠ΄ ΡΡΠΈΡΡΠ²Π°Π΅Ρ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΌΠ°ΡΡΠΈΠ²ΠΎΠ² k, Π·Π°ΡΠ΅ΠΌ ΡΡΠΈΡΡΠ²Π°Π΅Ρ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΠΌΠ°ΡΡΠΈΠ² ΠΈ Π΅Π³ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ, ΡΠ»ΠΈΠ²Π°Π΅Ρ ΠΌΠ°ΡΡΠΈΠ²Ρ Π² ΠΎΠ΄ΠΈΠ½ ΠΎΡΡΠΎΡΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ ΠΌΠ°ΡΡΠΈΠ² ΠΈ Π²ΡΠ²ΠΎΠ΄ΠΈΡ Π΅Π³ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ. ΠΠ»Ρ ΡΠ»ΠΈΡΠ½ΠΈΡ ΠΌΠ°ΡΡΠΈΠ²ΠΎΠ² ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΠΊΡΡΠ°, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ ΠΈΠ·Π²Π»Π΅ΡΠ΅Π½ΠΈΠ΅ ΠΌΠΈΠ½ΠΈΠΌΡΠΌΠ° ΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ². ΠΠΎΠ΄ ΡΠ°ΠΊΠΆΠ΅ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΈ Π΄Π»Ρ ΠΏΠΎΡΡΡΠΎΠ΅Π½ΠΈΡ ΠΊΡΡΠΈ ΠΈ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠ°Π½ΠΈΡ Π΅Π΅ ΡΠ²ΠΎΠΉΡΡΠ².
/leetcode (ΠΎΡΠ²Π΅ΡΡ)
- 704. Binary Search
- 374. Guess Number Higher or Lower
- 74. Search a 2D Matrix
- 33. Search in Rotated Sorted Array
- 153. Find Minimum in Rotated Sorted Array
- 81. Search in Rotated Sorted Array II
- 136. Single Number - ΡΠ΅ΡΠΈΡΡ Π·Π° O(1) ΠΏΠΎ ΠΏΠ°ΠΌΡΡΠΈ
- 1. Two Sum
- 18. 4Sum
- 49. Group Anagrams
- 242. Valid Anagram
- 438. Find All Anagrams in a String
- 121. Best Time to Buy and Sell Stock
- 122. Best Time to Buy and Sell Stock II
- 714. Best Time to Buy and Sell Stock with Transaction Fee
- 309. Best Time to Buy and Sell Stock with Cooldown
ΠΡΠΎΠ³ΠΎ 835 ΠΏΠΎΠ²ΡΠΎΡΠΎΠ² Π·Π°Π΄Π°Ρ, ΠΌΠΈΠ½ΠΈΠΌΡΠΌ ΠΏΠΎ 20 ΡΠ°Π· ΠΊΠ°ΠΆΠ΄ΡΡ. π€ ΡΡΠ½Ρ



