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
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 wiem
26 maj 16:49
Gobi: Nikt nie wie
26 maj 20:47
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
26 maj 23:55