ЁЯЧДя╕П рдзрдбрд╛ 02 тАФ Arrays рдЖрдгрд┐ strings: рд▓реЙрдХрд░реНрд╕рдЪреА рд░рд╛рдВрдЧ
ЁЯУН рддреБрдореНрд╣реА рдЗрдереЗ рдЖрд╣рд╛рдд: 12 рдкреИрдХреА рдзрдбрд╛ 02 ┬╖ рдкреБрдвреЗ: lesson-03-linked-lists
ЁЯУж рдпрд╛ рдмреНрд░рдБрдЪрдордзреНрдпреЗ рдХрд╛рдп рдЖрд╣реЗ
рдзрдбреЗ 01тАУ02. Python рдЪреНрдпрд╛ list рдорд╛рдЧрдЪрд╛ structure, рддреЛ рдХрд╢рд╛рдд рдЬрд▓рдж рдЖрдгрд┐ рдХрд╢рд╛рдд рд╣рд│реВ
рдЖрд╣реЗ, рдЖрдгрд┐ рдореБрд▓рд╛рдЦрддреАрддрд▓реНрдпрд╛ рдПрдХ рддреГрддреАрдпрд╛рдВрд╢ рдкреНрд░рд╢реНрдирд╛рдВрдЪреА рдЙрддреНрддрд░реЗ рджреЗрдгрд╛рд░реЗ рджреЛрди array patterns.
- dsa/algorithms.py тАФ
two_sum_sorted,best_window - dsa/demo.py тАФ
arrays: рдПрдХрд╛ step рдордзреНрдпреЗ index, рд╡реАрд╕ рд▓рд╛рдЦ items рд╡рд░ рд╕реБрд░реБрд╡рд╛рддреАрд▓рд╛ insert, рдПрдХ window, two pointers
ЁЯзТ 5 рд╡рд░реНрд╖рд╛рдВрдЪреНрдпрд╛ рдореБрд▓рд╛рд▓рд╛ рд╕рдордЬрд╛рд╡рд▓реНрдпрд╛рд╕рд╛рд░рдЦреЗ
рдХреНрд░рдорд╛рдВрдХ рдЕрд╕рд▓реЗрд▓реНрдпрд╛ lockers рдЪреА рд░рд╛рдВрдЧ, рд╕рдЧрд│реЗ рд╕рдорд╛рди рдЖрдХрд╛рд░рд╛рдЪреЗ, рд╢реЗрдЬрд╛рд░реА-рд╢реЗрдЬрд╛рд░реА. locker 17 рд╣рд╡рд╛? рдереЗрдЯ рддрд┐рдереЗ рдЬрд╛ тАФ рдПрдХ step, рд░рд╛рдВрдЧреЗрдд 20 lockers рдЕрд╕реЛрдд рдХреА 2 рдХреЛрдЯреА, рдХрд╛рд░рдг рддреЛ рдХреБрдареЗ рдЖрд╣реЗ рд╣реЗ рддреБрдореНрд╣реА рдореЛрдЬреВ рд╢рдХрддрд╛. рдкрдг рд╕реБрд░реБрд╡рд╛рддреАрд▓рд╛ рдПрдХ рдирд╡рд╛ locker рдШреБрд╕рд╡рд▓рд╛ рддрд░ рддреНрдпрд╛рдЪреНрдпрд╛рдирдВрддрд░рдЪреЗ рд╕рдЧрд│реЗ рдПрдХ рдЬрд╛рдЧрд╛ рд╕рд░рдХрддрд╛рдд: рд░рд╛рдВрдЧ рдЬрд┐рддрдХреА рд▓рд╛рдВрдм, рддрд┐рддрдХреА рд╕рд░рдХрд╡рд╛рд╕рд░рдХрд╡реА рдЬрд╛рд╕реНрдд. рд╢реЗрд╡рдЯреА рдЬреЛрдбрдгреЗ рд╕реНрд╡рд╕реНрдд рдЖрд╣реЗ тАФ рд░рд╛рдВрдЧ рднрд░реЗрдкрд░реНрдпрдВрдд; рдордЧ рдХрд╛рд│рдЬреАрд╡рд╛рд╣реВ рдореЛрдареА рд░рд╛рдВрдЧ рдмрд╛рдВрдзрддреЛ рдЖрдгрд┐ рд╕рдЧрд│реЗ рд╣рд▓рд╡рддреЛ (рдХреНрд╡рдЪрд┐рддрдЪ, рдореНрд╣рдгреВрди рд╕рд░рд╛рд╕рд░реА рдЕрдЬреВрдирд╣реА рд╕реНрд╡рд╕реНрдд).
ЁЯЧ║я╕П рдЖрдХреГрддреА
flowchart LR
L["[0] Aishwarya | [1] Katrina | [2] Dipika | [3] Meera | тАж | [17] Zoya"]
L -->|"lockers[17]"| O["one step тАФ O(1)"]
L -->|"insert(0, x)"| S["everyone shifts тАФ O(n)"]
тЭУ рдХрд╛рдп
- Array: рд╕рд▓рдЧ memory, рдард░рд▓реЗрд▓рд╛ element рдЖрдХрд╛рд░ тЖТ address = base + i ├Ч size. Index O(1), append O(1) amortised, рдордзреЗ insert/delete O(n), search O(n) unsorted / O(log n) sorted.
- Python
listрд╣рд╛ dynamic array рдЖрд╣реЗ; string рдореНрд╣рдгрдЬреЗ рди рдмрджрд▓рдгрд╛рд░рд╛ (immutable) characters рдЪрд╛ array (рдкреНрд░рддреНрдпреЗрдХ рдмрджрд▓ copy рдХрд░рддреЛ тАФ list рд╡рд╛рдкрд░реВрди рдмрдирд╡рд╛ рдЖрдгрд┐''.joinрдХрд░рд╛). - Two pointers: рдкреНрд░рддреНрдпреЗрдХ рдЯреЛрдХрд╛рд▓рд╛ рдПрдХ (рдХрд┐рдВрд╡рд╛ рджреЛрдиреНрд╣реА рдкреБрдвреЗ рд╕рд░рдХрдгрд╛рд░реЗ) тАФ sorted array рд╡рд░ two-sum, duplicates рдХрд╛рдврдгреЗ, рдЙрд▓рдЯреЗ рдХрд░рдгреЗ, partitioning: O(n), рдЬрд┐рдереЗ рд╕рд╛рдзреА рдкрджреНрдзрдд O(n┬▓) рдЕрд╕рддреЗ.
- Sliding window: k items рдЪреА window рдкреБрдвреЗ рд╕рд░рдХрддреЗ; рдирд╡рд╛ item рдЬреЛрдбрд╛, рдЬреБрдирд╛ рдХрд╛рдврд╛ тАФ рд╕рд▓рдЧ k рджрд┐рд╡рд╕рд╛рдВрддрд▓реЗ рд╕рд░реНрд╡реЛрддреНрддрдо, рдкреБрдирд░рд╛рд╡реГрддреНрддреА рдирд╕рд▓реЗрд▓реА рд╕рд░реНрд╡рд╛рдд рд▓рд╛рдВрдм substring: O(n).
- 2-D grids рдореНрд╣рдгрдЬреЗ arrays рдЪреЗ arrays:
grid[row][col].
ЁЯдФ рдХрд╛
Arrays default рдЕрд╕рддрд╛рдд рдХрд╛рд░рдг programs рдмрд╣реБрддреЗрдХ рд╡реЗрд│рд╛ рд╡рд╛рдЪрдирдЪ рдХрд░рддрд╛рдд, рдЖрдгрд┐ рд╕рд▓рдЧ memory CPUs рдирд╛ рдЖрд╡рдбрддреЗ (caches). рдХреЛрдгрддреА operations O(n) рдЖрд╣реЗрдд рд╣реЗ рдиреЗрдордХреЗ рдорд╛рд╣реАрдд рдЕрд╕рд▓реЗ рдХреА list рдЪреБрдХреАрдЪреЗ рд╕рд╛рдзрди рдХрдзреА рдЖрд╣реЗ рд╣реЗ рдХрд│рддреЗ тАФ рдЖрдгрд┐ nested loop рдРрд╡рдЬреА рд╣реЗ рджреЛрди patterns рдХрдзреА рд╡рд╛рдкрд░рд╛рдпрдЪреЗ рддреЗрд╣реА.
ЁЯФз рдХрд╕реЗ (рдпрд╛ repo рдордзреНрдпреЗ)
two_sum_sorted рджреЛрди indices рдЖрддрд▓реНрдпрд╛ рджрд┐рд╢реЗрдиреЗ рдЪрд╛рд▓рд╡рддреЛ; best_window рдЪрд╛рд▓реВ рдмреЗрд░реАрдЬ рдареЗрд╡рддреЛ
рдЖрдгрд┐ рд╕рд░рдХрддреЛ. demo.py arrays рд╡реАрд╕ рд▓рд╛рдЦ items рд╡рд░ insert(0, тАж) рдЖрдгрд┐ append рдпрд╛рдВрдЪрд╛
рд╡реЗрд│ рдореЛрдЬрддреЛ.
ЁЯзк рдХрд░реВрди рдкрд╛рд╣рд╛
python3 dsa/demo.py arrays
python3 - <<'EOF'
import sys; sys.path.insert(0, "dsa"); from algorithms import two_sum_sorted, best_window
print(two_sum_sorted([1, 3, 4, 6, 8, 11], 14)) # (1, 5): 3 + 11 тАФ the two monitors met after one step each
print(best_window([2, 1, 5, 1, 3, 2], 3)) # (9, 2): 5 + 1 + 3
s = ""
for i in range(5): s += str(i) # each += copies the string: O(n┬▓) in a loop
print(s, "".join(str(i) for i in range(5))) # join builds once: O(n)
EOF
тЬЕ рддрдкрд╛рд╕рд╛ тАФ рддреБрдореНрд╣рд╛рд▓рд╛ рдХрд╛рдп рджрд┐рд╕рд╛рдпрд▓рд╛ рд╣рд╡реЗ
lockers[17] = 17 рдПрдХрд╛ step рдордзреНрдпреЗ; рд╡реАрд╕ рд▓рд╛рдЦ items рд╡рд░ рд╕реБрд░реБрд╡рд╛рддреАрдЪрд╛ insert
milliseconds рдШреЗрддреЛ рддрд░ append microseconds; window рдЪреЗ рдЙрддреНрддрд░ рджрд┐рд╡рд╕ 1 рд▓рд╛ 19;
two-sum рдЕрд╢рд╛ indices рдЪреА рдЬреЛрдбреА рдкрд░рдд рдХрд░рддреЛ рдЬреНрдпрд╛рдВрдЪреНрдпрд╛ values рдЪреА рдмреЗрд░реАрдЬ target рдЗрддрдХреА рд╣реЛрддреЗ.
ЁЯПБ рддреБрдореНрд╣реА рдЖрддреНрддрд╛рдЪ рдХрд╛рдп рд╕рд┐рджреНрдз рдХреЗрд▓реЗ
рддреБрдореНрд╣реА рдкреНрд░рддреНрдпреЗрдХ list operation рдЪрд╛ рдЦрд░реНрдЪ рд╕рд╛рдВрдЧреВ рд╢рдХрддрд╛, рдЖрдгрд┐ data рдХреНрд░рдорд╛рдиреЗ рдХрд┐рдВрд╡рд╛ рд░рд╛рдВрдЧреЗрдд рдЕрд╕реЗрд▓ рддреЗрд╡реНрд╣рд╛ n┬▓ loop рдРрд╡рдЬреА two pointers рдХрд┐рдВрд╡рд╛ window рд╡рд╛рдкрд░реВ рд╢рдХрддрд╛.
тЪая╕П рдиреЗрд╣рдореАрдЪреНрдпрд╛ рдЪреБрдХрд╛
- loop рдордзреНрдпреЗ
list.pop(0)/insert(0, x)тАФ рд╡реЗрд╖рд╛рдВрддрд░ рдХреЗрд▓реЗрд▓рд╛ O(n┬▓);dequeрд╡рд╛рдкрд░рд╛. - loop рдордзреНрдпреЗ
+=рдиреЗ strings рдмрдирд╡рдгреЗ. - two-sum рд╕рд╛рдареА unsorted array рд╡рд░ two pointers рд╡рд╛рдкрд░рдгреЗ. рдЖрдзреА sort рдХрд░рд╛, рдХрд┐рдВрд╡рд╛ dict рд╡рд╛рдкрд░рд╛ (рдзрдбрд╛ 05).
ЁЯПн рдкреНрд░рддреНрдпрдХреНрд╖ рд╡рд╛рдкрд░рд╛рдд рд╣реЗ рдХрд╛ рдорд╣рддреНрддреНрд╡рд╛рдЪреЗ: buffers, batches, rows, pixels, time series тАФ рдЬрд╡рд│рдЬрд╡рд│ рд╕рдЧрд│реЗ array рдЕрд╕рддреЗ, рдЖрдгрд┐ рдЬрд╡рд│рдЬрд╡рд│ рдкреНрд░рддреНрдпреЗрдХ hot loop рдореНрд╣рдгрдЬреЗ рдЪрд╛рдВрдЧрд▓рд╛ рдХрд┐рдВрд╡рд╛ рд╡рд╛рдИрдЯ рдХреЗрд▓реЗрд▓рд╛ array pattern.
тПня╕П рдкреБрдвреЗ
рдзрдбрд╛ 03 тАФ linked lists: рдЦрдЬрд┐рдиреНрдпрд╛рдЪрд╛ рд╢реЛрдз, рдЬрд┐рдереЗ рдЪрд┐рдареНрдареА рдЬреЛрдбрдгреЗ рдлреБрдХрдЯ рдЖрд╣реЗ рдЖрдгрд┐ рд╢реЛрдзрдгреЗ рдирд╛рд╣реА.