Start work on chapter 1 exercises.
This commit is contained in:
parent
f7beea9779
commit
a35b54f308
|
@ -0,0 +1 @@
|
||||||
|
data/corpus.txt
|
Binary file not shown.
|
@ -65,4 +65,41 @@ A USet where order matters. Its interface only changes in the `find` function:
|
||||||
* `find(x)`: find the smallest y s.t. y >= x. thereby returning a useful value
|
* `find(x)`: find the smallest y s.t. y >= x. thereby returning a useful value
|
||||||
even if x isn't in the set. AKA successor search.
|
even if x isn't in the set. AKA successor search.
|
||||||
|
|
||||||
Difference between USet and SSet
|
Difference between USet and SSet: sorting requires more steps (run time) and
|
||||||
|
complexity. A USet should be used unless an SSet is explicitly required.
|
||||||
|
|
||||||
|
## Mathematical background
|
||||||
|
|
||||||
|
(See notebook).
|
||||||
|
|
||||||
|
## The model of computation
|
||||||
|
|
||||||
|
Proper analysis requires a mathematical model of computation. The model in the
|
||||||
|
book is on a w-bit word-RAM model.
|
||||||
|
|
||||||
|
* we can access cells of memory, each of which stores a w-bit word
|
||||||
|
* basic operations (arithmetic and logical) take constant time
|
||||||
|
* cells can be read or written in constant time
|
||||||
|
* the memory manager allows allocating a block of k cells of memory in O(k)
|
||||||
|
time
|
||||||
|
* size constraint: w >= log(n) where n is the number of elements stored in a
|
||||||
|
data structure
|
||||||
|
* data structures use a generic type T such that T occupies one word
|
||||||
|
|
||||||
|
## Correctness, time complexity, and space complexity
|
||||||
|
|
||||||
|
Three factors for analysing a data structure:
|
||||||
|
|
||||||
|
* correctness: data structure must implement the interface
|
||||||
|
* time complexity: run times of operations on the data structure should
|
||||||
|
be as small as possible
|
||||||
|
* space complexity: the storage space used by a data structure should be
|
||||||
|
as small as possible
|
||||||
|
|
||||||
|
Run times come in three flavours:
|
||||||
|
|
||||||
|
1. Worst-case: an operation never takes longer than this
|
||||||
|
2. Amortized: if a data structure has an amortized run time of f(n), then
|
||||||
|
a sequence of m operations takes at most m f(n) time.
|
||||||
|
3. Expected: the actual run time is a random variable, and the expected
|
||||||
|
value of this run time is at most f(n).
|
|
@ -0,0 +1,35 @@
|
||||||
|
#include <cstdlib>
|
||||||
|
#include <queue>
|
||||||
|
#include <iostream>
|
||||||
|
#include <sstream>
|
||||||
|
#include <string>
|
||||||
|
|
||||||
|
using namespace std;
|
||||||
|
|
||||||
|
// Solve the following problems by reading a text file one line at a time
|
||||||
|
// and performing operations on each line in the appropriate data structure(s).
|
||||||
|
// Your implementations should be fast enough that even files containing
|
||||||
|
// a million lines can be processed in a few seconds.
|
||||||
|
|
||||||
|
|
||||||
|
// Read the input one line at a time and then write the lines out in
|
||||||
|
// reverse order, so that the last input line is printed first, then the
|
||||||
|
// second last input line, and so on.
|
||||||
|
static void
|
||||||
|
problem1(const char *path)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// main should just execute the problems in sequence.
|
||||||
|
int
|
||||||
|
main(int argc, char *argv[])
|
||||||
|
{
|
||||||
|
if (argc != 2) {
|
||||||
|
cerr << "No input file specified, exiting." << endl;
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
problem1(argv[1]);
|
||||||
|
}
|
Loading…
Reference in New Issue