Мне было интересно.
Очевидно, что вы ищете чистые разрывы. Поэтому, прежде чем приступать к сложным алгоритмам, вы, возможно, можете представить себе дифференцированный подход.
[1, 1.2, 4, 5, 10]
[20%, 333%, 25%, 100%]
Теперь, в зависимости от количества искомых перерывов, нужно выбрать их:
2 categories: [1, 1.2] + [4, 5, 10]
3 categories: [1, 1.2] + [4, 5] + [10]
Я не знаю о вас, но, на мой взгляд, это кажется естественным, и вы даже можете использовать пороговый подход, говоря, что изменение меньше x%
не стоит рассматривать сокращение.
Например, здесь 4 categories
, кажется, не имеет особого смысла.