-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathgreedy.php
More file actions
43 lines (39 loc) · 1.65 KB
/
greedy.php
File metadata and controls
43 lines (39 loc) · 1.65 KB
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
35
36
37
38
39
40
41
42
43
<?php
/**
* Алогитм "жадины"
*
* @param $poi - массив POI [0...35..]
* @param $matrix - Матрица смежности на основе координат
*
* @param bool $max_poi
* @return mixed
*/
function greedyAlgorithm($poi, $matrix, $max_poi = false)
{
$arr_keys = []; // Список ID poi для исключения
$first_id = $max_poi[0]; // Получаем самую удаленную точку
$save_poi = $poi[$first_id]; // $save_poi = poi[24]
$new = [$first_id => $save_poi]; // Создаем новый массив
unset($poi[$first_id]); // Сразу удаляем из источника POI
$arr_keys[] = $first_id;
$save_id = $first_id;
$c = max(array_keys($poi));
for ($i = 0; $c >= $i; $i++) {
// Удаляем записанную ранее точку
unset($poi[$save_id]);
// Получаем мин. значение
$min = $this->minNotNull($matrix[$save_id], $arr_keys);
$key = $min['keys'][0];
if (is_numeric($key)) {
// Формируем список, который надо отдать
$new[$key] = $poi[$key];
// Записываем минемальный радиан
// из матрицы смежности
$new[$key]['radian'] = $min['min'];
// Сохраняем IDs
$save_id = $key;
$arr_keys[] = $key;
}
}
return $new;
}