Finishing recursion calls, adding line holder map

This commit is contained in:
Noah L. Schrick 2022-03-08 16:10:37 -06:00
parent 1ea74d9021
commit 6335e796fa
17 changed files with 272 additions and 35 deletions

View File

@ -222,13 +222,35 @@ CMakeFiles/HLlib.dir/src/HiddenLines.cpp.o
/usr/include/c++/11.2.0/tr1/riemann_zeta.tcc
/usr/include/c++/11.2.0/utility
/usr/include/c++/11.2.0/bits/stl_relops.h
/usr/include/c++/11.2.0/algorithm
/usr/include/c++/11.2.0/bits/stl_algo.h
/usr/include/c++/11.2.0/bits/algorithmfwd.h
/usr/include/c++/11.2.0/bits/stl_heap.h
/usr/include/c++/11.2.0/bits/stl_tempbuf.h
/usr/include/c++/11.2.0/bits/uniform_int_dist.h
/usr/include/c++/11.2.0/pstl/glue_algorithm_defs.h
/usr/include/c++/11.2.0/functional
/usr/include/c++/11.2.0/tuple
/usr/include/c++/11.2.0/array
/usr/include/c++/11.2.0/bits/uses_allocator.h
/usr/include/c++/11.2.0/bits/invoke.h
/usr/include/c++/11.2.0/bits/refwrap.h
/usr/include/c++/11.2.0/bits/std_function.h
/usr/include/c++/11.2.0/unordered_map
/usr/include/c++/11.2.0/ext/aligned_buffer.h
/usr/include/c++/11.2.0/bits/hashtable.h
/usr/include/c++/11.2.0/bits/hashtable_policy.h
/usr/include/c++/11.2.0/bits/node_handle.h
/usr/include/c++/11.2.0/bits/unordered_map.h
/usr/include/c++/11.2.0/bits/erase_if.h
/usr/include/c++/11.2.0/pstl/execution_defs.h
/home/noah/Documents/School/CS-7353_Analysis-of-Algorithms/HW/HW4/src/HiddenLines.h
/usr/include/c++/11.2.0/set
/usr/include/c++/11.2.0/bits/stl_tree.h
/usr/include/c++/11.2.0/ext/aligned_buffer.h
/usr/include/c++/11.2.0/bits/node_handle.h
/usr/include/c++/11.2.0/bits/stl_set.h
/usr/include/c++/11.2.0/bits/stl_multiset.h
/usr/include/c++/11.2.0/bits/erase_if.h
/usr/include/c++/11.2.0/map
/usr/include/c++/11.2.0/bits/stl_map.h
/usr/include/c++/11.2.0/bits/stl_multimap.h
/home/noah/Documents/School/CS-7353_Analysis-of-Algorithms/HW/HW4/src/Line.h

View File

@ -221,19 +221,57 @@ CMakeFiles/HLlib.dir/src/HiddenLines.cpp.o: ../src/HiddenLines.cpp \
/usr/include/c++/11.2.0/tr1/riemann_zeta.tcc \
/usr/include/c++/11.2.0/utility \
/usr/include/c++/11.2.0/bits/stl_relops.h \
/usr/include/c++/11.2.0/algorithm \
/usr/include/c++/11.2.0/bits/stl_algo.h \
/usr/include/c++/11.2.0/bits/algorithmfwd.h \
/usr/include/c++/11.2.0/bits/stl_heap.h \
/usr/include/c++/11.2.0/bits/stl_tempbuf.h \
/usr/include/c++/11.2.0/bits/uniform_int_dist.h \
/usr/include/c++/11.2.0/pstl/glue_algorithm_defs.h \
/usr/include/c++/11.2.0/functional \
/usr/include/c++/11.2.0/tuple \
/usr/include/c++/11.2.0/array \
/usr/include/c++/11.2.0/bits/uses_allocator.h \
/usr/include/c++/11.2.0/bits/invoke.h \
/usr/include/c++/11.2.0/bits/refwrap.h \
/usr/include/c++/11.2.0/bits/std_function.h \
/usr/include/c++/11.2.0/unordered_map \
/usr/include/c++/11.2.0/ext/aligned_buffer.h \
/usr/include/c++/11.2.0/bits/hashtable.h \
/usr/include/c++/11.2.0/bits/hashtable_policy.h \
/usr/include/c++/11.2.0/bits/node_handle.h \
/usr/include/c++/11.2.0/bits/unordered_map.h \
/usr/include/c++/11.2.0/bits/erase_if.h \
/usr/include/c++/11.2.0/pstl/execution_defs.h \
../src/HiddenLines.h \
/usr/include/c++/11.2.0/set \
/usr/include/c++/11.2.0/bits/stl_tree.h \
/usr/include/c++/11.2.0/ext/aligned_buffer.h \
/usr/include/c++/11.2.0/bits/node_handle.h \
/usr/include/c++/11.2.0/bits/stl_set.h \
/usr/include/c++/11.2.0/bits/stl_multiset.h \
/usr/include/c++/11.2.0/bits/erase_if.h \
/usr/include/c++/11.2.0/map \
/usr/include/c++/11.2.0/bits/stl_map.h \
/usr/include/c++/11.2.0/bits/stl_multimap.h \
../src/Line.h
/usr/include/c++/11.2.0/map:
/usr/include/c++/11.2.0/bits/hashtable_policy.h:
/usr/include/c++/11.2.0/ext/aligned_buffer.h:
/usr/include/c++/11.2.0/bits/invoke.h:
/usr/include/c++/11.2.0/bits/uses_allocator.h:
/usr/include/c++/11.2.0/tuple:
/usr/include/c++/11.2.0/bits/uniform_int_dist.h:
/usr/include/c++/11.2.0/bits/stl_tempbuf.h:
/usr/include/c++/11.2.0/bits/stl_heap.h:
/usr/include/c++/11.2.0/tr1/poly_laguerre.tcc:
/usr/include/c++/11.2.0/tr1/legendre_function.tcc:
@ -260,12 +298,16 @@ CMakeFiles/HLlib.dir/src/HiddenLines.cpp.o: ../src/HiddenLines.cpp \
/usr/include/bits/fp-fast.h:
/usr/include/c++/11.2.0/array:
/usr/include/bits/libm-simd-decl-stubs.h:
/usr/include/bits/math-vector.h:
/usr/include/c++/11.2.0/cmath:
/usr/include/c++/11.2.0/bits/unordered_map.h:
/usr/include/c++/11.2.0/math.h:
/usr/include/c++/11.2.0/limits:
@ -306,6 +348,8 @@ CMakeFiles/HLlib.dir/src/HiddenLines.cpp.o: ../src/HiddenLines.cpp \
/usr/include/c++/11.2.0/bits/basic_ios.h:
/usr/include/c++/11.2.0/bits/std_function.h:
/usr/include/c++/11.2.0/streambuf:
/usr/include/c++/11.2.0/bits/locale_classes.tcc:
@ -324,12 +368,18 @@ CMakeFiles/HLlib.dir/src/HiddenLines.cpp.o: ../src/HiddenLines.cpp \
/usr/include/errno.h:
/usr/include/c++/11.2.0/bits/stl_multimap.h:
/usr/include/c++/11.2.0/cerrno:
/usr/include/c++/11.2.0/bits/stl_map.h:
/usr/include/c++/11.2.0/bits/codecvt.h:
/usr/include/bits/stdio.h:
/usr/include/c++/11.2.0/bits/algorithmfwd.h:
/usr/include/bits/types/struct_FILE.h:
/usr/include/bits/types/__fpos64_t.h:
@ -370,6 +420,8 @@ CMakeFiles/HLlib.dir/src/HiddenLines.cpp.o: ../src/HiddenLines.cpp \
/usr/include/c++/11.2.0/bits/char_traits.h:
/usr/include/c++/11.2.0/bits/hashtable.h:
/usr/include/bits/waitstatus.h:
/usr/include/bits/timesize.h:
@ -476,6 +528,8 @@ CMakeFiles/HLlib.dir/src/HiddenLines.cpp.o: ../src/HiddenLines.cpp \
/usr/include/c++/11.2.0/exception:
/usr/include/c++/11.2.0/pstl/glue_algorithm_defs.h:
/usr/include/bits/pthread_stack_min-dynamic.h:
/usr/include/c++/11.2.0/bits/stl_set.h:
@ -490,6 +544,8 @@ CMakeFiles/HLlib.dir/src/HiddenLines.cpp.o: ../src/HiddenLines.cpp \
/usr/include/c++/11.2.0/bits/stl_multiset.h:
/usr/include/c++/11.2.0/functional:
/usr/include/c++/11.2.0/x86_64-pc-linux-gnu/bits/cpu_defines.h:
/usr/include/bits/byteswap.h:
@ -498,6 +554,8 @@ CMakeFiles/HLlib.dir/src/HiddenLines.cpp.o: ../src/HiddenLines.cpp \
/usr/include/c++/11.2.0/bits/ios_base.h:
/usr/include/c++/11.2.0/bits/refwrap.h:
/usr/include/c++/11.2.0/x86_64-pc-linux-gnu/bits/gthr.h:
/usr/include/c++/11.2.0/debug/assertions.h:
@ -512,6 +570,8 @@ CMakeFiles/HLlib.dir/src/HiddenLines.cpp.o: ../src/HiddenLines.cpp \
/usr/include/c++/11.2.0/bits/memoryfwd.h:
/usr/include/c++/11.2.0/unordered_map:
/usr/include/bits/flt-eval-method.h:
/usr/include/c++/11.2.0/bits/basic_ios.tcc:
@ -522,6 +582,8 @@ CMakeFiles/HLlib.dir/src/HiddenLines.cpp.o: ../src/HiddenLines.cpp \
/usr/include/bits/wchar.h:
/usr/include/c++/11.2.0/algorithm:
/usr/include/c++/11.2.0/cwchar:
/usr/include/bits/types/struct_tm.h:
@ -544,6 +606,8 @@ CMakeFiles/HLlib.dir/src/HiddenLines.cpp.o: ../src/HiddenLines.cpp \
/usr/include/c++/11.2.0/bits/predefined_ops.h:
/usr/include/c++/11.2.0/pstl/execution_defs.h:
/usr/include/c++/11.2.0/type_traits:
/usr/include/bits/stdint-intn.h:
@ -642,6 +706,8 @@ CMakeFiles/HLlib.dir/src/HiddenLines.cpp.o: ../src/HiddenLines.cpp \
/usr/include/bits/pthreadtypes.h:
/usr/include/c++/11.2.0/bits/stl_algo.h:
/usr/include/c++/11.2.0/clocale:
/usr/include/bits/thread-shared-types.h:

View File

@ -160,11 +160,31 @@ CMakeFiles/HLlib.dir/src/HiddenLines.cpp.o: \
/usr/include/c++/11.2.0/tr1/riemann_zeta.tcc \
/usr/include/c++/11.2.0/utility \
/usr/include/c++/11.2.0/bits/stl_relops.h \
/usr/include/c++/11.2.0/algorithm \
/usr/include/c++/11.2.0/bits/stl_algo.h \
/usr/include/c++/11.2.0/bits/algorithmfwd.h \
/usr/include/c++/11.2.0/bits/stl_heap.h \
/usr/include/c++/11.2.0/bits/stl_tempbuf.h \
/usr/include/c++/11.2.0/bits/uniform_int_dist.h \
/usr/include/c++/11.2.0/pstl/glue_algorithm_defs.h \
/usr/include/c++/11.2.0/functional /usr/include/c++/11.2.0/tuple \
/usr/include/c++/11.2.0/array \
/usr/include/c++/11.2.0/bits/uses_allocator.h \
/usr/include/c++/11.2.0/bits/invoke.h \
/usr/include/c++/11.2.0/bits/refwrap.h \
/usr/include/c++/11.2.0/bits/std_function.h \
/usr/include/c++/11.2.0/unordered_map \
/usr/include/c++/11.2.0/ext/aligned_buffer.h \
/usr/include/c++/11.2.0/bits/hashtable.h \
/usr/include/c++/11.2.0/bits/hashtable_policy.h \
/usr/include/c++/11.2.0/bits/node_handle.h \
/usr/include/c++/11.2.0/bits/unordered_map.h \
/usr/include/c++/11.2.0/bits/erase_if.h \
/usr/include/c++/11.2.0/pstl/execution_defs.h \
/home/noah/Documents/School/CS-7353_Analysis-of-Algorithms/HW/HW4/src/HiddenLines.h \
/usr/include/c++/11.2.0/set /usr/include/c++/11.2.0/bits/stl_tree.h \
/usr/include/c++/11.2.0/ext/aligned_buffer.h \
/usr/include/c++/11.2.0/bits/node_handle.h \
/usr/include/c++/11.2.0/bits/stl_set.h \
/usr/include/c++/11.2.0/bits/stl_multiset.h \
/usr/include/c++/11.2.0/bits/erase_if.h \
/usr/include/c++/11.2.0/bits/stl_multiset.h /usr/include/c++/11.2.0/map \
/usr/include/c++/11.2.0/bits/stl_map.h \
/usr/include/c++/11.2.0/bits/stl_multimap.h \
/home/noah/Documents/School/CS-7353_Analysis-of-Algorithms/HW/HW4/src/Line.h

View File

@ -5,4 +5,17 @@ CMakeFiles/linelib.dir/src/Line.cpp.o
/home/noah/Documents/School/CS-7353_Analysis-of-Algorithms/HW/HW4/src/Line.cpp
/usr/include/stdc-predef.h
/home/noah/Documents/School/CS-7353_Analysis-of-Algorithms/HW/HW4/src/Line.h
/usr/include/c++/11.2.0/limits
/usr/include/c++/11.2.0/x86_64-pc-linux-gnu/bits/c++config.h
/usr/include/c++/11.2.0/x86_64-pc-linux-gnu/bits/os_defines.h
/usr/include/features.h
/usr/include/features-time64.h
/usr/include/bits/wordsize.h
/usr/include/bits/timesize.h
/usr/include/sys/cdefs.h
/usr/include/bits/long-double.h
/usr/include/gnu/stubs.h
/usr/include/gnu/stubs-64.h
/usr/include/c++/11.2.0/x86_64-pc-linux-gnu/bits/cpu_defines.h
/usr/include/c++/11.2.0/pstl/pstl_config.h

View File

@ -3,11 +3,50 @@
CMakeFiles/linelib.dir/src/Line.cpp.o: ../src/Line.cpp \
/usr/include/stdc-predef.h \
../src/Line.h
../src/Line.h \
/usr/include/c++/11.2.0/limits \
/usr/include/c++/11.2.0/x86_64-pc-linux-gnu/bits/c++config.h \
/usr/include/c++/11.2.0/x86_64-pc-linux-gnu/bits/os_defines.h \
/usr/include/features.h \
/usr/include/features-time64.h \
/usr/include/bits/wordsize.h \
/usr/include/bits/timesize.h \
/usr/include/sys/cdefs.h \
/usr/include/bits/long-double.h \
/usr/include/gnu/stubs.h \
/usr/include/gnu/stubs-64.h \
/usr/include/c++/11.2.0/x86_64-pc-linux-gnu/bits/cpu_defines.h \
/usr/include/c++/11.2.0/pstl/pstl_config.h
../src/Line.h:
/usr/include/c++/11.2.0/pstl/pstl_config.h:
/usr/include/c++/11.2.0/x86_64-pc-linux-gnu/bits/cpu_defines.h:
/usr/include/c++/11.2.0/limits:
/usr/include/c++/11.2.0/x86_64-pc-linux-gnu/bits/os_defines.h:
/usr/include/stdc-predef.h:
/usr/include/c++/11.2.0/x86_64-pc-linux-gnu/bits/c++config.h:
/usr/include/gnu/stubs-64.h:
/usr/include/bits/timesize.h:
../src/Line.h:
/usr/include/features.h:
/usr/include/features-time64.h:
../src/Line.cpp:
/usr/include/bits/wordsize.h:
/usr/include/sys/cdefs.h:
/usr/include/bits/long-double.h:
/usr/include/gnu/stubs.h:

View File

@ -1,4 +1,13 @@
CMakeFiles/linelib.dir/src/Line.cpp.o: \
/home/noah/Documents/School/CS-7353_Analysis-of-Algorithms/HW/HW4/src/Line.cpp \
/usr/include/stdc-predef.h \
/home/noah/Documents/School/CS-7353_Analysis-of-Algorithms/HW/HW4/src/Line.h
/home/noah/Documents/School/CS-7353_Analysis-of-Algorithms/HW/HW4/src/Line.h \
/usr/include/c++/11.2.0/limits \
/usr/include/c++/11.2.0/x86_64-pc-linux-gnu/bits/c++config.h \
/usr/include/c++/11.2.0/x86_64-pc-linux-gnu/bits/os_defines.h \
/usr/include/features.h /usr/include/features-time64.h \
/usr/include/bits/wordsize.h /usr/include/bits/timesize.h \
/usr/include/sys/cdefs.h /usr/include/bits/long-double.h \
/usr/include/gnu/stubs.h /usr/include/gnu/stubs-64.h \
/usr/include/c++/11.2.0/x86_64-pc-linux-gnu/bits/cpu_defines.h \
/usr/include/c++/11.2.0/pstl/pstl_config.h

View File

@ -136,5 +136,11 @@ CMakeFiles/main.dir/src/main.cpp.o: \
/usr/include/c++/11.2.0/bits/node_handle.h \
/usr/include/c++/11.2.0/bits/stl_set.h \
/usr/include/c++/11.2.0/bits/stl_multiset.h \
/usr/include/c++/11.2.0/bits/erase_if.h \
/usr/include/c++/11.2.0/bits/erase_if.h /usr/include/c++/11.2.0/map \
/usr/include/c++/11.2.0/bits/stl_map.h /usr/include/c++/11.2.0/tuple \
/usr/include/c++/11.2.0/utility \
/usr/include/c++/11.2.0/bits/stl_relops.h /usr/include/c++/11.2.0/array \
/usr/include/c++/11.2.0/bits/uses_allocator.h \
/usr/include/c++/11.2.0/bits/invoke.h \
/usr/include/c++/11.2.0/bits/stl_multimap.h \
/home/noah/Documents/School/CS-7353_Analysis-of-Algorithms/HW/HW4/src/Line.h

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -7,6 +7,7 @@
#include <limits>
#include <math.h>
#include <utility>
#include <algorithm>
#include "HiddenLines.h"
@ -29,7 +30,6 @@ void HL::print_sol()
std::set<Line> HL::gen_sol(const std::set<Line>& ls){
HL inst = *this;
if (ls.size() > 2){
//Create left and right half sets
int split = ceil(ls.size()/2);
std::set<Line> lh;
@ -48,7 +48,35 @@ std::set<Line> HL::gen_sol(const std::set<Line>& ls){
}
//Recursive call
return merge(inst.gen_sol(lh), inst.gen_sol(rh));
auto tmp_sol = merge(inst.gen_sol(lh), inst.gen_sol(rh));
for (auto itr = tmp_sol.begin(); itr != tmp_sol.end(); itr++){
Line l1 = *itr;
sol.insert(std::make_pair(l1.get_id(), std::make_pair(l1.get_vis_start(), l1.get_vis_end())));
}
std::set<std::pair<double, double>> piecewise;
//Cleanup Solution
for(auto itr = sol.begin(); itr != sol.end();){
auto start_range = std::get<0>(std::get<1>(*itr));
auto stop_range = std::get<1>(std::get<1>(*itr));
auto it = std::find_if(piecewise.begin(), piecewise.end(),
[start_range](const std::pair<double, double>& p ){ return p.first == start_range; });
if (it != piecewise.end()){
//st.erase(it);
}
if (start_range == stop_range){
sol.erase(itr);
}
else{
itr++;
}
}
return tmp_sol;
}
//Set with 2 lines is a base case: both are visible at +-inf respectively, and intersection is where they change
@ -60,34 +88,28 @@ std::set<Line> HL::gen_sol(const std::set<Line>& ls){
//Smaller Slope: vis from isec to inf
l1.set_vis_start(isec);
l1.set_vis_end(std::numeric_limits<double>::infinity());
l1.set_vis_end(std::numeric_limits<double>::max());
//Greater Slope: vis from -inf to isec
l2.set_vis_start(-std::numeric_limits<double>::infinity());
l2.set_vis_start(-std::numeric_limits<double>::max());
l2.set_vis_end(isec);
//Insert partial solutions
sol.insert(std::make_pair(l1.get_id(), std::make_pair(l1.get_vis_start(), l1.get_vis_end())));
sol.insert(std::make_pair(l2.get_id(), std::make_pair(l2.get_vis_start(), l2.get_vis_end())));
inst.print_sol();
return ls;
}
//Set with 1 line: vis at +-inf
else{
auto l1 = *(ls.begin());
l1.set_vis_start(-std::numeric_limits<double>::infinity());
l1.set_vis_end(std::numeric_limits<double>::infinity());
l1.set_vis_start(-std::numeric_limits<double>::max());
l1.set_vis_end(std::numeric_limits<double>::max());
return ls;
}
//return sol;
//std::set<Line> dummy;
//return dummy;
}
std::set<Line> HL::construct_HWprob(){
@ -127,15 +149,18 @@ std::set<Line> HL::construct_HWprob(){
Line newline = Line(slope, ycept);
newline.set_id();
lines.insert(newline);
line_holder.insert(std::make_pair(newline.get_id(),newline));
}
std::cout << "Sorted Lines by slope:" << std::endl;
std::cout << "---------------Sorted Lines by slope:---------------" << std::endl;
for(Line line : lines)
{
std::cout << "Line " << line.get_id() << " has slope " << line.get_slope()
<< " and a y-intercept of " << line.get_ycept() << std::endl;
}
std::cout << "-----------------------------------------------------" << std::endl;
return lines;
}
@ -150,15 +175,44 @@ std::set<Line> merge(std::set<Line> lh, std::set<Line> rh){
Line l1 = *litr;
Line l2 = *ritr;
if(l1.get_slope() < l2.get_slope()){
//3 Cases: lh slope is less, slopes are equal, and lh slope is greater
//Case 1:
if (l1.get_slope() < l2.get_slope()){
double isec = (l2.get_ycept() - l1.get_ycept())/(l1.get_slope() - l2.get_slope());
l1.set_vis_end(isec);
l2.set_vis_start(isec);
merged.insert(l1);
merged.insert(l2);
litr++;
continue;
}
else if (l1.get_slope() == l2.get_slope()){
if (l1.get_ycept() > l2.get_ycept()){
l2.set_vis_start(0);
l2.set_vis_end(0);
merged.insert(l1);
}
else{
l1.set_vis_start(0);
l2.set_vis_end(0);
merged.insert(l2);
}
litr++;
ritr++;
}
else{
double isec = (l2.get_ycept() - l1.get_ycept())/(l1.get_slope() - l2.get_slope());
l1.set_vis_start(isec);
l2.set_vis_end(isec);
merged.insert(l1);
merged.insert(l2);
ritr++;
}
}
return merged;
}
std::set<Line> HL::get_lines() const{

View File

@ -1,6 +1,7 @@
//Hidden Lines work
#include <set>
#include <map>
#include "Line.h"
@ -16,6 +17,8 @@ class HL
std::set<Line> get_lines() const;
std::set<std::pair<int, std::pair<double, double>>> get_sol() const;
std::map<int, Line> line_holder;
private:
//Solution is in form (Line ID, (vis_start, vis_end))
std::set<std::pair<int, std::pair<double, double>>> sol;

View File

@ -1,6 +1,8 @@
//Line Class
#include "Line.h"
#include <limits>
int Line::current_id = 0;
@ -9,6 +11,8 @@ Line::Line(double x, double y)
set_slope(x);
set_ycept(y);
id = 0;
set_vis_start(-std::numeric_limits<double>::max());
set_vis_end(std::numeric_limits<double>::max());
}
void Line::set_slope(double &x)
@ -74,4 +78,4 @@ void Line::set_vis_start(double x)
void Line::set_vis_end(double x)
{
vis_end = x;
}
}

View File

@ -9,10 +9,11 @@
int main(int argc, char *argv[])
{
std::cout << "Constructing Problem..." << std::endl;
std::cout << "Constructing Problem...\n" << std::endl;
HL inst = HL();
std::cout << std::endl;
std::cout << "Generating Solution." << std::endl;
std::cout << "Generating Solution.\n" << std::endl;
inst.gen_sol(inst.get_lines());
std::cout << "Solution is: " << std::endl;