Absolutnie, jest! Nie jest to jednak "w Objective-C": najprawdopodobniej trzeba by to zakodować samemu.
Chodzi o to, aby przekonwertować listę ciągów znaków na suffix tree, strukturę danych, która umożliwia szybkie wyszukiwanie według prefiksu. Wyszukiwanie możliwych uzupełnień w drzewie sufiksu jest bardzo szybkie, ale sama konstrukcja nie jest łatwa do zbudowania. Szybkie wyszukiwanie w Internecie ujawniło, że nie ma łatwo dostępnej implementacji w Celu C, ale możesz być w stanie uzyskać port an implementationin another language, use a C implementation, a nawet napisać własną, jeśli nie jesteś szczególnie naciskany na czas.
Być może łatwiejszym podejściem byłoby sortowanie ciągów alfabetycznych i uruchamianie wyszukiwania binarnego na prefiksie, który został wprowadzony do tej pory. Choć nie jest to tak wydajne jak drzewo przyrostków, posortowana metoda tablicowa będzie akceptowalna dla ciągów 100K, ponieważ trafisz w odpowiednie miejsce w ramach siedemnastu kontroli.
Możesz spróbować pomiń ciągi, które nie pasują nawet do pierwszej litery, nie ma sensu szukanie od jabłek do jogurtu, jeśli twoje słowo to zebra. Nie jestem pewien najlepszego sposobu na wdrożenie tego, być może wielowymiarową tablicę? Pierwszy wymiar może być pierwszą literą, drugim wymiarem drugiej litery itd., Aż do trzeciej lub czwartej litery, wtedy możesz po prostu zachować pozostałą część słowa. –
Jeśli nie potrzebujesz zamawiania, wydaje mi się, że zestawy są szybsze przy sprawdzaniu, czy zawiera obiekt, czy nie. Nadal nie jest zoptymalizowany pod kątem ciągów.Powinieneś zajrzeć do takich rzeczy, jak drzewa binarne itp., Jeśli potrzebujesz niestandardowego kodu, ogólne podejście byłoby podobne, niezależnie od platformy/języka, z którym pracujesz. –
Zawsze jest * szybszy sposób. Czy widzisz jednak opóźnienie w twoim interfejsie? Zrobiłem dokładnie to samo dla autouzupełniania (z mniejszą tablicą wejściową) i nie miałem widocznego opóźnienia, pomimo naiwnego algorytmu wyszukiwania. – kubi