mirror of
https://github.com/TheAlgorithms/Python.git
synced 2024-11-23 21:11:08 +00:00
adding a matrix equalization algorithm (#11360)
* adding a matrix equalization algorithm * Adding url for more details * Implementing suggestions
This commit is contained in:
parent
a7e0b141d8
commit
c026b1952f
55
matrix/matrix_equalization.py
Normal file
55
matrix/matrix_equalization.py
Normal file
|
@ -0,0 +1,55 @@
|
||||||
|
from sys import maxsize
|
||||||
|
|
||||||
|
|
||||||
|
def array_equalization(vector: list[int], step_size: int) -> int:
|
||||||
|
"""
|
||||||
|
This algorithm equalizes all elements of the input vector
|
||||||
|
to a common value, by making the minimal number of
|
||||||
|
"updates" under the constraint of a step size (step_size).
|
||||||
|
|
||||||
|
>>> array_equalization([1, 1, 6, 2, 4, 6, 5, 1, 7, 2, 2, 1, 7, 2, 2], 4)
|
||||||
|
4
|
||||||
|
>>> array_equalization([22, 81, 88, 71, 22, 81, 632, 81, 81, 22, 92], 2)
|
||||||
|
5
|
||||||
|
>>> array_equalization([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], 5)
|
||||||
|
0
|
||||||
|
>>> array_equalization([22, 22, 22, 33, 33, 33], 2)
|
||||||
|
2
|
||||||
|
>>> array_equalization([1, 2, 3], 0)
|
||||||
|
Traceback (most recent call last):
|
||||||
|
ValueError: Step size must be positive and non-zero.
|
||||||
|
>>> array_equalization([1, 2, 3], -1)
|
||||||
|
Traceback (most recent call last):
|
||||||
|
ValueError: Step size must be positive and non-zero.
|
||||||
|
>>> array_equalization([1, 2, 3], 0.5)
|
||||||
|
Traceback (most recent call last):
|
||||||
|
ValueError: Step size must be an integer.
|
||||||
|
>>> array_equalization([1, 2, 3], maxsize)
|
||||||
|
1
|
||||||
|
"""
|
||||||
|
if step_size <= 0:
|
||||||
|
raise ValueError("Step size must be positive and non-zero.")
|
||||||
|
if not isinstance(step_size, int):
|
||||||
|
raise ValueError("Step size must be an integer.")
|
||||||
|
|
||||||
|
unique_elements = set(vector)
|
||||||
|
min_updates = maxsize
|
||||||
|
|
||||||
|
for element in unique_elements:
|
||||||
|
elem_index = 0
|
||||||
|
updates = 0
|
||||||
|
while elem_index < len(vector):
|
||||||
|
if vector[elem_index] != element:
|
||||||
|
updates += 1
|
||||||
|
elem_index += step_size
|
||||||
|
else:
|
||||||
|
elem_index += 1
|
||||||
|
min_updates = min(min_updates, updates)
|
||||||
|
|
||||||
|
return min_updates
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
from doctest import testmod
|
||||||
|
|
||||||
|
testmod()
|
Loading…
Reference in New Issue
Block a user