ΠΠ΅ΡΠΊΠΎΠ»ΡΠΊΠΎ Π΄Π½Π΅ΠΉ Π½Π°Π·Π°Π΄ ΡΠ»ΡΡΠΈΠ»Π°ΡΡ
ΠΡΠΎ ΠΏΠΎΡΡ Ρ ΡΠ°Π·Π±ΠΎΡΠΎΠΌ Π·Π°Π΄Π°Ρ Π½Π° ΡΡΠ΅Π½Π΄Π΅ ΠΠΎΠ½ΡΡΡΠ° ΠΎΡ Π°Π²ΡΠΎΡΠ° ΠΈΡ ΡΠ΅ΠΊΡΡΠ°. ΠΡΠΎ Π±ΡΠ» Π½Π° ΠΠΈΠ΄ΡΠ΅ β ΡΡΠΎ Π²Π°Ρ ΠΏΠΎΠ²ΠΎΠ΄ Π²ΡΠΏΠΎΠΌΠ½ΠΈΡΡ ΠΏΡΠΈΡΡΠ½ΡΠ΅ Π²ΠΏΠ΅ΡΠ°ΡΠ»Π΅Π½ΠΈΡ, ΠΊΡΠΎ Π½Π΅ Π±ΡΠ» β ΡΠ°Π½Ρ ΡΠ°Π·ΠΌΡΡΡ ΠΌΠΎΠ·Π³ΠΈ big O-Π½ΠΎΡΠ°ΡΠΈΠ΅ΠΉ.
ΠΡΠ»ΠΈ Π΄Π°ΠΆΠ΅ ΡΡΠ°ΡΡΠ½ΠΈΠΊΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠ°Π·ΠΎΠ±ΡΠ°Π»ΠΈ ΡΠ»ΠΈΠΏΡΠ°ΡΡ Π½Π° ΡΠ»Π°ΠΉΠ΄Ρ, ΡΡΠΎΠ±Ρ Π·Π°ΠΏΠΈΡΠ°ΡΡ ΡΠ²ΠΎΡ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅. Π― Π½Π΅ ΡΡΡΡ β ΠΎΠ½ΠΈ ΡΠ΄Π°Π»ΠΈ Π½Π° ΠΏΡΠΎΠ²Π΅ΡΠΊΡ Π²ΠΎΡ ΡΠ°ΠΊΡΡ ΠΏΠ°ΡΠΊΡ Π±ΡΠΌΠ°Π³ΠΈ:
ΠΡΠ΅Π³ΠΎ Π±ΡΠ»ΠΎ ΡΡΠΈ Π·Π°Π΄Π°ΡΠΈ:
- ΠΎ Π²ΡΠ±ΠΎΡΠ΅ ΡΠ΅ΠΏΠ»ΠΈΠΊ ΠΏΠΎ Π²Π΅ΡΠ°ΠΌ Π΄Π»Ρ Π±Π°Π»Π°Π½ΡΠΈΡΠΎΠ²ΠΊΠΈ Π½Π°Π³ΡΡΠ·ΠΊΠΈ
- ΠΎ ΡΠΎΡΡΠΈΡΠΎΠ²ΠΊΠ΅ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠΎΠ² Π·Π°ΠΏΡΠΎΡΠ° ΠΊ in-memory Π±Π°Π·Π΅ Π΄Π°Π½Π½ΡΡ
- ΠΎ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠ΅ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ Π² ΡΠ°ΡΠΏΡΠ΅Π΄Π΅Π»ΡΠ½Π½ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΠ΅ Ρ ΠΊΠΎΠ»ΡΡΠ΅Π²ΠΎΠΉ ΡΠΎΠΏΠΎΠ»ΠΎΠ³ΠΈΠ΅ΠΉ
ΠΠ°Π΄Π°ΡΠ° 1. ClusterClient
ΠΡΠΆΠ½ΠΎ Π±ΡΠ»ΠΎ ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠΈΡΡ Π°Π»Π³ΠΎΡΠΈΡΠΌ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎΠ³ΠΎ Π²ΡΠ±ΠΎΡΠ° K ΠΈΠ· N Π²Π·Π²Π΅ΡΠ΅Π½Π½ΡΡ ΡΠ΅ΠΏΠ»ΠΈΠΊ ΡΠ°ΡΠΏΡΠ΅Π΄Π΅Π»ΡΠ½Π½ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΡ:
Your team is tasked with developing a client library for a massively distributed cluster of N nodes. The library would keep track of various metadata associated with nodes (e.g., their latencies, 4xx/5xx response rates, etc.) and assign floating point weights W1..WN to them. In order to support the concurrent execution strategy, the library should be able to pick K of N nodes randomlyβa chance of being selected should be proportional to a nodeβs weight.
Propose an algorithm to select nodes efficiently. Estimate its computational complexity using big O notation.
ΠΠΎΡΠ΅ΠΌΡ Π²ΡΡ Π½Π° Π°Π½Π³Π»ΠΈΠΉΡΠΊΠΎΠΌ?
ΠΠΎΡΠΎΠΌΡ ΡΡΠΎ Π² ΡΠ°ΠΊΠΎΠΌ Π²ΠΈΠ΄Π΅ Ρ Π½ΠΈΠΌΠΈ Π±ΠΎΡΠΎΠ»ΠΈΡΡ ΡΡΠ°ΡΡΠ½ΠΈΠΊΠΈ ΠΊΠΎΠ½ΡΠ΅ΡΠ΅Π½ΡΠΈΠΈ ΠΈ ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ Π°Π½Π³Π»ΠΈΠΉΡΠΊΠΈΠΉ Π±ΡΠ» ΠΎΡΠΈΡΠΈΠ°Π»ΡΠ½ΡΠΌ ΡΠ·ΡΠΊΠΎΠΌ ΠΠΈΠ΄ΡΡ. ΠΡΠ³Π»ΡΠ΄Π΅Π»ΠΈ Π·Π°Π΄Π°ΡΠΊΠΈ ΡΠ°ΠΊ:
ΠΠΎΠ·ΡΠΌΠΈΡΠ΅ Π±ΡΠΌΠ°Π³Ρ ΠΈ ΠΊΠ°ΡΠ°Π½Π΄Π°Ρ, ΠΏΠΎΠ΄ΡΠΌΠ°ΠΉΡΠ΅, Π½Π΅ ΡΠΎΡΠΎΠΏΠΈΡΠ΅ΡΡ ΡΡΠ°Π·Ρ ΠΎΡΠΊΡΡΠ²Π°ΡΡ ΡΠΏΠΎΠΉΠ»Π΅ΡΡ π
Π Π°Π·Π±ΠΎΡ ΡΠ΅ΡΠ΅Π½ΠΈΡ (Π²ΠΈΠ΄Π΅ΠΎ)
ΠΠ°ΡΠ°Π»ΠΎ Π² 5:53, Π²ΡΠ΅Π³ΠΎ 4 ΠΌΠΈΠ½ΡΡΡ:
Π Π²ΠΎΡ ΠΊΠ°ΠΊ ΠΏΠΈΡΡΠΈΠ»ΠΈ ΡΠ²ΠΎΡ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ ΡΠ΅ ΡΠ°ΠΌΡΠ΅ ΡΠ΅Π±ΡΡΠ° Ρ ΡΠ»ΠΈΠΏΡΠ°ΡΡΠΎΠΌ:
Π Π°Π·Π±ΠΎΡ ΡΠ΅ΡΠ΅Π½ΠΈΡ (ΡΠ΅ΠΊΡΡ)
ΠΠ° ΠΏΠΎΠ²Π΅ΡΡ Π½ΠΎΡΡΠΈ Π»Π΅ΠΆΠΈΡ ΡΠ°ΠΊΠΎΠ΅ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅: ΠΏΡΠΎΡΡΠΌΠΌΠΈΡΠΎΠ²Π°ΡΡ Π²Π΅ΡΠ° Π²ΡΠ΅Ρ ΡΠ΅ΠΏΠ»ΠΈΠΊ, ΡΠ³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°ΡΡ ΡΠ»ΡΡΠ°ΠΉΠ½ΠΎΠ΅ ΡΠΈΡΠ»ΠΎ ΠΎΡ 0 Π΄ΠΎ ΡΡΠΌΠΌΡ Π²ΡΠ΅Ρ Π²Π΅ΡΠΎΠ², Π·Π°ΡΠ΅ΠΌ Π²ΡΠ±ΡΠ°ΡΡ ΡΠ°ΠΊΡΡ i-ΡΠ΅ΠΏΠ»ΠΈΠΊΡ, ΡΡΠΎ ΡΡΠΌΠΌΠ° Π²Π΅ΡΠΎΠ² ΡΠ΅ΠΏΠ»ΠΈΠΊ ΠΎΡ 0 Π΄ΠΎ (i-1)-ΠΎΠΉ ΠΌΠ΅Π½ΡΡΠ΅ ΡΠ»ΡΡΠ°ΠΉΠ½ΠΎΠ³ΠΎ ΡΠΈΡΠ»Π°, Π° ΡΡΠΌΠΌΠ° Π²Π΅ΡΠΎΠ² ΡΠ΅ΠΏΠ»ΠΈΠΊ ΠΎΡ 0 Π΄ΠΎ i-ΠΎΠΉ β Π±ΠΎΠ»ΡΡΠ΅ Π½Π΅Π³ΠΎ. Π’Π°ΠΊ ΠΏΠΎΠ»ΡΡΠΈΡΡΡ Π²ΡΠ±ΡΠ°ΡΡ ΠΎΠ΄Π½Ρ ΡΠ΅ΠΏΠ»ΠΈΠΊΡ, Π° ΡΡΠΎΠ±Ρ Π²ΡΠ±ΡΠ°ΡΡ ΡΠ»Π΅Π΄ΡΡΡΡΡ, Π½ΡΠΆΠ½ΠΎ ΠΏΠΎΠ²ΡΠΎΡΠΈΡΡ Π²ΡΡ ΠΏΡΠΎΡΠ΅Π΄ΡΡΡ, Π½Π΅ ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°Ρ Π²ΡΠ±ΡΠ°Π½Π½ΡΡ ΡΠ΅ΠΏΠ»ΠΈΠΊΡ. Π‘ ΡΠ°ΠΊΠΈΠΌ Π°Π»Π³ΠΎΡΠΈΡΠΌΠΎΠΌ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡΡ Π²ΡΠ±ΠΎΡΠ° ΠΎΠ΄Π½ΠΎΠΉ ΡΠ΅ΠΏΠ»ΠΈΠΊΠΈ β O(N), ΡΠ»ΠΎΠΆΠ½ΠΎΡΡΡ Π²ΡΠ±ΠΎΡΠ° K ΡΠ΅ΠΏΠ»ΠΈΠΊ β O(NΒ·K) ~ O(N2).
ΠΠ²Π°Π΄ΡΠ°ΡΠΈΡΠ½Π°Ρ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡΡ β ΡΡΠΎ ΠΏΠ»ΠΎΡ
ΠΎ, ΠΎΠ΄Π½Π°ΠΊΠΎ Π΅Ρ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ»ΡΡΡΠΈΡΡ. ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ ΠΏΠΎΡΡΡΠΎΠΈΠΌ
ΠΠΈΠ½Π΅ΠΉΠ½ΠΎ-Π»ΠΎΠ³Π°ΡΠΈΡΠΌΠΈΡΠ΅ΡΠΊΠ°Ρ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡΡ ΠΏΡΠΈΡΡΠ½Π΅Π΅ ΠΊΠ²Π°Π΄ΡΠ°ΡΠΈΡΠ½ΠΎΠΉ, ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎ Π΄Π»Ρ Π±ΠΎΠ»ΡΡΠΈΡ K.
ΠΠΌΠ΅Π½Π½ΠΎ ΡΡΠΎΡ Π°Π»Π³ΠΎΡΠΈΡΠΌ
ΠΠ°Π΄Π°ΡΠ° 2. Zebra
ΠΡΠΆΠ½ΠΎ Π±ΡΠ»ΠΎ ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠΈΡΡ Π°Π»Π³ΠΎΡΠΈΡΠΌ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎΠΉ ΡΠΎΡΡΠΈΡΠΎΠ²ΠΊΠΈ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠΎΠ² Π² ΠΏΠ°ΠΌΡΡΠΈ ΠΏΠΎ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ»ΡΠ½ΠΎΠΌΡ Π½Π΅ΠΈΠ½Π΄Π΅ΠΊΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠΌΡ ΠΏΠΎΠ»Ρ:
Your team is tasked with developing a sharded in-memory document database. A common workload would be to select top N documents sorted by an arbitrary (non-indexed) numeric field from a collection of size M (usually N < 100 << M). A slightly less common workload would be to select top N after skipping top S documents (S ~ N).
Propose an algorithm to execute such queries efficiently. Estimate its computational complexity using big O notation in the average case and the worst case scenarios.
Π Π°Π·Π±ΠΎΡ ΡΠ΅ΡΠ΅Π½ΠΈΡ (Π²ΠΈΠ΄Π΅ΠΎ)
ΠΠ°ΡΠ°Π»ΠΎ Π² 34:50, Π²ΡΠ΅Π³ΠΎ 6 ΠΌΠΈΠ½ΡΡ:
Π Π°Π·Π±ΠΎΡ ΡΠ΅ΡΠ΅Π½ΠΈΡ (ΡΠ΅ΠΊΡΡ)
Π Π΅ΡΠ΅Π½ΠΈΠ΅ Π½Π° ΠΏΠΎΠ²Π΅ΡΡ
Π½ΠΎΡΡΠΈ: ΠΎΡΡΠΎΡΡΠΈΡΠΎΠ²Π°ΡΡ Π²ΡΠ΅ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΡ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Ρ ΠΏΠΎΠΌΠΎΡΡΡ
ΠΡΠ΅Π²ΠΈΠ΄Π½ΠΎ, ΡΡΠΎ ΡΠΎΡΡΠΈΡΠΎΠ²Π°ΡΡ Π²ΡΠ΅ M Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠΎΠ², ΡΡΠΎΠ±Ρ Π·Π°ΡΠ΅ΠΌ Π²Π·ΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ Π½Π΅Π±ΠΎΠ»ΡΡΡΡ ΡΠ°ΡΡΡ ΠΎΡ Π½ΠΈΡ
β Π½Π΅ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎ. Π§ΡΠΎΠ±Ρ Π½Π΅ ΡΠΎΡΡΠΈΡΠΎΠ²Π°ΡΡ Π²ΡΠ΅ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΡ, ΠΏΠΎΠ΄ΠΎΠΉΠ΄ΡΡ Π°Π»Π³ΠΎΡΠΈΡΠΌ
ΠΠ΄Π½Π°ΠΊΠΎ, ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°ΡΡ Π΅ΡΡ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½Π΅Π΅ β Π²ΠΎΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ Π°Π»Π³ΠΎΡΠΈΡΠΌΠΎΠΌ
ΠΠ΄Π½Π°ΠΊΠΎ heap streaming ΠΎΠΊΠ°Π·ΡΠ²Π°Π΅ΡΡΡ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½Π΅Π΅ Π·Π° ΡΡΡΡ ΡΠΎΠ³ΠΎ, ΡΡΠΎ Π½Π° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ΅ Π±ΠΎΠ»ΡΡΡΡ ΡΠ°ΡΡΡ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠΎΠ² ΠΏΠΎΠ»ΡΡΠ°Π΅ΡΡΡ ΠΎΡΠ±ΡΠΎΡΠΈΡΡ, Π½Π΅ ΠΏΠ΅ΡΠ΅ΡΡΡΠ°ΠΈΠ²Π°Ρ ΠΊΡΡΡ, ΠΏΠΎΡΠ»Π΅ Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΠΎΠ³ΠΎ ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ Ρ Π΅Ρ ΠΊΠΎΡΠ½Π΅Π²ΡΠΌ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠΌ. Π’Π°ΠΊΠ°Ρ ΡΠΎΡΡΠΈΡΠΎΠ²ΠΊΠ° ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° Π² Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ½ΠΎΠΉ in-memory Π±Π°Π·Π΅ Π΄Π°Π½Π½ΡΡ Zebra, ΡΠ°Π·ΡΠ°Π±ΠΎΡΠ°Π½Π½ΠΎΠΉ ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΠΎΠΉ Π² ΠΠΎΠ½ΡΡΡΠ΅.
ΠΠ°Π΄Π°ΡΠ° 3. State swaps
ΠΡΠΆΠ½ΠΎ Π±ΡΠ»ΠΎ ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠΈΡΡ ΡΠ°ΠΌΡΠΉ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΡΠΉ Π°Π»Π³ΠΎΡΠΈΡΠΌ Π΄Π»Ρ ΡΠ΄Π²ΠΈΠ³Π° ΡΠΎΡΡΠΎΡΠ½ΠΈΠΉ:
Your team is tasked with developing a fancy state exchange mechanism for a distributed cluster of N nodes. The i-th nodeβs state should be transferred to the (i+1)-th node, the N-th nodeβs state should be transferred to the first node. The only supported operation is the state swap when two nodes exchange their states atomically. It is known that a state swap takes M milliseconds. Every node is able to participate in a single state swap at any given moment.
How long does it take to transfer the states of all nodes in a cluster?
Π Π°Π·Π±ΠΎΡ ΡΠ΅ΡΠ΅Π½ΠΈΡ (ΡΠ΅ΠΊΡΡ)
Π Π΅ΡΠ΅Π½ΠΈΠ΅ Π½Π° ΠΏΠΎΠ²Π΅ΡΡ Π½ΠΎΡΡΠΈ: ΠΎΠ±ΠΌΠ΅Π½ΡΡΡ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ ΠΏΠ΅ΡΠ²ΠΎΠ³ΠΎ ΠΈ Π²ΡΠΎΡΠΎΠ³ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°, Π·Π°ΡΠ΅ΠΌ ΠΏΠ΅ΡΠ²ΠΎΠ³ΠΎ ΠΈ ΡΡΠ΅ΡΡΠ΅Π³ΠΎ, Π·Π°ΡΠ΅ΠΌ ΠΏΠ΅ΡΠ²ΠΎΠ³ΠΎ ΠΈ ΡΠ΅ΡΠ²ΡΡΡΠΎΠ³ΠΎ ΠΈ ΡΠ°ΠΊ Π΄Π°Π»Π΅Π΅. ΠΠΎΡΠ»Π΅ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΎΠ±ΠΌΠ΅Π½Π° ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° Π±ΡΠ΄Π΅Ρ ΠΎΠΊΠ°Π·ΡΠ²Π°ΡΡΡΡ Π½Π° Π½ΡΠΆΠ½ΠΎΠΉ ΠΏΠΎΠ·ΠΈΡΠΈΠΈ. ΠΡΠΈΠ΄ΡΡΡΡ ΡΠ΄Π΅Π»Π°ΡΡ O(N) ΠΏΠ΅ΡΠ΅ΡΡΠ°Π½ΠΎΠ²ΠΎΠΊ ΠΈ ΠΏΠΎΡΡΠ°ΡΠΈΡΡ O(NΒ·M) Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ.
ΠΠΈΠ½Π΅ΠΉΠ½ΠΎΠ΅ Π²ΡΠ΅ΠΌΡ β ΡΡΠΎ Π΄ΠΎΠ»Π³ΠΎ, ΠΏΠΎΡΡΠΎΠΌΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±ΠΌΠ΅Π½ΠΈΠ²Π°ΡΡ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² ΠΏΠΎΠΏΠ°ΡΠ½ΠΎ: ΠΏΠ΅ΡΠ²ΠΎΠ³ΠΎ ΡΠΎ Π²ΡΠΎΡΡΠΌ, ΡΡΠ΅ΡΡΠ΅Π³ΠΎ Ρ ΡΠ΅ΡΠ²ΡΡΡΡΠΌ ΠΈ ΡΠ°ΠΊ Π΄Π°Π»Π΅Π΅. ΠΠΎΡΠ»Π΅ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΎΠ±ΠΌΠ΅Π½Π° ΡΠΎΡΡΠΎΡΠ½ΠΈΡ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Π²ΡΠΎΡΠΎΠ³ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° Π±ΡΠ΄Π΅Ρ ΠΎΠΊΠ°Π·ΡΠ²Π°ΡΡΡΡ Π½Π° Π½ΡΠΆΠ½ΠΎΠΉ ΠΏΠΎΠ·ΠΈΡΠΈΠΈ. ΠΡΠΈΠ΄ΡΡΡΡ ΡΠ΄Π΅Π»Π°ΡΡ O(lg N) ΠΏΠ΅ΡΠ΅ΡΡΠ°Π½ΠΎΠ²ΠΎΠΊ ΠΈ ΠΏΠΎΡΡΠ°ΡΠΈΡΡ O(M lg N) Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ.
ΠΠ΄Π½Π°ΠΊΠΎ, ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°ΡΡ ΡΠ΄Π²ΠΈΠ³ Π΅ΡΡ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½Π΅Π΅ β Π½Π΅ Π·Π° Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎΠ΅, Π° Π·Π° ΠΊΠΎΠ½ΡΡΠ°Π½ΡΠ½ΠΎΠ΅ Π²ΡΠ΅ΠΌΡ. ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ Π½Π° ΠΏΠ΅ΡΠ²ΠΎΠΌ ΡΠ°Π³Π΅ Π½ΡΠΆΠ½ΠΎ ΠΎΠ±ΠΌΠ΅Π½ΡΡΡ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ ΠΏΠ΅ΡΠ²ΠΎΠ³ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° Ρ ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠΌ, Π²ΡΠΎΡΠΎΠ³ΠΎ Ρ ΠΏΡΠ΅Π΄ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠΌ ΠΈ ΡΠ°ΠΊ Π΄Π°Π»Π΅Π΅. Π‘ΠΎΡΡΠΎΡΠ½ΠΈΠ΅ ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅Π³ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° ΠΎΠΊΠ°ΠΆΠ΅ΡΡΡ Π½Π° Π½ΡΠΆΠ½ΠΎΠΉ ΠΏΠΎΠ·ΠΈΡΠΈΠΈ. Π ΡΠ΅ΠΏΠ΅ΡΡ Π½ΡΠΆΠ½ΠΎ ΠΎΠ±ΠΌΠ΅Π½ΡΡΡ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ Π²ΡΠΎΡΠΎΠ³ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° Ρ ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠΌ, ΡΡΠ΅ΡΡΠ΅Π³ΠΎ Ρ ΠΏΡΠ΅Π΄ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠΌ ΠΈ ΡΠ°ΠΊ Π΄Π°Π»Π΅Π΅. ΠΠΎΡΠ»Π΅ ΡΡΠΎΠ³ΠΎ ΡΠ°ΡΠ½Π΄Π° ΠΎΠ±ΠΌΠ΅Π½ΠΎΠ² ΡΠΎΡΡΠΎΡΠ½ΠΈΡ Π²ΡΠ΅Ρ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² ΠΎΠΊΠ°ΠΆΡΡΡΡ Π½Π° Π½ΡΠΆΠ½ΠΎΠΉ ΠΏΠΎΠ·ΠΈΡΠΈΠΈ. ΠΡΠ΅Π³ΠΎ Π±ΡΠ΄Π΅Ρ ΡΠ΄Π΅Π»Π°Π½ΠΎ O(2M) ~ O(1) ΠΏΠ΅ΡΠ΅ΡΡΠ°Π½ΠΎΠ²ΠΎΠΊ.
Π’Π°ΠΊΠΎΠ΅ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ ΡΠΎΠ²Π΅ΡΡΠ΅Π½Π½ΠΎ Π½Π΅ ΡΠ΄ΠΈΠ²ΠΈΡ ΠΌΠ°ΡΠ΅ΠΌΠ°ΡΠΈΠΊΠ°, ΠΊΠΎΡΠΎΡΡΠΉ Π΅ΡΡ ΠΏΠΎΠΌΠ½ΠΈΡ, ΡΡΠΎ ΠΏΠΎΠ²ΠΎΡΠΎΡ β ΡΡΠΎ ΠΊΠΎΠΌΠΏΠΎΠ·ΠΈΡΠΈΡ Π΄Π²ΡΡ ΠΎΡΠ΅Π²ΡΡ ΡΠΈΠΌΠΌΠ΅ΡΡΠΈΠΉ. ΠΡΡΠ°ΡΠΈ, ΠΎΠ½ΠΎ ΡΡΠΈΠ²ΠΈΠ°Π»ΡΠ½ΠΎ ΠΎΠ±ΠΎΠ±ΡΠ°Π΅ΡΡΡ Π΄Π»Ρ ΡΠ΄Π²ΠΈΠ³Π° Π½Π΅ Π½Π° ΠΎΠ΄Π½Ρ, Π° Π½Π° K < N ΠΏΠΎΠ·ΠΈΡΠΈΠΉ. (ΠΠ°ΠΏΠΈΡΠΈΡΠ΅ Π² ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΡΡ , ΠΊΠ°ΠΊ ΠΈΠΌΠ΅Π½Π½ΠΎ.)
ΠΠΎΠ½ΡΠ°Π²ΠΈΠ»ΠΈΡΡ Π·Π°Π΄Π°ΡΠΊΠΈ? ΠΠ½Π°Π΅ΡΠ΅ Π΄ΡΡΠ³ΠΈΠ΅ ΡΠ΅ΡΠ΅Π½ΠΈΡ? ΠΠ΅Π»ΠΈΡΠ΅ΡΡ Π² ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΡΡ .
Π Π²ΠΎΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΏΠΎΠ»Π΅Π·Π½ΡΡ ΡΡΡΠ»ΠΎΠΊ Π½Π°ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠΊ:
- ΡΠ·Π½Π°ΠΉΡΠ΅ Π±ΠΎΠ»ΡΡΠ΅ ΠΎΠ±
ΠΈΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΠ½ΠΎΠΉ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ΅ Π² ΠΠΎΠ½ΡΡΡΠ΅ - ΠΏΠΎΡΠΌΠΎΡΡΠΈΡΠ΅ Π·Π°ΠΏΠΈΡΠΈ Π²Π½ΡΡΡΠ΅Π½Π½ΠΈΡ
Π»Π΅ΡΡΡΠ΅ΠΊ Ρ Π΄ΠΎΠΊΠ»Π°Π΄Π°ΠΌΠΈ ΠΎ ΡΠ°ΡΠΏΡΠ΅Π΄Π΅Π»ΡΠ½Π½ΡΡ ΡΠΈΡΡΠ΅ΠΌΠ°Ρ - ΠΏΠΎΡΠΌΠΎΡΡΠΈΡΠ΅ ΡΠΈΠΊΠ» Π²ΠΈΠ΄Π΅ΠΎΠ»Π΅ΠΊΡΠΈΠΉ Β«
ΠΠ΅ΠΎΠ±ΡΡΠ½ΡΠ΅ Π°Π»Π³ΠΎΡΠΈΡΠΌΡ Π΄Π»Ρ ΠΎΠ±ΡΡΠ½ΡΡ Π»ΡΠ΄Π΅ΠΉ Β» - ΠΏΠΎΠ΄ΠΏΠΈΡΠΈΡΠ΅ΡΡ Π½Π° Π½Π°Ρ
ΠΊΠ°Π½Π°Π» Π² Π’Π΅Π»Π΅Π³ΡΠ°ΠΌΠ΅
ΠΡΡΠΎΡΠ½ΠΈΠΊ: habr.com