Pracuję nad aplikacją internetową, która zawiera długie listy nazwisk. Klient początkowo chciał, aby nazwy dzieliły się na litery div
s za pomocą liter, więc łatwo jest przeskoczyć do określonej nazwy na liście.Listing alfabetycznie, grupy listów z kilkoma wpisami razem (PHP lub JS)
Teraz, patrząc na listę, klient wskazał kilka liter, które mają tylko jedną lub dwie nazwy skojarzone z nimi. Teraz chce wiedzieć, czy możemy połączyć kilka kolejnych liter, jeśli w każdym z nich jest tylko kilka nazwisk.
(Zauważ, że litery bez nazwy nie są wyświetlane w ogóle.)
Co mam teraz zrobić, to mieć serwer bazy danych zwróci listę sortowane, a następnie zachować zmienną zawierającą obecną postać. Przeglądam listę nazw, zwiększając liczbę znaków i drukując znaczniki otwierające i zamykające, tak jak pojawia się każda litera. Wiem, jak zaadaptować ten kod, aby połączyć kilka liter, ale jedyną rzeczą, której nie jestem pewien, jak sobie poradzić, jest to, czy konkretna kombinacja liter jest najlepsza z możliwych. Innymi słowy, że mam:
A
- 12 NazwyB
- 2 nazwachC
- 1 NazwaD
- 1 NazwaE
- 1 NazwaF
- 23 nazwy
Wiem, jak skończyć z grupą A-C
, a następnie samemu D
. To, czego szukam, to: wydajny sposób, aby zdać sobie sprawę, że A
powinno być samo w sobie, a następnie B-D
powinny być razem.
Nie jestem pewien, od czego zacząć.
Jeśli ma to znaczenie, ten kod zostanie użyty w module Kohana Framework.
UPDATE 2012-04-04:
Oto wyjaśnienie, czego potrzebuję:
Say minimalna liczba elementów Chcę w grupie wynosi 30. Teraz mówią, że litera A ma 25 pozycji, litery B, C i D, każdy ma po 10 pozycji, a litera E ma 32 pozycje. Chcę zostawić A samemu, ponieważ lepiej będzie połączyć B + C + D. Prostym sposobem na ich połączenie jest A + B, C + D + E - czego nie chcę.
Innymi słowy, potrzebuję najlepszego dopasowania, które jest najbliżej minimum w grupie.
Oto skrzypce z wyjściowej listy nazwisk, jeśli ludzie chcą zrobić kilka testów z metody js. http://jsfiddle.net/Avveb/ – mrtsherman
Wiem, że można to zrobić za pomocą dużego programowania dynamicznego, ale mam nadzieję, że ktoś znajdzie coś na tyle prostego, aby można go było użyć w aplikacji sieciowej. Jeśli potrzebuję korzystać z programowania dynamicznego, będę musiał uruchomić je od czasu do czasu i zapisać wyniki w pamięci podręcznej, ponieważ będzie to zbyt intensywne, aby można było je uruchomić po wczytaniu strony. –