3.9 KiB
date | type |
---|---|
11.09.2024 | theoretical |
travelling salesperson
Definition
- Approach to design algorithms
- Optimal solution in polynomial time
- Usually used alongside Divide and Conquer
- Used to better the time complexity, but usually worsens the space complexity
How do we create a DP soluton?
- Characterize optimal solution
- Recursively define the value of an optimal solution
- Compute the value
- Construct an optimal solution from the computed information
Problem discussion
Calculating Fibonacci numbers
- Recursion is extremely bad -> PF was wrong
- Because the branches are too many
- We compute f(x) where f(x) has already been computed
- Memoization!
Approaches
- Linear time
\mathcal{O}(n)
- Bottom to top
F[0] = 1
F[1] = 1
for i in {2, .., n} do
F[i] = F[i − 1] + F[i − 2]
end for
return F[n]
Compute the entire array and just return the result.
- Memoization
\mathcal{O}(n)
- Top to bottom
function fibMemo(index, cache) {
cache = cache || [];
if (cache[index]) return cache[index];
else {
if (index < 3) return 1;
else {
cache[index] = fibMemo(index - 1, cache) + fibMemo(index - 2, cache);
}
}
return cache[index];
}
Rod cutting
Given a rod of length N inches and an array of prices, price[]. price[i] denotes the value of a piece of length i. Determine the maximum value obtainable by cutting up the rod and selling the pieces.
Optimal solution
- Let the left part have a length
l
- Then
R[n] = P[l] + R[n-l]
- Where
P[l]
is the price - First cut of length should be the maximal one
Knight Collecting Rewards
Knight Collecting rewards Input: Integers
n, m
, table of rewards of sizen \times m
Question: What is the maximum reward that the knight can get for its journey.
Strategy
- We look at the bounds defined by the problem statement
- We know that the knight can get into the cell
(n-1, m-1)
either from(n-2,m-3)
or(n-3,m-2)
- Hence, we have to know the most rewarding path to these two points from
(0,0)
- We know that the knight can get into the cell
Approaches
\mathcal{O}(n*m)
Reward(int n, int m, matrix A)
Create matrix R of size n × m with −∞ values
R[0, 0] = A[0, 0]
for i in {0, .., n − 1} do
for j in {0, .., m − 1} do
R[i, j] = A[i, j] + max R[i − 1, j − 2], R[i − 2, j − 1]
end for
end for
return R[n-1, m-1]
This doesn't tell us how we got there, but it does give us max rewards. We can easily include path memory by making elements be a linked list or create a separate table blah blah.
Longest common non-contiguous sequence1
LCS Input: Two sequences X = [x1, x2, . . . xm], Y = [y1, y2, . . . , Yn]. Question: Longest common subsequence
Strategy
Or this formula:
c[i,j] = \begin{cases}
0, & \text{if } i=0 \text{ or } j=0\\
c[i-1,j-1]+1, & \text{if } i,j>0 \text{ and } x_i = y_i\\
max\{c[i,j-1], c[i-1], j\}, & \text{if } i,j>0 \text{ and } x_i \neq y_i\\
\end{cases}
Dominating set2 in a path
Input: A path
P
with a specified positive cost for each vertex. Output: Choose a subset of verticesS
with a minimum cost such that for eachv \in P
: eitherv \in S
or there is u such thatu \in S
andu, v
are neighbors.
Strategy
- Identify some subproblems
A[i]
cost of the cheapest setS_i \subset P_i
which dominates all vertices inP_i
<- not greatA[i,0]
equals the cost of the cheapestS_i
which dominatesP_i
andv_i \notin S_i
A[i,1]
equals the cost of the cheapest
-
contiguous - next or near in time or sequence ↩︎
-
Subset of the vertices of the graph
G
, such that any vertex ofG
is in it, or has a neighbor in it ↩︎