we given array of numbers , want find subsequence of size 4 sorted in increasing order.
for eg array : -4 2 8 3 1 5 sorted subsequence of size 4 : -4 2 3 5
ps:there way of finding sorted subsequence of size 3(see this). trying think along same lines can't seem find solution 4 integers.
here solution find sorted subsequence of fixed size k+1
doing k
passes on input. each pass done left-to-right.
pass 1: create auxiliary array p1[0..n-1]
. p1[i]
should store index j
of number smaller arr[i]
, on left side of arr[i]
(in other words: j<i
, arr[j]<arr[i]
). p1[i]
should contain -1 if there no such element. (p1
same smaller
array solution size 3).
pass 2: create auxiliary array p2[0..n-1]
. p2[i]
should store index j
of number smaller arr[i]
, on left side of arr[i]
, , such p1[j] != -1
(in other words: j<i
, arr[j]<arr[i]
, , p1[j]!=-1
). p2[i]
should contain -1 if there no such element.
....
pass k: create auxiliary array pk[0..n-1]
. pk[i]
should store index j
of number smaller arr[i]
, on left side of arr[i]
, , such p(k-1)[j] != -1
(in other words: j<i
, arr[j]<arr[i]
, , p(k-1)[j]!=-1
). pk[i]
should contain -1 if there no such element.
after k
th pass, each element pk[i] != -1
corresponds largest element in sorted subsequence of size k+1
.
pseudocode k
th pass (k>1):
function do_kth_pass(pk[], p_k_minus_1[]) min = -1 in 0..n-1: if min != -1 , arr[i] > arr[min]: pk[i] = min else pk[i] = -1 if p_k_minus_1[i] != -1 , (min == -1 or arr[i] < arr[min]): min =
example:
index: 0 1 2 3 4 5 array: -4 2 8 3 1 5 p1: -1 0 0 0 0 0 p2: -1 -1 1 1 -1 4 p3: -1 -1 -1 -1 -1 3
after 3 passes, have p3[5] != -1, sorted subsequence of size 4 exists. indices of elements are: p1[p2[p3[5]]], p2[p3[5]], p3[5], 5
0,1,3,5
Comments
Post a Comment