matematykaszkolna.pl
c++ Gobi: Mam listę posortowaną i przez wyszukiwanie połówwkowe chce policzyć ilość ruchów do znalezienia określonej liczby w tm zbiorze. Jak zaimplementowac ten problem w c++
26 maj 07:51
g: ta liczba nie przekracza log2N, gdzie N to długość listy. Jeśli chcesz wiedzieć dokładnie dla określonego miejsca listy, to trzeba po prostu wykonać to przeszukiwanie i policzyć kroki.
26 maj 12:05
jc: Jeśli to prawdziwa lista, to nie ma znaczenia, czy jest posortowana, czy nie (chyba, że szukanego elementu nie ma na liście). średnia liczba pytań = (liczba elementów)/2 Jak sobie wyobrażasz wyszukiwanie połówkowe? Jak znajdziesz środek?
26 maj 12:25
Gobi: założmy że mam [1 2 3 4 5] i chcę wyszukać 5 i chodzi o ilość ruchów
26 maj 12:30
jc: Jak zaczniesz od lewej strony, to na 5 trafisz dopiero na końcu. Jak zaczniesz od prawej, to od razu masz 5.
26 maj 12:33
Gobi: nie umiem tego napisć w c++
26 maj 13:14
jc: Czy na pewno takie było polecenie? Czy zostało użyte słowo lista, czy tablica? Listę możemy przeglądać tylko element po elemencie od jednego końca do drugiego.
26 maj 13:32
Gobi: lista uporzadkowana od najmniejszej do największej liczby
26 maj 13:48
Gobi: nikt nie pomoze?
26 maj 14:23
Gobi: http://www.iii-lo.tarnow.pl/informatyka/ladustrone.php?p1=informatyka&p2=40 chodzi o taki program jak tu tylko. Chodzi mi o zadnie 2: Aby podany algorytm zwracał informację liczbie wykonanych kroków.
26 maj 15:01
jc: Dopisz coś takiego: while(Lewy<=Prawy){ kroki ++; .... return s + " Liczba krokow = " + (kroki).ToString();
26 maj 15:31
Adamm: jc, mam pytanie, nie w temacie jeśli mam jakieś równanie x1+x2+x3=9 (np.) i mam na xi jakieś ograniczenia, załóżmy 0≤x1≤3, 1≤x2≤9, 5≤x3≤8, to jak mogę znaleźć rozwiązania takiego równania w liczbach całkowitych za pomocą funkcji tworzących?
26 maj 15:37
Gobi: A jak tu dopisć aby pokazywał te kroki: #include<iostream> using namespace std; int main() { int tablica[6] = { 7,9,13,23,89,666 }; int liczba, n = 6, l, p, s; cout << "Podaj jaki element znalezc: "; cin >> liczba; l = 0; p = n−1; while (true) { if (l > p) { cout << "Nie odnaleziono szukanego elementu" << endl; break; } s = (l+p)/2; if (tablica[s] == liczba) { cout << "Odnaleziono liczbe " << liczba << " pod indeksem " << s+1 << endl; break; } else if (tablica[s] < liczba) l = s+1; else p = s−1; } return 0; }
26 maj 15:46
Gobi: jak to zrobic?
26 maj 16:27
Gobi: ok juz wiem
26 maj 16:32
Gobi: nie jednak nie wiememotka
26 maj 16:49
Gobi: Nikt nie wie
26 maj 20:47
PDG: https://forum.pcformat.pl/Programowanie-f http://cpp0x.pl/forum/ Spróbuj jak nie tutaj, to na tamtych forach. Tam jest więcej informatyków co mogą pomóc.
26 maj 21:19
jc: int main() { int tablica[6] = { 7,9,13,23,89,666 }; int liczba, n = 6, l, p, s, k; cout << "Podaj jaki element znalezc: "; cin >> liczba; l = 0; p = n−1; k = 0; while (true) { k++; if (l > p) { cout << "Nie odnaleziono szukanego elementu" << endl; break; } s = (l+p)/2; if (tablica[s] == liczba) { cout << "Odnaleziono liczbe " << liczba << " pod indeksem " << s+1 << endl; break; } else if (tablica[s] < liczba) l = s+1; else p = s−1; } cout << "Liczba krokow = " << k << endl; return 0; }
26 maj 21:40
Gobi: Niestety za duzo o 1 liczy liczbe kroków jak nie ma go w tablicy
26 maj 23:13
jc: Przenieś k++ tam, gdzie uważasz. Skąd mam wiedzieć, czym dla Ciebie jest krok?
26 maj 23:27
Gobi: np gdy mamy [1 2 4] i szukamy 3 1 krok środkowa liczba to dwa więc 2<3 wiec zostało do zbadania [1] 2 krok 3>1 wiec nie ma tam liczby 3 czyli krok=2
26 maj 23:36
Gobi: ok ju wiem chyba emotka
26 maj 23:55