Wyszukiwanie interpolacyjne w posortowanej tablicy stringów

0

Witajcie,

Mam tablicę której elementami są struktury zawierające char[32]. Jeśli wzór na wyznaczenie przewidywanego środka tablicy polega na operacjach arytmetycznych na pierwszym i ostatnim elemencie tablicy (jakoś tak, ale nie tylko) to w takim wypadku jak mam wykonywać arytmetykę na stringu? Był na forum w innym temacie post, że uznać jak by string był liczbą w 256 (jak to odmienić?) systemie pozycyjnym. Tylko jak bym chciał to zamienić na integer to braknie sporo miejsca. W końcu 256^32 to jest dość duża liczba.

1

Nie do końca rozumiem co właściwie chcesz zrobić.
Ale.. Jak chcesz koniecznie interpretować string o stałej długości jako liczba, to możesz zrobić to naprzykład tak.

 
#include <iostream>
struct cchar_as_struct
{
	
	long long int a;
	long long int b;
	long long int c;
	long long int d;
	
	bool operator == (const cchar_as_struct &rhs)
	{
		if(rhs.a == a && rhs.b == b && rhs.c == c && rhs.d == d)
			return true;
		else
			return false;
	}
	
} __attribute__ ((packed));  // (O ile kompilujesz GCC, to żeby nie paddingował)

int main()
{
	char a[32] = {"jakis tekst"};
	char b[32] = {"jakos tekst"};
	
	cchar_as_struct str = *((cchar_as_struct*)&a);
	cchar_as_struct st1 = *((cchar_as_struct*)&b);
	
	if(str == st1)
		std::cout << "Rowne";
	else
		std::cout << "Nie rowne!";
	
	return 0;
}

0

@Proxima, chodzi mi o to, że jak mam wzór na c w https://pl.wikipedia.org/wiki/Wyszukiwanie_binarne#Wyszukiwanie_interpolacyjne to tam trzeba robyć arytmetykę na X, Xa i Xb, a w moim przypadku to są string. I nie wiem co z tym zrobić. Czy traktować to jako 256-tkowy pozycyjny system liczbowy i programowo robić arytmetyke czy jako kilka liczb 8bajtowych.

0

Dla kilku tysięcy plików to IMO bez sensu.
Ale jak koniecznie chcesz zobaczyć jak to wyjdzie to możesz spróbować interpolować pojedynczo po znakach (lub 2,4,8...)
W sensie, że najpierw interpolujesz po pierwszym.
Jeśli pierwsze są takie same (a stringi dalej różne) to po drugim.
I tak do ostatniego.

0

Był na forum w innym temacie post, że uznać jak by string był liczbą w 256 (jak to odmienić?) systemie pozycyjnym.

Dwieściepięćdziesięcioszóstkowym.
Ale to chyba nie jest dobre rozwiązanie w twoim przypadku.

1

IMO źle postawiane pytanie.
Zacznij od opisania problemu jaki chcesz rozwiązać, a dopiero potem opisz JAK chcesz go rozwiązać.
Według mnie skupiłeś się na opisie JAK rozwiązać nieznany problem i przez to nie wiadomo o co dokładnie ci chodzi i podejrzewam, że twój pomysł na JAK jest zły (tego nie da się stwierdzić bo ani słowem nie opisujesz CO próbujesz rozwiązać).

Patrząc w komentarze w innej odpowiedzi mam rację. Źle się za to zabierasz.

1 użytkowników online, w tym zalogowanych: 0, gości: 1