Оптимизировать код или как выделить всю вычислительную мощность пк на его выполнение?

162
02 февраля 2020, 00:10

Есть массив целых. Задача:

Представить все значения как диапазоны: значение .. (значение + 50)
Взять первое значение (диапазон)
отсечь все пересекающиеся с ним диапазоны ниже
взять второе
отсечь пересекающиеся
следующий
и так далее

Сохранение порядка обязательно.

Код:

<?php
$arr = [100,125,75,175,25,300,275,325,375];
$step = 50;
for ($i = 0; $i <= count($arr)-1; $i++) {
    $value = $arr[$i];
    $arr = array_values(array_filter($arr, function($v) use ($value,$step) {
        return ($value+$step < $v or $v+$step < $value or $v == $value);
    }));
}
var_dump($arr); // [100, 175, 25, 300, 375]
?>

100к чисел этим кодом обрабатывать сутки.
Перебирать без функций "вручную"?
Или что ещё можно сделать?

READ ALSO
Как передать значение GET через header(Location)?

Как передать значение GET через header(Location)?

Столкнулся с такой проблемой: Если пользователь находится на странице, у которой есть параметр GET, как напримерphp?article=51 и хочет авторизоваться...

150
Авторизация на сайте через Facebook

Авторизация на сайте через Facebook

Пытаюсь написать регистрацию и авторизацию на сайте с помощью API фейсбукаНеобходимые данные от FB приходят, после я их заношу в БД и устанавливаю...

161
Залипают очереди в RabbitMQ (Yii2)

Залипают очереди в RabbitMQ (Yii2)

Доброго времени суток!

156
MySQL: оператор WHERE IN и ORDER BY DESC

MySQL: оператор WHERE IN и ORDER BY DESC

Существует таблица table(timestamp, 'id', 'price')В таблице более 20 тыс

185