If you like DNray Forum, you can support it by - BTC: bc1qppjcl3c2cyjazy6lepmrv3fh6ke9mxs7zpfky0 , TRC20 and more...

 

Longest Increasing Subsequence in Python

Started by allenM, Today at 12:35 AM

Previous topic - Next topic

allenMTopic starter

Identify the longest ascending subarray within a given numeric dataset. Provide a Python implementation for this algorithmic challenge.

The program ingests five integer inputs:

Sequence length 'n' (1 < n < 10), denoting the cardinality of the dataset.
Initial sequence element 'a', which serves as the seed value 'a'.
Parameters 'k', 'b', and '' are utilized to compute subsequent sequence elements, adhering to the constraints 1 ≤ m ≤ 1000000, 0 ≤ k ≤ m, 0 ≤ b ≤ m, and 0 ≤ a ≤ m.

Output Requirements: Develop an algorithm to extract the longest increasing subsequence (LIS) from the given numerical sequence. The output should comprise the LIS elements, separated by whitespace characters. In the event of multiple LISs, any one of them can be reported.

Example 1: Input 19 10 14 12 22 Output 6 8 10 14 20

Example 2: Input 18 4 6 4 15 Output 1 4 7 10 13
  •  

worldtraveler

I can propose an optimized solution using dynamic programming with memoization to find the longest increasing subsequence.

def longest_increasing_subsequence(n, a, k, b, m):
    sequence = [a]
    for i in range(1, n):
        sequence.append((k * sequence[i-1] + b) % m)

    memo = {}
    def dp(i):
        if i in memo:
            return memo[i]
        max_length = 1
        for j in range(i):
            if sequence[i] > sequence[j]:
                max_length = max(max_length, dp(j) + 1)
        memo[i] = max_length
        return max_length

    max_length = 0
    for i in range(n):
        max_length = max(max_length, dp(i))

    lis = []
    for i in range(n):
        if dp(i) == max_length:
            lis.append(sequence[i])

    return '.join(map(str, lis))

n = int(input())
a = int(input())
k = int(input())
b = int(input())
m = int(input())

print(longest_increasing_subsequence(n, a, k, b, m))

This solution uses memoization to store the results of subproblems, reducing the time complexity of the dynamic programming solution.
  •  

SweKattyQ

for any dataset with fewer than 10 entries, even the most rudimentary algorithm will eventually get the job done. But, can you provide a clear problem statement, including a well-defined sequence and explicit boundary conditions, so we can tackle this challenge with a solid understanding of the requirements?
  •  

farion

Implementing a solution for generating a sequence of numbers using a linear recurrence relation, we can employ a dynamic programming approach to optimize the process. By utilizing a technique known as 'binary search' and maintaining a 'onotonic stack', we can efficiently compute the longest increasing subsequence (LIS) of the generated sequence:

def generate_sequence(n, k, b, m):
    a = int(input())
    sequence = [a]
    for _ in range(1, n):
        a = (k * a + b) % m
        sequence.append(a)
    return sequence

def longest_increasing_subsequence(sequence):
    n = len(sequence)
    dp = [0] * n
    prev = [-1] * (n + 1)
    lis_length = 0

    for i in range(n):
        lo, hi = 1, lis_length + 1
        while lo < hi:
            mid = lo + (hi - lo) // 2
            if sequence[prev[mid]] >= sequence[i]
            lo = mid + 1
        else:
            lo = mid
        prev[lo] = i
        lis_length = max(lis_length, lo)

    lis = [0] * lis_length
    k = prev[lis_length]
    for j in range(lis_length - 1, -1, -1):
        lis[j] = sequence[k]
        k = prev[k]
    return lis

# Example usage:
n, a, k, b, m = map(int, input().split())
sequence = generate_sequence(n, a, k, b, m)
lis = longest_increasing_subsequence(sequence)
console.log(...lis)
  •  


If you like DNray forum, you can support it by - BTC: bc1qppjcl3c2cyjazy6lepmrv3fh6ke9mxs7zpfky0 , TRC20 and more...