2025 init

This commit is contained in:
Romain Lefeuvre
2025-11-18 14:44:07 +01:00
commit ac81d61d01
21 changed files with 986 additions and 0 deletions

37
exercises/heap.md Normal file
View File

@@ -0,0 +1,37 @@
# Testing the heap property
A [*binary heap*](https://en.wikipedia.org/wiki/Binary_heap) is a data structure that contains comparable objects and it is able to efficiently return the lowest element.
This data structure relies on a binary tree to keep the insertion and deletion operations efficient. It is the base of the [*Heapsort* algorithm](https://en.wikipedia.org/wiki/Heapsort).
Implement a `BinaryHeap` class with the following interface:
```java
class BinaryHeap<T> {
public BinaryHeap(Comparator<T> comparator) { ... }
public T pop() { ... }
public T peek() { ... }
public void push(T element) { ... }
public int count() { ... }
}
```
A `BinaryHeap` instance is created using a `Comparator` object that represents the ordering criterion between the objects in the heap.
`pop` returns and removes the minimum object in the heap. If the heap is empty it throws a `NotSuchElementException`.
`peek` similar to `pop`, returns the minimum object but it does not remove it from the `BinaryHeap`.
`push` adds an element to the `BinaryHeap`.
`count` returns the number of elements in the `BinaryHeap`.
With the help of [jqwik](https://jqwik.net/) create a test that generates random inputs for your heap and ensures that the element returned by `pop` every time it is invoked is the minimum of the remaining elements in the heap.
**NOTE:**
- Do not use any existing implementation, write your own code.
- Use the provided project template as a starting point.
- In the project you can launch the tests with `mvn test`.
- You may reuse your binary heap code from the previous practical assignment.