From 1651c9d6c3e75fd25557dd6cefef6e4d6441ff46 Mon Sep 17 00:00:00 2001 From: Joshua Potter Date: Wed, 6 Mar 2024 13:25:34 -0700 Subject: [PATCH] Add notes on next lexicographic ordering. --- .../plugins/obsidian-to-anki-plugin/data.json | 26 +- notes/_journal/2024-03-06.md | 13 + notes/_journal/{ => 2024-03}/2024-03-05.md | 3 +- notes/algorithms/binary-search.md | 18 +- notes/algorithms/order-growth.md | 331 +++++++++++++++++- notes/algorithms/sorting/bubble-sort.md | 34 +- notes/algorithms/sorting/insertion-sort.md | 38 +- notes/algorithms/sorting/merge-sort.md | 24 +- notes/algorithms/sorting/selection-sort.md | 28 +- notes/combinatorics/combinations.md | 33 +- notes/combinatorics/inclusion-exclusion.md | 2 +- notes/combinatorics/permutations.md | 246 ++++++++++++- notes/encoding/integer.md | 11 +- notes/posix/signals.md | 2 +- 14 files changed, 696 insertions(+), 113 deletions(-) create mode 100644 notes/_journal/2024-03-06.md rename notes/_journal/{ => 2024-03}/2024-03-05.md (91%) diff --git a/notes/.obsidian/plugins/obsidian-to-anki-plugin/data.json b/notes/.obsidian/plugins/obsidian-to-anki-plugin/data.json index f4009a1..57ec188 100644 --- a/notes/.obsidian/plugins/obsidian-to-anki-plugin/data.json +++ b/notes/.obsidian/plugins/obsidian-to-anki-plugin/data.json @@ -96,7 +96,7 @@ "File Hashes": { "algorithms/index.md": "cd7c7ba91fb2f961c9f2437777e8e2ac", "algorithms/sorting/index.md": "2d5a18a3079d96fa9e3d4289181a8b6c", - "algorithms/sorting/insertion-sort.md": "00e4edb132d473b0516fde3307ebae30", + "algorithms/sorting/insertion-sort.md": "10525c1e013a341ef51656bedf41a61b", "bash/index.md": "3e4738d8d3531bb7a5afc53a2d73036c", "bash/prompts.md": "61cb877e68da040a15b85af76b1f68ba", "bash/quoting.md": "b1d8869a91001f8b22f0cdc54d806f61", @@ -117,7 +117,7 @@ "nix/callPackage.md": "140a02e57cd01d646483e3c21d72243d", "nix/index.md": "4efc7fcc4ea22834ba595497e5fb715c", "posix/index.md": "97b1b8ecb9a953e855a9acf0ab25b8c8", - "posix/signals.md": "51b7399fa84a9528e319a758017013f9", + "posix/signals.md": "e8a62cbece8a6bfc54a4e67bbdf3be7c", "templates/daily.md": "7866014e730e85683155207a02e367d8", "posix/regexp.md": "f5fb177c7356faf1bf768023c2563c54", "journal/2024-02-04.md": "e2b5678fc53d7284b71ed6820c02b954", @@ -135,9 +135,9 @@ "algorithms/loop-invariants.md": "cbefc346842c21a6cce5c5edce451eb2", "algorithms/loop-invariant.md": "29f9f9090a3109890d333a78acc18b50", "algorithms/running-time.md": "5efc0791097d2c996f931c9046c95f65", - "algorithms/order-growth.md": "a4e6620e785f7d677236948182e831cc", + "algorithms/order-growth.md": "80801ebb1a9142150699b05b0b41d819", "_journal/2024-02-08.md": "19092bdfe378f31e2774f20d6afbfbac", - "algorithms/sorting/selection-sort.md": "fcd0dc2ebaabd0a4db1baf7e7ef9f7a9", + "algorithms/sorting/selection-sort.md": "3e4f059f01210d050ec6e7279e93e43c", "algorithms/index 1.md": "6fada1f3d5d3af64687719eb465a5b97", "binary/hexadecimal.md": "c3d485f1fd869fe600334ecbef7d5d70", "binary/index.md": "9089c6f0e86a0727cd03984f51350de0", @@ -145,7 +145,7 @@ "c/types.md": "cf3e66e5aee58a94db3fdf0783908555", "logic/quantification.md": "5d7579a511e9ff683edeec62bcc291b8", "c/declarations.md": "2de27f565d1020819008ae80593af435", - "algorithms/sorting/bubble-sort.md": "16dad1016dc6555163e42ba20f1d152d", + "algorithms/sorting/bubble-sort.md": "96c4b9426bcb4284de60b9144ba09b9e", "_journal/2024-02-10.md": "562b01f60ea36a3c78181e39b1c02b9f", "_journal/2024-01/2024-01-31.md": "7c7fbfccabc316f9e676826bf8dfe970", "_journal/2024-02/2024-02-09.md": "a798d35f0b2bd1da130f7ac766166109", @@ -180,7 +180,7 @@ "_journal/2024-02/2024-02-15.md": "16cb7563d404cb543719b7bb5037aeed", "algebra/floor-ceiling.md": "828b11e642d6803a740b58f27ff047cf", "algebra/index.md": "90b842eb694938d87c7c68779a5cacd1", - "algorithms/binary-search.md": "dbbaf8d4be7aabef1ed232c1906b4c99", + "algorithms/binary-search.md": "27189885f0bc1e8b8b9049da3ed92f98", "_journal/2024-02-17.md": "7c37cb10515ed3d2f5388eaf02a67048", "_journal/2024-02/2024-02-16.md": "e701902e369ec53098fc2deed4ec14fd", "binary/integer-encoding.md": "7ace6ab6c5a4191ae0abdfe7e5abb6a2", @@ -191,11 +191,11 @@ "combinatorics/additive-principle.md": "e968028670f95ee9a7c5499ff7cb6792", "_journal/2024-02-19.md": "30d16c5373deb9cb128d2e7934ae256a", "_journal/2024-02/2024-02-18.md": "67e36dbbb2cac699d4533b5a2eaeb629", - "combinatorics/permutations.md": "7ff83dd8784eb08fc9389d38adc8862c", - "combinatorics/combinations.md": "b53ac22d03941b697597377c7c8da346", + "combinatorics/permutations.md": "d257cab50c2767419b0cc3f7b86bd528", + "combinatorics/combinations.md": "5ae0152180a1af7187c43606a4002202", "_journal/2024-02-20.md": "b85ba0eeeb16e30a602ccefabcc9763e", "_journal/2024-02/2024-02-19.md": "df1a9ab7ab89244021b3003c84640c78", - "combinatorics/inclusion-exclusion.md": "ca5c967be774ce204f1ca47cc8df14b8", + "combinatorics/inclusion-exclusion.md": "202a60120d451676d44df4d0be30a45a", "_journal/2024-02-21.md": "b9d944ecebe625da5dd72aeea6a916a2", "_journal/2024-02/2024-02-20.md": "af2ef10727726200c4defe2eafc7d841", "algebra/radices.md": "4ffc8525f2b877c0d17e3359870797fe", @@ -207,7 +207,7 @@ "c17/index.md": "78576ee41d0185df82c59999142f4edb", "c17/escape-sequences.md": "ebc63c6cdfbe60bbc2708c1b0c8da8bb", "c17/declarations.md": "20e200f2b7abcab8f873cd080f4c9770", - "algorithms/sorting/merge-sort.md": "0a204db7441c761c6ee13689113760dd", + "algorithms/sorting/merge-sort.md": "fdc6311b0f9e7d85899fc77a95872a2f", "_journal/2024-02-24.md": "9bb319d5014caf962a9ce3141076cff4", "_journal/2024-02/2024-02-23.md": "0aad297148e8cc4058b48b7e45787ca7", "_journal/2024-02-25.md": "fb1a48208c11d12262facc647749ca6f", @@ -222,7 +222,7 @@ "filesystems/cas.md": "34906013a2a60fe5ee0e31809b4838aa", "git/objects.md": "1c867853b080700a73de55b7be185f8d", "git/index.md": "83d2d95fc549d9e8436946c7bd058d15", - "encoding/integer.md": "84b2ce080e0e756f265257e57467f0e6", + "encoding/integer.md": "052dce2f39b72cc8d46bea58bfdb1b97", "_journal/2024-02-29.md": "f610f3caed659c1de3eed5f226cab508", "_journal/2024-02/2024-02-28.md": "7489377c014a2ff3c535d581961b5b82", "_journal/2024-03-01.md": "a532486279190b0c12954966cbf8c3fe", @@ -240,7 +240,9 @@ "_journal/2024-03-05.md": "e9a911c19bb4c0ff451db793248cb4bb", "_journal/2024-03/2024-03-04.md": "4948d90a08af2cff58c629c9a2e11ee4", "algebra/sequences/geometric.md": "53936ec392b3b714bd4a9bdb4554b582", - "algebra/sequences/arithmetic.md": "80381ca0f2b3b9a1c155c597a7dea75a" + "algebra/sequences/arithmetic.md": "80381ca0f2b3b9a1c155c597a7dea75a", + "_journal/2024-03-06.md": "ac7a3d764934f49b2be7aa76e402d853", + "_journal/2024-03/2024-03-05.md": "94b28d0b9bc62cc0bd99d315fb7c6d30" }, "fields_dict": { "Basic": [ diff --git a/notes/_journal/2024-03-06.md b/notes/_journal/2024-03-06.md new file mode 100644 index 0000000..deae793 --- /dev/null +++ b/notes/_journal/2024-03-06.md @@ -0,0 +1,13 @@ +--- +title: "2024-03-06" +--- + +- [x] Anki Flashcards +- [x] KoL +- [ ] Sheet Music (10 min.) +- [ ] Go (1 Life & Death Problem) +- [ ] Korean (Read 1 Story) +- [ ] Interview Prep (1 Practice Problem) +- [ ] Log Work Hours (Max 3 hours) + +* Added notes on how asymptotic notation relates to one another. \ No newline at end of file diff --git a/notes/_journal/2024-03-05.md b/notes/_journal/2024-03/2024-03-05.md similarity index 91% rename from notes/_journal/2024-03-05.md rename to notes/_journal/2024-03/2024-03-05.md index 5c331a7..4f9bf73 100644 --- a/notes/_journal/2024-03-05.md +++ b/notes/_journal/2024-03/2024-03-05.md @@ -25,4 +25,5 @@ title: "2024-03-05" * Q-114783 * Q-26296 * Leetcode Problems - * [Next Permutation](https://leetcode.com/problems/next-permutation/) \ No newline at end of file + * [Next Permutation](https://leetcode.com/problems/next-permutation/) +* Purged all blockchain-related flashcards from Anki. \ No newline at end of file diff --git a/notes/algorithms/binary-search.md b/notes/algorithms/binary-search.md index 912aea9..cdabed8 100644 --- a/notes/algorithms/binary-search.md +++ b/notes/algorithms/binary-search.md @@ -16,7 +16,7 @@ Aux. Memory | $O(1)$ %%ANKI Basic -What precondition must the input of binary search satisfy? +What precondition must the input of `BINARY_SEARCH` satisfy? Back: It must already be sorted. Reference: Thomas H. Cormen et al., *Introduction to Algorithms*, 3rd ed (Cambridge, Mass: MIT Press, 2009). @@ -24,7 +24,7 @@ END%% %%ANKI Basic -What is the best case running time of binary search? +What is the best case running time of `BINARY_SEARCH`? Back: $\Omega(1)$ Reference: Thomas H. Cormen et al., *Introduction to Algorithms*, 3rd ed (Cambridge, Mass: MIT Press, 2009). @@ -32,7 +32,7 @@ END%% %%ANKI Basic -What input does binary search perform best on? +What input does `BINARY_SEARCH` perform best on? Back: One in which the value being searched for is already in the middle. Reference: Thomas H. Cormen et al., *Introduction to Algorithms*, 3rd ed (Cambridge, Mass: MIT Press, 2009). @@ -40,7 +40,7 @@ END%% %%ANKI Basic -What is the worst case running time of binary search? +What is the worst case running time of `BINARY_SEARCH`? Back: $O(\lg{n})$ Reference: Thomas H. Cormen et al., *Introduction to Algorithms*, 3rd ed (Cambridge, Mass: MIT Press, 2009). @@ -48,7 +48,7 @@ END%% %%ANKI Basic -What input does binary search perform worst on? +What input does `BINARY_SEARCH` perform worst on? Back: One in which the value does not exist. Reference: Thomas H. Cormen et al., *Introduction to Algorithms*, 3rd ed (Cambridge, Mass: MIT Press, 2009). @@ -56,7 +56,7 @@ END%% %%ANKI Basic -What is the typical output of binary search? +What is the typical output of `BINARY_SEARCH`? Back: The index of the element in the array being searched for, if found. Reference: Thomas H. Cormen et al., *Introduction to Algorithms*, 3rd ed (Cambridge, Mass: MIT Press, 2009). @@ -106,7 +106,7 @@ int binary_search(const int needle, const int n, int A[static n]) { %%ANKI Basic -In binary search, when could using floor for midpoint calculations yield different answers than ceiling? +In `BINARY_SEARCH`, when could using floor for midpoint calculations yield different answers than ceiling? Back: When there exist duplicate members. Reference: Thomas H. Cormen et al., *Introduction to Algorithms*, 3rd ed (Cambridge, Mass: MIT Press, 2009). @@ -114,8 +114,8 @@ END%% %%ANKI Basic -In binary search, what ensures left pointer `L` and right pointers `R` eventually satisfy `L > R`? -Back: The found midpoint is always excluded from the next binary search invocation. +In `BINARY_SEARCH`, what ensures left pointer `L` and right pointers `R` eventually satisfy `L > R`? +Back: The found midpoint is always excluded from the next `BINARY_SEARCH` invocation. Reference: Thomas H. Cormen et al., *Introduction to Algorithms*, 3rd ed (Cambridge, Mass: MIT Press, 2009). END%% diff --git a/notes/algorithms/order-growth.md b/notes/algorithms/order-growth.md index 2ff3fc4..915f59c 100644 --- a/notes/algorithms/order-growth.md +++ b/notes/algorithms/order-growth.md @@ -332,7 +332,7 @@ END%% %%ANKI Basic -What condition must $g(n)$ satisfy such that otherwise $\Theta(g(n))$ is empty? +What condition must $g(n)$ satisfy such that $\Theta(g(n))$ is nonempty? Back: $g(n)$ must be asymptotically nonnegative. Reference: Thomas H. Cormen et al., *Introduction to Algorithms*, 3rd ed (Cambridge, Mass: MIT Press, 2009). @@ -397,6 +397,62 @@ Reference: Thomas H. Cormen et al., *Introduction to Algorithms*, 3rd ed (Cambri END%% +%%ANKI +Basic +What is the transitive property of $\Theta$-notation? +Back: $f(n) = \Theta(g(n))$ and $g(n) = \Theta(h(n))$ implies $f(n) = \Theta(h(n))$. +Reference: Thomas H. Cormen et al., *Introduction to Algorithms*, 3rd ed (Cambridge, Mass: MIT Press, 2009). + +END%% + +%%ANKI +Basic +What is the reflexive property of $\Theta$-notation? +Back: $f(n) = \Theta(f(n))$ +Reference: Thomas H. Cormen et al., *Introduction to Algorithms*, 3rd ed (Cambridge, Mass: MIT Press, 2009). + +END%% + +%%ANKI +Basic +What condition must $f(n)$ satisfy for equality $f(n) = \Theta(f(n))$ to hold? +Back: $f(n)$ must be nonnegatively asymptotic. +Reference: Thomas H. Cormen et al., *Introduction to Algorithms*, 3rd ed (Cambridge, Mass: MIT Press, 2009). + +END%% + +%%ANKI +Basic +*Why* must $f(n)$ be nonnegatively asymptotic for $f(n) = \Theta(f(n))$ to hold? +Back: Otherwise $\Theta(f(n))$ is the empty set. +Reference: Thomas H. Cormen et al., *Introduction to Algorithms*, 3rd ed (Cambridge, Mass: MIT Press, 2009). + +END%% + +%%ANKI +Basic +What is the symmetric property of $\Theta$-notation? +Back: $f(n) = \Theta(g(n))$ iff $g(n) = \Theta(f(n))$ +Reference: Thomas H. Cormen et al., *Introduction to Algorithms*, 3rd ed (Cambridge, Mass: MIT Press, 2009). + +END%% + +%%ANKI +Basic +What is the transpose symmetric property of $\Theta$-notation? +Back: N/A +Reference: Thomas H. Cormen et al., *Introduction to Algorithms*, 3rd ed (Cambridge, Mass: MIT Press, 2009). + +END%% + +%%ANKI +Basic +$\Theta$-notation is likened to what comparison operator of real numbers? +Back: $=$ +Reference: Thomas H. Cormen et al., *Introduction to Algorithms*, 3rd ed (Cambridge, Mass: MIT Press, 2009). + +END%% + ## $O$-notation ![[big-o-notation.png]] @@ -471,6 +527,7 @@ Basic Using typical identifiers, what is the upper bound of $f(n)$ in $O(g(n))$? Back: $cg(n)$ Reference: Thomas H. Cormen et al., *Introduction to Algorithms*, 3rd ed (Cambridge, Mass: MIT Press, 2009). + END%% %%ANKI @@ -498,7 +555,7 @@ END%% %%ANKI Basic -What condition must $g(n)$ satisfy such that otherwise $O(g(n))$ is empty? +What condition must $g(n)$ satisfy such that $O(g(n))$ is nonempty? Back: $g(n)$ must be asymptotically nonnegative. Reference: Thomas H. Cormen et al., *Introduction to Algorithms*, 3rd ed (Cambridge, Mass: MIT Press, 2009). @@ -554,6 +611,62 @@ Reference: Thomas H. Cormen et al., *Introduction to Algorithms*, 3rd ed (Cambri END%% +%%ANKI +Basic +What is the transitive property of $O$-notation? +Back: $f(n) = O(g(n))$ and $g(n) = O(h(n))$ implies $f(n) = O(h(n))$. +Reference: Thomas H. Cormen et al., *Introduction to Algorithms*, 3rd ed (Cambridge, Mass: MIT Press, 2009). + +END%% + +%%ANKI +Basic +What is the reflexive property of $O$-notation? +Back: $f(n) = O(f(n))$ +Reference: Thomas H. Cormen et al., *Introduction to Algorithms*, 3rd ed (Cambridge, Mass: MIT Press, 2009). + +END%% + +%%ANKI +Basic +What condition must $f(n)$ satisfy for equality $f(n) = O(f(n))$ to hold? +Back: $f(n)$ must be nonnegatively asymptotic. +Reference: Thomas H. Cormen et al., *Introduction to Algorithms*, 3rd ed (Cambridge, Mass: MIT Press, 2009). + +END%% + +%%ANKI +Basic +*Why* must $f(n)$ be nonnegatively asymptotic for $f(n) = O(f(n))$ to hold? +Back: Otherwise $O(f(n))$ is the empty set. +Reference: Thomas H. Cormen et al., *Introduction to Algorithms*, 3rd ed (Cambridge, Mass: MIT Press, 2009). + +END%% + +%%ANKI +Basic +What is the symmetric property of $O$-notation? +Back: N/A +Reference: Thomas H. Cormen et al., *Introduction to Algorithms*, 3rd ed (Cambridge, Mass: MIT Press, 2009). + +END%% + +%%ANKI +Basic +What is the transpose symmetric property of $O$-notation? +Back: $f(n) = O(g(n))$ iff $g(n) = \Omega(f(n))$ +Reference: Thomas H. Cormen et al., *Introduction to Algorithms*, 3rd ed (Cambridge, Mass: MIT Press, 2009). + +END%% + +%%ANKI +Basic +$O$-notation is likened to what comparison operator of real numbers? +Back: $\leq$ +Reference: Thomas H. Cormen et al., *Introduction to Algorithms*, 3rd ed (Cambridge, Mass: MIT Press, 2009). + +END%% + ## $o$-notation $o$-notation refers to an upper bound that is not asymptotically tight. It is defined as set $$o(g(n)) = \{ f(n) \mid \forall c > 0, \exists n_0 > 0, \forall n \geq n_0, 0 \leq f(n) < cg(n) \}$$ @@ -660,6 +773,77 @@ Reference: Thomas H. Cormen et al., *Introduction to Algorithms*, 3rd ed (Cambri END%% +%%ANKI +Basic +What condition must $g(n)$ satisfy such that $o(g(n))$ is nonempty? +Back: $g(n)$ must be asymptotically positive. +Reference: Thomas H. Cormen et al., *Introduction to Algorithms*, 3rd ed (Cambridge, Mass: MIT Press, 2009). + +END%% + +%%ANKI +Basic +What is the transitive property of $o$-notation? +Back: $f(n) = o(g(n))$ and $g(n) = o(h(n))$ implies $f(n) = o(h(n))$. +Reference: Thomas H. Cormen et al., *Introduction to Algorithms*, 3rd ed (Cambridge, Mass: MIT Press, 2009). + +END%% + +%%ANKI +Basic +What is the reflexive property of $o$-notation? +Back: N/A +Reference: Thomas H. Cormen et al., *Introduction to Algorithms*, 3rd ed (Cambridge, Mass: MIT Press, 2009). + +END%% + +%%ANKI +Basic +*Why* is there no reflexive property of $o$-notation? +Back: A function cannot be asymptotically smaller than itself. +Reference: Thomas H. Cormen et al., *Introduction to Algorithms*, 3rd ed (Cambridge, Mass: MIT Press, 2009). + +END%% + +%%ANKI +Basic +What is the symmetric property of $o$-notation? +Back: N/A +Reference: Thomas H. Cormen et al., *Introduction to Algorithms*, 3rd ed (Cambridge, Mass: MIT Press, 2009). + +END%% + +%%ANKI +Basic +What is the transpose symmetric property of $o$-notation? +Back: $f(n) = o(g(n))$ iff $g(n) = \omega(f(n))$ +Reference: Thomas H. Cormen et al., *Introduction to Algorithms*, 3rd ed (Cambridge, Mass: MIT Press, 2009). + +END%% + +%%ANKI +Basic +$o$-notation is likened to what comparison operator of real numbers? +Back: $<$ +Reference: Thomas H. Cormen et al., *Introduction to Algorithms*, 3rd ed (Cambridge, Mass: MIT Press, 2009). + +END%% + +%%ANKI +Cloze +{1:$\Omega$}-notation is to {2:$\geq$} whereas {2:$o$}-notation is to {1:$<$}. +Reference: Thomas H. Cormen et al., *Introduction to Algorithms*, 3rd ed (Cambridge, Mass: MIT Press, 2009). + +END%% + +%%ANKI +Basic +How do we set theoretically say $f(n)$ is asymptotically smaller than $g(n)$? +Back: $f(n) = o(g(n))$ +Reference: Thomas H. Cormen et al., *Introduction to Algorithms*, 3rd ed (Cambridge, Mass: MIT Press, 2009). + +END%% + ## $\Omega$-notation ![[big-omega-notation.png]] @@ -762,7 +946,7 @@ END%% %%ANKI Basic -What condition must $g(n)$ satisfy such that otherwise $\Omega(g(n))$ is empty? +What condition must $g(n)$ satisfy such that $\Omega(g(n))$ is nonempty? Back: $g(n)$ must be asymptotically nonnegative. Reference: Thomas H. Cormen et al., *Introduction to Algorithms*, 3rd ed (Cambridge, Mass: MIT Press, 2009). @@ -816,6 +1000,76 @@ Reference: Thomas H. Cormen et al., *Introduction to Algorithms*, 3rd ed (Cambri END%% +%%ANKI +Basic +What is the transitive property of $\Omega$-notation? +Back: $f(n) = \Omega(g(n))$ and $g(n) = \Omega(h(n))$ implies $f(n) = \Omega(h(n))$. +Reference: Thomas H. Cormen et al., *Introduction to Algorithms*, 3rd ed (Cambridge, Mass: MIT Press, 2009). + +END%% + +%%ANKI +Basic +What is the reflexive property of $\Omega$-notation? +Back: $f(n) = \Omega(f(n))$ +Reference: Thomas H. Cormen et al., *Introduction to Algorithms*, 3rd ed (Cambridge, Mass: MIT Press, 2009). + +END%% + +%%ANKI +Basic +What condition must $f(n)$ satisfy for equality $f(n) = \Omega(f(n))$ to hold? +Back: $f(n)$ must be nonnegatively asymptotic. +Reference: Thomas H. Cormen et al., *Introduction to Algorithms*, 3rd ed (Cambridge, Mass: MIT Press, 2009). + +END%% + +%%ANKI +Basic +*Why* must $f(n)$ be nonnegatively asymptotic for $f(n) = \Omega(f(n))$ to hold? +Back: Otherwise $\Omega(f(n))$ is the empty set. +Reference: Thomas H. Cormen et al., *Introduction to Algorithms*, 3rd ed (Cambridge, Mass: MIT Press, 2009). + +END%% + +%%ANKI +Basic +What is the symmetric property of $\Omega$-notation? +Back: N/A +Reference: Thomas H. Cormen et al., *Introduction to Algorithms*, 3rd ed (Cambridge, Mass: MIT Press, 2009). + +END%% + +%%ANKI +Basic +What is the transpose symmetric property of $\Omega$-notation? +Back: $f(n) = \Omega(g(n))$ iff $g(n) = O(f(n))$ +Reference: Thomas H. Cormen et al., *Introduction to Algorithms*, 3rd ed (Cambridge, Mass: MIT Press, 2009). + +END%% + +%%ANKI +Basic +$\Omega$-notation is likened to what comparison operator of real numbers? +Back: $\geq$ +Reference: Thomas H. Cormen et al., *Introduction to Algorithms*, 3rd ed (Cambridge, Mass: MIT Press, 2009). + +END%% + +%%ANKI +Cloze +{1:$\Theta$}-notation is to {2:$=$} whereas {2:$\Omega$}-notation is to {1:$\geq$}. +Reference: Thomas H. Cormen et al., *Introduction to Algorithms*, 3rd ed (Cambridge, Mass: MIT Press, 2009). + +END%% + +%%ANKI +Cloze +{1:$O$}-notation is to {2:$\leq$} whereas {2:$\Omega$}-notation is to {1:$\geq$}. +Reference: Thomas H. Cormen et al., *Introduction to Algorithms*, 3rd ed (Cambridge, Mass: MIT Press, 2009). + +END%% + ## $\omega$-notation $\omega$-notation refers to a lower bound that is not asymptotically tight. It is defined as set $$\omega(g(n)) = \{ f(n) \mid \forall c > 0, \exists n_0 > 0, \forall n \geq n_0, 0 \leq cg(n) < f(n) \}$$ @@ -922,6 +1176,77 @@ Reference: Thomas H. Cormen et al., *Introduction to Algorithms*, 3rd ed (Cambri END%% +%%ANKI +Basic +What condition must $g(n)$ satisfy such that $\omega(g(n))$ is nonempty? +Back: $g(n)$ must be asymptotically positive. +Reference: Thomas H. Cormen et al., *Introduction to Algorithms*, 3rd ed (Cambridge, Mass: MIT Press, 2009). + +END%% + +%%ANKI +Basic +What is the transitive property of $\omega$-notation? +Back: $f(n) = \omega(g(n))$ and $g(n) = \omega(h(n))$ implies $f(n) = \omega(h(n))$. +Reference: Thomas H. Cormen et al., *Introduction to Algorithms*, 3rd ed (Cambridge, Mass: MIT Press, 2009). + +END%% + +%%ANKI +Basic +What is the reflexive property of $\omega$-notation? +Back: N/A +Reference: Thomas H. Cormen et al., *Introduction to Algorithms*, 3rd ed (Cambridge, Mass: MIT Press, 2009). + +END%% + +%%ANKI +Basic +*Why* is there no reflexive property of $\omega$-notation? +Back: A function cannot be asymptotically larger than itself. +Reference: Thomas H. Cormen et al., *Introduction to Algorithms*, 3rd ed (Cambridge, Mass: MIT Press, 2009). + +END%% + +%%ANKI +Basic +What is the symmetric property of $\omega$-notation? +Back: N/A +Reference: Thomas H. Cormen et al., *Introduction to Algorithms*, 3rd ed (Cambridge, Mass: MIT Press, 2009). + +END%% + +%%ANKI +Basic +What is the transpose symmetric property of $\omega$-notation? +Back: $f(n) = \omega(g(n))$ iff $g(n) = o(f(n))$ +Reference: Thomas H. Cormen et al., *Introduction to Algorithms*, 3rd ed (Cambridge, Mass: MIT Press, 2009). + +END%% + +%%ANKI +Basic +$\omega$-notation is likened to what comparison operator of real numbers? +Back: $>$ +Reference: Thomas H. Cormen et al., *Introduction to Algorithms*, 3rd ed (Cambridge, Mass: MIT Press, 2009). + +END%% + +%%ANKI +Cloze +{1:$O$}-notation is to {2:$\leq$} whereas {2:$\omega$}-notation is to {1:$>$}. +Reference: Thomas H. Cormen et al., *Introduction to Algorithms*, 3rd ed (Cambridge, Mass: MIT Press, 2009). + +END%% + +%%ANKI +Basic +How do we set theoretically say $f(n)$ is asymptotically larger than $g(n)$? +Back: $f(n) = \omega(g(n))$ +Reference: Thomas H. Cormen et al., *Introduction to Algorithms*, 3rd ed (Cambridge, Mass: MIT Press, 2009). + +END%% + ## References * Thomas H. Cormen et al., *Introduction to Algorithms*, 3rd ed (Cambridge, Mass: MIT Press, 2009). \ No newline at end of file diff --git a/notes/algorithms/sorting/bubble-sort.md b/notes/algorithms/sorting/bubble-sort.md index 98c36e2..eaa5c3d 100644 --- a/notes/algorithms/sorting/bubble-sort.md +++ b/notes/algorithms/sorting/bubble-sort.md @@ -22,7 +22,7 @@ Adaptive | Yes %%ANKI Basic -Describe bubble sort in a single sentence. +Describe `BUBBLE_SORT` in a single sentence. Back: Repeatedly swap the smaller of adjacent records downward. Reference: Thomas H. Cormen et al., *Introduction to Algorithms*, 3rd ed (Cambridge, Mass: MIT Press, 2009). @@ -30,7 +30,7 @@ END%% %%ANKI Basic -What is bubble sort's best case runtime? +What is `BUBBLE_SORT`'s best case runtime? Back: $\Omega(n)$ Reference: Thomas H. Cormen et al., *Introduction to Algorithms*, 3rd ed (Cambridge, Mass: MIT Press, 2009). @@ -38,7 +38,7 @@ END%% %%ANKI Basic -How is it bubble sort achieves best case linear runtime? +How is it `BUBBLE_SORT` achieves best case linear runtime? Back: By terminating when no swaps occurred on a given iteration. Reference: Thomas H. Cormen et al., *Introduction to Algorithms*, 3rd ed (Cambridge, Mass: MIT Press, 2009). @@ -46,7 +46,7 @@ END%% %%ANKI Basic -What input value does bubble sort perform best on? +What input value does `BUBBLE_SORT` perform best on? Back: An already sorted array. Reference: Thomas H. Cormen et al., *Introduction to Algorithms*, 3rd ed (Cambridge, Mass: MIT Press, 2009). @@ -54,7 +54,7 @@ END%% %%ANKI Basic -What is bubble sort's worst case runtime? +What is `BUBBLE_SORT`'s worst case runtime? Back: $O(n^2)$ Reference: Thomas H. Cormen et al., *Introduction to Algorithms*, 3rd ed (Cambridge, Mass: MIT Press, 2009). @@ -62,7 +62,7 @@ END%% %%ANKI Basic -What input value does bubble sort perform worst on? +What input value does `BUBBLE_SORT` perform worst on? Back: An array in reverse-sorted order. Reference: Thomas H. Cormen et al., *Introduction to Algorithms*, 3rd ed (Cambridge, Mass: MIT Press, 2009). @@ -70,7 +70,7 @@ END%% %%ANKI Basic -What is bubble sort's average case runtime? +What is `BUBBLE_SORT`'s average case runtime? Back: $O(n^2)$ Reference: Thomas H. Cormen et al., *Introduction to Algorithms*, 3rd ed (Cambridge, Mass: MIT Press, 2009). @@ -78,7 +78,7 @@ END%% %%ANKI Basic -Is bubble sort in place? +Is `BUBBLE_SORT` in place? Back: Yes Reference: Thomas H. Cormen et al., *Introduction to Algorithms*, 3rd ed (Cambridge, Mass: MIT Press, 2009). @@ -86,7 +86,7 @@ END%% %%ANKI Basic -Is bubble sort stable? +Is `BUBBLE_SORT` stable? Back: Yes Reference: Thomas H. Cormen et al., *Introduction to Algorithms*, 3rd ed (Cambridge, Mass: MIT Press, 2009). @@ -94,7 +94,7 @@ END%% %%ANKI Basic -Is bubble sort adaptive? +Is `BUBBLE_SORT` adaptive? Back: Yes Reference: Thomas H. Cormen et al., *Introduction to Algorithms*, 3rd ed (Cambridge, Mass: MIT Press, 2009). @@ -125,7 +125,7 @@ void bubble_sort(const int n, int A[static n]) { Basic What sorting algorithm does the following demonstrate? ![[bubble-sort.gif]] -Back: Bubble sort. +Back: `BUBBLE_SORT` Reference: Thomas H. Cormen et al., *Introduction to Algorithms*, 3rd ed (Cambridge, Mass: MIT Press, 2009). END%% @@ -147,7 +147,7 @@ We prove $P$ maintains the requisite properties: %%ANKI Basic -Given array `A[0..n-1]`, what is bubble sort's loop invariant? +Given array `A[0..n-1]`, what is `BUBBLE_SORT`'s loop invariant? Back: `A[0..i-1]` is a sorted array of the `i` least elements of `A`. Reference: Thomas H. Cormen et al., *Introduction to Algorithms*, 3rd ed (Cambridge, Mass: MIT Press, 2009). @@ -155,7 +155,7 @@ END%% %%ANKI Basic -What is initialization of bubble sort's loop invariant? +What is initialization of `BUBBLE_SORT`'s loop invariant? Back: Sorting starts with an empty array which is trivially sorted. Reference: Thomas H. Cormen et al., *Introduction to Algorithms*, 3rd ed (Cambridge, Mass: MIT Press, 2009). @@ -163,7 +163,7 @@ END%% %%ANKI Basic -What is maintenance of bubble sort's loop invariant? +What is maintenance of `BUBBLE_SORT`'s loop invariant? Back: Each iteration puts the next least element into the sorted subarray. Reference: Thomas H. Cormen et al., *Introduction to Algorithms*, 3rd ed (Cambridge, Mass: MIT Press, 2009). @@ -171,7 +171,7 @@ END%% %%ANKI Basic -How does bubble sort partition its input array? +How does `BUBBLE_SORT` partition its input array? Back: ``` [ sorted | unsorted ] @@ -182,7 +182,7 @@ END%% %%ANKI Basic -Which element will bubble sort move to `sorted`? +Which element will `BUBBLE_SORT` move to `sorted`? ``` [ sorted | unsorted ] ``` @@ -193,7 +193,7 @@ END%% %%ANKI Cloze -Selection sort makes fewer {swaps} than bubble sort in the average case. +Selection sort makes fewer {swaps} than `BUBBLE_SORT` in the average case. Reference: Thomas H. Cormen et al., *Introduction to Algorithms*, 3rd ed (Cambridge, Mass: MIT Press, 2009). END%% diff --git a/notes/algorithms/sorting/insertion-sort.md b/notes/algorithms/sorting/insertion-sort.md index 8a08503..f1d78ff 100644 --- a/notes/algorithms/sorting/insertion-sort.md +++ b/notes/algorithms/sorting/insertion-sort.md @@ -22,7 +22,7 @@ Adaptive | Yes %%ANKI Basic -Describe insertion sort in a single sentence. +Describe `INSERTION_SORT` in a single sentence. Back: Repeatedly put the next record into a sorted array from right to left. Reference: Thomas H. Cormen et al., *Introduction to Algorithms*, 3rd ed (Cambridge, Mass: MIT Press, 2009). @@ -30,7 +30,7 @@ END%% %%ANKI Basic -What is insertion sort's best case runtime? +What is `INSERTION_SORT`'s best case runtime? Back: $\Omega(n)$ Reference: Thomas H. Cormen et al., *Introduction to Algorithms*, 3rd ed (Cambridge, Mass: MIT Press, 2009). @@ -38,7 +38,7 @@ END%% %%ANKI Basic -What input value does insertion sort perform best on? +What input value does `INSERTION_SORT` perform best on? Back: An already sorted array. Reference: Thomas H. Cormen et al., *Introduction to Algorithms*, 3rd ed (Cambridge, Mass: MIT Press, 2009). @@ -46,7 +46,7 @@ END%% %%ANKI Basic -What is insertion sort's worst case runtime? +What is `INSERTION_SORT`'s worst case runtime? Back: $O(n^2)$ Reference: Thomas H. Cormen et al., *Introduction to Algorithms*, 3rd ed (Cambridge, Mass: MIT Press, 2009). @@ -54,7 +54,7 @@ END%% %%ANKI Basic -What input value does insertion sort perform worst on? +What input value does `INSERTION_SORT` perform worst on? Back: An array in reverse-sorted order. Reference: Thomas H. Cormen et al., *Introduction to Algorithms*, 3rd ed (Cambridge, Mass: MIT Press, 2009). @@ -62,7 +62,7 @@ END%% %%ANKI Basic -What is insertion sort's average case runtime? +What is `INSERTION_SORT`'s average case runtime? Back: $O(n^2)$ Reference: Thomas H. Cormen et al., *Introduction to Algorithms*, 3rd ed (Cambridge, Mass: MIT Press, 2009). @@ -70,7 +70,7 @@ END%% %%ANKI Basic -Is insertion sort in place? +Is `INSERTION_SORT` in place? Back: Yes Reference: Thomas H. Cormen et al., *Introduction to Algorithms*, 3rd ed (Cambridge, Mass: MIT Press, 2009). @@ -78,7 +78,7 @@ END%% %%ANKI Basic -Is insertion sort stable? +Is `INSERTION_SORT` stable? Back: Yes Reference: Thomas H. Cormen et al., *Introduction to Algorithms*, 3rd ed (Cambridge, Mass: MIT Press, 2009). @@ -86,7 +86,7 @@ END%% %%ANKI Basic -Is insertion sort adaptive? +Is `INSERTION_SORT` adaptive? Back: Yes Reference: Thomas H. Cormen et al., *Introduction to Algorithms*, 3rd ed (Cambridge, Mass: MIT Press, 2009). @@ -109,7 +109,7 @@ void insertion_sort(const int n, int A[static n]) { Basic What sorting algorithm does the following demonstrate? ![[insertion-sort.gif]] -Back: Insertion sort. +Back: `INSERTION_SORT` Reference: Thomas H. Cormen et al., *Introduction to Algorithms*, 3rd ed (Cambridge, Mass: MIT Press, 2009). END%% @@ -131,14 +131,14 @@ We prove $P$ maintains the requisite properties: %%ANKI Basic -Given array `A[0..n-1]`, what is insertion sort's loop invariant? +Given array `A[0..n-1]`, what is `INSERTION_SORT`'s loop invariant? Back: `A[0..i-1]` consists of the original `A[0..i-1]` elements but in sorted order. END%% %%ANKI Basic -What is initialization of insertion sort's loop invariant? +What is initialization of `INSERTION_SORT`'s loop invariant? Back: Sorting starts with an singleton array which is trivially sorted. Reference: Thomas H. Cormen et al., *Introduction to Algorithms*, 3rd ed (Cambridge, Mass: MIT Press, 2009). @@ -146,7 +146,7 @@ END%% %%ANKI Basic -What is maintenance of insertion sort's loop invariant? +What is maintenance of `INSERTION_SORT`'s loop invariant? Back: Each iteration puts the current element into sorted order. Reference: Thomas H. Cormen et al., *Introduction to Algorithms*, 3rd ed (Cambridge, Mass: MIT Press, 2009). @@ -154,7 +154,7 @@ END%% %%ANKI Cloze -insertion sort makes fewer {comparisons} than selection sort in the average case. +`INSERTION_SORT` makes fewer {comparisons} than `SELECTION_SORT` in the average case. Reference: Thomas H. Cormen et al., *Introduction to Algorithms*, 3rd ed (Cambridge, Mass: MIT Press, 2009). END%% @@ -167,7 +167,7 @@ If you repeat this process for every card in the deck, your left hand will event %%ANKI Basic -What analogy does Cormen et al. use to explain insertion sort? +What analogy does Cormen et al. use to explain `INSERTION_SORT`? Back: Sorting a shuffled deck of playing cards. Reference: Thomas H. Cormen et al., *Introduction to Algorithms*, 3rd ed (Cambridge, Mass: MIT Press, 2009). @@ -175,7 +175,7 @@ END%% %%ANKI Basic -What invariant does the left hand maintain in Cormen et al.'s insertion sort analogy? +What invariant does the left hand maintain in Cormen et al.'s `INSERTION_SORT` analogy? Back: It contains all drawn cards in sorted order. Reference: Thomas H. Cormen et al., *Introduction to Algorithms*, 3rd ed (Cambridge, Mass: MIT Press, 2009). @@ -183,7 +183,7 @@ END%% %%ANKI Basic -How does insertion sort partition its input array? +How does `INSERTION_SORT` partition its input array? Back: ``` [ sorted | unsorted ] @@ -194,7 +194,7 @@ END%% %%ANKI Basic -How many comparisons does insertion sort typically perform with `x`? +How many comparisons does `INSERTION_SORT` typically perform with `x`? ``` [ sorted | x : unsorted ] ``` @@ -205,7 +205,7 @@ END%% %%ANKI Basic -Which element will insertion sort move to `sorted`? +Which element will `INSERTION_SORT` move to `sorted`? ``` [ sorted | unsorted ] ``` diff --git a/notes/algorithms/sorting/merge-sort.md b/notes/algorithms/sorting/merge-sort.md index e2a6c10..7bcacc8 100644 --- a/notes/algorithms/sorting/merge-sort.md +++ b/notes/algorithms/sorting/merge-sort.md @@ -22,7 +22,7 @@ Adaptive | - %%ANKI Basic -What does the term "merge" in merge sort refer to? +What does the term "merge" in `MERGE_SORT` refer to? Back: The primary operation used to combine array halves. Reference: Thomas H. Cormen et al., *Introduction to Algorithms*, 3rd ed (Cambridge, Mass: MIT Press, 2009). @@ -30,7 +30,7 @@ END%% %%ANKI Basic -What is merge sort's best case runtime? +What is `MERGE_SORT`'s best case runtime? Back: $\Omega(n\lg{n})$ Reference: Thomas H. Cormen et al., *Introduction to Algorithms*, 3rd ed (Cambridge, Mass: MIT Press, 2009). @@ -38,7 +38,7 @@ END%% %%ANKI Basic -What is merge sort's worst case runtime? +What is `MERGE_SORT`'s worst case runtime? Back: $O(n\lg{n})$ Reference: Thomas H. Cormen et al., *Introduction to Algorithms*, 3rd ed (Cambridge, Mass: MIT Press, 2009). @@ -46,7 +46,7 @@ END%% %%ANKI Basic -What is merge sort's average case runtime? +What is `MERGE_SORT`'s average case runtime? Back: $O(n\lg{n})$ Reference: Thomas H. Cormen et al., *Introduction to Algorithms*, 3rd ed (Cambridge, Mass: MIT Press, 2009). @@ -54,7 +54,7 @@ END%% %%ANKI Basic -What is the "divide" step of merge sort? +What is the "divide" step of `MERGE_SORT`? Back: Divide the input array into two subarrays of half size. Reference: Thomas H. Cormen et al., *Introduction to Algorithms*, 3rd ed (Cambridge, Mass: MIT Press, 2009). @@ -62,15 +62,15 @@ END%% %%ANKI Basic -What is the "conquer" step of merge sort? -Back: Call merge sort on the "divide"-step's two subarrays. +What is the "conquer" step of `MERGE_SORT`? +Back: Call `MERGE_SORT` on the "divide"-step's two subarrays. Reference: Thomas H. Cormen et al., *Introduction to Algorithms*, 3rd ed (Cambridge, Mass: MIT Press, 2009). END%% %%ANKI Basic -What is the "combine" step of merge sort? +What is the "combine" step of `MERGE_SORT`? Back: Merge the sorted subarrays produced by the "conquer" step. Reference: Thomas H. Cormen et al., *Introduction to Algorithms*, 3rd ed (Cambridge, Mass: MIT Press, 2009). @@ -78,7 +78,7 @@ END%% %%ANKI Basic -When does merge sort "bottom out"? +When does `MERGE_SORT` "bottom out"? Back: When the sequence to be sorted has length 1 or less. Reference: Thomas H. Cormen et al., *Introduction to Algorithms*, 3rd ed (Cambridge, Mass: MIT Press, 2009). @@ -128,7 +128,7 @@ void merge_sort(int i, int j, int *A) { %%ANKI Basic -Where in merge sort's implementation are sentinels useful? +Where in `MERGE_SORT`'s implementation are sentinels useful? Back: As the last elements of the two arrays to combine. Reference: Thomas H. Cormen et al., *Introduction to Algorithms*, 3rd ed (Cambridge, Mass: MIT Press, 2009). @@ -136,7 +136,7 @@ END%% %%ANKI Basic -What sentinel values are typically used in merge sort's "merge" operation? +What sentinel values are typically used in `MERGE_SORT`'s "merge" operation? Back: $\infty$ or the record type's equivalent. Reference: Thomas H. Cormen et al., *Introduction to Algorithms*, 3rd ed (Cambridge, Mass: MIT Press, 2009). @@ -146,7 +146,7 @@ END%% Basic What sorting algorithm does the following demonstrate? ![[merge-sort.gif]] -Back: Merge sort. +Back: `MERGE_SORT` Reference: Thomas H. Cormen et al., *Introduction to Algorithms*, 3rd ed (Cambridge, Mass: MIT Press, 2009). END%% diff --git a/notes/algorithms/sorting/selection-sort.md b/notes/algorithms/sorting/selection-sort.md index d770675..65cd800 100644 --- a/notes/algorithms/sorting/selection-sort.md +++ b/notes/algorithms/sorting/selection-sort.md @@ -23,7 +23,7 @@ Adaptive | No %%ANKI Basic -Describe selection sort in a single sentence. +Describe `SELECTION_SORT` in a single sentence. Back: Repeatedly put the smallest unsorted record at the end of a sorted array. Reference: Thomas H. Cormen et al., *Introduction to Algorithms*, 3rd ed (Cambridge, Mass: MIT Press, 2009). @@ -31,7 +31,7 @@ END%% %%ANKI Basic -What is selection sort's best case runtime? +What is `SELECTION_SORT`'s best case runtime? Back: $\Omega(n^2)$ Reference: Thomas H. Cormen et al., *Introduction to Algorithms*, 3rd ed (Cambridge, Mass: MIT Press, 2009). @@ -39,7 +39,7 @@ END%% %%ANKI Basic -What is selection sort's worst case runtime? +What is `SELECTION_SORT`'s worst case runtime? Back: $O(n^2)$ Reference: Thomas H. Cormen et al., *Introduction to Algorithms*, 3rd ed (Cambridge, Mass: MIT Press, 2009). @@ -47,7 +47,7 @@ END%% %%ANKI Basic -What is selection sort's average case runtime? +What is `SELECTION_SORT`'s average case runtime? Back: $O(n^2)$ Reference: Thomas H. Cormen et al., *Introduction to Algorithms*, 3rd ed (Cambridge, Mass: MIT Press, 2009). @@ -55,7 +55,7 @@ END%% %%ANKI Basic -Is selection sort in place? +Is `SELECTION_SORT` in place? Back: Yes Reference: Thomas H. Cormen et al., *Introduction to Algorithms*, 3rd ed (Cambridge, Mass: MIT Press, 2009). @@ -63,7 +63,7 @@ END%% %%ANKI Basic -Is selection sort stable? +Is `SELECTION_SORT` stable? Back: No Reference: Thomas H. Cormen et al., *Introduction to Algorithms*, 3rd ed (Cambridge, Mass: MIT Press, 2009). @@ -71,7 +71,7 @@ END%% %%ANKI Basic -Is selection sort adaptive? +Is `SELECTION_SORT` adaptive? Back: No Reference: Thomas H. Cormen et al., *Introduction to Algorithms*, 3rd ed (Cambridge, Mass: MIT Press, 2009). @@ -101,7 +101,7 @@ void selection_sort(const int n, int A[static n]) { Basic What sorting algorithm does the following demonstrate? ![[selection-sort.gif]] -Back: Selection sort. +Back: `SELECTION_SORT` Reference: Thomas H. Cormen et al., *Introduction to Algorithms*, 3rd ed (Cambridge, Mass: MIT Press, 2009). END%% @@ -123,7 +123,7 @@ We prove $P$ maintains the requisite properties: %%ANKI Basic -Given array `A[0..n-1]`, what is selection sort's loop invariant? +Given array `A[0..n-1]`, what is `SELECTION_SORT`'s loop invariant? Back: `A[0..i-1]` is a sorted array of the `i` least elements of `A`. Reference: Thomas H. Cormen et al., *Introduction to Algorithms*, 3rd ed (Cambridge, Mass: MIT Press, 2009). @@ -131,7 +131,7 @@ END%% %%ANKI Basic -What is initialization of selection sort's loop invariant? +What is initialization of `SELECTION_SORT`'s loop invariant? Back: Sorting starts with an empty array which is trivially sorted. Reference: Thomas H. Cormen et al., *Introduction to Algorithms*, 3rd ed (Cambridge, Mass: MIT Press, 2009). @@ -139,7 +139,7 @@ END%% %%ANKI Basic -What is maintenance of selection sort's loop invariant? +What is maintenance of `SELECTION_SORT`'s loop invariant? Back: Each iteration puts the next least element into the sorted subarray. Reference: Thomas H. Cormen et al., *Introduction to Algorithms*, 3rd ed (Cambridge, Mass: MIT Press, 2009). @@ -147,7 +147,7 @@ END%% %%ANKI Basic -How does selection sort partition its input array? +How does `SELECTION_SORT` partition its input array? Back: ``` [ sorted | unsorted ] @@ -158,7 +158,7 @@ END%% %%ANKI Basic -Which element will selection sort move to `sorted`? +Which element will `SELECTION_SORT` move to `sorted`? ``` [ sorted | unsorted ] ``` @@ -169,7 +169,7 @@ END%% %%ANKI Cloze -Selection sort makes fewer {swaps} than insertion sort in the average case. +`SELECTION_SORT` makes fewer {swaps} than `INSERTION_SORT` in the average case. Reference: Thomas H. Cormen et al., *Introduction to Algorithms*, 3rd ed (Cambridge, Mass: MIT Press, 2009). END%% diff --git a/notes/combinatorics/combinations.md b/notes/combinatorics/combinations.md index 39773fc..69163e7 100644 --- a/notes/combinatorics/combinations.md +++ b/notes/combinatorics/combinations.md @@ -13,29 +13,26 @@ A $k$-**combination** of $n$ objects is an unordered "choice" of $k$ objects fro ```c void combinations_aux( - const int i, const int n, - const int j, const int k, - int A[static n], - int res[static k] + const size_t n, int A[static n], + const size_t k, int stack[static k], + const size_t i ) { - if (j == k) { - for (int m = 0; m < k; ++m) { - printf("%d ", A[res[m]]); - } - printf("\n"); - return - } else if (n - i < k - j) { + if (n < k) { return; } - res[j] = A[i]; - combinations_aux(i + 1, n, j + 1, k, A, res); - combinations_aux(i + 1, n, j, k, A, res); + if (k == 0) { + print_array(i, stack); + return; + } + stack[i] = A[0]; + combinations_aux(n - 1, A + 1, k - 1, stack, i + 1); + combinations_aux(n - 1, A + 1, k, stack, i); } -void combinations(const int n, const int k, int A[static n]) { - int *res = malloc(sizeof(int) * k); - combinations_aux(0, n, 0, k, A, res); - free(res); +void combinations(const size_t n, const size_t k, int A[static n]) { + int *stack = calloc(k, sizeof(int)); + combinations_aux(n, A, k, stack, 0); + free(stack); } ``` diff --git a/notes/combinatorics/inclusion-exclusion.md b/notes/combinatorics/inclusion-exclusion.md index 02b2979..fb42543 100644 --- a/notes/combinatorics/inclusion-exclusion.md +++ b/notes/combinatorics/inclusion-exclusion.md @@ -53,7 +53,7 @@ END%% %%ANKI Basic -Given finite sets $A$ and $B$, what is $|A \cup B \cup C|$? +Given finite sets $A$, $B$, and $C$, what is $|A \cup B \cup C|$? Back: $|A| + |B| + |C| - |AB| - |AC| - |BC| + |ABC|$ 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). diff --git a/notes/combinatorics/permutations.md b/notes/combinatorics/permutations.md index 3d90032..c1aba5c 100644 --- a/notes/combinatorics/permutations.md +++ b/notes/combinatorics/permutations.md @@ -43,7 +43,7 @@ void permutations(const size_t n, int A[static n]) { } ``` -The above approach prints out all permutations of an array. +The above approach prints out all permutations of an array (assuming distinct values). %%ANKI Basic @@ -166,6 +166,250 @@ Reference: Oscar Levin, *Discrete Mathematics: An Open Introduction*, 3rd ed., n END%% +### Lexicographic Ordering + +We can find the next lexicographic ordering of an array via a procedure of "pivot", "swap", and "reverse". The function `void next(const size_t n, int A[static n])` defined in [[#Overview]] shows the details, taking in a permutation and producing the next, lexicographically speaking. To prove correctness, consider the following: + +``` +[ a₁ a₂ ... aᵢ | aᵢ₊₁ aᵢ₊₂ ... aₙ ] +``` + +Here the RHS side is the longest increasing sequence we could find, from right to left. That is, $a_{i+1} > a_{i+2} > \cdots > a_n$. Denote $a_i$ as the pivot. Next, swap the smallest element in the RHS greater than $a_i$, say $a_j$, with $a_i$. This produces + +``` +[ a₁ a₂ ... aⱼ | aᵢ₊₁ aᵢ₊₂ ... aᵢ ... aₙ ] +``` + +Notice the RHS remains in sorted order. Since $a_j$ was the next smallest element, reversing the reverse-sorted RHS produces the next permutation, lexicographically speaking: + +``` +[ a₁ a₂ ... aⱼ | aₙ ... aᵢ ... aᵢ₊₂ aᵢ₊₁ ] +``` + +Eventually the swapped $a_j$ will be the largest in the RHS ensuring that the breakpoint will eventually move one more position leftward. + +%%ANKI +Basic +What algorithm does `NEXT_LEXICO_ARRAY` refer to? +Back: The finding of the next lexicographic ordering of an array. +Reference: [https://leetcode.com/problems/next-permutation/description/](https://leetcode.com/problems/next-permutation/description/) + +END%% + +%%ANKI +Basic +What does array `A`'s next lexicographic ordering refer to? +Back: The permutation that follows `A` in a sorted list of all distinct permutations of `A`. +Reference: [https://leetcode.com/problems/next-permutation/description/](https://leetcode.com/problems/next-permutation/description/) + +END%% + +%%ANKI +Basic +How does lexicographic ordering of arrays relate to permutations of an array? +Back: Each lexicographic ordering corresponds to a permutation. +Reference: [https://leetcode.com/problems/next-permutation/description/](https://leetcode.com/problems/next-permutation/description/) + +END%% + +%%ANKI +Basic +`NEXT_LEXICO_ARRAY`: How many invocations guarantee all permutations of `A[1:n]`? +Back: $n!$ +Reference: [https://leetcode.com/problems/next-permutation/description/](https://leetcode.com/problems/next-permutation/description/) + +END%% + +%%ANKI +Basic +`NEXT_LEXICO_ARRAY`: When does `< n!` iterations yield all permutations of `A[1:n]`? +Back: When `A` contains duplicates. +Reference: [https://leetcode.com/problems/next-permutation/description/](https://leetcode.com/problems/next-permutation/description/) + +END%% + +%%ANKI +Basic +What is `NEXT_LEXICO_ARRAY`'s worst-case running time? +Back: $O(n)$ +Reference: [https://leetcode.com/problems/next-permutation/description/](https://leetcode.com/problems/next-permutation/description/) + +END%% + +%%ANKI +Basic +What is `NEXT_LEXICO_ARRAY`'s best-case running time? +Back: $\Omega(n)$ +Reference: [https://leetcode.com/problems/next-permutation/description/](https://leetcode.com/problems/next-permutation/description/) + +END%% + +%%ANKI +Basic +What is `NEXT_LEXICO_ARRAY`'s auxiliary memory usage? +Back: $O(1)$ +Reference: [https://leetcode.com/problems/next-permutation/description/](https://leetcode.com/problems/next-permutation/description/) + +END%% + +%%ANKI +Basic +What is the next lexicographic ordering of `[ 1 3 2 4 ]`? +Back: `[ 1 3 4 2 ]` +Reference: [https://leetcode.com/problems/next-permutation/description/](https://leetcode.com/problems/next-permutation/description/) + +END%% + +%%ANKI +Basic +What is the next lexicographic ordering of `[ 2 1 4 3 ]`? +Back: `[ 2 3 1 4 ]` +Reference: [https://leetcode.com/problems/next-permutation/description/](https://leetcode.com/problems/next-permutation/description/) + +END%% + +%%ANKI +Basic +What is the next lexicographic ordering of `[ 4 3 2 1 ]`? +Back: N/A +Reference: [https://leetcode.com/problems/next-permutation/description/](https://leetcode.com/problems/next-permutation/description/) + +END%% + +%%ANKI +Basic +What is the output of `NEXT_LEXICO_ARRAY([ 1 2 3 4 ])`? +Back: `[ 1 2 4 3 ]` +Reference: [https://leetcode.com/problems/next-permutation/description/](https://leetcode.com/problems/next-permutation/description/) + +END%% + +%%ANKI +Basic +What is the output of `NEXT_LEXICO_ARRAY([ 4 3 2 1 ])`? +Back: `[ 1 2 3 4 ]` +Reference: [https://leetcode.com/problems/next-permutation/description/](https://leetcode.com/problems/next-permutation/description/) + +END%% + +%%ANKI +Basic +`NEXT_LEXICO_ARRAY`: Which element will be the pivot of `[ 1 2 3 4 ]`? +Back: `3` +Reference: [https://leetcode.com/problems/next-permutation/description/](https://leetcode.com/problems/next-permutation/description/) + +END%% + +%%ANKI +Basic +`NEXT_LEXICO_ARRAY`: Which element will be the pivot of `[ 4 3 2 1 ]`? +Back: N/A +Reference: [https://leetcode.com/problems/next-permutation/description/](https://leetcode.com/problems/next-permutation/description/) + +END%% + +%%ANKI +Basic +`NEXT_LEXICO_ARRAY`: What property does the RHS of `A[1:n]` exhibit before swapping? +``` +[ a₁ a₂ ... aᵢ | aᵢ₊₁ aᵢ₊₂ ... aₙ ] +``` +Back: Values are in decreasing order. +Reference: [https://leetcode.com/problems/next-permutation/description/](https://leetcode.com/problems/next-permutation/description/) + +END%% + +%%ANKI +Basic +`NEXT_LEXICO_ARRAY`: What property does the LHS of `A[1:n]` exhibit before swapping? +``` +[ a₁ a₂ ... aᵢ | aᵢ₊₁ aᵢ₊₂ ... aₙ ] +``` +Back: N/A +Reference: [https://leetcode.com/problems/next-permutation/description/](https://leetcode.com/problems/next-permutation/description/) + +END%% + +%%ANKI +Basic +`NEXT_LEXICO_ARRAY`: What property does the RHS of `A[1:n]` exhibit after swapping? +``` +[ a₁ a₂ ... aⱼ | aₙ ... aᵢ ... aᵢ₊₂ aᵢ₊₁ ] +``` +Back: Values are in decreasing order. +Reference: [https://leetcode.com/problems/next-permutation/description/](https://leetcode.com/problems/next-permutation/description/) + +END%% + +%%ANKI +Basic +`NEXT_LEXICO_ARRAY`: What property does the LHS of `A[1:n]` exhibit after swapping? +``` +[ a₁ a₂ ... aⱼ | aₙ ... aᵢ ... aᵢ₊₂ aᵢ₊₁ ] +``` +Back: N/A +Reference: [https://leetcode.com/problems/next-permutation/description/](https://leetcode.com/problems/next-permutation/description/) + +END%% + +%%ANKI +Basic +What is the first step taken in the `NEXT_LEXICO_ARRAY` algorithm? +Back: Finding the pivot element. +Reference: [https://leetcode.com/problems/next-permutation/description/](https://leetcode.com/problems/next-permutation/description/) + +END%% + +%%ANKI +Basic +`NEXT_LEXICO_ARRAY`: What does the "pivot" refer to? +Back: The element preceding the longest increasing subarray from right-to-left. +Reference: [https://leetcode.com/problems/next-permutation/description/](https://leetcode.com/problems/next-permutation/description/) + +END%% + +%%ANKI +Cloze +The `NEXT_LEXICO_ARRAY` algorithm can be summed up as "{pivot}", "{swap}", and "{reverse}". +Reference: [https://leetcode.com/problems/next-permutation/description/](https://leetcode.com/problems/next-permutation/description/) + +END%% + +%%ANKI +Basic +`NEXT_LEXICO_ARRAY`: *Which* element is swapped with the pivot? +Back: The smallest element to its right that is greater than it. +Reference: [https://leetcode.com/problems/next-permutation/description/](https://leetcode.com/problems/next-permutation/description/) + +END%% + +%%ANKI +Basic +`NEXT_LEXICO_ARRAY`: What is done after swapping the pivot element? +Back: Reverse the subarray to the right of where the pivot element was originally located. +Reference: [https://leetcode.com/problems/next-permutation/description/](https://leetcode.com/problems/next-permutation/description/) + +END%% + +%%ANKI +Basic +`NEXT_LEXICO_ARRAY`: What step follows swapping `A[1:n]`'s pivot element? +``` +[ a₁ a₂ ... aⱼ | aₙ ... aᵢ ... aᵢ₊₂ aᵢ₊₁ ] +``` +Back: Reverse the elements to the right of $a_j$. +Reference: [https://leetcode.com/problems/next-permutation/description/](https://leetcode.com/problems/next-permutation/description/) + +END%% + +%%ANKI +Basic +`NEXT_LEXICO_ARRAY`: What invariant is maintained after swapping the pivot? +Back: The elements to the right of the original pivot remain in non-increasing order. +Reference: [https://leetcode.com/problems/next-permutation/description/](https://leetcode.com/problems/next-permutation/description/) + +END%% + ## Falling Factorials If we generalize to choosing $k \leq n$ elements of $k$ objects, we can calculate the $k$-permutation of $n$. This is denoted as $(n)_k$, sometimes called the **falling factorial**. $$(n)_k = \frac{n!}{(n - k)!}$$ diff --git a/notes/encoding/integer.md b/notes/encoding/integer.md index 07703d5..1edfdae 100644 --- a/notes/encoding/integer.md +++ b/notes/encoding/integer.md @@ -549,7 +549,7 @@ END%% %%ANKI Basic Let $x$ be a $w$-bit two's-complement number. What is it's complement? -Back: The number $y$ such that $x + y = 2^w$. +Back: $2^w - x$ Reference: “Two’s-Complement.” In *Wikipedia*, January 9, 2024. [https://en.wikipedia.org/w/index.php?title=Two%27s_complement&oldid=1194543561](https://en.wikipedia.org/w/index.php?title=Two%27s_complement&oldid=1194543561). END%% @@ -634,10 +634,11 @@ Reference: Finley, Thomas. “Two’s Complement,” April 2000. [https://www.cs END%% %%ANKI -Cloze -Subtracting $x$ from {a number of all `1` bits} is equivalent to {`~x`}. +Basic +Subtracting `x` from all `1` bits is equivalent to what bitwise operation?. +Back: `~x` Reference: Finley, Thomas. “Two’s Complement,” April 2000. [https://www.cs.cornell.edu/~tomf/notes/cps104/twoscomp.html](https://www.cs.cornell.edu/~tomf/notes/cps104/twoscomp.html). - + END%% ## Casting @@ -964,7 +965,7 @@ END%% %%ANKI Basic What hardware-level advantage does two's-complement introduce over other signed encodings? -Back: The same circuits can be used for unsigned and two's-complement addition. +Back: The same circuits can be used for unsigned and two's-complement arithmetic. Reference: Bryant, Randal E., and David O'Hallaron. *Computer Systems: A Programmer's Perspective*. Third edition, Global edition. Always Learning. Pearson, 2016. END%% diff --git a/notes/posix/signals.md b/notes/posix/signals.md index 7ef1715..2b8a8bd 100644 --- a/notes/posix/signals.md +++ b/notes/posix/signals.md @@ -239,7 +239,7 @@ END%% %%ANKI Basic What distinguishes `abort()` from `exit()`? -Back: The former sends a `SIGABRT` signal. The latter closes the application normally. +Back: The latter gracefully closes the application. Reference: N/A Tags: c17