В обобщенном случае вы должны рассчитать сложность на основе двух вещей:
1- Count of input numbers (I will call it b)
2- Length of output (I will call it d)
Обобщенный метод, который я могу придумать, состоит в том, чтобы построить аналогичный граф для задачи в O (n ^ 2):
Если после меньшего числа появляется большее число, существует направленное ребро от меньшего к нему.
Теперь, чтобы найти все последовательности длины d, вам нужно начать с каждого числа и вывести все пути длины (d - 1).
Если вы используете метод обхода, такой как BFS, сложность будет меньше, чем O (d x (b ^ (d - 1))).
Однако вы можете использовать смежные матричные умножения, чтобы найти пути длины d, что снизит сложность до значения, меньшего O ((d - 2) x (b ^ 3)). (N-я степень матрицы смежности скажет вам, сколько путей существует от каждого узла к другому с длиной N).
Существуют алгоритмы , чтобы немного уменьшить сложность умножения квадратной матрицы.