2011-01-20 7 views
1

안녕하세요 예를 들어 숫자가 k_1, k_2, ... k_n이고 f가 함수입니다. 이제 숫자 목록에 f를 적용하고 f가 증가하는 번호가 필요합니다.mathematica에서 결과를 테이블이나 배열에 저장하는 방법은 무엇입니까?

f(k_i)>f(k_j) for any i>j . 

나는 다른 라인에서 각각의 k_i 결과 수를 얻을 수 있습니다,하지만 난 쉼표 또는 뭔가 다른 결과의 수를 계산으로 구분 한 테이블에서 결과를해야합니다. 예를 들어

:

k2 
k3 
k5 
k9 
count=4 

하지만 결과가 함께 할 필요가 :

{k2,k3,k5,k9} 
count=4 

어떤 생각을 내가 같은 결과를 얻었다

k = Table[k1, k2, k3, k4, k5, k6, k7, k8, k9, k10]; 
count = 0; 
i=1; 
For[j = i, j <= 10, j++, 
    If[f[k[[j]]] - f[k[[i]]] > 0, i = j; Print["k", i]; 
    count = count + 1]]; 
Print["count= ", count] 

?

감사

답변

2

대신 Print, 당신은, 티카 그것을 효율적으로 만들 수있는 도구가 같은 함수형 프로그래밍 접근 방식을 배우기 시작하는 것이 좋을 것

list={};AppendTo[list,5]

즉, AppendTo하여 위의 코드를 할 수있는 이런 모습 일 수 있습니다

pairs = Partition[list, 2, 1]; 
increasingPairs = Select[pairs, f[First[#]] < f[Last[#]] &]; 
Last /@ increasingPairs 
+0

입력 목록 = {5, 3, 6, 1, 5, 7}은 {5,6} ... –

+0

ok를 반환하며 질문의 코드와 일치하도록 수정되었습니다. –

2

가장 길게 증가하는 서브 시퀀스를 원한다. 내가 티카에 들어 가지의 알고 가장 간단하고 가장 효율적인 방법은 다음과 같다 :

lis[f_, vals_List] := LongestCommonSequence[#, Sort[#]] &[Map[f, vals]]; 

예 : 원칙적으로

In[8]:= lis[# &, {5, 3, 6, 1, 5, 7}] 

Out[8]= {5, 6, 7} 

가, 대답은 고유하지 않습니다 -이있을 수있는 몇 가지 긴 다른 동일한 길이의 서브 시퀀스를 증가시킵니다.

관련 문제