Algorithms_in_C++ 1.0.0
Set of algorithms implemented in C++.
Loading...
Searching...
No Matches
house_robber.cpp File Reference

Implementation of House Robber Problem algorithm. More...

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

Namespaces

namespace  dynamic_programming
 Dynamic Programming algorithms.
 
namespace  house_robber
 Functions for the House Robber algorithm.
 

Functions

std::uint32_t dynamic_programming::house_robber::houseRobber (const std::vector< uint32_t > &money, const uint32_t &n)
 The main function that implements the House Robber algorithm using dynamic programming.
 
static void test ()
 Self-test implementations.
 
int main ()
 Main function.
 

Detailed Description

Implementation of House Robber Problem algorithm.

Solution of House robber problem uses a dynamic programming concept that works in \(O(n)\) time and works in \(O(1)\) space.

Author
Swastika Gupta

Function Documentation

◆ houseRobber()

std::uint32_t dynamic_programming::house_robber::houseRobber ( const std::vector< uint32_t > & money,
const uint32_t & n )

The main function that implements the House Robber algorithm using dynamic programming.

Parameters
moneyarray containing money in the ith house
nsize of array
Returns
maximum amount of money that can be robbed
37 {
38 if (n == 0) { // if there is no house
39 return 0;
40 }
41 if (n == 1) { // if there is only one house
42 return money[0];
43 }
44 if (n == 2) { // if there are two houses, one with the maximum amount of
45 // money will be robbed
46 return std::max(money[0], money[1]);
47 }
48 uint32_t max_value = 0; // contains maximum stolen value at the end
49 uint32_t value1 = money[0];
50 uint32_t value2 = std::max(money[0], money[1]);
51 for (uint32_t i = 2; i < n; i++) {
52 max_value = std::max(money[i] + value1, value2);
53 value1 = value2;
54 value2 = max_value;
55 }
56
57 return max_value;
58}
T max(T... args)
Here is the call graph for this function:

◆ main()

int main ( void )

Main function.

Returns
0 on exit
111 {
112 test(); // run self-test implementations
113 return 0;
114}
static void test()
Self-test implementations.
Definition house_robber.cpp:66
Here is the call graph for this function:

◆ test()

static void test ( )
static

Self-test implementations.

Returns
void
66 {
67 // Test 1
68 // [1, 2, 3, 1] return 4
69 std::vector<uint32_t> array1 = {1, 2, 3, 1};
70 std::cout << "Test 1... ";
71 assert(
72 dynamic_programming::house_robber::houseRobber(array1, array1.size()) ==
73 4); // here the two non-adjacent houses that are robbed are first and
74 // third with total sum money as 4
75 std::cout << "passed" << std::endl;
76
77 // Test 2
78 // [6, 7, 1, 3, 8, 2, 4] return 19
79 std::vector<uint32_t> array2 = {6, 7, 1, 3, 8, 2, 4};
80 std::cout << "Test 2... ";
81 assert(
82 dynamic_programming::house_robber::houseRobber(array2, array2.size()) ==
83 19); // here the four non-adjacent houses that are robbed are first,
84 // third, fifth and seventh with total sum money as 19
85 std::cout << "passed" << std::endl;
86
87 // Test 3
88 // [] return 0
89 std::vector<uint32_t> array3 = {};
90 std::cout << "Test 3... ";
91 assert(
92 dynamic_programming::house_robber::houseRobber(array3, array3.size()) ==
93 0); // since there is no house no money can be robbed
94 std::cout << "passed" << std::endl;
95
96 // Test 4
97 // [2,7,9,3,1] return 12
98 std::vector<uint32_t> array4 = {2, 7, 9, 3, 1};
99 std::cout << "Test 4... ";
100 assert(
101 dynamic_programming::house_robber::houseRobber(array4, array4.size()) ==
102 12); // here the three non-adjacent houses that are robbed are first,
103 // third and fifth with total sum money as 12
104 std::cout << "passed" << std::endl;
105}
T endl(T... args)
T size(T... args)
Here is the call graph for this function: