Najszybszym sposobem na znalezienie przedmiotów z kolekcji dopasowane stan na członka smyczkową




Załóżmy, że mam kolekcję (może to być tablica, lista rodzajowe, czy cokolwiek jest **najszybszą** rozwiązanie tego problemu) z pewnej klasy, nazwijmy to `ClassFoo`:



```
class ClassFoo
{
    public string word;
    public float score;
    //... etc ...
} 

```

Załóżmy, że będzie jak 50.000 elementów w kolekcji, wszystko w pamięci. Teraz chcę uzyskać jak najszybciej wszystkich przypadkach w kolekcji, które przestrzegają warunku na jej członka bar, na przykład tak:



```
List<ClassFoo> result = new List<ClassFoo>();
foreach (ClassFoo cf in collection)
{
    if (cf.word.StartsWith(query) || cf.word.EndsWith(query))
        result.Add(cf);
}

```

Jak mogę uzyskać wyniki tak szybko, jak to możliwe? Należy wziąć pod uwagę kilka zaawansowanych technik indeksowania i datastructures?


Domena zgłoszenie tego problemu jest autocompleter, że dostaje zapytania i daje zbiór sugestii wyniku. Zakładamy, że warunek ten nie ma nic bardziej skomplikowane niż to. Zakładamy również, że nie będzie dużo wyszukiwań.
Z ograniczeniem, że klauzula warunek może być „coś”, to jesteś ograniczony do skanowania całą listę i stosując warunek.


Jeśli istnieją ograniczenia dotyczące klauzuli stan, wtedy można spojrzeć na organizowanie danych do bardziej efektywnie obsługiwać zapytań.


Na przykład, przykładowy kod z „byFirstLetter” słowniku nie pomaga w ogóle z „endswith” zapytania.


Więc tak naprawdę sprowadza się do tego, co pyta chcesz zrobić przed tymi danymi.


W bazach danych, problem ten jest ciężar „optymalizator zapytań”. W typowej bazy danych, jeśli masz bazę danych bez indeksów, oczywiście każde zapytanie będzie skan tabeli. Jak dodać indeksów w tabeli, optymalizator może użyć tych danych do bardziej wyrafinowanych zapytań planuje lepiej dostać się do danych. To w istocie problem, który opisujesz.


Gdy masz bardziej konkretny podzbiór typów kwerend następnie można zrobić lepszą decyzję, co struktura jest najlepsza. Ponadto, należy wziąć pod uwagę ilość danych. Jeśli masz listę 10 elementów każdy mniej niż 100 bajtów, skan wszystko może okazać się najszybciej, co można zrobić, ponieważ masz taką małą ilość danych. Oczywiście, że nie skaluje się do elementów 1M, ale nawet sprytnych technik dostępu nosić koszt w instalacji, konserwacji (jak utrzymanie indeksu) i pamięć.


**EDIT** , na podstawie komentarza


Jeśli jest to auto Nieukończenie, jeśli dane są statyczne, a następnie posortować je i używać przeszukiwanie binarne. Nie jesteś naprawdę dzieje się szybciej niż to.


Jeśli dane są dynamiczne, a następnie zapisać go w zrównoważonym drzewie, i szukać tego. To skutecznie wyszukiwanie binarne, a to pozwala zachować dodać dane losowo.


Coś jeszcze jest jakaś specjalność na tych pojęć.
<p>zamierzam opublikować to jako odpowiedź, wraz z odpowiednimi informacjami. podstawowe formuły to:</p><blockquote> <p>dostępne ram = bufory globalne + (bufory wątków x maks. połączenia)</p> <p>max\_connections = (dostępne ram - bufory globalne)/bufory wątków</p> </blockquote><p>aby uzyskać listę buforów i ich wartości:</p><pre><code>show variables like '%buffer%'; </code></pre><p>oto lista buforów i czy są one globalne czy wątkowe:</p><p><strong>bufory globalne</strong>: rozmiar\_buforu\_klucza, rozmiar\_w\_bufora\_wewnętrznego, rozmiar\_w\_bufera\_wymiaru, rozmiar\_wewnętrznego\_bufera\_wymiaru, rozmiar\_wewnętrznego\_bufera, rozmiar\_pamięci\_podstawowej</p><p><strong>bufory wątków</strong>: sort\_buffer\_size, myisam\_sort\_buffer\_size, read\_buffer\_size, join\_buffer\_size, read\_rnd\_buffer\_size, thread\_stack</p> Niech najpierw wprowadzą listę słówek. Szczerze mówiąc wykupiłam zamrożenie, ale jeszcze nie miałam okazji go przetestować, ale na wszelki wypadek jest w pogotowiu. Być może jest tak, że trzeba je wykupić wcześniej niż tego samego dnia, kiedy ma działać. W końcu jego idea jest taka, że jest to koło ratunkowe, kiedy np. nie masz internetu i masz wtedy 1 dzień na wykombinowanie czegoś. Zamrożenie trwa 24 godziny, od północy do północy wg strefy czasowej, w której byłeś kiedy zakładałeś konto. 


W każdym razie, polecam kupienie nauki na czas. Płaci się za to tylko raz, a zostaje na zawsze. Można też jednorazowo zdobyć 2x więcej punktów niż w normalnym trybie. A przede wszystkim wystarczy odpowiedzieć poprawnie na JEDNO pytanie, aby mieć zaliczoną naukę na dany dzień. Jeśli masz więc możliwość wejścia na Duolingo, równie dobrze możesz odpowiedzieć na jedno pytanie i nie wykorzystywać zamrożenia (które jednak warto mieć w zanadrzu na wszelki wypadek.


Mam trochę zbędnych lingotów, więc jeśli ktoś chciałby sobie kupić naukę na czas, to mogę dorzucić, tylko napiszcie ile potrzebujecie ;) jasne! łap najlepszego darmowego bota query [github - stalkerlifehack/qbot-your-teamspeak-automation: its an application for teamspeak servers.](https://github.com/stalkerlifehack/qbot-your-teamspeak-automation) <p>to rozwiązanie używa również <code>keep</code>, ale <code>val</code> i <code>kind</code> można również po prostu obliczyć dla każdej grupy bez podzapytania:</p><blockquote> <pre><code>select min(id) keep(dense\_rank first order by kind) id , val , min(kind) kind from mytable group by val; </code></pre> <pre> id | val | rodzaj -: | : | : 3 | 3 | 4 2 | 1337 | 1 </pre></blockquote><p><em> dbfiddle <a href="http://dbfiddle.uk/?rdbms=oracle\_11.2&amp;fiddle=3db08df2d9b684302b9460a818b35d8c">tutaj</a> </em></p><p>keep… first i keep… last to specyficzna dla oracle funkcja agregatów - możesz przeczytać o <a href="http://docs.oracle.com/cd/e11882\_01/server.112/e41084/functions065.htm#sqlrf00641">tutaj</a> w dokumentach oracle, lub <a href="https://oracle-base.com/articles/misc/rank-dense-rank-first-last-analytic-functions#first\_and\_last">na oracle\_base</a> :</p><blockquote> <p>funkcje pierwsza i ostatnia mogą być użyte do zwrócenia pierwszej lub ostatniej wartości z uporządkowanej sekwencji</p> </blockquote> zobacz po modyfikacjach. 
<https://www.morele.net/inventory/info/69defb3c/> Ja tez mam wszystko wykupione, według mnie powinno być więcej lekcji do do kupienia za lingoty **O:** Nie ma tajemnego przepisu na zadowolenie zleceniodawców, jednak poniższe wskazówki powinny pomóc Ci zwrócić na siebie uwagę zleceniodawców:
 1. **Uzupełnij swój profil w 100%.**. Pierwszą rzeczą, którą zleceniodawca może zrobić przeglądając Twoją ofertę będzie odwiedzenie Twojego profilu. Uzupełnij go w 100% i dodaj osobiste akcenty, żeby zrobić świetne pierwsze wrażenie.
2. **Upewnij się, że zlecenie jest dla Ciebie odpowiednie**. Możesz złożyć ofertę do jakiegokolwiek zlecenia w jakiejkolwiek kategorii, ale upewnij się, że Twoje umiejętności rzeczywiście odpowiadają wymaganiom zlecenia, w przeciwnym razie możesz jedynie stracić czas.
3. **Napisz wyróżniającą się ofertę**. 
 Dobrze napisana oferta jest jednym z najważniejszych czynników zdobywania zleceń. Potraktuj swoją ofertę jak rozmowę kwalifikacyjną, w której chcesz pokazać zleceniodawcy, że jesteś najlepszym kandydatem do wykonania jego zlecenia:
	* Dokładnie sprawdź wymagania: Z uwagą przeczytaj opis zlecenia. Jeśli zleceniodawca wyraźnie napisał, że potrzebuje fachowca o danym doświadczeniu, umiejętnościach i w określonej lokalizacji, zwróć na to uwagę. Pozwoli Ci to zaoszczędzić czas i wysiłek.
	* Dostosuj ofertę do opisu zlecenia: Twoja oferta powinna bezpośrednio dotyczyć problemów zleceniodawcy i jej treść nie powinna w żadnym wypadku być przeklejona z innej oferty. Oferta powinna odzwierciedlać to, że dokładnie przeczytałeś opis zlecenia, że w pełni rozumiesz wymagania i że posiadasz wszystkie umiejętności niezbędne do wykonania prac opisanych w zleceniu. Odpowiedz na wszelkie zapytania i tematy zawarte w opisie i zadaj pytania, które pomogą Ci doprecyzować szczegóły oferty. Pamiętaj, by nie spamować zleceniodawców!
	* Podkreśl swoje doświadczenie i umiejętności: Nie polegaj tylko na tym, że zleceniodawca odwiedzi Twój profil. W swojej ofercie podkreśl doświadczenie i umiejętności istotne dla pomyślnego wykonania zlecenia. Jeśli posiadasz przykłady wykonanych w przeszłości prac, które są szczególnie istotne, dołącz je do oferty. Upewnij się jednak, że przed zdobyciem zlecenia nie tworzysz specjalnie czegoś nowego na potrzeby oferty oraz że przykłady prac, które załączyłeś lub do których podałeś linki przedstawiają Twoją własną pracę. Pamiętaj również, by w ofercie nie podawać Twoich danych kontaktowych.
	* Bądź zwięzły: Twoja oferta powinna być zwięzła i jednocześnie zawierać wszystkie informacje istotne dla zlecenia. Oferty, które są zbyt długie lub zawierają dużo nieistotnych informacji oraz oferty za krótkie, które nie odpowiadają w pełni na problem zleceniodawcy są nie do przyjęcia.
	* Pisz poprawnie gramatycznie oraz profesjonalnie: Świetna oferta musi być dobrze napisana i wolna od błędów (użyj narzędzia do sprawdzania pisowni). Oferty napisane słabą polszczyzną sprawiają, że zarówno Ty jak i my wyglądamy nieprofesjonalnie, a oferta ma mniejsze szanse na zaakceptowanie.
	* Sprawdź swoją ofertę: Sprawdź błędy, nieścisłości i zgodność z opisem zlecenia. Upewnij się, że ofertę dobrze się czyta, że zawiera istotne informacje i odzwierciedla Twój entuzjazm. Zawsze ponownie przeczytaj swoją ofertę z perspektywy zleceniodawcy.
	* Przestrzegaj zasad: Podanie Twoich danych kontaktowych w ofercie jest niezgodne z naszymi [Warunkami korzystania](warunki-korzystania/#wk-warunki-skladania-ofert). Zleceniodawca otrzyma dostęp do Twoich danych kontaktowych tylko, gdy wpisze Cię na listę potencjalnych wykonawców. Przestrzegaj tej i innych ważnych zasad, gdy składasz oferty, aby uniknąć jakichkolwiek potencjalnych konsekwencji dla Twojego konta Goforpro. **O:** Nie ma tajemnego przepisu na zadowolenie zleceniodawców, jednak poniższe wskazówki powinny pomóc Ci zwrócić na siebie uwagę zleceniodawców:
 1. **Uzupełnij swój profil w 100%.**. Pierwszą rzeczą, którą zleceniodawca może zrobić przeglądając Twoją ofertę będzie odwiedzenie Twojego profilu. Uzupełnij go w 100% i dodaj osobiste akcenty, żeby zrobić świetne pierwsze wrażenie.
2. **Upewnij się, że zlecenie jest dla Ciebie odpowiednie**. Możesz złożyć ofertę do jakiegokolwiek zlecenia w jakiejkolwiek kategorii, ale upewnij się, że Twoje umiejętności rzeczywiście odpowiadają wymaganiom zlecenia, w przeciwnym razie możesz jedynie stracić czas.
3. **Napisz wyróżniającą się ofertę**. 
 Dobrze napisana oferta jest jednym z najważniejszych czynników zdobywania zleceń. Potraktuj swoją ofertę jak rozmowę kwalifikacyjną, w której chcesz pokazać zleceniodawcy, że jesteś najlepszym kandydatem do wykonania jego zlecenia:
	* Dokładnie sprawdź wymagania: Z uwagą przeczytaj opis zlecenia. Jeśli zleceniodawca wyraźnie napisał, że potrzebuje fachowca o danym doświadczeniu, umiejętnościach i w określonej lokalizacji, zwróć na to uwagę. Pozwoli Ci to zaoszczędzić czas i wysiłek.
	* Dostosuj ofertę do opisu zlecenia: Twoja oferta powinna bezpośrednio dotyczyć problemów zleceniodawcy i jej treść nie powinna w żadnym wypadku być przeklejona z innej oferty. Oferta powinna odzwierciedlać to, że dokładnie przeczytałeś opis zlecenia, że w pełni rozumiesz wymagania i że posiadasz wszystkie umiejętności niezbędne do wykonania prac opisanych w zleceniu. Odpowiedz na wszelkie zapytania i tematy zawarte w opisie i zadaj pytania, które pomogą Ci doprecyzować szczegóły oferty. Pamiętaj, by nie spamować zleceniodawców!
	* Podkreśl swoje doświadczenie i umiejętności: Nie polegaj tylko na tym, że zleceniodawca odwiedzi Twój profil. W swojej ofercie podkreśl doświadczenie i umiejętności istotne dla pomyślnego wykonania zlecenia. Jeśli posiadasz przykłady wykonanych w przeszłości prac, które są szczególnie istotne, dołącz je do oferty. Upewnij się jednak, że przed zdobyciem zlecenia nie tworzysz specjalnie czegoś nowego na potrzeby oferty oraz że przykłady prac, które załączyłeś lub do których podałeś linki przedstawiają Twoją własną pracę. Pamiętaj również, by w ofercie nie podawać Twoich danych kontaktowych.
	* Bądź zwięzły: Twoja oferta powinna być zwięzła i jednocześnie zawierać wszystkie informacje istotne dla zlecenia. Oferty, które są zbyt długie lub zawierają dużo nieistotnych informacji oraz oferty za krótkie, które nie odpowiadają w pełni na problem zleceniodawcy są nie do przyjęcia.
	* Pisz poprawnie gramatycznie oraz profesjonalnie: Świetna oferta musi być dobrze napisana i wolna od błędów (użyj narzędzia do sprawdzania pisowni). Oferty napisane słabą polszczyzną sprawiają, że zarówno Ty jak i my wyglądamy nieprofesjonalnie, a oferta ma mniejsze szanse na zaakceptowanie.
	* Sprawdź swoją ofertę: Sprawdź błędy, nieścisłości i zgodność z opisem zlecenia. Upewnij się, że ofertę dobrze się czyta, że zawiera istotne informacje i odzwierciedla Twój entuzjazm. Zawsze ponownie przeczytaj swoją ofertę z perspektywy zleceniodawcy.
	* Przestrzegaj zasad: Podanie Twoich danych kontaktowych w ofercie jest niezgodne z naszymi [Warunkami korzystania](../warunki-korzystania/#wk-warunki-skladania-ofert). Zleceniodawca otrzyma dostęp do Twoich danych kontaktowych tylko, gdy wpisze Cię na listę potencjalnych wykonawców. Przestrzegaj tej i innych ważnych zasad, gdy składasz oferty, aby uniknąć jakichkolwiek potencjalnych konsekwencji dla Twojego konta Goforpro. Klikajac Cwicz tematy cwiczysz wszystkie tematy których siła obniżyła się.... a wiec losuje ci z kazdego po kilka zdan abys nadrobil zaległości z całego już wyuczonego materiału... jesli zależy Ci na szybszym przecwiczeniu konkretnego tematu to wtedy mozesz wybrać pojedyncza lekcje...