У меня есть набор значений в векторе, например,
all_points <- c(1, 4, 2, 12, 6, 5, 25)
Я хочу найти все возможные комбинации, где числа слева направо расположены в порядке возрастания.Первый и последний номера всегда будут включены.Например, в этом случае они будут:
1, 4, 12, 25
1, 4, 6, 25
1, 4, 25
1, 2, 12, 25
1, 2, 6, 25
1, 2, 5, 25
1, 2, 25
1, 12, 25
1, 6, 25
1, 5, 25
1, 25
В данный момент я пытаюсь реализовать рекурсивную функцию, которая проверяет размер всех правильных значений и возвращает список векторов, но это не так.не работаетНиже приведен код части R и псевдокод части для объяснения моего подхода.
my_recursive_function <- function(input_points, running_vector = c(1)){
start_point <- input_points[1]
rightward_points <- input_points[2:length(input_points)
for(i in 1:length(rightward_points)){
if(rightward_points[i] != 25 & rightward_points[i] > start_point){
set_of_points <- c(running_vector, rightward_points[i])
my_recursive_function(rightward_points, set_of_points)
}
if(rightward_points[i] == 25){
print(c(running_vector, 25)
flush.console()
#I will end up doing more than printing here, but this is enough for the example
}
#do something to return to the previous level of recursion,
#including returning running_vector and rightward_points
#to the appropriate states
}
Так что, надеюсь, это имеет смысл.У меня есть 2 вопроса:
- Я слишком усложняю это, и есть лучший способ?Это своего рода алгоритм поиска, пересекающий древовидную структуру, поэтому здесь я могу сделать что-то умное, чего не вижу.
- Если это лучший способ, как мне сделать бит псевдокодавнизу?Я очень запутался, пытаясь понять, как выглядит каждый вектор, на каждом уровне рекурсии, и как извлечь элементы из моего running_vector.