벡터 v를 취하여 어떤 방식 으로든 변환 된 요소가있는 새 벡터를 반환하는 함수 f가 있다고 가정합니다. 벡터가 정렬되어 있다고 가정하는 g 함수를 호출하면됩니다. 그래서 f는과 같이 정의 할 :Unsort : 순열을 기억하고 취소하기
f[v_] := Module[{s, r},
s = Sort[v]; (* remember the permutation applied in order to sort v *)
r = g[s];
Unsort[r] (* apply the inverse of that permutation *)
]
은 "정렬 안함"을 할 수있는 가장 좋은 방법은 무엇입니까?
이 아니면 어떻게 든 일을 정말 멋진 얻을이있을 수 있습니다 :
answer = Unsort[g[Sort[v]]];
추가 된 :의 장난감 예제이 콘크리트를 만들어 보자. 벡터를 취하고 각 요소에 다음에 가장 작은 요소가있는 경우 해당 요소를 추가하여 변환하는 함수 f가 필요하다고 가정 해 보겠습니다. V 정렬 여부에 관계없이 작동 우리가 정말 원하는 기능, F 지금
g[v_] := v + Prepend[[email protected], 0]
: 즉 우리가 벡터 정렬 가정하면, 쓰기, 그래서 그 가정을 만드는 도우미 함수 g를 작성할 수 있도록 쉽게 : TomD와 야로슬라프에
f[v_] := (* remember the order;
sort it;
call g on it;
put it back in the original order;
return it
*)
아마 매개 변수로 ** g **를 전달하는 것이 좋습니다. –
또는 약간 더 효율적으로 원본을 With [{o = Ordering [v]}, Part [g [v [[o]]], Ordering [o]]]'로 변경하십시오. – Janus