Skip to content

Commit 7c52ffc

Browse files
committed
small correction in preemptive_act_schedule to better align with the description
1 parent 92c52ea commit 7c52ffc

2 files changed

Lines changed: 9 additions & 7 deletions

File tree

src/chapter16/problem16_2.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
import math
2+
13
from chapter06.exercise6_5_3 import min_heap_insert, heap_minimum, heap_extract_min, heap_decrease_key
24
from datastructures.array import Array
35
from datastructures.essential import Activity
@@ -19,6 +21,9 @@ def preemptive_act_schedule(p, r):
1921
n = p.length
2022
Q = Heap(Array.indexed(1, n))
2123
c = Array.indexed(1, n)
24+
times = sorted(zip(p, r), key=lambda x: x[1])
25+
p, r = Array(x[0] for x in times), Array(x[1] for x in times)
26+
r.append(math.inf)
2227
for i in between(1, n):
2328
t = r[i]
2429
min_heap_insert(Q, Activity(i, p[i], r[i]))

test/test_chapter16/test_problem16_2.py

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -78,16 +78,13 @@ def test_preemptive_act_schedule(self):
7878
processing_times = get_random_array(size=n, min_value=1, max_value=3)
7979
release_times = get_random_array(size=n, max_value=15)
8080
# sort activities by release time
81-
sorted_tuples = sorted(zip(processing_times, release_times), key=lambda x: x[1])
82-
processing_times, release_times = Array(x[0] for x in sorted_tuples), Array(x[1] for x in sorted_tuples)
83-
release_times.append(math.inf)
84-
original_processing_times = copy.deepcopy(processing_times)
85-
original_release_times = copy.deepcopy(release_times)
81+
times = sorted(zip(processing_times, release_times), key=lambda x: x[1])
82+
sorted_processing_times, sorted_release_times = Array(x[0] for x in times), Array(x[1] for x in times)
8683

8784
actual_schedule = preemptive_act_schedule(processing_times, release_times)
8885

8986
for i in between(1, n):
90-
assert_that(actual_schedule[i], is_(greater_than(release_times[i])))
87+
assert_that(actual_schedule[i], is_(greater_than(sorted_release_times[i])))
9188
actual_min_act = sum(actual_schedule) / actual_schedule.length
92-
expected_min_act = get_min_preemptive_act_bruteforce(original_processing_times, original_release_times)
89+
expected_min_act = get_min_preemptive_act_bruteforce(sorted_processing_times, sorted_release_times)
9390
assert_that(actual_min_act, is_(equal_to(expected_min_act)))

0 commit comments

Comments
 (0)