Przejdź do treści
Biblioteka skilli
Programowanie · Nauka i wyjaśnianie

dsa-dynamic-programming-1d-memoization-tabulation

/dsa-dynamic-programming-1d-memoization-tabulation

Rozwiązuje zadania optymalizacyjne i liczące przez podział na nakładające się podproblemy 1D, z memoizacją i tabelaryzacją.

Licencja
MIT
Ostatnia zmiana repozytorium
28.10.2026

Ocena i bezpieczeństwo

100/ 100Klasa: dobry
Format25 / 25
Frontmatter z nazwą i opisem, poprawna nazwa, opis do 1024 znaków, nazwa zgodna z folderem.
Odkrywalność25 / 25
Opis mówi, kiedy użyć skilla, ma sensowną długość i jest w 3. osobie.
Treść35 / 35
Co najmniej 150 słów i do 500 linii, nagłówki, listy kroków, przykłady albo kod.
Higiena15 / 15
Bez zaślepek typu TODO, bez ścieżek Windows, z licencją.
Ryzykobrak sygnałów w skanie
Pliki w paczce
1
Skrypty
0
Komentarze HTML
0
Adresy URL w SKILL.md
0
Przestarzałość

Brak sygnałów. Repozytorium zmienione 28.10.2026, bez odwołań do wycofanych modeli i API.

Licencja

MIT, otwarta: można używać i zmieniać, z zachowaniem informacji o autorze.

Co robi i kiedy

Rozwiązuje zadania optymalizacyjne i liczące przez podział na nakładające się podproblemy 1D, z memoizacją i tabelaryzacją.

Oryginalny opis (EN)

Use this skill when solving optimization, counting, and decision problems by breaking them into overlapping 1D sub-problems.

Jak działa

  1. When to use
  2. Core principles
  3. Step-by-step workflow
  4. Specifics & examples
  5. Common mistakes & pitfalls
  6. Verification checklist
  7. Related skills
Sekcje z nagłówków SKILL.md, w oryginale · 48 linii, 345 słów
Podgląd SKILL.md
---
name: dsa-dynamic-programming-1d-memoization-tabulation
description: Use this skill when solving optimization, counting, and decision problems by breaking them into overlapping 1D sub-problems.
---
# DSA: 1D Dynamic Programming, Memoization & Tabulation

## When to use
Use this skill when tackling classic interview problems like Climbing Stairs, Coin Change, House Robber, Decode Ways, or Longest Increasing Subsequence.

## Core principles
- **Optimal Substructure**: The optimal solution to the problem can be constructed from optimal solutions of its sub-problems.
- **Overlapping Sub-problems**: Recursive decomposition encounters the same sub-problems repeatedly, allowing caching (memoization) or bottom-up calculation (tabulation).
- **State Definition Clarity**: Define precisely what `dp[i]` represents before writing code (e.g., 'minimum coins to make amount `i`').
- **Space Optimization Rolling Variables**: If `dp[i]` depends only on `dp[i-1]` and `dp[i-2]`, eliminate the O(N) array in favor of two variables for O(1) space.

## Step-by-step workflow
1. Define the recurrence relation and exact state meaning of `dp[i]`.
2. Identify base cases (e.g., `dp[0] = 0` or `dp[0] = 1`).
3. Choose approach: top-down with memoization (`@functools.lru_cache`) or bottom-up tabulation.
4. Fill table iteratively from smallest sub-problems to target `N`.
5. Apply space optimization if previous states allow rolling updates.
6. Trace a small test case (e.g., `amount = 5`) manually out loud.

## Specifics & examples
```python
# Coin Change (Fewest coins to make amount): O(amount * len(coins)) Time
def coin_change(coins: list[int], amount: int) -> int:
    dp = [float('inf')] * (amount + 1)
    dp[0] = 0
    for i in range(1, amount + 1):
        for coin in coins:
            if i - coin >= 0:
                dp[i] = min(dp[i], dp[i - coin] + 1)
    return dp[amount] if dp[amount] != float('inf') else -1
```

## Common mistakes & pitfalls
- Failing to initialize DP array with appropriate identity values (`inf` for min, `-inf` for max).
- Off-by-one errors in allocating `dp` table size (`amount` vs `amount + 1`).
- Struggling to communicate the state transition equation to the interviewer before coding.

## Verification checklist
- [ ] State definition `dp[i]` is explicitly stated to the interviewer.
- [ ] Handled impossible targets (returning -1).
- [ ] Analyzed space optimization from O(N) to O(1) when applicable.

## Related skills
- dsa-dynamic-programming-2d-knapsack-lcs
- dsa-greedy-algorithms-interval-scheduling
- dsa-time-space-complexity-big-o-analysis
- coding-interview-communication-thinking-out-loud

Wersje

W bazie nie ma innych skilli o nazwie dsa-dynamic-programming-1d-memoization-tabulation.

Migawka bazy z 13.11.2026 · wersja paczki 3aecb9dca3fe (skrót SHA-256 całej paczki)

Pobrania w ostatnich 30 dniach: 0 · ranking

Zgłoś problem z tym skillem: szkodliwa treść, błędny opis albo prośba autora o usunięcie.

Podobne skille

  • 80role-algorithms:dynamic-programming
    Rozwiązuje problemy optymalizacyjne programowaniem dynamicznym: memoizacją, tabelaryzacją i projektowaniem przestrzeni stanów.
  • 100dynamic-programming
    Pomaga rozwiązywać problemy optymalizacyjne programowaniem dynamicznym: memoizacja i tabulacja, klasyczne zadania jak plecak, LCS, LIS, edit distance i coin change, według Knutha.
  • 95dynamic-programming
    Projektuje i implementuje programowanie dynamiczne dla optymalizacji kombinatorycznej: przestrzeń stanów, rekurencje Bellmana, memoizacja i tabelaryzacja, odzyskiwanie rozwiązania i algorytmy etykietowania.
  • 100dsa-dynamic-programming-2d-knapsack-lcs
    Rozwiązuje przejścia po siatce, plecak 0/1, odległość edycyjną i najdłuższy wspólny podciąg metodą programowania dynamicznego 2D.
  • 100dsa-revise
    Prowadzi na komputerze powtórki zadań DSA metodą rozłożoną w czasie, pokazuje zadania do powtórzenia i zapisuje wykonane powtórki.
  • 100dsa-next
    Podpowiada, jakie zadanie DSA rozwiązać następnie, zależnie od docelowej roli i dotychczasowych postępów, do przygotowań do rozmowy.

Uwagi i zgłoszenia

Wiadomość trafi do Bartosza Sokolińskiego. Adres e-mail jest potrzebny tylko do odpowiedzi. Szczegóły w polityce prywatności.