From 27adc88529ca20c1e0296c925014e8b81167dd8f Mon Sep 17 00:00:00 2001 From: Joshua Potter Date: Mon, 19 Feb 2024 16:16:53 -0700 Subject: [PATCH] More notes on combinations/binomial coefficients. --- .../plugins/obsidian-to-anki-plugin/data.json | 12 +- notes/_journal/2024-02-19.md | 3 +- .../{sorting => images}/bubble-sort.gif | Bin .../{sorting => images}/insertion-sort.gif | Bin .../{sorting => images}/selection-sort.gif | Bin notes/c/strings.md | 97 ++++++++- notes/combinatorics/combinations.md | 202 +++++++++++++++++- .../images/lattice-path-after-recurrence.png | Bin 0 -> 7571 bytes .../images/lattice-path-before-recurrence.png | Bin 0 -> 6359 bytes .../lattice-path-chessboard-colored.png | Bin 0 -> 5272 bytes .../images/lattice-path-chessboard.png | Bin 0 -> 5462 bytes .../images/lattice-path-example.png | Bin 0 -> 5076 bytes 12 files changed, 306 insertions(+), 8 deletions(-) rename notes/algorithms/{sorting => images}/bubble-sort.gif (100%) rename notes/algorithms/{sorting => images}/insertion-sort.gif (100%) rename notes/algorithms/{sorting => images}/selection-sort.gif (100%) create mode 100644 notes/combinatorics/images/lattice-path-after-recurrence.png create mode 100644 notes/combinatorics/images/lattice-path-before-recurrence.png create mode 100644 notes/combinatorics/images/lattice-path-chessboard-colored.png create mode 100644 notes/combinatorics/images/lattice-path-chessboard.png create mode 100644 notes/combinatorics/images/lattice-path-example.png diff --git a/notes/.obsidian/plugins/obsidian-to-anki-plugin/data.json b/notes/.obsidian/plugins/obsidian-to-anki-plugin/data.json index 0238427..cad9233 100644 --- a/notes/.obsidian/plugins/obsidian-to-anki-plugin/data.json +++ b/notes/.obsidian/plugins/obsidian-to-anki-plugin/data.json @@ -75,7 +75,11 @@ "Added Media": [ "insertion-sort.gif", "selection-sort.gif", - "bubble-sort.gif" + "bubble-sort.gif", + "lattice-path-chessboard.png", + "lattice-path-chessboard-colored.png", + "lattice-path-before-recurrence.png", + "lattice-path-after-recurrence.png" ], "File Hashes": { "algorithms/index.md": "a5ff7313f71777f1f3536e27dd9894fa", @@ -149,7 +153,7 @@ "_journal/2024-02/2024-02-11.md": "afee9f502b61e17de231cf2f824fbb32", "encoding/ascii.md": "c01e50f96d0493d94dc4d520c0b6bb71", "encoding/index.md": "071cfa6a5152efeda127b684f420d438", - "c/strings.md": "2c3b6ecf6cf1815598a7be623983856c", + "c/strings.md": "813aa7b27c4d9e75b9076681726e11ee", "logic/truth-tables.md": "7892ceaa416c9a65acc79ca1e6ff778f", "logic/short-circuit.md": "26d300f407f14883022d0ef8dc4f7300", "logic/boolean-algebra.md": "f9101b2dfdedb73dc13c34c1a70a0010", @@ -173,10 +177,10 @@ "_journal/2024-02/2024-02-17.md": "7c37cb10515ed3d2f5388eaf02a67048", "combinatorics/multiplicative-principle.md": "3e4f600f5300d3d4d64099b8f2bd1458", "combinatorics/additive-principle.md": "84dcd0243263b3c53456086ae43fa00f", - "_journal/2024-02-19.md": "87d762a68e9b8e3c7de0f02d651b1101", + "_journal/2024-02-19.md": "30d16c5373deb9cb128d2e7934ae256a", "_journal/2024-02/2024-02-18.md": "67e36dbbb2cac699d4533b5a2eaeb629", "combinatorics/permutations.md": "3c76f548e22f7271280b9ed82ae584ec", - "combinatorics/combinations.md": "0fb5351d4b0ab6c7c8cd17d9423d3dfa" + "combinatorics/combinations.md": "8957575cef86f05918a47fcb5bc5f8c1" }, "fields_dict": { "Basic": [ diff --git a/notes/_journal/2024-02-19.md b/notes/_journal/2024-02-19.md index 4bd167c..b9af1ef 100644 --- a/notes/_journal/2024-02-19.md +++ b/notes/_journal/2024-02-19.md @@ -10,4 +10,5 @@ title: "2024-02-19" - [ ] Interview Prep (1 Practice Problem) - [ ] Log Work Hours (Max 3 hours) -* Start encoding notes on permutations and combinations, as well as their relationship to one another. \ No newline at end of file +* Start encoding notes on permutations and combinations, as well as their relationship to one another. +* Continuing on `printf` fields. Added flashcards for `width` and `precision`. \ No newline at end of file diff --git a/notes/algorithms/sorting/bubble-sort.gif b/notes/algorithms/images/bubble-sort.gif similarity index 100% rename from notes/algorithms/sorting/bubble-sort.gif rename to notes/algorithms/images/bubble-sort.gif diff --git a/notes/algorithms/sorting/insertion-sort.gif b/notes/algorithms/images/insertion-sort.gif similarity index 100% rename from notes/algorithms/sorting/insertion-sort.gif rename to notes/algorithms/images/insertion-sort.gif diff --git a/notes/algorithms/sorting/selection-sort.gif b/notes/algorithms/images/selection-sort.gif similarity index 100% rename from notes/algorithms/sorting/selection-sort.gif rename to notes/algorithms/images/selection-sort.gif diff --git a/notes/c/strings.md b/notes/c/strings.md index 66eaed8..b428995 100644 --- a/notes/c/strings.md +++ b/notes/c/strings.md @@ -46,6 +46,21 @@ END%% The syntax for the format placeholder is `%[flags][width][.precision][length]specifier`. +%%ANKI +Basic +Which header file contains `printf` functionality? +Back: `stdio.h` +Reference: “Printf,” in *Wikipedia*, January 18, 2024, [https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962](https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962). + +END%% + +%%ANKI +Cloze +{1:`width`} field specifies a {2:minimum} number of characters while {2:`precision`} specifies a {1:maximum}. +Reference: “Printf,” in *Wikipedia*, January 18, 2024, [https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962](https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962). + +END%% + Flag | Description --------- | ----------- `-` | Left-aligns the output @@ -60,6 +75,86 @@ Reference: “Printf,” in *Wikipedia*, January 18, 2024, [https://en.wikipedia END%% +%%ANKI +Basic +What is the output of `printf("%-2d abc", 100)`? +Back: `100 abc` +Reference: “Printf,” in *Wikipedia*, January 18, 2024, [https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962](https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962). + +END%% + +%%ANKI +Basic +What is the output of `printf("%-4d abc", 100)`? +Back: `100 abc` +Reference: “Printf,” in *Wikipedia*, January 18, 2024, [https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962](https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962). + +END%% + +%%ANKI +Basic +What is the output of `printf("%.4d abc", 100)`? +Back: `0100 abc` +Reference: “Printf,” in *Wikipedia*, January 18, 2024, [https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962](https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962). + +END%% + +%%ANKI +Basic +What is the output of `printf("%04d abc", 100)`? +Back: `0100 abc` +Reference: “Printf,” in *Wikipedia*, January 18, 2024, [https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962](https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962). + +END%% + +%%ANKI +Basic +What is the output of `printf("%.4s abc", "efg")`? +Back: `efg abc` +Reference: “Printf,” in *Wikipedia*, January 18, 2024, [https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962](https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962). + +END%% + +%%ANKI +Basic +What is the output of `printf("%.2s abc", "efg")`? +Back: `ef abc` +Reference: “Printf,” in *Wikipedia*, January 18, 2024, [https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962](https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962). + +END%% + +%%ANKI +Basic +What is the output of `printf("%.2f abc", 0.01234)`? +Back: `0.01 abc` +Reference: “Printf,” in *Wikipedia*, January 18, 2024, [https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962](https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962). + +END%% + +%%ANKI +Basic +How does the precision field affect `"%s"` parameters? +Back: Strings are truncated if longer than the specified precision. +Reference: “Printf,” in *Wikipedia*, January 18, 2024, [https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962](https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962). + +END%% + +%%ANKI +Basic +How does the precision field affect `"%f"` parameters? +Back: Decimal values are truncated if longer than the specified precision. +Reference: “Printf,” in *Wikipedia*, January 18, 2024, [https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962](https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962). + +END%% + +%%ANKI +Basic +What does a negative width field value indicate? +Back: This is actually a positive width with a `-` (left-align) flag. +Reference: “Printf,” in *Wikipedia*, January 18, 2024, [https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962](https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962). + +END%% + %%ANKI Basic The `-` flag overrides what default behavior? @@ -168,7 +263,7 @@ END%% %%ANKI Cloze -The {`d` and `i`} format specifers output a {decimal `signed int`}. +The {`d` and `i`} format specifers work on a {decimal `signed int`}. Reference: “Printf,” in *Wikipedia*, January 18, 2024, [https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962](https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962). Tags: printf diff --git a/notes/combinatorics/combinations.md b/notes/combinatorics/combinations.md index 7ba68cf..5472061 100644 --- a/notes/combinatorics/combinations.md +++ b/notes/combinatorics/combinations.md @@ -160,6 +160,180 @@ Reference: Oscar Levin, *Discrete Mathematics: An Open Introduction*, 3rd ed., n END%% +## Pascal's Triangle + +A visual representation of the binomial coefficient's is in the form of Pascal's Triangle: +``` +1 +1 1 +1 2 1 +1 3 3 1 +1 4 6 4 1 +1 5 10 10 5 1 +... +``` + +Terms are generated by adding the two terms above it, formalized via recurrence $$\binom{n}{k} = \binom{n - 1}{k} + \binom{n - 1}{k - 1}$$ + +%%ANKI +Basic +What recurrence relation does $\binom{n}{k}$ satisfy? +Back: $$\binom{n}{k} = \binom{n - 1}{k - 1} + \binom{n - 1}{k}$$ +Reference: Oscar Levin, *Discrete Mathematics: An Open Introduction*, 3rd ed., n.d., [https://discrete.openmathbooks.org/pdfs/dmoi3-tablet.pdf](https://discrete.openmathbooks.org/pdfs/dmoi3-tablet.pdf). + +END%% + +%%ANKI +Basic +What name is given to the following structure? +``` + 1 + 1 1 + 1 2 1 + 1 3 3 1 +1 4 6 4 1 +``` +Back: Pascal's Triangle. +Reference: Oscar Levin, *Discrete Mathematics: An Open Introduction*, 3rd ed., n.d., [https://discrete.openmathbooks.org/pdfs/dmoi3-tablet.pdf](https://discrete.openmathbooks.org/pdfs/dmoi3-tablet.pdf). + +END%% + +%%ANKI +Basic +What recurrence relation is Pascal's Triangle based on? +Back: $$\binom{n}{k} = \binom{n - 1}{k - 1} + \binom{n - 1}{k}$$ +Reference: Oscar Levin, *Discrete Mathematics: An Open Introduction*, 3rd ed., n.d., [https://discrete.openmathbooks.org/pdfs/dmoi3-tablet.pdf](https://discrete.openmathbooks.org/pdfs/dmoi3-tablet.pdf). + +END%% + +%%ANKI +Basic +What binomial coefficient is at the peak of Pascal's Triangle? +Back: $\binom{0}{0}$ +Reference: Oscar Levin, *Discrete Mathematics: An Open Introduction*, 3rd ed., n.d., [https://discrete.openmathbooks.org/pdfs/dmoi3-tablet.pdf](https://discrete.openmathbooks.org/pdfs/dmoi3-tablet.pdf). + +END%% + +%%ANKI +Basic +What is the value of $\sum_{k=0}^n \binom{n}{k}$? +Back: $2^n$ +Reference: Oscar Levin, *Discrete Mathematics: An Open Introduction*, 3rd ed., n.d., [https://discrete.openmathbooks.org/pdfs/dmoi3-tablet.pdf](https://discrete.openmathbooks.org/pdfs/dmoi3-tablet.pdf). + +END%% + +%%ANKI +Basic +What is the sum of Pascal's Triangle's $n$th row? +Back: $2^n$ +Reference: Oscar Levin, *Discrete Mathematics: An Open Introduction*, 3rd ed., n.d., [https://discrete.openmathbooks.org/pdfs/dmoi3-tablet.pdf](https://discrete.openmathbooks.org/pdfs/dmoi3-tablet.pdf). + +END%% + +%%ANKI +Basic +Why does $\sum_{k=0}^n \binom{n}{k} = 2^n$? +Back: The summands count the number of subsets of a set of cardinality $n$. +Reference: Oscar Levin, *Discrete Mathematics: An Open Introduction*, 3rd ed., n.d., [https://discrete.openmathbooks.org/pdfs/dmoi3-tablet.pdf](https://discrete.openmathbooks.org/pdfs/dmoi3-tablet.pdf). + +END%% + +## Lattice Paths + +A **lattice path** is one of the shorted possible paths connecting two points on a lattice, moving only horizontally and vertically. By representing each horizontal move by "1" and each vertical move by "0", we see every lattice path has a corresponding bit string. + +![[lattice-path-example.png]] + +In this example, the total number of lattice paths from point $(0, 0)$ to $(3, 2)$ is therefore $\binom{5}{2} = \binom{5}{3}$. + +%%ANKI +Basic +What is the integer lattice? +Back: $\{(x, y) : x \in \omega \land y \in \omega\}$ +Reference: Oscar Levin, *Discrete Mathematics: An Open Introduction*, 3rd ed., n.d., [https://discrete.openmathbooks.org/pdfs/dmoi3-tablet.pdf](https://discrete.openmathbooks.org/pdfs/dmoi3-tablet.pdf). + +END%% + +%%ANKI +Basic +What is a lattice path? +Back: A possible shortest path between two points on an integer lattice. +Reference: Oscar Levin, *Discrete Mathematics: An Open Introduction*, 3rd ed., n.d., [https://discrete.openmathbooks.org/pdfs/dmoi3-tablet.pdf](https://discrete.openmathbooks.org/pdfs/dmoi3-tablet.pdf). + +END%% + +%%ANKI +Basic +How many lattice paths exist from one corner of a chess board to the opposite corner? +Back: $\binom{16}{8}$ +Reference: Oscar Levin, *Discrete Mathematics: An Open Introduction*, 3rd ed., n.d., [https://discrete.openmathbooks.org/pdfs/dmoi3-tablet.pdf](https://discrete.openmathbooks.org/pdfs/dmoi3-tablet.pdf). + +END%% + +%%ANKI +Basic +How many horizontal moves must a lattice path make between $(0, 0)$ and $(3, 2)$? +Back: $3$ +Reference: Oscar Levin, *Discrete Mathematics: An Open Introduction*, 3rd ed., n.d., [https://discrete.openmathbooks.org/pdfs/dmoi3-tablet.pdf](https://discrete.openmathbooks.org/pdfs/dmoi3-tablet.pdf). + +END%% + +%%ANKI +Basic +How many vertical moves must a lattice path make between $(0, 0)$ and $(3, 2)$? +Back: $2$ +Reference: Oscar Levin, *Discrete Mathematics: An Open Introduction*, 3rd ed., n.d., [https://discrete.openmathbooks.org/pdfs/dmoi3-tablet.pdf](https://discrete.openmathbooks.org/pdfs/dmoi3-tablet.pdf). + +END%% + +%%ANKI +Basic +How many moves (horizontal or vertical) must a lattice path make between $(0, 0)$ and $(3, 2)$? +Back: $5$ +Reference: Oscar Levin, *Discrete Mathematics: An Open Introduction*, 3rd ed., n.d., [https://discrete.openmathbooks.org/pdfs/dmoi3-tablet.pdf](https://discrete.openmathbooks.org/pdfs/dmoi3-tablet.pdf). + +END%% + +%%ANKI +Basic +How do lattice paths relate to bit strings? +Back: Denoting horizontal and vertical moves by $H$ and $V$ makes the relationship clear. +Reference: Oscar Levin, *Discrete Mathematics: An Open Introduction*, 3rd ed., n.d., [https://discrete.openmathbooks.org/pdfs/dmoi3-tablet.pdf](https://discrete.openmathbooks.org/pdfs/dmoi3-tablet.pdf). + +END%% + +%%ANKI +Basic +How many lattice paths exist between $(0, 0)$ and $(3, 2)$? +Back: $\binom{5}{2} = \binom{5}{3}$ +Reference: Oscar Levin, *Discrete Mathematics: An Open Introduction*, 3rd ed., n.d., [https://discrete.openmathbooks.org/pdfs/dmoi3-tablet.pdf](https://discrete.openmathbooks.org/pdfs/dmoi3-tablet.pdf). + +END%% + +%%ANKI +Basic +How is the number of lattice paths in the following shown to mirror the binomial recurrence? +![[lattice-path-before-recurrence.png]] +Back: +It equals the number of lattice paths to $A$ plus the number of lattice paths to $B$. +![[lattice-path-after-recurrence.png]] +Reference: Oscar Levin, *Discrete Mathematics: An Open Introduction*, 3rd ed., n.d., [https://discrete.openmathbooks.org/pdfs/dmoi3-tablet.pdf](https://discrete.openmathbooks.org/pdfs/dmoi3-tablet.pdf). + +END%% + +%%ANKI +Basic +The number of lattice paths to the marked square can be derived by adding the values of which two squares? +![[lattice-path-chessboard.png]] +Back: +![[lattice-path-chessboard-colored.png]] + +END%% + +## Binomials + +A **binomial** is a polynomial containing two terms. Consider $(x + y)^n$. + %%ANKI Basic What term describes e.g. $\binom{n}{1}$, $\binom{n}{2}$, etc.? @@ -178,12 +352,36 @@ END%% %%ANKI Basic -What are binomial coefficients? -The coefficients of terms in the expansion of a binomial, e.g. $(x + y)^n$. +Why are binomial coefficients named the way they are? +Back: They are the coefficients of terms in the expansion of a binomial, e.g. $(x + y)^n$. Reference: Oscar Levin, *Discrete Mathematics: An Open Introduction*, 3rd ed., n.d., [https://discrete.openmathbooks.org/pdfs/dmoi3-tablet.pdf](https://discrete.openmathbooks.org/pdfs/dmoi3-tablet.pdf). END%% +%%ANKI +Basic +How does $(x + y)^n$ relate to bit strings? +Back: Each term $x^ky^{n-k}$ corresponds to a bit string with $k$ `1`s and $n - k$ `0`s. +Reference: Oscar Levin, *Discrete Mathematics: An Open Introduction*, 3rd ed., n.d., [https://discrete.openmathbooks.org/pdfs/dmoi3-tablet.pdf](https://discrete.openmathbooks.org/pdfs/dmoi3-tablet.pdf). + +END%% + +%%ANKI +Basic +What is the coefficient of $x^3y^{12}$ in $(x + y)^{15}$? +Back: $\binom{15}{3} = \binom{15}{12}$. +Reference: Oscar Levin, *Discrete Mathematics: An Open Introduction*, 3rd ed., n.d., [https://discrete.openmathbooks.org/pdfs/dmoi3-tablet.pdf](https://discrete.openmathbooks.org/pdfs/dmoi3-tablet.pdf). + +END%% + +%%ANKI +Basic +How is $(x + y)^n$ written to mirror the binomial recurrence? +Back: $(x + y)^n = x \cdot (x + y)^{n-1} + y \cdot (x + y)^{n - 1}$ +Reference: Oscar Levin, *Discrete Mathematics: An Open Introduction*, 3rd ed., n.d., [https://discrete.openmathbooks.org/pdfs/dmoi3-tablet.pdf](https://discrete.openmathbooks.org/pdfs/dmoi3-tablet.pdf). + +END%% + ## References * Oscar Levin, *Discrete Mathematics: An Open Introduction*, 3rd ed., n.d., [https://discrete.openmathbooks.org/pdfs/dmoi3-tablet.pdf](https://discrete.openmathbooks.org/pdfs/dmoi3-tablet.pdf). \ No newline at end of file diff --git a/notes/combinatorics/images/lattice-path-after-recurrence.png b/notes/combinatorics/images/lattice-path-after-recurrence.png new file mode 100644 index 0000000000000000000000000000000000000000..a5c5ecaa5b54f6d832b191f4045fa58ec0615cb3 GIT binary patch literal 7571 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 aiSW$jkKRv7-2&guLHatz+7(wF9{(?BK5*dx literal 0 HcmV?d00001 diff --git a/notes/combinatorics/images/lattice-path-before-recurrence.png b/notes/combinatorics/images/lattice-path-before-recurrence.png new file mode 100644 index 0000000000000000000000000000000000000000..9fc1e69e1616e58b57ba17d3fc16325a491cdc18 GIT binary patch literal 6359 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�e|2Ww>4m(tf{GqreDO(XZoGCqdFVYIcNNJX!e5Ai0WGI#Z_k62k%g;YsLx?&FG!Gx99&N11NxGmbgLaue+p1~Dd04Q z<;`S^&Lm)Px{CEGOBYOzj&>%T04r|Hch9TZw%l&I3(kLRxBgVX`^bZ9Xa1P;c<$(c9S z`S>v_D8du_1K3XuIMB4IMuFNOX!Vr=aq-~WghD#F>DQ9^7ic-|2n#0*2SeQT)U!xE znh!EmL>Qv-zs4*eh7}x;*wj;n4LZIHuBNZR&kg^k_4}6wliCjqn|ko^9jXq@gFp~+ LDzc^0&;IrwR(FML literal 0 HcmV?d00001 diff --git a/notes/combinatorics/images/lattice-path-chessboard-colored.png b/notes/combinatorics/images/lattice-path-chessboard-colored.png new file mode 100644 index 0000000000000000000000000000000000000000..7a5aa10494205771970cc8136d6241319170b344 GIT binary patch literal 5272 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 xf`CBi3B9R&0wV2`CS4GL1c*qlQK|v~ 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 literal 0 HcmV?d00001