TheAlgorithms/C++ 1.0.0
All the algorithms implemented in C++
Loading...
Searching...
No Matches
longest_increasing_subsequence.cpp File Reference

Calculate the length of the longest increasing subsequence in an array. More...

#include <cassert>
#include <climits>
#include <cstdint>
#include <iostream>
#include <vector>
Include dependency graph for longest_increasing_subsequence.cpp:

Go to the source code of this file.

Namespaces

namespace  dynamic_programming
 Dynamic Programming algorithms.
 

Functions

uint64_t dynamic_programming::LIS (const std::vector< uint64_t > &a, const uint32_t &n)
 Calculate the longest increasing subsequence for the specified numbers.
 
static void test ()
 Self-test implementations.
 
int main (int argc, char const *argv[])
 Main function.
 

Detailed Description

Calculate the length of the longest increasing subsequence in an array.

In computer science, the longest increasing subsequence problem is to find a subsequence of a given sequence in which the subsequence's elements are in sorted order, lowest to highest, and in which the subsequence is as long as possible. This subsequence is not necessarily contiguous, or unique. Longest increasing subsequences are studied in the context of various disciplines related to mathematics, including algorithmics, random matrix theory, representation theory, and physics. The longest increasing subsequence problem is solvable in time O(n log n), where n denotes the length of the input sequence.

Author
Krishna Vedala
David Leal

Definition in file longest_increasing_subsequence.cpp.

Function Documentation

◆ main()

int main ( int argc,
char const * argv[] )

Main function.

Parameters
argccommandline argument count (ignored)
argvcommandline array of arguments (ignored)
Returns
0 on exit

Definition at line 81 of file longest_increasing_subsequence.cpp.

81 {
82 uint32_t n = 0;
83
84 std::cout << "Enter size of array: ";
85 std::cin >> n;
86
87 std::vector<uint64_t> a(n);
88
89 std::cout << "Enter array elements: ";
90 for (int i = 0; i < n; ++i) {
91 std::cin >> a[i];
92 }
93
94 std::cout << "\nThe result is: " << dynamic_programming::LIS(a, n)
95 << std::endl;
96 test(); // run self-test implementations
97
98 return 0;
99}
static void test()
Self-test implementations.
uint64_t LIS(const std::vector< uint64_t > &a, const uint32_t &n)
Calculate the longest increasing subsequence for the specified numbers.

◆ test()

static void test ( )
static

Self-test implementations.

Returns
void

< The longest increasing subsequence is {2,3,4,5,8}

Definition at line 64 of file longest_increasing_subsequence.cpp.

64 {
65 std::vector<uint64_t> a = {15, 21, 2, 3, 4, 5, 8, 4, 1, 1};
66 uint32_t n = a.size();
67
68 uint32_t result = dynamic_programming::LIS(a, n);
69 assert(result ==
70 5);
71
72 std::cout << "Self-test implementations passed!" << std::endl;
73}
uint64_t result(uint64_t n)