Milyen nyelven és milyen hardverrel érdemes megcsinálni ezt a feladatot, hogy a leggyorsabb legyen?
Adva van egy alkönyvtár, faszerkezettel, benne fáljok, képek is, elszortan. Kb ezer kép, kb. 3000 más fájl.
Legyen ez "A" alkönyvtár.
Adva van egy másik alkönyvtár, de abban faszerkezet nélkul, csak képek, kb. 10 000 kép.
Legyen ez "B" alkönyvtár.
A végcél az, hogy ebben a 10 000 db-os alkönyvtárban szétválassza a képeket alkönyvtárakba.
1-es alkönyvtárba azt, ami nem szerepel a B alkönyvtárba, de megfelel bizonyos szabványnak. (pl. a fálj nevének a tizedik betuje csak "z" lehet, a kiterjesztése meg jpg.
2-es ugyanez, de png.
3-as ugyanez de tif, 4-es BPM.
5, 6, 7, 8 olyan aminek a neve nem szerepelt meg ezeknek a szabványoknak, nem szerepel a 1,2,3,4 alkönyvtárakban. És ugyanugy kiterjesztés alapján van válogatva.
Elnézést azt elfelejtettem irni, hogy egyforma képek esetén (bittérkép egyezés) csak egyszer kerul be az 1,2,3,4, 5, 6, 7, 8 alkönyvtárakba, s amiből bekerult az 1,2,3,4 valamelyikébe abbol értelemszerüen már nem kerül be az 5,6,7,8 alkönvtárakba.
Utána pedig a 9,10,11,12,13,14,15,16 alkönyvtárakba azok a képek kerulnek be amik megfeleltek a fenti feltételeknek, de az 1,2,3,4,5,6,7,8 alkönyvtárak valameyikében már van 1 db.
Nem maga a program szerkezete érdekel, az programozás szempontjábol egy tiszta kérdés, kissé bonyolult ciklusok és feltételek rendszere.
Hardver szempontjábol gondolom az a célszeru, ha a legelején ramba tölti az egészet s ramból válogat. Mert a betöltési idő ugyan aránylag nagy, de akkor csak egyszer kell betölteni s utána rambol válogat sokkalta gyorsabban. De hogy ehhez melyik processzor a célszeru ami azért nem csillagászati, azt nem tudom. Eleve mennyit számit egy gyorsabb ram s ahhoz milyen alaplap kell, s milyen processzor hogy egyik se fogja vissza a másikat? Kéne egy megvásárolhato legjobb rendszer adata és egy olyan aminek "értelmes ára van" vagyis a számitogép maga 100-200 000 Ft között legyen.
Feltételezem, hogy duál egyetleg 4-es ram célszerubb mint 1 nagy ram.
Programnyelv szempontjábol meg nem tudom, mellyek a leggyorsabbak egy ilyen tipikus feladatra.
Mi a cél? Mert 10000 kép nem egy nagy mennyiség... mért kell nagyon gyorsnak lenni? Percenként többször kéne lefuttatni?
Nagyon egyformák a képek, pl pontosan egyforma felbontás és csak pár pixelben tér el? Mert ha nem, akkor elég gyorsan kiderül, hogy 2 kép egyezik-e vagy nem. (Ha jól értem a fájl binásis tartalma tejelsen irreleváns, hiszen az nem számít, csak a pixelek.) vagy sok olyan eset van, hoy binárisan is megegyezik a 2 fájl teljes mértékben? Ha igen, akkor lehet célszerű ezeket előre kiszűrni.
Igen, érdemes betölteni az összes fájlt, miven a pixel szintű összehasonlításhoz ki kell őket tömöríteni. Befér az összes fájl kitömörítve a memóriaba? (fájl * szélesség * magasság * 3 vagy 4 byte + kis overhead)
A programozási nyelv sztem teljesen irreleváns, nem lesz lényeges különbség egyikben-másikban, ha jól van megírva a kód.
Hw: Nyilván SSD számít a beolvasási sebességnél... és a proci az összehasonlításnál. Szóval minél jobb, annál gyorsabb lesz.
"végig kell nézni az ezer képet, ezért hosszu az idő"
Ezért kérdeztem, hogy mennyire különbözőek a képek? Sztem rendezd sorba, akkor tudsz binárisan keresni.... de ha nagyon különböző képek, akor már az első pár pixelből kiderül hogy aznos-e.
Szoval 1000 kép összehasonlítás gyakorlatilag 0 millisec, ha jól van megírva az algoritmusod. Szóval az összes összehasonlítás/keresés baromi gyors.. a szűk keresztmetszet a betöltés és kitömörítés.
"az első pár pixelből kiderül hogy aznos-e"
Illetve az derül ki, hogy különböző-e.... de azonosság meg max 1-nél lesz, ha jól értem, teáht az nem gond...
Illetve számolhatsz hash-et minden képre... (nem az eredeti bináris adatra, hanem a kitomorített pixelekre és kép felbontásra).... tehát SSD és proci számít.
A betöltést egysszerűen párhuzamosíthatod, szóval jobb a az proci ami többszálú mint amelyik kevesebb, de szálanként gyorsabb. (Nyilván megfelő paraméterek esetén)
"A ciklusok, feltételek minden nyelvben kb egyforma idejuek?"
Pythonban, javascriptben és PHPban nem kezdenék neki, de amúgy sztem tökmindegy, hogy C/C++/C/Java/Pascal/Assembly
"az SSD-HDD sebesség alig játszik, mert azt csak egyszer kell megcsinálni"
Azért nem mindegy, hogy 1-200 MB/sec-kel töltöd be a képeket vagy 1-2 GB/sec-kel... a mai modern SSD-k nagyon gyorsak.. nyilván megfelelő csatolóval, nem SATA
Amúgy nem tudom mit gondolsz ennek a feladatnak a futásidejéről, de egy jó algoritmussal egy erősebb otthoni géppel perces nagyságrendű futással megoldható.
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!