diff --git a/SequenceComparison/dtw.cpp b/SequenceComparison/dtw.cpp
index 4db4b0fae3ab48a34dcb3fe3885525d0151b862c..6567d43e6efc727e837cc6886fc6180832ea7c0f 100644
--- a/SequenceComparison/dtw.cpp
+++ b/SequenceComparison/dtw.cpp
@@ -377,6 +377,24 @@ void dtw::accumulate(vtr2<node<T>> &m, parameter const ¶ms)
}
}
+template<class T>
+void dtw::accumulate(vtr2<node<T>> &m, vtr parameter const ¶ms)
+{
+ int lenA = (int)m.size();
+ int lenB = (int)m[0].size();
+
+ const int w = (int)(lenB * params.w);
+ for (int i = 1; i < lenA; i++) //row = y
+ {
+ const size_t start = max(1, (int)(ceil((i - 1) * (lenB / (double)lenA + 0.0000000001)) - w));
+ const size_t end = min(lenB, (int)(ceil(i * lenB / (double)lenA)) + w);
+ for (size_t j = start; j < end; j++) //col = x
+ {
+ m[i][j].value += std::min({ m[i - 1][j - 1].value, m[i - 1][j].value, m[i][j - 1].value });
+ }
+ }
+}
+
template<class T>
vtr<coords> dtw::get_minimums(vtr2<node<T>> const &m, parameter const ¶ms)
{
diff --git a/SequenceComparison/dtw.h b/SequenceComparison/dtw.h
index fe41622513c807f2954cb8cbfbe5fe729713cf1a..4ad07c24ecdea14577e953296ef4fa0d487c8863 100644
--- a/SequenceComparison/dtw.h
+++ b/SequenceComparison/dtw.h
@@ -30,6 +30,9 @@ public:
template<class T>
static void accumulate(vtr2<node<T>> &m, parameter const ¶ms);
+ template<class T>
+ static void accumulate_mod(vtr2<node<T>> &m, parameter const ¶ms);
+
template<class T>
static result_path get_warping(vtr2<node<T>> const &m, coords coord, parameter const ¶ms);