Hirdetés
- One mobilszolgáltatások
- Samsung Galaxy S26 Ultra - fontossági sorrend
- Netfone
- Google Pixel topik
- Xiaomi 17 Ultra - jó az optikája
- Mobil flották
- Vivo X300 Ultra - tárcsázz, ha van rá keret!
- Xiaomi 15T Pro - a téma nincs lezárva
- Óra vagy karperec? Egészségügyi mindenes!
- 8000 nit, maradhat? A szaúdiaknál kezd a Honor 600 Pro
-
Mobilarena

Új hozzászólás Aktív témák
-
Joooe
tag
válasz
Radíros
#2401
üzenetére
Nem az input benyalása a megoldás asszem, elvileg megfelelő pufferrelést séróból meg kéne hogy oldja egyszeri folyamatos végigolvasás esetén.
Maga az is műveletigényes egy kicsit, hogy a szöveges formában tárolt számokból összeállítani az inteket.
De érdekes, ezt tudja valaki miért lehet lassabb?
<fstream>-mel:
ifstream be;
be.open(''be.txt'');
int n,m,p;
be >> n;
be >> m;
be >> p;
p--;
int honnan, hova;
for (int i=0; i<m; i++)
{
be >> honnan;
be >> hova;
honnan--;
hova--;
// itt csinálunk valamit
}
be.close();
<stdio.h>-val:
int n,m,p;
FILE* be = fopen(''be.txt'',''rt'');
fscanf(be,''%d %d %d'',&n,&m,&p);
p--;
int honnan, hova;
for (int i=0; i<m; i++)
{
fscanf(be,''%d %d'',&honnan, &hova);
honnan--;
hova--;
// itt csinálunk valamit
}
fflush(be);
fclose(be);
Az utóbbi kb. fele-haramada idő alatt végez egy 1 megás szövegfájllal.
Nem nagyon szoktam STL filekezelést használni, gondolom ennyire nyomorék nem lehet, mit szúrok el?
[Szerkesztve] -
Joooe
tag
válasz
Radíros
#2395
üzenetére
''Visszavonom!!!
10000 csúcssal és 64 bit gépi szószélességgel számolva:
157 * 10^8 * 14 ~ 300 GHz-es proci kellene 1mp futásidőhöz
(szekvenciálisan, csővezeték és cimzésműveletek elhanyagolva)''
Valószínűleg pontatlanul idézte a feladatot a kérdező, és csak egy konkrét csúcson átmenő köröket kell vizsgálni.Így nincs szükség a teljes tranzitív lezárt meghatározására.
Ezt azért gonodlom, mert én is egy hasonló feladatot csináltam (na nem magamnak, hál'isten az alga csak a távoli múltból dereng már nekem
)
Az algoritmus érdemi részének futási idejét sikerült olyan 0,015 s-re csökkenteni ezzel a módszerrel még a leghúzósabb inputokon is. (AMD 3200 procin, párhuzamosítás nélkül)
Ami viszont iskolai szivatás a dologban: bizonyos teszt inputok esetén ha semmi mást nem csinál a program, csak kb. be >> szam; módszerrel standard folyamműveletekkel végigolvassa az inputot (De ezen kívül tényleg semmit nem csinál, nem konstruál gráfot, nem vizsgál feltételeket, stb.) már az kifut a futási időlimitből az inputok egy részén
[Szerkesztve] -
Joooe
tag
Most gyorsan átlapoztam a K&R-t de nem látom annak garanciáját, hogy ez így működni fog. Ilyen méretekben valószínűleg működik, mert a hardver adottságaiból adódóan defaultból int-ként végzi el a számolást és aztán annak ''int-té castolásakor'' ugye nem történik semmi, tehát marad a helyes eredmény.
De ha ugyanezt az elvet követjük amit alkalmaztál, és ugyanakkor kevésbé vasbarát méretekig növeljük a dolgot:
unsigned __int64 mix32(unsigned __int32 h, unsigned __int32 l)
{
return (h << 32) + l;
}
esetben már túlcsordul.
unsigned __int64 mix32(unsigned __int32 h, unsigned __int32 l)
{
return ((__int64)h << 32) + l;
}
Így viszont jó.
Lehet hogy működik, de én biztosabbnak érzem mindig explicit módon castolni ilyen bites játszadozásoknál:
unsigned int assign16(unsigned char LD, unsigned char HD)
{
return ((unsigned int)HD << 8 | (unsigned int)LD) >> 3;
}
De ha ez csak az én ''szám íze'' szerint van így akkor bocsi
[Szerkesztve] -
Joooe
tag
nem tudom hogy működik ez a kód egyes fordítók lelkivilága szerint, meg most így hirtelen a szabványt sem hasítom, de nekem gyanús, hogy a kifejezés egyik oldala az unsigned char marad a kiértékelés során, és így a 256-tal szorzás mondjuk úgy egy kisebb túlcsordulást okoz

Én még nem találkoztam olyan implementációval (tudom hogy van) ahol az int ne 32 bit lenne
-
Joooe
tag
Én inkább egy bitmátrixot tartanék megfelelőnek erre a feladatra.
A memóriában az is elfér (10000^2/8 = kb. 12 MB)
Bár elgondolkodtató, hogy ez a megközelítés nem használja ki az élek relatíve alacsony számát.
Ami gyorssá teheti a megvalósítást, hogy ha a mátrix azt mutatja, hogy az i-edik csúcsból elérhető a j-edik, akkor a j-edik sort hozzá VAGY-oljuk az i-edik sorhoz, ezzel tovább bővítve az i-ből elérhető csúcsok listáját, azokkal ami j-n keresztül elérhető.
Ez mindenféle implementációban elvégzendő művelet, hogy megvizsgáljuk, hogy mi van ha arra megyünk, de azt hiszem így tudjuk leggyorsabban megtenni. Így processzortól függően egyetlen művelet során nagyon sok (64?) csúcsra történik meg a vizsgálat.
Az még egy kicsit elgondolkodtató, hogy mikor végeztünk, hiszen ezt többször el kell végezni, de ha végeztünk, akkor azokat a csúcsokat listázzuk amire mátrix[i,i]=1, azaz elérhető magából maga, azaz tagja valamely irányított körnek.
[Szerkesztve]
[Szerkesztve]
Új hozzászólás Aktív témák
Hirdetés
● olvasd el a téma összefoglalót!
- E-roller topik
- Motorolaj, hajtóműolaj, hűtőfolyadék, adalékok és szűrők topikja
- Milyen billentyűzetet vegyek?
- Fejhallgatós találkozó
- A fociról könnyedén, egy baráti társaságban
- Apple MacBook
- Allegro vélemények - tapasztalatok
- Luck Dragon: Asszociációs játék. :)
- AMD off topik: VGA, CPU, APU és minden, ami AMD
- Mibe tegyem a megtakarításaimat?
- További aktív témák...
- Stellar Blade PS5 / 1x kijátszott / Alza vásárlás
- MSI MPG 271QRX QD-OLED 360Hz 1440p Gamer Monitor Garanciás 2027.12.03-ig
- Samsung Galaxy S23 Ultra 512GB,Újszerű,Dobozaval,12 hónap garanciával
- Apple iPhone 15 Plus 256GB,Újszerű,Dobozaval,12 hónap garanciával
- Apple iPhone 14 Pro 128GB,Újszerű,Adatkabel,12 hónap garanciával
- Otthoni AI Workstation (E5-2697 v3, 32GB RAM + 2x RTX 3060 12+12GB VRAM)
- 11" M1 iPad Pro 3. Gen 128 GB Silver - 27% ÁFA - Garancia (0434BE)
- MacBook Air 15" (M3, 8 GB RAM, 512 GB SSD)
- GAMING PC! Ryzen 7800X3D / RTX 5070 Ti / 32GB DDR5 / X870 / 1TB NVMe / 1000w Gold! BeszámítOK
- Dell Latitude 5430 14" Touchscreen i5-1235U 32GB 512GB 1 év garancia
Állásajánlatok
Cég: Laptopműhely Bt.
Város: Budapest


)


