Dla mnie najprościej by było zrobić w bazie tabele i np. wybrać jakąś część np. A element, posortować ją po ilości potrzebnych elementów + każdy element ma relację do reszty danych o danym elemencie.
Potem zrobić second level sortowanie czyli wszystkie modele spłaszczyć do 1 elementu, które wymagają tej samej ilości elementów, żeby nie było duplikacji przy wyszukiwaniu biarnym, który jest po prostu zakresem, coś jak highway pointers.
Teraz robimy wyłuskanie elementu ze struktury czyli jak A jest 22 elementy, to szukamy w highway pointers warstwie posortowanej elementu i dostajemy zakres elementów w zwykłej tablicy posortowanej.
Tam mamy pewność, że te elementy spełniają dla A elementu wymaganego, potem trzeba dla każdego z nich sprawdzić resztę elementów.
Ten sposób sprawia, że nie trzeba całej bazy przeszukiwać, tylko od razu mamy potencjalne elementy, które spełniają pierwszy warunek.
Drugie podejście to dla każdego elementu zrobić takie wybranie zakresu elementów <= 22 dostępnych.
Dla A, B i C itp.
Potem mając te listy elementów to zrobić intersekcję między tymi trzeba wytypowanymi zbiorami i też powinno dać tylko spełniające warunki elementy.
Też jeszcze prościej można w bazie danych zrobić where A < 22 and B < 11 and C < 5
, ale to wtedy będzie wykonane najpierw cała baza danych względem pierwszego warunku i te co zostaną zostanie na nich przeprowadzony drugi warunek i te co zostanie to następny i pozostała lista przefiltrowana to elementy spełniające kryteria.
Też jak się zrobi 1-2 rozwiązania to pewnie się wpadnie na jakieś optymalizacje, tak jak we wszystkich problemach algorytmicznych.