-
Fototrend

Új hozzászólás Aktív témák
-
Radíros
csendes tag
És (#2385) Joooe üzenetére...
Ez a bitmátrix egy csúcs-szomszédsági mátrix,
amely azt mondja meg az M[i,j] elemben, hogy
az i-edik csúcsból vezet-e él a j-edik csúcsba.
(Pl. ha igen: magas a bit, ha nem, akkor alacsony)
Ha ezt érted élmátrix alatt, akkor a szkópban lehet
a következő megoldás is:
1. állítsd elő a mátrix tranzitív lezártját
2. a tranzitív lezártból könnyen jönnek
az erős komponensek egy rendezésre
visszavezethető halmaz-osztályozással
Sajnos a tranzitív lezárt számítása n^3 * log n műveletigényű,
viszont könnyen párhuzamosítható és a hw-be épített
bitműveleteket is jól kihasználja.
(Az én logikám szerint ezt a legegyszerűbb implementálni.)
Ha valaki felcsigázódott szívesen részletezem... -
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] -
cucka
addikt
c-ben gondolkozva:
a 10ezer csúcs miatt célszerű éllistával ábrázolni, ott pedig nem probléma a memórialimit.
csúcsoknak lefoglalod előre a memóriát, akkor ugye tömbként kezeled, és a tömb indexe fogja megmutatni az illető csúcs ''nevét''. minden csúcsból kiindul egy lista, ami tartalmazza az éleket. egy élnek van végpontja, ami egy int és rákövetkező csúcsa, ami egy csúcsra mutató pointer, vagyis egy csúcs mérete nagyjából 12byte, össszes csúcs így 240kbyte-ot foglal. ha nagyon szorít az időlimit, akkor eltárolhatod minden csúcsnál az utolsó élre mutató pointert, így a beszúrás n idő helyett 1 idő alatt megtörténik.
az élmátrix az egyébként micsoda?
én csak a csúcsmátrixot és az éllistát ismerem/használtam.
listákról minden könyvben olvashatsz, de a gúgle is sok hasznos találatot dob, főleg ha angolul keresel. ennek fényében nem értem, mi a probléma a file-ból való lista felépítéssel. (kulcsszó: linked list). -
Jester01
veterán
Hacsak egyéb ok nincs rá akkor a gráfot egyszerûen csomópontokkal és belõlük induló élekkel ábrázoljuk:
class Node
{
public:
vector<Node*> Edges;
};
Ez nálam mérve 12 byte csomópontonként, az kemény 120kB. A 200000 pointer az 800kB. A legrosszabb vector overhead-del számolva is belefér 2 megába az egész (64 bites gépen max. dupla ennyi).
Ha valami egyéb információt is el kell tárolni a csomópontokról/élekrõl akkor az persze erre még rájön, de azt semmiképp nem úszod meg.
(Az éleknek az egyszerûség kedvéért nem csináltam külön osztályt.) -
cucka
addikt
a for ciklusod magjában semmi nem függ az i ciklusváltozótól. gyakorlatilag csak akkor fog kicserélni bármit is a függvény, ha az illető string egyetlen ékezetes betűből áll.
a ciklusban az a string helyett az a[ i ]-t nézegesd inkább.
megj: a replaceEkezet(''áőéóü'') sem működik, csak mivel nem tárolod el a visszatérési értékét, ezt nincs honnan tudd. meg egyáltalán semmi értelme ezt a függvényt meghívni így. (megcsináltatsz vele valamit, az eredményt meg kidobod.. király
)
[Szerkesztve] -
Jester01
veterán
Használd az strcoll függvényt, ha van.
Kézzel pl. úgy lehet csinálni, hogy felsorolod egy tömbbe a betűk ábécérendbeli pozícióját és onnan rendezel.
int abc[] = { ... ide kell felsorolni a pozíciókat ... };
int i;
for(i = 0; abc[a[ i ]] == abc[b[ i ]] && a[ i ] != 0; i++);
(utf-8 esetén még finomítani kell)
[Szerkesztve]
Új hozzászólás Aktív témák
● olvasd el a téma összefoglalót!
- Autóápolás, karbantartás, fényezés
- Képregény topik
- Még a saját szövetségeseivel szemben is fegyverként használná az AI-t az USA
- Luck Dragon: Alza kuponok – aktuális kedvezmények, tippek és tapasztalatok (külön igényre)
- Xiaomi 11 Lite 5G NE (lisa)
- Gitáros topic
- TCL LCD és LED TV-k
- Spórolós topik
- Hosszú premier előzetest kapott az Arknights: Endfield
- Path of Exile (ARPG)
- További aktív témák...
- Nintendo switch oled zelda edition +metroid dread +táska
- DELL XPS 15 9530 TERVEZŐ VÁGÓ Laptop -50% 15,6" I7-13620H 16/1TB Intel Arc A370M 4GB FHD+
- WD Red 4TB - CMR
- Spigen Essential EF323MQ 3in1 Mágneses MagSafe Vezeték nélküli töltőállomás 25W Qi2.2 Fekete
- Powerbank Anker Prime, 20100mAh, 220W, QC + PD, Fekete A110BH11
- LG 32U990A-S / 32" Nano IPS Black / 6K UHD 6144x3456 / 21 Megapixel 224 PPI / Adobe RGB 99%
- HIBÁTLAN iPhone 12 Pro 128GB Gold -1 ÉV GARANCIA - Kártyafüggetlen, MS4493
- Dell USB-C dokkolók: (K20A) WD19/ WD19S/ WD19DC + 130W, 180W, 240W töltők
- Kingston FURY Impact 32GB DDR5 4800MHz KF548S38IB-32
- ÁRGARANCIA!Épített KomPhone Ultra 7 265KF 32/64GB RAM RTX 5090 32GB GAMER PC termékbeszámítással
Állásajánlatok
Cég: Laptopműhely Bt.
Város: Budapest

én csak a csúcsmátrixot és az éllistát ismerem/használtam.
)
