Допустим пользователя скидки мы хотим построить рекомендацию по увелич

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
Допустим у пользователя M% скидки и мы хотим построить рекомендацию по увеличению до N% скидки, где N > M.
1) Ищется текущая позиция кастомера в таблице.
2) Последовательно перебираются все ячейки в таблице с M% скидки, но только те, которые стоят выше и/или правее текущей позиции кастомера.
2a) Если это первая итерация, никакой ячейки еще не выбрано, то наилучшей для начала считается та ячейка, которую мы взяли в текущей итерации.
2b) Если на предыдущих итерациях выбрана ячейка A и на текущей итерации у нас есть ячейка B есть 2 альтернативы:
2b-1) Ячейка A и ячейка B это 2 ближайшие к текущей позиции кастомера слева и справа ячейки. Тоесть одна из них это на одну позицию выше, а вторая - на одну позицию правее текущей позиции кастомера. Это единственный кейс когда для рекомендации выбираются 2 ячейки. Алгоритм сразу прерывается, возвращаются 2 этих ячейки.
На карточке выводится сообщение "Чтобы получить M% скидки вам нужно увеличить процент выкупа до X% ИЛИ увеличить количество балов до Y".
2b-2) Если ячейки A и B не попадают под кейс 2b-1) из двух ячеек A и B выбирается наиближайшая к текущей позиции кастомера. Алгоритм определения наиближайшей ячейки описан ниже.
3) После завершения перебора ячеек в таблице с M% скидки у нас отобрана одна ячейка, она возвращается. Или ниодной не отобрано, но это понятно, никакой рекомендации нет. Если отобраны 2 то там алгоритм раньше прервался в пункте 2b-1)
В случае когда отобрана для рекомендации ровно одна ячейка, на карточке выводится одно из следующих сообщений:
"Чтобы получить M% скидки нужно увеличить процент выкупа до X% И увеличить количество балов до Y"
"Чтобы получить M% скидки нужно увеличить процент выкупа до X%, а балов и так достаточно"
"Чтобы получить M% скидки нужно увеличить количество балов до Y, а процент выкупа достаточный"
Алгоритм Less(T, A, B) bool для определения более близкой к T ячейки
T - текущая позиция кастомера в таблице
A, B - две ячейки из которых надо выбрать ближайшую к T
Алгоритм возвращает true если ячейка A ближе к ячейке T, чем B.
1) Сравниваются метрики Хэмминга P(T, A) и P(T, B) если P(T, A) < P(T, B), возвращается true
Иначе переходим к следующему шагу.
Расстояние Хэминга считается так
P((x1,y1), (x2, y2)) = |x1-x2| + |y1-y1|
2) Считается метрика D((x1, y1), (x2, y2)) = max(|x1-x2|, |y1-y2|)
Если D(T, A) < D(T, B) возвращается true. Иначе переходим к следующему шагу.
3) Сравнивается расстояние только по одной координате (по координате которая отвечает за buyout rate). R((x1, y1), (x2, y2)) = |x1-x2|. Опять же если если R(T, A) < R(T, B) возвращается true.
Иначе след. шаг.
4) Сравнивается расстояние по второй координате (которая отвечает за количество балов лояльности). L((x1, y1), (x2, y2) = |y1-y2|. Если L(T, A) < L(T, B) возвращается true, иначе возвращается false.