TheAlgorithms-Python
48 строк · 1.4 Кб
1"""
2Calculate the minimum waiting time using a greedy algorithm.
3reference: https://www.youtube.com/watch?v=Sf3eiO12eJs
4
5For doctests run following command:
6python -m doctest -v minimum_waiting_time.py
7
8The minimum_waiting_time function uses a greedy algorithm to calculate the minimum
9time for queries to complete. It sorts the list in non-decreasing order, calculates
10the waiting time for each query by multiplying its position in the list with the
11sum of all remaining query times, and returns the total waiting time. A doctest
12ensures that the function produces the correct output.
13"""
14
15
16def minimum_waiting_time(queries: list[int]) -> int:17"""18This function takes a list of query times and returns the minimum waiting time
19for all queries to be completed.
20
21Args:
22queries: A list of queries measured in picoseconds
23
24Returns:
25total_waiting_time: Minimum waiting time measured in picoseconds
26
27Examples:
28>>> minimum_waiting_time([3, 2, 1, 2, 6])
2917
30>>> minimum_waiting_time([3, 2, 1])
314
32>>> minimum_waiting_time([1, 2, 3, 4])
3310
34>>> minimum_waiting_time([5, 5, 5, 5])
3530
36>>> minimum_waiting_time([])
370
38"""
39n = len(queries)40if n in (0, 1):41return 042return sum(query * (n - i - 1) for i, query in enumerate(sorted(queries)))43
44
45if __name__ == "__main__":46import doctest47
48doctest.testmod()49