Алгоритма перебора троек чисел, отличающихся составом и его сложность
Нужно найти все тройки чисел в массиве, которые будут отличаться только составом элементов, т.е для массива из трех чисел будет всего одна тройка.
Ввод [1,2,3] - Вывод 1,2,3
Ввод [1,2,3,4] - Вывод 1,2,3/1,2,4/1,3,4/2,3,4
Использую такой алгоритм
for (int i = 0; i < count; i++) {
for (int j = i + 1; j < count; j++) {
for (int k = j + 1; k < count; k++) {
std::cout << array[i], array[j], array[k]
}
}
}
Я понимаю, что три вложенных цикла, которые перебирают с 0 дадут сложность O(N^3), но здесь ведь количество итераций будет куда меньше, чем O(N^3), или ошибаюсь? Пробовал посчитать и у меня получилось так, что при 3 элементах получится 1 итерация, при 4 - 6 итераций, при 5 - 10, что не подходит под O(N^3).
Собственно, вопросы:
- Оптимально ли использовать такой алгоритм для выполнения задачи?
- Если нет, то можно ли как-то оптимизировать?
- Какова сложность этого алгоритма(если можно с объяснением)?