Implementácie

Fibbonacciho vyhµadávanie

 
 
//fibbonachiho vyhladavanie zadaneho prvku "hladany"
//pole "pole" s poctom prvkov "velkost" musi byt usporiadane vzostupne 
//(na zaciatku pola je prvok s najmensou hodnotou)
//funkcia vracia index zadaneho prvku v poli (v pripade neuspechu vyhladavania vracia -1)
int najdi_fib_index(int* pole, int velkost, int hladany){
	int fib_pole[MAX_DLZKA_FIB_RADU];
	fib_pole[0]=0;
	fib_pole[1]=1;
	int index=1;
	while(index < MAX_DLZKA_FIB_RADU && fib_pole[index] < velkost) {
		index++;
		fib_pole[index] = fib_pole[index-2] + fib_pole[index-1];
	}
	int i=fib_pole[index-1];
	int p=fib_pole[index-2];
	int q=fib_pole[index-3];

	if (i==0) return -1;
	while(true){
		if (pole[i-1]==hladany) return i-1;
		else if (pole[i-1] < hladany) {
			if (p==1) return -1;
			else {
				i=i+q; 
				p=p-q; 
				q=q-p;
			}
		}
		else {
			if (q==0) return -1;
			else {
				i=i-q;
				int t=p; 
				p=q; 
				q=t-q;
			}
		}
	}
}
 
//fibbonachiho vyhladavanie zadaneho prvku "hladany"
//pole "pole" s poctom prvkov "velkost" musi byt usporiadane vzostupne 
//(na zaciatku pola je prvok s najmensou hodnotou)
//funkcia vracia logicku premennu (ak sa zadany prvok v poli nachadza true, inak false)
bool najdi_fib_bool(int* pole, int velkost, int hladany){
	int fib_pole[MAX_DLZKA_FIB_RADU];
	fib_pole[0]=0;
	fib_pole[1]=1;
	int index=1;
	while(index < MAX_DLZKA_FIB_RADU && fib_pole[index] < velkost) {
		index++;
		fib_pole[index] = fib_pole[index-2] + fib_pole[index-1];
	}
	int i=fib_pole[index-1];
	int p=fib_pole[index-2];
	int q=fib_pole[index-3];

	if (i==0) return false;
	while(true){
		if (pole[i-1]==hladany) return true;
		else if (pole[i-1] < hladany) {
			if (p==1) return false;
			else {
				i=i+q; 
				p=p-q;
				q=q-p;
			}
		}
		else {
			if (q==0) return false;
			else {
				i=i-q;
				int t=p;
				p=q;
				q=t-q;
			}
		}
	}
}