У меня есть очень большая база данных объектов (читайте массив пар ключ/значение, например [{}, {}, {}]
в стандартной записи C), и мне нужно иметь возможность искать любое значение любого ключ внутри этого набора пар и найти объект, который его содержит (я буду использовать алгоритмы нечеткого поиска или аналогичные алгоритмы сравнения строк). Один из подходов, я могу думать о том, чтобы создать огромный мастер-объект с помощью ключа привязки к исходному объекту для каждого значения внутри объекта:Структура данных, которая позволяет эффективно искать объекты
DB = [
{
"a": 45,
"b": "Hello World"
},
{
"a": 32,
"b": "Testing..."
}
]
// ... Generation Code ... //
search = {
45: {the 0th object},
"Hello World": {the 0th object},
32: {the 1st object},
"Testing...": {the 1st object}
}
Это решение, по крайней мере уменьшает проблему большого числа сравнений, но есть ли лучшие подходы? Обратите внимание, что у меня очень мало формальной подготовки в области компьютерных наук, поэтому я могу пропустить некоторые важные детали, упрощающие или доказывающие невозможность этой проблемы.
P.S. Это too broad? Если это так, я с удовольствием удалю его
Один индекса по всем свойствам вызовет трудность, когда такое же значение имеет место несколько раз для различных строк и свойств, а также увеличить время подстановки путем увеличения пространства значений для поиска. Лучшим вариантом может быть наличие индекса на каждое свойство и сопоставление каждого значения с массивом позиций. – reaanb
@reaanb В быстрой реализации этого решения, которое я сделал, он только что подготовил массив этих объектов, который оказался очень быстрым. – MayorMonty
Конечно, я не говорю о разности величин разницы. Для n объектов и свойств p двоичный поиск потребует сопоставления log (np) по объединенному индексу и log (n) по отдельным индексам. Более важным является способность узнать, какое свойство объекта соответствует при поиске значений в индексе. – reaanb