• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Sprawdzenie, czy zbiór elementów A zawiera zbiór elementów B

Object Storage Arubacloud
0 głosów
728 wizyt
pytanie zadane 18 listopada 2017 w Algorytmy przez Schizohatter Nałogowiec (39,600 p.)
edycja 18 listopada 2017 przez Schizohatter
Hej. Tym razem to ja zadam pytanie, bo może ktoś będzie miał jakiś pomysł, jak rozwiązać ten problem stosunkowo wydajnie.

Posiadam X zbiorów elementów. Te zbiory są w przybliżeniu losowe, np. jeden zbiór to: [A, A, A, B, B, C, C, C, C]. Oprócz tablicy, zbiór może być zapisany także jako: { A: 3, B: 2, C: 4 }

Posiadam także Y-liczbę recept. Recepta zawiera informację o elementach (pochodzących ze zbiorów) potrzebnych do jej stworzenia. Np Recepta P: [A, A, B, C, C] może być stworzona z ww. zbioru. Nie jest konieczne wykorzystanie wszystkich elementów ze zbioru (mogą pozostać jakieś resztki) Sposób zapisu pojedynczych recept, jak i całego zbioru recept nie jest ustalony.

Teraz muszę porównać każdy z X zbiorów z tabelą recept. Tutaj wkraczacie Wy z Waszymi świetnymi pomysłami :) Jak to zrobić dobrze? Język: JavaScript.

Najprostszym (najbardziej brute-force) rozwiązaniem, będzie oczywiście sprawdzenie każdej recepty po kolei, czy wszystkie jej składniki znajdują się w zbiorze. Ale to rozwiązanie brute-force i przy wielu zbiorach doprowadzi do zawalenia wydajności. A cały ten algorytm będzie odpalany kilka razy w ciągu sekundy, pracując na: 300 zbiorach, po ok. 8 elementów, przy kilku receptach.

Być może wykorzystanie zapisu zbioru jako obiektu i recepty jako obiektu, a następnie porównanie wszystkich kluczy-wartości recepty z kluczami-wartościami obiektu? Może to załatwi sprawę? A może można to jakoś inaczej, sprytniej zrobić?
komentarz 18 listopada 2017 przez niezalogowany
Czy zestaw zbiorów jest stały?
Czy mogę założyć, że poszczególne składniki to stringi i spróbować zaimplementować to w JS?
komentarz 18 listopada 2017 przez Schizohatter Nałogowiec (39,600 p.)
Możesz założyć, że poszczególne składniki to stringi.

Liczba zbiorów jest stała w każdej iteracji algorytmu. Jednak zmienia się ich skład. Ogólnie to zbiory przerzucają między sobą elementy w sposób losowy, a następnie wykonywane jest sprawdzanie elementów z receptami.
komentarz 18 listopada 2017 przez niezalogowany
Czy elementy w zbiorze/recepcie są zawsze posortowane?

Algorytm można zacząć z [A, A, A] albo { A: 3 }, czy sposób zapisu jest generowany losowo?
komentarz 18 listopada 2017 przez Schizohatter Nałogowiec (39,600 p.)
Elementy są posortowane, algorytm możesz zacząć od czego chcesz.
komentarz 18 listopada 2017 przez niezalogowany
Ile jest różnych składników?
komentarz 19 listopada 2017 przez Schizohatter Nałogowiec (39,600 p.)
Założmy, że 3. Jakie to ma znaczenie? Algorytm powinien być uniwersalny, czyż nie? Dowolna liczba składników/zbiorów/recept.

1 odpowiedź

Podobne pytania

0 głosów
1 odpowiedź 180 wizyt
0 głosów
1 odpowiedź 302 wizyt
pytanie zadane 6 listopada 2018 w Java przez ShiroUmizake Nałogowiec (46,300 p.)

92,551 zapytań

141,393 odpowiedzi

319,523 komentarzy

61,936 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...