самый эффективный способ хеширования карты объекта, который будет обозначен временным диапазоном? - PullRequest
0 голосов
/ 17 ноября 2018

пример объекта:

{
    "start": "1.06",
    "end": "2.33",
    "content": "something"
},
{
    "start": "2.99",
    "end": "3.54",
    "content": "something else"
}

Я хочу создать эффективную хэш-карту, в которую я могу в любое время вводить и получать содержимое. Например, я ввожу 2.01 и получаю something, потому что это произошло в этом временном диапазоне.

Помимо создания хеша для каждого числа в диапазонах, каков наилучший способ сделать это?

1 Ответ

0 голосов
/ 17 ноября 2018

Если нет перекрывающихся периодов, а данные уже отсортированы, вам следует реализовать бинарный поиск:

function findIndex(data, time) {
    let left = 0;
    let right = data.length-1;
    while (left <= right) {
        const mid = (right + left)>>1;
        if (time > data[mid].end) {
            left = mid + 1;
        } else if (time < data[mid].start) {
            right = mid - 1;
        } else {
            return mid;
        }
    }
    return -1;
}

Это вернет -1, если совпадения нет, или индекс совпадения,С этим индексом вы можете получить соответствующий объект и одно из его свойств.

Сложность времени составляет O (logn) .

Примечание. Начальные / конечные свойства необходимо определить как числа , а не в виде строк, поэтому вы получите результат числового сравнения, а не алфавитный.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...