CPSC 490 - Suggested Topics
Problem List (more to be added)
-
★★★ In class we learned an algorithm for the longest common subsequence problem that ran in O(n^2) time (where both sequences have length n). Suppose you know that the longest common subsequence is upper bounded by n^(1/2). Give an O(n^(3/2)) time algorithm to compute the length of the longest common subsequence.
-
★★★ Consider a gambling game with K types of bets of the following type: for the i-th type of bet, you bet one chip, and you win w_i chips (w_i is an integer) with probability p_i, and you lose the chip you wagered with probability 1 - p_i. Given that you start with n chips, compute the maximum probability that you will eventually make a profit using an optimal betting strategy; you stop playing if you run out of chips.
-
★★★ We learned in class that the KMP algorithm finds exact matches of one string in another, in linear time. How can we find "fuzzy" matches that contain at most k mismatches? (Claimed by Manan Mehta)
-
★★★★ Give a data structure that represents an "array" but supports the following operations in O(log n) time: insert/delete/get element at any index, reversing a subarray.
-
★★★★ A clique is a complete subgraph. Given an undirected graph, partition the vertices into two sets A and B, such that vertices in A forms a clique, and vertices in B have no edges between them, or determine that this is impossible. What is the lowest time complexity you can get for your solution? Hint: it can be done in polynomial time.
-
★★★★ An alternating permutation of size n is a rearrangement of the array [1, 2, ..., n] that alternates between increase and decrease in adjacent elements (e.g. 15243). Give a dynamic programming algorithm to count the number of alternating permutations of size n that runs in polynomial time.
-
★★★★ Find the number of permutations of size n such that the longest increasing subsequence does not have length 3, in polynomial time.
-
★★★★ We learned in class that a bit-indexed tree is an efficient data structure that supports range update + point query, or point update + range query for the sum operation. Modify it to support both range update and range query in O(log n).
-
★★★★★ A tandem repeat in a string is two adjacent copies of the same substring (e.g. CATCAT). Give an algorithm to detect the presence of at least one tandem repeat in O(n log^2 n) or better. (Claimed by Quintin Moncaster)
-
★★★★★ We learned in class how to solve the path of maximum bandwidth problem and how to efficiently answer many queries. We will turn to the problem of efficient updates. Given an undirected graph, construct a data structure that supports the following queries in O(log V) time: get bandwidth of the path of maximum bandwidth between two nodes, increase the bandwidth of an edge.
Algorithms and Data Structures (more to be added)
-
Johnson’s algorithm.
-
Suurballe’s algorithm.
-
Any polynomial time algorithm to find k-th shortest path in graph with non-negative weights.
-
Applications of hashing and the Rabin-Karp algorithm.
-
How to implement and when use an LL parser, or recursive descent parser (pick one). (Claimed by Kevin Wong)
-
Any dynamic programming parsing algorithm for context-free grammars (e.g. the CYK algorithm).
-
2D segment trees. (Claimed by Felipe Caiado)
-
Link-cut tree.
-
Persistent balanced trees.
-
Longest common substring of n strings.
-
Fast Fourier Transform. (Claimed by Alexander Berghholm)
-
Suffix Arrays/Trees. (Claimed by Steven Shih)
-
Splay trees.
-
Heavy light decomposition (HLD).
-
Persistant segment trees.
-
Treaps (Cartesian Trees). (Claimed by Clarissa Audrey)
-
Original map compression techniques used in the first TomTom satnavs.
-
K-d tree and nearest neighbor queries. (Claimed by John Zou)
-
Quad tree / oct tree / binary space partition tree and their applications.
-
Randomized incremental convex hull construction.
-
Orthogonal convex hull.
-
Delaunay triangulation.
-
Voronoi diagram.
-
Line arrangement.
-
Topological line sweep. (Claimed by Christopher Hui)
-
Triangulating a non-convex polygon.
-
O(n^2) construction of visibility graph.
-
Arbitrary polygon intersection and union.
-
Arbitrary dimensional minimum enclosing ball.
-
Chinese Remainder theorem: solving simultaneous equations of x = a_i mod n_i. (Claimed by Min-Ji Han)
-
Primality testing.
-
Karatsuba multiplication. (Claimed by Dara Nguyen)
-
Strassen multiplication.
-
Numerical integration.
-
Dinic's algorithm for maximum flow.
-
Hungarian algorithm for maximum weight bipartite matching. (Claimed by Gina Bolognesi)
-
Blossoms algorithm for general matching.
-
Topological Skeleton. (Claimed by Brooke Dai)
-
PID Control / Control Theory. (Claimed by Ben Henaghan)
-
Gomory-Hu Trees.
-
Maximum Perimetre Triangle.
-
A* or ALT. (Claimed by Tommy Zhang)
-
Dilworth's Theorem.
-
Linear Programming. (Claimed by Xuhao Chen)
-
Projective Duality.
-
Profiling, tutorial, and application to something from class.