Последний раз редактировалось wrest 20.01.2023, 13:03, всего редактировалось 8 раз(а).
Ну вот из вектора [1,2,3,4,5] надо вынуть все длиной 3: 123 124 125 134 135 145 234 245 345 Их будет Можно так: Код: subsets(v, k) = { my (lst = List()); forvec(v1 = vector(k, i, [1, #v]), listput(lst, vecextract(v, v1)), 2);
Vec(lst) }; Функция subsets(v,k) приведённая выше, возвращает вектор из всех подвекторов длины k данного вектора v "без изменения порядка" Например ? v=[4,1,3,2];subsets(v,3) %1 = [[4, 1, 3], [4, 1, 2], [4, 3, 2], [1, 3, 2]] ?Но если вам удобней что-то с ними делать и сразу забыть, то есть итератор forsubset() который проходит по всем подмножествам размера k множества [1,...,n] -- вы получаете подмножества индексов, и затем при помощи vecextract() получаете подмножества из вашего "данного" вектора. forsubset([#v,3], s, print(vecextract(v,s)))Работает так ? v=[4,1,3,2];forsubset([#v,3], s, print(vecextract(v,s))) [4, 1, 3] [4, 1, 2] [4, 3, 2] [1, 3, 2] ?Вместо print() вы можете вставить (или вызвать) обработчик подвектора, например напечатать индексы подвектора, сам подвектор и сумму элементов: ? v=[4,1,3,2];forsubset([#v,3], s, v1=vecextract(v,s); s1=vecsum(v1);print("indexes of subvector ",s," subvector ",v1," sum is ",s1)) indexes of subvector Vecsmall([1, 2, 3]) subvector [4, 1, 3] sum is 8 indexes of subvector Vecsmall([1, 2, 4]) subvector [4, 1, 2] sum is 7 indexes of subvector Vecsmall([1, 3, 4]) subvector [4, 3, 2] sum is 9 indexes of subvector Vecsmall([2, 3, 4]) subvector [1, 3, 2] sum is 6 ?То есть в принципе, задача тут распадается на две. Первое -- генерация всех сочетаний из по -- это будут индексы для выборки подвектора из исходного вектора. Ну и затем, имея индексы ( индексов), собственно выбирать подвекторы. Можно в обоих случаях вместо чисел использовать столы, стулья и пивные кружки: ? v=["table","chair","beer mug"];forsubset([#v,2], s, print(vecextract(v,s))) ["table", "chair"] ["table", "beer mug"] ["chair", "beer mug"] ?и так же ? v=["table","chair","beer mug"];print(subsets(v,2)) [["table", "chair"], ["table", "beer mug"], ["chair", "beer mug"]] ?Идеи взяты отсюда https://stackoverflow.com/questions/334 ... in-pari-gp
|