Hirdetés

2024. május 4., szombat

Gyorskeresés

Hozzászólások

(#3101) ArchElf válasza hruodnand (#3099) üzenetére


ArchElf
addikt

Ha tényleg az optimalizáció vágta ki, akkor a fordítónak kutya kötelessége minél gyorsabb és rövidebb kód gyártása (ha úgy állítottad be) - a nem kívánt kódrészeket meg ugye a fordító nyugodtan "kioptimalizálhatja" a kódból...
Próbáld meg úgy fordítani, hogy a kódban kezdesz is valamit a tömbök adataival...

AE

Csinálok egy adag popcornt, és leülök fórumozni --- Ízlések és pofonok - kinek miből jutott --- Az igazi beköpőlégy [http://is.gd/cJvlC2]

(#3102) kispx válasza Jester01 (#3098) üzenetére


kispx
addikt

De akkor miért nullázza ki az egyiket és miért nem a másikat? Főleg, hogy ha a két változódeklarálást felcserélem akkor pont a másikat nem nullázza ki, azaz mindig a második tömb az inicializálatlan.

(Megjegyzem a MinGW ritkán fent nálam, most is csak azért mert beadandót kell készíteni, szóval nem ismerem ezt a fordítót)

Egyébként ott a pont :)

(#3103) hruodnand válasza ArchElf (#3101) üzenetére


hruodnand
senior tag

Csak, azt nem értem, hogy használom, mert ha debugoltok, akkor az u3-as tömbbel dolgozik a program. :U Szóval 0-val kellene dolgoznia.

(#3104) Jester01 válasza kispx (#3102) üzenetére


Jester01
veterán

Mondjuk azért mert egyiket sem nullázza ki, csak a memória egy része véletlen pont nulla. Attól függően melyik tömb kerül oda, lesz nulla vagy nem.

hruodnand: ami kódot mutattál az csak írja a tömböt. Tehát mindegy mi a kezdőértéke. A debuggolásról meg a fordító előre nem tud.

[ Szerkesztve ]

Jester

(#3105) ArchElf válasza Jester01 (#3104) üzenetére


ArchElf
addikt

Pontosabban a rendes fejlesztő-környezetek a debug-módba való fordításnál nem szokták szokták engedélyezni az (ilyen szintű) optimalizációt...

AE

Csinálok egy adag popcornt, és leülök fórumozni --- Ízlések és pofonok - kinek miből jutott --- Az igazi beköpőlégy [http://is.gd/cJvlC2]

(#3106) hruodnand válasza Jester01 (#3104) üzenetére


hruodnand
senior tag

Igen, de nekünk vizsgán debuggolással kell igazolni, hogy működik a program rendesen. Na most, ha nem ad nekem kezdőértéket, amit ugye beállítok, akkor onnantól kezdve karó! Szóval nincs benne printf, meg ilyenek. Csak debuggolás. Windows alatt ugye nem ad értéket, gondolom az előbb említett fordítóbeli különbségek miatt, de Linux alatt meg ad. :U

Gondolom, "az csak írja a tömböt" alatt, azt értetted, hogy nem fogok kiíratni az értékét :U

[ Szerkesztve ]

(#3107) Jester01 válasza ArchElf (#3105) üzenetére


Jester01
veterán

Igen, lehet hogy az egész arról szól, hogy a kolléga elfelejtette kikapcsolni az optimalizációt.

hruodnand: úgy értettem, hogy ha a program működése szempontjából lényegtelen a kezdőérték, akkor a fordítónak nem muszáj nulláznia.

Mellesleg aggresszívabb optimalizáció mellett (linuxon!) az egész ciklus eltűnik a fenébe tömböstül mindenestül - mivel nincs használva. Ellenőrizd az optimalizációs beállításokat.

[ Szerkesztve ]

Jester

(#3108) hruodnand válasza Jester01 (#3107) üzenetére


hruodnand
senior tag

Értem, köszönöm. :) Akkor ennek jobban utána járok!

(#3109) kispx válasza Jester01 (#3104) üzenetére


kispx
addikt

Nem, csak az egyiket nullázza ki.

Úgy, hogy nincs optimalizáció

(#3110) hruodnand válasza kispx (#3109) üzenetére


hruodnand
senior tag

Az tény, hogy nekem sincs semmilyen optimalizáció bekapcsolva ezeken a füleken. :U

(#3111) Jester01 válasza kispx (#3109) üzenetére


Jester01
veterán

Érdekes (bár továbbra sem hiba). A codeblocks alatt is gcc van, ugye? Milyen verzió?

Jester

(#3112) hruodnand válasza Jester01 (#3111) üzenetére


hruodnand
senior tag

4.4-es van Ubuntu és Windows alatt is.

(#3113) kispx válasza Jester01 (#3111) üzenetére


kispx
addikt

Konkrétan MinGW van alatta. A verziója
mingw32-gcc.exe (TDM-2 mingw32) 4.4.1

(#3114) kispx válasza kispx (#3113) üzenetére


kispx
addikt

Viszont nem optimalizációs hiba, mert ha adunk neki egy -O vagy egy -Os -et akkor az egész kódot "eltünteti". Legalábbis debugger alatt semmilyen változó nem látszik, és a debugnál ha a next line-ra kattintok, akkor a program végéhez ugrik.

(#3115) Jester01 válasza kispx (#3113) üzenetére


Jester01
veterán

Nekem 4.2.1 van, az látszólag nem csinálja ezt.

MOD: felraktam 4.4.4-et az se. Igaz mind a kettő cross-compiler, de mingw.

[ Szerkesztve ]

Jester

(#3116) modder válasza hruodnand (#3110) üzenetére


modder
aktív tag

Helló,

próbálj meg eléjük rakni volatile kulcsszót. ha fv-en belül nem engedi, akkor globális namespace-ben deklaráld. illetve az u1 és u3-as tömböt írasd ki a program futása végén, hogy használva legyen. Szerintem így már nem fogja kioptimalizálni.

(#3117) hruodnand válasza modder (#3116) üzenetére


hruodnand
senior tag

volatile -al már jó! :R Köszönöm.

(#3118) Jester01 válasza hruodnand (#3117) üzenetére


Jester01
veterán

Eddig is "jó" volt, még mindig nem láttam olyan kódot ami rosszul működött volna.

Mostantól viszont minden egyes írás/olvasás a memóriába megy, akár optimalizálsz akár nem (megkötötted a fordító kezét). Ez jelen helyzetben gondolom nem probléma, de azért ezt ne tanuld meg. Azt viszont tanuld meg, mit csinál a volatile, hátha megkérdezik miért tetted oda ;)

Jester

(#3119) hruodnand válasza Jester01 (#3118) üzenetére


hruodnand
senior tag

Köszönöm! :) Pont most van a laborom és sikerült egy 5-öst szerezni.

Bitoperátoros, tömbös, ciklusos (elől-hátul tesztelős) vegyes felvágott program volt, sok kritériummal.
Sikerült. :)

(#3120) modder válasza Jester01 (#3118) üzenetére


modder
aktív tag

Én sem voltam tisztában a volatile kulcsszó hatásáról belső működésben, csak azzal, hogy mire használják.

Szóval igen, ebben az esetben debuggolásnál hasznodra válik majd, de ne szokd meg a használatát. Lehet, hogy jobb, ha valamilyen formában kiírod az outputra a tömböket. akkor nyilván békén hagyja a tömböket, mert tudni fogja, hogy szükség van rájuk.

(#3121) kmisi99


kmisi99
addikt

Szeretnék c-t tanulni kicsit komolyabban mit ajánlanátok iskolán kívül? Most az iskolába C-t tanulok de hát semmit se tudok max ilyen tömb feltöltés stb az alapismereteim nagyon rosszak és az egyik tanárom se tanít a leg fényesebben így önerőből szeretnék fejlődni ha lehet mert így eléggé le vagyok maradva jópár oszt társammal együtt (2 csoport van az egyik semmit nem tud programozni a másik meg egész jó én a rosszabba vagyok)

(#3122) modder válasza kmisi99 (#3121) üzenetére


modder
aktív tag

én azt ajánlom, hogy gyakorolj :D

itt rengeteg forrást találsz, sok gyakorlati példát.
http://infoc.eet.bme.hu/

[ Szerkesztve ]

(#3123) artiny


artiny
őstag

C - Mi történik ha egy tömbre mutató pointner értékét eggyel növelem, majd kiíratom?
Mi történik ha egy tömbre mutató pointner értékét eggyel növelem,majd kiíratom .Ezután egy új értéket adok a tömbnek.

Szerintem:
Ha eggyel növelem a mutatót eggyel tovább ugrik a memóriában ahol el van mentve a pointner.

Ha új értéket adok utána - nos nem tudom ,uj értéket adtam a pointernek,de nem változott meg az értéke teljesen - maradt a régi értékéből és az újból is ? de viszont a memoria cime nem változott a pointernak

#include <stdio.h>
#include <conio.h>

int main()

{

char str1[ ] = "abc";
char *p;
p = str1;
printf("1. ertek{pointnera}: %p\n",p);
printf("1. ertek{pointnera}: %s\n\n",p);
p++;
printf("2. ertek{pointnera}: %p\n\n",p);

*p='df';
printf("uj erteke : %s\n",p);
printf("uj erteke: %p\n\n",p);

return 0;
}

(#3124) modder válasza artiny (#3123) üzenetére


modder
aktív tag

Szerintem:
Ha eggyel növelem a mutatót eggyel tovább ugrik a memóriában ahol el van mentve a pointner.

Nem egyel tovább ugrik a memóriában, ahol el van mentve a pointer, hanem:
A pointer értéke (egy memória cím, egy szám) nő annyival, ahány byte-os az adatstruktúra, amire a pointert deklaráltad.

Ha új értéket adok utána - nos nem tudom ,uj értéket adtam a pointernek,de nem változott meg az értéke teljesen - maradt a régi értékéből és az újból is ? de viszont a memoria cime nem változott a pointernak

Nem a pointernek adtál új értéket, hanem annak a memóriának, amire mutat a pointered.

A programod elvileg azt csinlája, hogy 'b'-t kicseréli 'd'-re (gondolom az f az csak elírás, mert aposztrófok közé csak karaktert lehet írni)

(#3125) kingabo válasza artiny (#3123) üzenetére


kingabo
őstag

Ne stringgel teszteld, vagy ha azzal, akkor karakterként irasd ki, illetve írd a végére a string lezáró \0 karaktert is. Egy int tömbbel sokkal látványosabb a dolog.
Az elmélethez: azt is érdemes megmondani, hogy mi történik, ha egy n elemű tömb n+1-edik elemére hivatkozol/írod. ;)

(#3126) Coconut's


Coconut's
csendes tag

Sziasztok!
Lenne egy kis problémám, C kóddal szeretnék törölni egy .txt fájlból sorokat, amiket a programban kérek be, változókba. Az első hiba, hogy amikor átmeneti fájlba másolok, egymás után rakja a sorokat, nem új sorba, tehát 1 sorban lesz az egész, +hát ugye a törlés sem működik, itt a kód, amire jutottam eddig, köszönöm szépen a segítségeket előre is!

void torol(MUSIC zene, FILE *f)
{
fflush(stdin);

char celpont1, celpont2, celpont3, celpont4;
char s[10]="";

printf("Add meg, melyik eloado zenejet szeretned torolni!");
fgets(&celpont1,MAX_STR,stdin);
printf("Add meg, melyik szerzo zenejet szeretned torolni!");
fgets(&celpont2,MAX_STR,stdin);
printf("Add meg, milyen hosszusagu zenet szeretnel torolni!");
fgets(s,99,stdin);
celpont3=atoi(s);
printf("Add meg, melyik mufaju zenet szeretned torolni!");
fgets(&celpont4,MAX_STR,stdin);

FILE *tmp = fopen("tmp.txt", "wb");

// Másolás az átmeneti fájlba
char tmp2[TMP];

do
{
tmp2[TMP] = getc(f);
if(tmp2 == &celpont1 || tmp2 == &celpont2 || tmp2 == &celpont3 || tmp2 == &celpont4)
{
fprintf(tmp, " ");
}
putc(tmp2[TMP], tmp);
}while(!feof(f));
// Visszamásolás
do
{
tmp2[TMP] = getc(tmp);
putc(tmp2[TMP], f);

}while(!feof(tmp));

fclose(tmp);
}

Ui.: Az f file-t miután visszatér az eljárásból, ott zárom be(a main()-ben), az f-ben vannak a sorok beolvasva így:
adat1 // char típusú(előadója)
adat2 // char típusú(szerzője)
adat3 // int típusú(hossza)
adat4 // char típusú(műfaja)

Ez egy zeneszámos progi, 4 adat vonatkozik 1 zenére, de ez végülis nem számít, mert a sorokat egyenként is tudom törölni, mert 4 külön változóba kérem be a sorok tartalmát. Az első probléma mindenképpen az, hogy nem rak új sorokat a tmp fájlba másoláskor, pedig az f-ben úgy vannak.

(#3127) Chipi333 válasza Coconut's (#3126) üzenetére


Chipi333
csendes tag

Nem vagyok nagy C-s, de valszeg a beolvasás lenyeli a sorvégét, azt most nem tudnám megmondani ezzel mit kell művelni.
A torlés viszont azért nem megy szerintem, mert az if-esle nek lefelejtetted az else ágát és a sort mindenképpen kiírod az átmeneti fájlba.

if(tmp2 == &celpont1 || tmp2 == &celpont2 || tmp2 == &celpont3 || tmp2 == &celpont4)
{
fprintf(tmp, " ");
}
else
{
putc(tmp2[TMP], tmp);
}

Szóval ezt így kéne.

[ Szerkesztve ]

(#3128) Jester01 válasza Chipi333 (#3127) üzenetére


Jester01
veterán

Továbbá stringeket nem a címükkel hasonlítunk össze, hanem mondjuk strcpy-vel.

Jester

(#3129) Chipi333 válasza Jester01 (#3128) üzenetére


Chipi333
csendes tag

Thx, valóban :) De az strcpy az a másolás, összehasonlítás az strcmp.

(#3130) Jester01 válasza Chipi333 (#3129) üzenetére


Jester01
veterán

Huppsz, valóban :B

Jester

(#3131) Coconut's válasza Chipi333 (#3127) üzenetére


Coconut's
csendes tag

Köszönöm szépen a segítséget, és Jester01-nek is, de sajnos nem jöttem rá még, hogy miért rakja egy sorba a dolgokat az átmeneti fájlban. Valahogy ez a törlés nem fekszik nekem, itt a jelenlegi kódom, az észrevételeket szívesen fogadom továbbra is, és köszi előre is:)

void torol(MUSIC zene, FILE *f)
{
fflush(stdin);

char celpont1, celpont2, celpont3, celpont4;
char s[10]="";

printf("A torles funkciot hasznalod, a kovetkezokben add meg, pontosan melyik zenet szeretned torolni!\n");
system("pause");
printf("Add meg, melyik eloado zenejet szeretned torolni!");
fgets(&celpont1,MAX_STR,stdin);
printf("Add meg, melyik szerzo zenejet szeretned torolni!");
fgets(&celpont2,MAX_STR,stdin);
printf("Add meg, milyen hosszusagu zenet szeretnel torolni!");
fgets(s,99,stdin);
celpont3=atoi(s);
printf("Add meg, melyik mufaju zenet szeretned torolni!");
fgets(&celpont4,MAX_STR,stdin);

FILE *tmp = fopen("tmp.txt", "wb");

/*// Másolás az átmeneti fájlba
char tmp2;

while(!feof(f))
{
tmp2 = getc(f);
if(strcmp(tmp2, celpont1) != 0 || strcmp(tmp2, celpont2) != 0 || strcmp(tmp2, celpont3) != 0 || strcmp(tmp2, celpont4) != 0)
{
fprintf(tmp, " ");
}
else{
putc(tmp2, tmp);
};
}
// Visszamásolás
while(!feof(tmp))
{
tmp2 = getc(tmp);
putc(tmp2, f);
}; */


fclose(tmp);
}

[ Szerkesztve ]

(#3132) Jester01 válasza Coconut's (#3131) üzenetére


Jester01
veterán

A celpont illetve tmp2 változóid mind csak 1 karakterek, azokba nem nagyon tudsz fgets-sel hosszabb szövegeket beolvasni.

Jester

(#3133) shinodas


shinodas
tag

Sziasztok!
Egy egyszerű kis programocskát írok, és lenne egy olyan problémám, hogy van két tömbböm, össze akarom hasonlítani őket, egy ciklusban. Az egyes elemeket. Na, szóval 6 elemű a tömb, de csak 5 elemet akar nekem vizsgálni. A tömbbök jól vannak feltöltve, és már ötletem elfogyott, valaki segítsen mán ki :R
#include <stdio.h>
#include <stdlib.h>

int main()
{
int tomb_user[5]; //tomb_user tippje tömbbe alakítva
int tipp=0; //tomb_user tippje
int i=0; // tömb indexek
int j=0;
srand(time(NULL)); //random számhoz kell
int tomb[5]; //random számokat ide töltöti

while(i<6) //feltöltöm a tömbböt
{
tomb[i]=rand()%9; //%9 az a limit
i++;
}

for(i=0;i<6;i++) printf("%d ", tomb[i]);

//adatok bekérése
printf("Kerek egy tippet, hat darab szamot: ");
scanf("%d", &tipp);
if(tipp>999999){
printf("Hat szamjegyet adjon meg!\n");
printf("Kerek egy tippet, hat darab szamot: ");
scanf("%d", &tipp);
}

//user tipp tombbe alakítása
tomb_user[0]=tipp/100000;
tomb_user[1]=tipp%100000/10000;
tomb_user[2]=tipp%100000%10000/1000;
tomb_user[3]=tipp%100000%10000%1000/100;
tomb_user[4]=tipp%100000%10000%1000%100/10;
tomb_user[5]=tipp%100000%10000%1000%100%10;

//===megvizsgálom az egyes elemeket
printf("\nTalálat: ");
i=j=0;
for(i=0;i<6;i++)
{
if(tomb[i]==tomb_user[j]) {printf("H " );}
j++;

}

return 0;
}

[ Szerkesztve ]

(#3134) Korcsii válasza shinodas (#3133) üzenetére


Korcsii
őstag

Nem tudom feltűnt-e, de 5 elemű tömböket hozol létre, és mindenhol 6 elemet akarsz belőle használni - mondjuk azt nem értem, hogy miért nem dob erre semmilyen warningot.

[ Szerkesztve ]

(#3135) shinodas válasza Korcsii (#3134) üzenetére


shinodas
tag

0-5 az hat elem, nem? :)

(#3136) Korcsii válasza shinodas (#3135) üzenetére


Korcsii
őstag

int tomb_user[5];
int tomb[5];

Az meg öt. :D

(#3137) shinodas válasza Korcsii (#3136) üzenetére


shinodas
tag

Kifejtenéd mire gondolsz? 0 1 2 3 4 5 az hat elemű tömb, de lehet rosszul tudom :)

(#3138) Korcsii válasza shinodas (#3137) üzenetére


Korcsii
őstag

Rég C-ztem már, de úgy rémlik, hogy amikor létrehozod a tömböt, akkor a zárójelbe a méretét írod, tehát int tomb[5] egy 5 elemű int tömb lesz. A sorszámozás persze 0-tól indul. Így for-ban 0-tól <méret-ig lehet számolni, ami pont jó, mert szép, megjegyezhető, és mindent elárul - pl azt is, hogy 6 eleműnek akartad definiálni. :)

[ Szerkesztve ]

(#3139) shinodas válasza shinodas (#3137) üzenetére


shinodas
tag

hmm, btw kipróbáltam 5 helyett hattal, így már lehet jó is lesz.
Köszönöm! :R :R

(#3140) WonderCSabo válasza Korcsii (#3134) üzenetére


WonderCSabo
félisten

mondjuk azt nem értem, hogy miért nem dob erre semmilyen warningot

A túlindexelést semmilyen fordító nem ellenőrzi, csak futásidő alatt derül ki, vagy exception/segfault, rosszabb esetben csak a furcsa viselkedés miatt.

(#3141) uraga


uraga
csendes tag

Sziasztok,

Lehet nem ez a legmegfelelőbb topik, de gondban vagyok egy algoritmussal kapcsolatban. Van ez a spreadsort nevű hibrid rendezési algoritmus http://en.wikipedia.org/wiki/Spreadsort itt található a leírása. Na most a baj az, hogy a rövid kis leírásból nem lehet rájönni, hogy pontosan, hogy is rendezi ez a sorozatot. Alatta van egy gyönyörű C/C++-ban írt kód, ami elvileg a rendezés algoritmusa, de abból meg nem sokan értek, mivel java, C#-on nevelkedtem és itt jobbra balra bitshiftelnek ha jól látom. Az a baj, hogy nekem be kéne mutatnom, hogy hogy működik ez a rendezés, de nem értem egészen pontosan. Légyszi valaki aki jó C-ben vagy algoritmusokban vessen rá egy pillantást és magyarázza el nekem hogy működik ez az algoritmus.

Köszönöm előre is.

(#3142) Jester01 válasza uraga (#3141) üzenetére


Jester01
veterán

mivel java, C#-on nevelkedtem és itt jobbra balra bitshiftelnek ha jól látom

Ez aztán a jó kifogás :))
Mintha azokban a nyelvekben nem lenne bit shift.

A rövid kis leírás pont elmeséli hogyan működik. Veszi a tömböt, megkeresi a legkisebb és legnagyobb elemeket. Az így megkapott intervallumot elosztja egyenlő részekre majd ezeket a részeket rekurzívan rendezi. A rekurzió során bizonyos elemszám alatt már másfajta rendezést használ.

Jester

(#3143) uraga válasza Jester01 (#3142) üzenetére


uraga
csendes tag

Igen, eddig én is eljutottam, abból ha az intervallumokat rendezed, nem lesz rendezett listád. Akkor sem ha a végén n elemszámú listában n darab intervallumod lesz. Max akkor lenne a végén rendezett ha még a rendezett intervallumokat összefésülnénk, ami igen hatékony de egy TimSort nevű rendezés sokkal jobban csinálja, szóval itt nem ez a lényeg. A lényeg ott lenne, hogy a min és max elemek közé úgy pakoljuk be az elemeket, hogy valamilyen csoportosításba kerüljenek mint a BucketSortnál pl 10-20, 20-30, 40-50- ig stb. Ezután az intervallumok rendezésével akár rekurzivan egy rendezett sorozatot kapnánk a végén. De mivel a leirásban az is szerepel hogy egyenlő elem számú intervallumokra osztja, tényleg nem értem hogy csinálja, hogy a végén rendezve is legyen az egész lista, ne csak az intervallumok.

(#3144) Chipi333 válasza uraga (#3143) üzenetére


Chipi333
csendes tag

A leírás elég egyértelmű. Gyakorlatilag egy quicksort, csak nem egy hanem több pivotot használ -> 2 helyett több partíciót csinál az elemekből aztán rekurzívan azokat is rendezi, és így tovább. Ha nem ismered a quicksortot akkor először azt nézd meg, és utána érteni fogod.

Aműgy ebbe a topicba szerintem jobban illene a téma: http://itcafe.hu/tema/programozas_forum/hsz_1-50.html

[ Szerkesztve ]

(#3145) Jester01 válasza uraga (#3143) üzenetére


Jester01
veterán

A lényeg ott lenne, hogy a min és max elemek közé úgy pakoljuk be az elemeket, hogy valamilyen csoportosításba kerüljenek mint a BucketSortnál pl 10-20, 20-30, 40-50- ig stb.

Igen, ez így történik. Mivel az értéktartományt osztja szét részekre és az elemeket szétdobálja. Utána pedig az egyes részeket is berendezi. A két rendezésből az egész rendezve lesz. Az intervallumok viszont nem lesznek egyenlő számosságúak.

Jester

(#3146) Chipi333 válasza Jester01 (#3145) üzenetére


Chipi333
csendes tag

"Mivel az értéktartományt osztja szét részekre és az elemeket szétdobálja. Utána pedig az egyes részeket is berendezi. A két rendezésből az egész rendezve lesz. "

Ehhez annyit még hozzátennék, hogy nem két rendezésről hanem n darab rekurzióról beszélünk. A részekre ugzanez a rendezés lesz ráeresztve, majd azoknak a részeire is egészen addig amíg egy-egy részben nem 0-1 elem marad ami már rendezett, és akkor elkezdenek visszatérni.

(#3147) Jester01 válasza Chipi333 (#3146) üzenetére


Jester01
veterán

Lásd #3142 :P

Jester

(#3148) Chipi333 válasza Jester01 (#3147) üzenetére


Chipi333
csendes tag

Ohh.. my bad :) De ebben a hszben rosszul nézett ki :)

(#3149) uraga válasza Chipi333 (#3148) üzenetére


uraga
csendes tag

Ismerem az összes rendezést köztük a quicksortot is mert ezelőtt, már 4 másik hibrid rendezést megvalósítottam amiben benne volt a quicksort is egyikben.

DE!

A leírás azt írja equal-sized bins! Az equal sized az azonos méretű. ha választok véletlenszerűen pivot elemeket és szétdobálom közöttük, baromira nem biztos hogy equal sized -ok lesznek, és akkor minek kerestem meg a min és max elemet. Itt olyan intervallumokra kell osztani amiben egyenlő számú elemek vannak, ez nem egy quicksort több pivottal, mert akkor azt írná.

(#3150) Jester01 válasza uraga (#3149) üzenetére


Jester01
veterán

Equal-sized az értékkészletben. Nem azonos elem számosságú. Legalábbis a mellékelt kód szerint. Pl itt látszik:
// Calculating the size of each bin; this takes roughly 10% of runtime

Végigmegy az elemeken és megnézi melyik bin-be kerülnek, aztán a bin-ek kezdőpozíciót a számosságok alapján számolja ki.

Jester

Copyright © 2000-2024 PROHARDVER Informatikai Kft.