Updates on how we generate permutations.
parent
32bd0e51ce
commit
ec45aad8c3
|
@ -220,7 +220,7 @@
|
||||||
"_journal/2024-02/2024-02-27.md": "f75a0d04a875aeee932343dae0c78768",
|
"_journal/2024-02/2024-02-27.md": "f75a0d04a875aeee932343dae0c78768",
|
||||||
"filesystems/index.md": "cbd2b0290a3ba3b32abec4bd8bfefad5",
|
"filesystems/index.md": "cbd2b0290a3ba3b32abec4bd8bfefad5",
|
||||||
"filesystems/cas.md": "34906013a2a60fe5ee0e31809b4838aa",
|
"filesystems/cas.md": "34906013a2a60fe5ee0e31809b4838aa",
|
||||||
"git/objects.md": "b95228a78744d3f9fe173e575aa0445a",
|
"git/objects.md": "1c867853b080700a73de55b7be185f8d",
|
||||||
"git/index.md": "83d2d95fc549d9e8436946c7bd058d15",
|
"git/index.md": "83d2d95fc549d9e8436946c7bd058d15",
|
||||||
"encoding/integer.md": "84b2ce080e0e756f265257e57467f0e6",
|
"encoding/integer.md": "84b2ce080e0e756f265257e57467f0e6",
|
||||||
"_journal/2024-02-29.md": "f610f3caed659c1de3eed5f226cab508",
|
"_journal/2024-02-29.md": "f610f3caed659c1de3eed5f226cab508",
|
||||||
|
@ -237,7 +237,7 @@
|
||||||
"_journal/2024-03/2024-03-02.md": "8136792b0ee6e08232e4f60c88d461d2",
|
"_journal/2024-03/2024-03-02.md": "8136792b0ee6e08232e4f60c88d461d2",
|
||||||
"_journal/2024-03-04.md": "9ec052061e7a613ff877a4488576e82f",
|
"_journal/2024-03-04.md": "9ec052061e7a613ff877a4488576e82f",
|
||||||
"_journal/2024-03/2024-03-03.md": "64e2f17b4d57a6bd42a3d1b7f2851b83",
|
"_journal/2024-03/2024-03-03.md": "64e2f17b4d57a6bd42a3d1b7f2851b83",
|
||||||
"_journal/2024-03-05.md": "a285ac3e48e335c50c42ee20b0cb0472",
|
"_journal/2024-03-05.md": "e9a911c19bb4c0ff451db793248cb4bb",
|
||||||
"_journal/2024-03/2024-03-04.md": "4948d90a08af2cff58c629c9a2e11ee4",
|
"_journal/2024-03/2024-03-04.md": "4948d90a08af2cff58c629c9a2e11ee4",
|
||||||
"algebra/sequences/geometric.md": "53936ec392b3b714bd4a9bdb4554b582",
|
"algebra/sequences/geometric.md": "53936ec392b3b714bd4a9bdb4554b582",
|
||||||
"algebra/sequences/arithmetic.md": "80381ca0f2b3b9a1c155c597a7dea75a"
|
"algebra/sequences/arithmetic.md": "80381ca0f2b3b9a1c155c597a7dea75a"
|
||||||
|
|
|
@ -5,14 +5,24 @@ title: "2024-03-05"
|
||||||
- [x] Anki Flashcards
|
- [x] Anki Flashcards
|
||||||
- [x] KoL
|
- [x] KoL
|
||||||
- [ ] Sheet Music (10 min.)
|
- [ ] Sheet Music (10 min.)
|
||||||
- [ ] Go (1 Life & Death Problem)
|
- [x] Go (1 Life & Death Problem)
|
||||||
- [ ] Korean (Read 1 Story)
|
- [ ] Korean (Read 1 Story)
|
||||||
- [ ] Interview Prep (1 Practice Problem)
|
- [x] Interview Prep (1 Practice Problem)
|
||||||
- [ ] Log Work Hours (Max 3 hours)
|
- [x] Log Work Hours (Max 3 hours)
|
||||||
|
|
||||||
* Arithmetic and geometric sequences in "Discrete Mathematics: An Open Introduction".
|
* Arithmetic and geometric sequences in "Discrete Mathematics: An Open Introduction".
|
||||||
* Completed chapter exercises 2.2.
|
* Completed chapter exercises 2.2.
|
||||||
* TODO
|
* Finished adding flashcards for git tree and commit objects.
|
||||||
* Finish up tree objects and commit objects.
|
* 101weiqi (serial numbers)
|
||||||
* 101weiqi
|
* Q-82289
|
||||||
* 2 interview problems.
|
* Q-350205
|
||||||
|
* Q-77774
|
||||||
|
* Q-267476
|
||||||
|
* Q-184824
|
||||||
|
* Q-102329
|
||||||
|
* Q-152376
|
||||||
|
* Q-1358
|
||||||
|
* Q-114783
|
||||||
|
* Q-26296
|
||||||
|
* Leetcode Problems
|
||||||
|
* [Next Permutation](https://leetcode.com/problems/next-permutation/)
|
|
@ -39,7 +39,7 @@ void combinations(const int n, const int k, int A[static n]) {
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
The above approach prints out all $k$-combinations of a given array.
|
The above approach prints out all $k$-combinations of an array.
|
||||||
|
|
||||||
%%ANKI
|
%%ANKI
|
||||||
Basic
|
Basic
|
||||||
|
|
|
@ -12,38 +12,38 @@ tags:
|
||||||
A **permutation** of some $n$ objects is a (possible) rearrangement of those $n$ objects. The number of permutations is $n!$ since there are $n$ possible ways to pick the first object, $(n - 1)$ possible ways to pick the second, and so on.
|
A **permutation** of some $n$ objects is a (possible) rearrangement of those $n$ objects. The number of permutations is $n!$ since there are $n$ possible ways to pick the first object, $(n - 1)$ possible ways to pick the second, and so on.
|
||||||
|
|
||||||
```c
|
```c
|
||||||
void permutations_aux(
|
void next(const size_t n, int A[static n]) {
|
||||||
const size_t n,
|
size_t pivot = -1;
|
||||||
int A[static n],
|
for (size_t i = n - 1; i >= 1; --i) {
|
||||||
int res[static n],
|
if (A[i - 1] < A[i]) {
|
||||||
uint64_t choices
|
pivot = i - 1;
|
||||||
) {
|
break;
|
||||||
if (!choices) {
|
|
||||||
for (size_t i = 0; i < n; ++i) {
|
|
||||||
printf("%d ", A[res[i]]);
|
|
||||||
}
|
}
|
||||||
printf("\n");
|
}
|
||||||
|
if (pivot == -1) {
|
||||||
|
reverse(0, n - 1, A);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
size_t j = pivot;
|
||||||
unsigned int weight = n - bit_weight(choices);
|
for (size_t i = pivot + 1; i < n; ++i) {
|
||||||
for (unsigned int i = 0; i < 64; ++i) {
|
if (A[pivot] < A[i] && (j == pivot || A[i] < A[j])) {
|
||||||
uint64_t next = 1L << i;
|
j = i;
|
||||||
if (choices & next) {
|
|
||||||
res[weight] = i;
|
|
||||||
permutations_aux(n, A, res, choices & ~next);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
swap(pivot, j, A);
|
||||||
|
reverse(pivot + 1, n - 1, A);
|
||||||
}
|
}
|
||||||
|
|
||||||
void permutations(const size_t n, int A[static n]) {
|
void permutations(const size_t n, int A[static n]) {
|
||||||
int *res = malloc(sizeof(int) * n);
|
size_t iters = factorial(n);
|
||||||
permutations_aux(n, A, res, (1L << n) - 1);
|
for (size_t i = 0; i < iters; ++i) {
|
||||||
free(res);
|
print_array(n, A);
|
||||||
|
next(n, A);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
The above approach prints out all permutations of a given array, provided the array contains at most `64` digits. It relies on `bit_weight` as defined in [[binary/index|binary]].
|
The above approach prints out all permutations of an array.
|
||||||
|
|
||||||
%%ANKI
|
%%ANKI
|
||||||
Basic
|
Basic
|
||||||
|
|
|
@ -44,6 +44,14 @@ Reference: Scott Chacon, *Pro Git*, Second edition, The Expert’s Voice in Soft
|
||||||
<!--ID: 1709177255589-->
|
<!--ID: 1709177255589-->
|
||||||
END%%
|
END%%
|
||||||
|
|
||||||
|
%%ANKI
|
||||||
|
Basic
|
||||||
|
How is the SHA-1 of a git object generated?
|
||||||
|
Back: By calculating the checksum of the object header + contents.
|
||||||
|
Reference: Scott Chacon, *Pro Git*, Second edition, The Expert’s Voice in Software Development (New York, NY: Apress, 2014).
|
||||||
|
<!--ID: 1709674569885-->
|
||||||
|
END%%
|
||||||
|
|
||||||
%%ANKI
|
%%ANKI
|
||||||
Basic
|
Basic
|
||||||
What is "oid" an acronym for?
|
What is "oid" an acronym for?
|
||||||
|
@ -117,7 +125,7 @@ END%%
|
||||||
|
|
||||||
%%ANKI
|
%%ANKI
|
||||||
Basic
|
Basic
|
||||||
Where does e.g. `d670460b4b4aece5915caf5c68d12f560a9fe3e4` live in the object database?
|
Where does `d670460b4b4aece5915caf5c68d12f560a9fe3e4` live in the object database?
|
||||||
Back: At `.git/objects/d6/70460b4b4aece5915caf5c68d12f560a9fe3e4`.
|
Back: At `.git/objects/d6/70460b4b4aece5915caf5c68d12f560a9fe3e4`.
|
||||||
Reference: Scott Chacon, *Pro Git*, Second edition, The Expert’s Voice in Software Development (New York, NY: Apress, 2014).
|
Reference: Scott Chacon, *Pro Git*, Second edition, The Expert’s Voice in Software Development (New York, NY: Apress, 2014).
|
||||||
<!--ID: 1709177255668-->
|
<!--ID: 1709177255668-->
|
||||||
|
@ -182,6 +190,14 @@ Reference: Scott Chacon, *Pro Git*, Second edition, The Expert’s Voice in Soft
|
||||||
<!--ID: 1709345254716-->
|
<!--ID: 1709345254716-->
|
||||||
END%%
|
END%%
|
||||||
|
|
||||||
|
%%ANKI
|
||||||
|
Basic
|
||||||
|
What plumbing command can be used to find the git object type of an oid?
|
||||||
|
Back: `cat-file`
|
||||||
|
Reference: Scott Chacon, *Pro Git*, Second edition, The Expert’s Voice in Software Development (New York, NY: Apress, 2014).
|
||||||
|
<!--ID: 1709674569890-->
|
||||||
|
END%%
|
||||||
|
|
||||||
## Blobs
|
## Blobs
|
||||||
|
|
||||||
The **b**inary **l**arge **ob**ject (blob) is used to represent arbitrary files.
|
The **b**inary **l**arge **ob**ject (blob) is used to represent arbitrary files.
|
||||||
|
@ -315,6 +331,14 @@ Reference: Scott Chacon, *Pro Git*, Second edition, The Expert’s Voice in Soft
|
||||||
<!--ID: 1709345254740-->
|
<!--ID: 1709345254740-->
|
||||||
END%%
|
END%%
|
||||||
|
|
||||||
|
%%ANKI
|
||||||
|
Basic
|
||||||
|
What kind of git objects can a tree contain?
|
||||||
|
Back: Blobs and trees.
|
||||||
|
Reference: Scott Chacon, *Pro Git*, Second edition, The Expert’s Voice in Software Development (New York, NY: Apress, 2014).
|
||||||
|
<!--ID: 1709674569895-->
|
||||||
|
END%%
|
||||||
|
|
||||||
%%ANKI
|
%%ANKI
|
||||||
Cloze
|
Cloze
|
||||||
{`hash-object`} is to blobs as {`write-tree`} is to trees.
|
{`hash-object`} is to blobs as {`write-tree`} is to trees.
|
||||||
|
@ -424,6 +448,75 @@ Reference: Scott Chacon, *Pro Git*, Second edition, The Expert’s Voice in Soft
|
||||||
<!--ID: 1709349279660-->
|
<!--ID: 1709349279660-->
|
||||||
END%%
|
END%%
|
||||||
|
|
||||||
|
## Commits
|
||||||
|
|
||||||
|
Commit objects provide metadata information about particular trees.
|
||||||
|
|
||||||
|
> While a tree represents a particular directory state of a working directory, a commit represents that state in "time", and explains how to get there.
|
||||||
|
|
||||||
|
%%ANKI
|
||||||
|
Basic
|
||||||
|
What distinguishes a tree from a commit?
|
||||||
|
Back: A commit contains data about a tree (e.g. author, parent commits, etc.).
|
||||||
|
Reference: Scott Chacon, *Pro Git*, Second edition, The Expert’s Voice in Software Development (New York, NY: Apress, 2014).
|
||||||
|
<!--ID: 1709674569898-->
|
||||||
|
END%%
|
||||||
|
|
||||||
|
%%ANKI
|
||||||
|
Basic
|
||||||
|
How do git commits maintain a traversable history?
|
||||||
|
Back: Each commit can have parent commits associated with it.
|
||||||
|
Reference: Scott Chacon, *Pro Git*, Second edition, The Expert’s Voice in Software Development (New York, NY: Apress, 2014).
|
||||||
|
<!--ID: 1709674569902-->
|
||||||
|
END%%
|
||||||
|
|
||||||
|
%%ANKI
|
||||||
|
Basic
|
||||||
|
What kind of git object is responsible for maintaining history?
|
||||||
|
Back: Commits.
|
||||||
|
Reference: Scott Chacon, *Pro Git*, Second edition, The Expert’s Voice in Software Development (New York, NY: Apress, 2014).
|
||||||
|
<!--ID: 1709674569906-->
|
||||||
|
END%%
|
||||||
|
|
||||||
|
%%ANKI
|
||||||
|
Basic
|
||||||
|
What plumbing subcommand is used to create commits?
|
||||||
|
Back: `commit-tree`
|
||||||
|
Reference: Scott Chacon, *Pro Git*, Second edition, The Expert’s Voice in Software Development (New York, NY: Apress, 2014).
|
||||||
|
<!--ID: 1709674569911-->
|
||||||
|
END%%
|
||||||
|
|
||||||
|
%%ANKI
|
||||||
|
Cloze
|
||||||
|
{`write-tree`} is to trees as {`commit-tree`} is to commits.
|
||||||
|
Reference: Scott Chacon, *Pro Git*, Second edition, The Expert’s Voice in Software Development (New York, NY: Apress, 2014).
|
||||||
|
<!--ID: 1709674569916-->
|
||||||
|
END%%
|
||||||
|
|
||||||
|
%%ANKI
|
||||||
|
Basic
|
||||||
|
What does the decompressed header of a commit object look like?
|
||||||
|
Back: `commit <size><NUL>`
|
||||||
|
Reference: Scott Chacon, *Pro Git*, Second edition, The Expert’s Voice in Software Development (New York, NY: Apress, 2014).
|
||||||
|
<!--ID: 1709674569920-->
|
||||||
|
END%%
|
||||||
|
|
||||||
|
%%ANKI
|
||||||
|
Basic
|
||||||
|
Commits points to what kind of git object?
|
||||||
|
Back: Trees.
|
||||||
|
Reference: Scott Chacon, *Pro Git*, Second edition, The Expert’s Voice in Software Development (New York, NY: Apress, 2014).
|
||||||
|
<!--ID: 1709674569924-->
|
||||||
|
END%%
|
||||||
|
|
||||||
|
%%ANKI
|
||||||
|
Basic
|
||||||
|
What does the `commit-tree` subcommand return?
|
||||||
|
Back: The oid of the new commit object.
|
||||||
|
Reference: Scott Chacon, *Pro Git*, Second edition, The Expert’s Voice in Software Development (New York, NY: Apress, 2014).
|
||||||
|
<!--ID: 1709674569928-->
|
||||||
|
END%%
|
||||||
|
|
||||||
## References
|
## References
|
||||||
|
|
||||||
* Scott Chacon, *Pro Git*, Second edition, The Expert’s Voice in Software Development (New York, NY: Apress, 2014).
|
* Scott Chacon, *Pro Git*, Second edition, The Expert’s Voice in Software Development (New York, NY: Apress, 2014).
|
Loading…
Reference in New Issue