File tree Expand file tree Collapse file tree 8 files changed +218
-0
lines changed
include/0005_DynamicProgramming
source/0005_DynamicProgramming
test/0005_DynamicProgramming Expand file tree Collapse file tree 8 files changed +218
-0
lines changed Original file line number Diff line number Diff line change 1+ #pragma once
2+ #include < vector>
3+ using namespace std ;
4+
5+ /*
6+ Pattern 1
7+ Linear Recurrence
8+
9+ Description
10+ Print the n'th Fibonacci number.
11+
12+ */
13+
14+ namespace FibonacciNumber
15+ {
16+ class DynamicProgramming
17+ {
18+ private:
19+ public:
20+ int RecursiveNthFibonacci (int n);
21+ int DpNthFibonacci (int n);
22+ };
23+ }
Original file line number Diff line number Diff line change 1+ #pragma once
2+ #include < vector>
3+ using namespace std ;
4+
5+ /*
6+ Pattern 1
7+ Linear Recurrence
8+
9+ Description
10+ Print the n'th Tribonacci number.
11+
12+ */
13+
14+ namespace TribonacciNumber
15+ {
16+ class DynamicProgramming
17+ {
18+ private:
19+ public:
20+ int RecursiveNthTribonacci (int n);
21+ int DpNthTribonacci (int n);
22+ };
23+ }
Original file line number Diff line number Diff line change 1+ #include " ../../include/0005_DynamicProgramming/0001_FibonacciNumber.h"
2+
3+ namespace FibonacciNumber
4+ {
5+ int DynamicProgramming::RecursiveNthFibonacci (int n)
6+ {
7+ if (n <= 1 )
8+ {
9+ return n;
10+ }
11+
12+ return this ->RecursiveNthFibonacci (n - 1 ) + this ->RecursiveNthFibonacci (n - 2 );
13+ }
14+
15+ int DynamicProgramming::DpNthFibonacci (int n)
16+ {
17+ vector<int > dp (n + 1 , 0 );
18+ dp[0 ] = 0 ;
19+ dp[1 ] = 1 ;
20+
21+ for (int i = 2 ; i <= n; i++)
22+ {
23+ dp[i] = dp[i - 1 ] + dp[i - 2 ];
24+ }
25+
26+ return dp[n];
27+ }
28+ }
Original file line number Diff line number Diff line change 1+ #include " ../../include/0005_DynamicProgramming/0002_TribonacciNumber.h"
2+
3+ namespace TribonacciNumber
4+ {
5+ int DynamicProgramming::RecursiveNthTribonacci (int n)
6+ {
7+ if (n == 0 || n == 1 || n == 2 )
8+ {
9+ return 0 ;
10+ }
11+
12+ if (n == 3 )
13+ {
14+ return 1 ;
15+ }
16+
17+ return this ->RecursiveNthTribonacci (n - 1 ) + this ->RecursiveNthTribonacci (n - 2 ) + this ->RecursiveNthTribonacci (n - 3 );
18+ }
19+
20+ int DynamicProgramming::DpNthTribonacci (int n)
21+ {
22+ vector<int > dp (n, 0 );
23+ dp[0 ] = dp[1 ] = 0 ;
24+ dp[2 ] = 1 ;
25+
26+ for (int i = 3 ; i < n; i++)
27+ {
28+ dp[i] = dp[i - 1 ] + dp[i - 2 ] + dp[i - 3 ];
29+ }
30+
31+ return dp[n - 1 ];
32+ }
33+ }
Original file line number Diff line number Diff line change 1+ # Specify the source files
2+ set (0005DYNAMICPROGRAMMING_SOURCES
3+ 0001_FibonacciNumber.cc
4+ 0002_TribonacciNumber.cc
5+
6+ )
7+
8+ # Create a library target
9+ add_library (0005DYNAMICPROGRAMMING ${0005DYNAMICPROGRAMMING_SOURCES} )
Original file line number Diff line number Diff line change 1+ #include < gtest/gtest.h>
2+ #include " ../../include/0005_DynamicProgramming/0001_FibonacciNumber.h"
3+ using namespace std ;
4+
5+ namespace FibonacciNumber
6+ {
7+ TEST (FibonacciNumber, RecursiveTest)
8+ {
9+ // Arrange
10+ DynamicProgramming dp;
11+ int n = 5 ;
12+ int expectedFib = 5 ;
13+
14+ // Act
15+ int actualFib = dp.RecursiveNthFibonacci (n);
16+
17+ // Assert
18+ ASSERT_EQ (expectedFib, actualFib);
19+ }
20+
21+ TEST (FibonacciNumber, DpTest)
22+ {
23+ // Arrange
24+ DynamicProgramming dp;
25+ int n = 5 ;
26+ int expectedFib = 5 ;
27+
28+ // Act
29+ int actualFib = dp.DpNthFibonacci (n);
30+
31+ // Assert
32+ ASSERT_EQ (expectedFib, actualFib);
33+ }
34+ }
Original file line number Diff line number Diff line change 1+ #include < gtest/gtest.h>
2+ #include " ../../include/0005_DynamicProgramming/0002_TribonacciNumber.h"
3+ using namespace std ;
4+
5+ namespace TribonacciNumber
6+ {
7+ TEST (TribonacciNumber, RecursiveTest)
8+ {
9+ // Arrange
10+ DynamicProgramming dp;
11+ int n = 5 ;
12+ int expectedFib = 2 ;
13+
14+ // Act
15+ int actualFib = dp.RecursiveNthTribonacci (n);
16+
17+ // Assert
18+ ASSERT_EQ (expectedFib, actualFib);
19+ }
20+
21+ TEST (TribonacciNumber, DpTest)
22+ {
23+ // Arrange
24+ DynamicProgramming dp;
25+ int n = 10 ;
26+ int expectedFib = 44 ;
27+
28+ // Act
29+ int actualFib = dp.DpNthTribonacci (n);
30+
31+ // Assert
32+ ASSERT_EQ (expectedFib, actualFib);
33+ }
34+ }
Original file line number Diff line number Diff line change 1+ cmake_policy (SET CMP0135 NEW)
2+
3+ include (FetchContent)
4+ FetchContent_Declare(
5+ googletest
6+ URL https://github.com/google/googletest/archive/03597a01ee50ed33e9dfd640b249b4be3799d395.zip
7+ )
8+
9+ # For Windows: Prevent overriding the parent project's compiler/linker settings
10+ set (gtest_force_shared_crt ON CACHE BOOL "" FORCE)
11+ FetchContent_MakeAvailable(googletest)
12+
13+ enable_testing ()
14+
15+ add_executable (
16+ 0005DynamicProgrammingTests
17+ 0001_FibonacciNumberTest.cc
18+ 0002_TribonacciNumberTest.cc
19+
20+ )
21+
22+ target_link_libraries (
23+ 0005DynamicProgrammingTests
24+ GTest::gtest_main
25+ 0005DYNAMICPROGRAMMING
26+ )
27+
28+ # Add .clang-tidy configuration to this library.
29+ if (CLANG_TIDY_EXE)
30+ set_target_properties (0005DYNAMICPROGRAMMING PROPERTIES CXX_CLANG_TIDY "${CLANG_TIDY_COMMAND} " )
31+ endif ()
32+
33+ include (GoogleTest)
34+ gtest_discover_tests(0005DynamicProgrammingTests DISCOVERY_TIMEOUT 30)
You can’t perform that action at this time.
0 commit comments