mirror of
https://github.com/TheAlgorithms/Python.git
synced 2024-11-23 21:11:08 +00:00
Added minimum waiting time problem solution using greedy algorithm (#8701)
* Added minimum waiting time problem solution using greedy algorithm * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * ruff --fix * Add type hints * Added two more doc test * Removed unnecessary comments * updated type hints * Updated the code as per the code review --------- Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
This commit is contained in:
parent
f6df26bf0f
commit
e966c5cc0f
|
@ -450,6 +450,7 @@
|
|||
* [Fractional Knapsack](greedy_methods/fractional_knapsack.py)
|
||||
* [Fractional Knapsack 2](greedy_methods/fractional_knapsack_2.py)
|
||||
* [Optimal Merge Pattern](greedy_methods/optimal_merge_pattern.py)
|
||||
* [Minimum Waiting Time ](greedy_methods/minimum_waiting_time.py)
|
||||
|
||||
## Hashes
|
||||
* [Adler32](hashes/adler32.py)
|
||||
|
|
48
greedy_methods/minimum_waiting_time.py
Normal file
48
greedy_methods/minimum_waiting_time.py
Normal file
|
@ -0,0 +1,48 @@
|
|||
"""
|
||||
Calculate the minimum waiting time using a greedy algorithm.
|
||||
reference: https://www.youtube.com/watch?v=Sf3eiO12eJs
|
||||
|
||||
For doctests run following command:
|
||||
python -m doctest -v minimum_waiting_time.py
|
||||
|
||||
The minimum_waiting_time function uses a greedy algorithm to calculate the minimum
|
||||
time for queries to complete. It sorts the list in non-decreasing order, calculates
|
||||
the waiting time for each query by multiplying its position in the list with the
|
||||
sum of all remaining query times, and returns the total waiting time. A doctest
|
||||
ensures that the function produces the correct output.
|
||||
"""
|
||||
|
||||
|
||||
def minimum_waiting_time(queries: list[int]) -> int:
|
||||
"""
|
||||
This function takes a list of query times and returns the minimum waiting time
|
||||
for all queries to be completed.
|
||||
|
||||
Args:
|
||||
queries: A list of queries measured in picoseconds
|
||||
|
||||
Returns:
|
||||
total_waiting_time: Minimum waiting time measured in picoseconds
|
||||
|
||||
Examples:
|
||||
>>> minimum_waiting_time([3, 2, 1, 2, 6])
|
||||
17
|
||||
>>> minimum_waiting_time([3, 2, 1])
|
||||
4
|
||||
>>> minimum_waiting_time([1, 2, 3, 4])
|
||||
10
|
||||
>>> minimum_waiting_time([5, 5, 5, 5])
|
||||
30
|
||||
>>> minimum_waiting_time([])
|
||||
0
|
||||
"""
|
||||
n = len(queries)
|
||||
if n in (0, 1):
|
||||
return 0
|
||||
return sum(query * (n - i - 1) for i, query in enumerate(sorted(queries)))
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
import doctest
|
||||
|
||||
doctest.testmod()
|
Loading…
Reference in New Issue
Block a user