2020-03-19 12:51:33 +05:30

180 lines
3.2 KiB
Markdown

Greedy
------
$k$ negations
-------------
> Given A[N]
> can have -ve can have 0s
> k negations
> can choose same element multiple times
> find the maximum sum that you can achieve
always find the smallest and negate it
Sort: $O(n \log n + k)$
Min Heap: $O(n+k \log n)$
Note: 1 2 will have -1 2 or 1 2 as the final answer
can keep toggling the smallest element
-- --
What is Greedy
--------------
Greedy - when optimal solution to a local problem is also the optimal solution to the global problem
That is, if you can act greedily at every step, and still reach the optimal.
If you don't have to think long term to achieve the optimal
-- --
Where will greedy not work?
---------------------------
![65112ffa.png](:storage/8d511c68-5ee9-423f-b945-bf7407cdb509/65112ffa.png)
Local solution is not contributing to the global solution
Whenever greedy works, it will be based on observations and intuition
But have to be careful because can be subtle-non-greedy case
-- --
Max Sum Subset
--------------
> Given A[N] with -ves
> Find the subset of size k with maximum sum
>
Sort and take top k values
$O(n \log n)$
-- --
Amazon - Min Subset Product
----------------------------
> Given A[N]
> min possible subset product
>
Examples
> -1 -1 -2 4 5 = -24
> -1 0 2 = -2
> 0 1 = 0
>
1. If no -ve, then choose min $\geq 0$
2. If k -ve, then choose all $> 0$. don't choose 0
- if odd -ve, choose all
- if even -ve, choose the smallest odd -ves
$O(n)$
-- --
Activity Selection
------------------
Multiple companies. Very important
> ![96706e2d.png](:storage/8d511c68-5ee9-423f-b945-bf7407cdb509/96706e2d.png)
> max no of activity that can be performed without overlapps
**Incorrect:** min sized?
```
============= ===============
========
```
**Incorrect:** start time
**Correct:** least overlaps?
**but easier:** first one to end
sort by end time and execute
**Proof:**
Assume there exists a solution that doesn't include the min end time job.
Add this job. Either it overlaps with 1, or with 0.
Optimal in both cases
So, for every optimal solution without the min end job, we also have an optimal solution with the min end job.
So, optimal to always choose the min end job
![8d6e9fbb.png](:storage/8d511c68-5ee9-423f-b945-bf7407cdb509/8d6e9fbb.png)
-- --
Flights
-------
> start, end time of flights
> num of platforms
>
+1 -1, prefix sum max
![03c1d903.png](:storage/8d511c68-5ee9-423f-b945-bf7407cdb509/03c1d903.png)
-- --
Job Scheduling + Profit
-----------------------
> day deadlines for jobs
> can perform only 1 job per day
delay the job
$O(n \log n + n^2)$
$n \log n$ to sort by profit
$n^2$ because start at end time and move left to find an empty slot
Can reduce to n log n using BBST
we want the highest number in the set which is less than x
we also want to remove any given number from set
set - upperbound - google
-- --
Rats and Holes
--------------
> Rats
> Holes
> equal count
> locations given for each
> ech rat runs together
> each must reach a hole
> max time so that all reach hole
>
sort, all go left or all go right
cant cross because that will increase time
```
------- ----------
vs
----------
---------------------------
```