![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 651 Pomógł: 116 Dołączył: 3.06.2012 Skąd: Lędziny Ostrzeżenie: (0%) ![]() ![]() |
mam tablicę:
oraz liczbę: 22 Jak zmusić php, aby wskazał mi, w którym miejscu w tablicy ($array) leży przedział do którego zalicza się ta liczba 22? Obecnie ta liczba mieści się w przedziale 18 - 24 ponieważ jest większa od 18, ale mniejsza od 24. Mam wielką nadzieję, że jest możliwość sprawdzenia tego, nie lecąc liczba po liczbie w tablicy $array, np. pętlą foreach() (IMG:style_emoticons/default/sad.gif) Dzięki. Ten post edytował Michael2318 31.03.2013, 19:50:11 |
|
|
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 164 Pomógł: 9 Dołączył: 30.12.2011 Ostrzeżenie: (0%) ![]() ![]() |
1. Tablica zawsze jest posortowana czy niekoniecznie?
2. Jak w takim razie chcialbys sprawdzic czy liczba jest wieksza od najwiekszej liczby wystepujacej przed nia? Musisz przeiterowac tablice, zeby znalezc odpowiedni wynik. W kazdym razie jakie rozwiazanieby nie bylo, i tak PHP poleci liczba po liczbie (IMG:style_emoticons/default/smile.gif) |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 651 Pomógł: 116 Dołączył: 3.06.2012 Skąd: Lędziny Ostrzeżenie: (0%) ![]() ![]() |
Tak, tablica zawsze będzie posortowana w taki sposób, jaki zademonstrowałem.
mam już dwie pętle for, nie widzi mi się wrzucanie tam trzeciej pętli bo to będzie mało optymalne :/ Sprawdzanie czy liczba jest największa lub najmniejsza już z głowy:
Ale nie wiem co dalej, jak dalej szukać tego przedziału ;/ PS. Wyżej akurat zrobiłem tak, że jeśli liczba wykracza poza przedział to przypisana zostaje wartość największa (na przykładzie będzie to 36), a jesli jest znów mniejsza bądź równa liczbie najmniejszej z tablicy to właśnie ta najmniejsza liczba zostanie przypisana do zmiennej. |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 164 Pomógł: 9 Dołączył: 30.12.2011 Ostrzeżenie: (0%) ![]() ![]() |
Jesli chodzi o optymalnosc, dalbym tam petle while, ktore sa szybsze.
Jesli chodzi o moje rozwiazanie, kodu nie dam, ale zrob tak: - edit, a zapomnialem, zanim zaczniesz cokolwiek, wstaw to w funkcje i jezeli po pierwszej petli nie znajdzie wyniku to zwroc false - zacznij iterowac od konca tabeli i idz do poczatku dopoki nie znajdziesz liczby mniejszej od Twojej, - gdy znajdziesz, zapisz index elementu tablicy do zmiennej - robisz kolejna petle, w ktorej szukasz pierwszej liczby wiekszej od podanej, - gdy znajdziesz, zapisujesz index elementu do innej zmiennej - na koncu wypisujesz sobie indexy, wartosci, czy co tam chcesz. Ten post edytował artuross 31.03.2013, 20:10:33 |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 651 Pomógł: 116 Dołączył: 3.06.2012 Skąd: Lędziny Ostrzeżenie: (0%) ![]() ![]() |
Prościej już chyba lecieć po kolei, jak znajdę w końcu liczbę większą od mojej to pobieram index tej liczby (to będzie liczba domykająca przedział). Index liczby otwierającej przedział będzie x-1, więc nawet nie trzeba szukać drugi raz (IMG:style_emoticons/default/smile.gif)
Liczyłem po prostu że php udostępnia jakąś funkcję czy coś, co ułatwi mi szukanie 'od podstaw', no ale trudno. Dzięki (IMG:style_emoticons/default/smile.gif) Ten post edytował Michael2318 31.03.2013, 20:16:01 |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 164 Pomógł: 9 Dołączył: 30.12.2011 Ostrzeżenie: (0%) ![]() ![]() |
Aha, to te tablice nawet maja juz gotowe przedzialy...
|
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 1 045 Pomógł: 141 Dołączył: 19.09.2006 Skąd: B-tów Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
1. Ile jest elementów w takiej tablicy? Ponieważ przy liczbie kilki-kilkudziesięciu elementów nie ma nawet co sobie zawracać głowy "optymalnością".
2. Jeżeli tych elementów może być więcej, zainteresuj się tzw. wyszukiwaniem binarnym. Oczywiście tutaj musiałbyś dostosować algorytm tak by szukał przedziału, nie konkretnej wartości. Rozwiązanie to daje Ci złożoność obliczeniową rzędu O(log2n) w przeciwieństwie do zwykłego przelecenia tablicy pętlą o złożoności O(n) |
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 651 Pomógł: 116 Dołączył: 3.06.2012 Skąd: Lędziny Ostrzeżenie: (0%) ![]() ![]() |
OK, dzięki panowie. Dałem radę (IMG:style_emoticons/default/smile.gif)
|
|
|
![]() ![]() |
![]() |
Aktualny czas: 5.10.2025 - 13:55 |