deBeer » 29 май 2010, 18:45
Здравствуйте.
Сразу скажу, что я новичек, потому прошу совета. Я учусь не на программиста, знаний серьезно не хватает, и спросить не у кого
Делаю фильтры, наподобие этих:
http://www.arredo.ru (сверху)
Значения берутся в любом порядке, после каждого выбора происходит пересчет количества товаров (нод).
К примеру, есть 5 фильтров, в каждом 5 возможных значений. То есть есть массив атрибутов:
A1: 0, 1, .. , 5;
...
A5: 0, 1, .. , 5;
Каждая нода (товар) имеет от 1 до 5 атрибутов, у каждого атрибута от 1 до 3 значений. К примеру такой массив описывает одну ноду:
[A1: [2], A2: [1, 4], A3[1], A4[1, 2, 5], A5[5] ]; -- Тут присутствуют все 5 атрибутов, но их может быть и меньше.
Я подумал что проще всего будет получить массив разных комбинаций атрибутов, типа:
Arr1 = ["1:2:3:4:5": 3]; Что значит что 3 ноды имеют комбинацию атрибутов A1=1; A2=2;.. A5=5;
Таким образом решить задачу получилось, но есть огромный минус.
Если у каждой ноды всего от 1 до 5 атрибутов, т.е.A1=1; A2=2;.. A5=5; - то все ок, массив Arr1 будет иметь столько же элементов, сколько есть нод.
Но если все большее число нод будет иметь несколько атрибутов, т.е. все чаще будут попадаться ноды с примерно такими атрибутами: [A1: [1, 2, 3], A2: [1, 2, 4], A3[1, 2, 3], A4[1, 2, 5], A5[1, 3, 5] ]; - то этот массив Arr1 будет разрастаться адскими темпами, а поиск в нем будет все затратнее.
Так как в будущем число нод будет быстро расти, этот способ очень плохой.
Второй вариант лучше, так как в будущем могут добавиться всего несколько атрибутов, а его быстродействие зависит именно от число атрибутов.
Напомню, у нас есть 5 атрибутов, у каждого по 5 значений, то есть всего получим массив размером 5^5 = 3125 элементов.
[n1, n2, ..., n3125] где ni - это число нод с такой комбинацией атрибутов. Я думаю это лучше, чем 5-мерный массив, если продумать способ заполнения массива. (Стоит заметить, что 5x5 это для простоты счета, на самом деле число элементов будет где-то 600 тысяч, или 7-мерный массив).
Вопрос в том, как правильно решаются такие задачи? Может быть есть подобные готовые решения, чтоб вникнуть в них и разобраться? Будьте добры, подскажите.
Здравствуйте.
Сразу скажу, что я новичек, потому прошу совета. Я учусь не на программиста, знаний серьезно не хватает, и спросить не у кого :(
Делаю фильтры, наподобие этих: [url]http://www.arredo.ru[/url] (сверху)
Значения берутся в любом порядке, после каждого выбора происходит пересчет количества товаров (нод).
К примеру, есть 5 фильтров, в каждом 5 возможных значений. То есть есть массив атрибутов:
A1: 0, 1, .. , 5;
...
A5: 0, 1, .. , 5;
Каждая нода (товар) имеет от 1 до 5 атрибутов, у каждого атрибута от 1 до 3 значений. К примеру такой массив описывает одну ноду:
[A1: [2], A2: [1, 4], A3[1], A4[1, 2, 5], A5[5] ]; -- Тут присутствуют все 5 атрибутов, но их может быть и меньше.
Я подумал что проще всего будет получить массив разных комбинаций атрибутов, типа:
Arr1 = ["1:2:3:4:5": 3]; Что значит что 3 ноды имеют комбинацию атрибутов A1=1; A2=2;.. A5=5;
Таким образом решить задачу получилось, но есть огромный минус.
Если у каждой ноды всего от 1 до 5 атрибутов, т.е.A1=1; A2=2;.. A5=5; - то все ок, массив Arr1 будет иметь столько же элементов, сколько есть нод.
Но если все большее число нод будет иметь несколько атрибутов, т.е. все чаще будут попадаться ноды с примерно такими атрибутами: [A1: [1, 2, 3], A2: [1, 2, 4], A3[1, 2, 3], A4[1, 2, 5], A5[1, 3, 5] ]; - то этот массив Arr1 будет разрастаться адскими темпами, а поиск в нем будет все затратнее.
Так как в будущем число нод будет быстро расти, этот способ очень плохой.
Второй вариант лучше, так как в будущем могут добавиться всего несколько атрибутов, а его быстродействие зависит именно от число атрибутов.
Напомню, у нас есть 5 атрибутов, у каждого по 5 значений, то есть всего получим массив размером 5^5 = 3125 элементов.
[n1, n2, ..., n3125] где ni - это число нод с такой комбинацией атрибутов. Я думаю это лучше, чем 5-мерный массив, если продумать способ заполнения массива. (Стоит заметить, что 5x5 это для простоты счета, на самом деле число элементов будет где-то 600 тысяч, или 7-мерный массив).
Вопрос в том, как правильно решаются такие задачи? Может быть есть подобные готовые решения, чтоб вникнуть в них и разобраться? Будьте добры, подскажите.