Fa'asologa o fa'amaumauga mo le teuina o kalafi: o se toe iloiloga o mea o lo'o i ai ma lua "toetoe lava fou" mea

Talofa tagata uma.

I lenei faʻamatalaga, na ou filifili ai e lisi faʻamaumauga autu o loʻo faʻaaogaina e teu ai kalafi i komipiuta komipiuta, ma o le a ou talanoa foi e uiga i se ulugalii e sili atu ia fausaga e fai ma "faʻamaʻi" mo aʻu.

O lea, tatou amata. Ae le mai le amataga - Ou te manatu ua uma ona tatou iloa le kalafi ma pe o le a foi (faʻatonu, le faʻatonuina, mamafa, le mamafa, faʻatasi pe leai foi ni pito ma matasele se tele).

O lea, ta o. O a ni filifiliga mo fa'amaumauga o fa'amaumauga mo le "kalafi teuina" o lo'o ia i tatou?

1. Fa'asologa o fa'amaumauga matrix

1.1 Fa'ata'i fa'atasi. O le fatafata lata ane ose matrix lea e fetaui ai le laina ma le koluma ulutala ma numera o pito o le kalafi, ma o le tau o ona elemene taitasi a(i,j) e fuafua i le i ai po o le leai o ni pito i le va o vertices. i ma j (e manino lava mo se kalafi le faʻatonuina o se matrix o le a tutusa, pe mafai foi ona tatou malilie e teuina uma tau naʻo luga aʻe o le diagonal autu). Mo kalafi e le'i mamafa, e mafai ona seti le a(i,j) i le numera o pito mai le i i le j (afai e leai se mata faapena, ona a(i,j)= 0), ma mo kalafi mamafa, e tusa ai ma le mamafa. ( mamafa atoa) o pito ua taua.

1.2 Fa'ailoga fa'alavelave. I lenei tulaga, o loʻo teuina foi la matou kalafi i totonu o se laulau lea, e pei o se tulafono, o numera o laina e fetaui ma numera o ona pito, ma o numera o koluma e fetaui ma pito na muai faanumera. Afai o se vertex ma se pito e faʻalavelave le tasi i le isi, ona tusia lea o se tau e le-zero i totonu o le sela tutusa (mo kalafi e leʻi faʻatonuina, 1 e tusia pe a tupu le vertex ma le pito, mo le faʻasinomaga - "1" pe afai o le pito. "o ese" mai le pito i luga ma le "-1" pe afai e "aofia ai" i totonu (e faigofie lava ona manatua, aua o le faailoga "minus" e foliga mai foi e "aofia ai" i le numera "-1")). Mo kalafi mamafa, toe, nai lo le 1 ma le -1, e mafai ona e faʻamaonia le mamafa atoa o le pito.

2. Fa'asologa o fa'amaumauga o fa'amaumauga

2.1 Lisi fa'atasi. Ia, e foliga mai e faigofie mea uma iinei. O pito taʻitasi o le kalafi e mafai, i se tulaga lautele, ona fesoʻotaʻi ma soʻo se faʻasologa o faʻamaumauga (lisi, vector, array, ...), lea o le a teuina ai numera o vertices uma e latalata i le mea ua tuʻuina atu. Mo kalafi fa'atonu, o le a matou fa'aopoopo i se lisi fa'apea na'o pito o lo'o i ai se "fa'atonu" pito mai se pito pito i luga. Mo kalafi mamafa o le a sili atu ona lavelave le faʻatinoga.

2.2 Lisi o ivi asoaso. Ose fausaga fa'amaumauga lauiloa. O le lisi o pito, e pei ona taʻu mai e Kapeteni Obviousness, o le mea moni lava o se lisi o pito o le kalafi, o ia mea uma e faʻamaonia e le amataga, o le pito pito (mo kalafi e leʻi faʻatonuina e le taua le faʻatonuga iinei, e ui lava mo le tuʻufaʻatasia e te mafaia. fa'aaoga tulafono 'ese'ese, mo se fa'ata'ita'iga, fa'ama'oti pito i luga i le fa'atupuina o le fa'aopoopo) ma le mamafa (mo na'o kalafi mamafa).

E mafai ona e vaʻavaʻai i lisi matrix o loʻo lisiina i luga i faʻamatalaga atili (ma faʻataʻitaʻiga), mo se faʻataʻitaʻiga, iinei.

2.3 Fa'asologa fa'atasi. E le o le fausaga sili ona taatele. I lona autu, o se ituaiga o "faʻapipiʻi" lisi faʻatasi i totonu o le faʻasologa o faʻasologa (faasologa, vector). O le n muamua (e tusa ai ma le numera o vertices o le kalafi) elemene o sea array o loʻo i ai faʻamatalaga amata o le laina tutusa, e amata mai i mea uma e sosoo ai ma le laina o loʻo tusia i se laina.

O iinei na ou maua ai le faʻamatalaga sili ona malamalama (mo aʻu lava): ejuo.livejournal.com/4518.html

3. Vector Fa'atasi ma Fa'asologa Feso'ota'i

Na aliali mai o le tusitala o nei laina, e le o se tagata fai polokalame faʻapolofesa, ae o loʻo feagai ma kalafi i lea taimi ma lea taimi, e masani ona feagai ma lisi o pito. Ioe, e faigofie pe afai o le kalafi e tele matasele ma pito. Ma o lea, i le atinaʻeina o lisi masani o pito, ou te fautua atu e faʻalogo i la latou "atinaʻe / lala / suiga / suiga", e taʻua: o le vector vavalalata ma le fesoʻotaʻiga vavalalata faʻatasi.

3.1 Veta fa'atasi

Tulaga (a1): kalafi le mamafa

O le a matou ta'ua se ve'a fa'alatalata mo se kalafi e le'i mamafa o se seti fa'atonuina o se numera tutusa o numera (a[2i], a[2i+1],..., lea e faanumera ai i le c 0), lea e ta'ilua ai numera. o le a[2i], a[2i+1 ] o loʻo faʻamaonia ai le kalafi i le va o vertices a[2i] ma le a[2i+1], i le faasologa.
O lenei fa'amaumauga e leai ni fa'amatalaga pe fa'atonu le kalafi (e mafai uma filifiliga). Pe a faʻaaogaina le faʻasologa o le digraph, o le pito e manatu e faʻatonu mai le [2i] i le [2i+1]. Lenei ma lalo: mo kalafi e le'i fa'atonuina, pe a mana'omia, e mafai ona fa'aogaina mana'oga mo le fa'asologa o le fa'amauina o vertices (mo se fa'ata'ita'iga, o le vertex ma le tau maualalo o le numera na tu'uina atu e sau muamua).

I le C ++, e fautuaina e faʻamaoti se mea faʻapipiʻi faʻaoga e faʻaaoga ai le std::vector, o le mea lea o le igoa o lenei faʻamaumauga.

Tulaga (a2): kalafi e le'i mamafa, o mamafa pito o le numera atoa

I le fa'atusa ma le mata'itusi (a1), matou te ta'ua le ve'e fa'alatalata mo se kalafi mamafa ma fua fa'atatau fa'atasi o se seti fa'atonu (va'aiga malosi) o fuainumera (a[3i], a[3i+1], a[3i+2], ..., o lo'o faanumeraina i le c 0), o lo'o fa'amauina mai ai "ta'atolu" o numera a[3i], a[3i+1], a[3i+2] se pito o le kalafi i le va o vertices ua faanumeraina a[3i] ma le a[3i+1], i le faasologa, ma o le tau a [3i+2] o le mamafa lea o lea pito. O ia kalafi e mafai fo'i ona fa'atonu pe leai.

Matā'upu (b): kalafi e le'i mamafa, mamafa mata e lē fa'atasi

Talu ai e le mafai ona teuina elemene heterogeneous i se laina se tasi (vector), mo se faʻataʻitaʻiga, o le faʻatinoga o loʻo mulimuli mai e mafai. O le kalafi o loʻo teuina i se pea o vectors, lea o le vector muamua o le kalafi lata ane o le kalafi e aunoa ma le faʻamalamalamaina o le mamafa, ma o le vector lona lua o loʻo i ai le mamafa tutusa (mafai faʻatinoina mo C++: std:: pair ). O le mea lea, mo se pito e faʻamatalaina e se pea o vertices i lalo o faʻamatalaga 2i, 2i + 1 o le vector muamua, o le mamafa o le a tutusa ma le elemene i lalo o faʻasino i o le vector lona lua.

Ia, aiseā e manaʻomia ai lenei mea?

Ia, o le tusitala o nei laina na iloa e aoga tele mo le foia o le tele o faafitauli. Ia, mai se tulaga aloaia, o le ai ai tulaga lelei:

  • O le fa'aigoa fa'atasi, pei o so'o se isi lava fa'asologa o le "enumerative", e fai si fa'atusatusa, e itiiti ifo le manatua nai lo le fa'ata'ita'i fa'atasi (mo kalafi va'ava'ai), ma e faigofie lava ona fa'atino.
  • O pito o le kalafi, i le mataupu faavae, e mafai foi ona faailoga i numera le lelei. Ae faapefea pe a manaʻomia se “faasese” faapena?
  • O kalafi e mafai ona aofia ai le tele o pito ma le tele o matasele, ma eseese mamafa (lelei, leaga, e oʻo lava ile zero). E leai ni tapulaa iinei.
  • E mafai fo'i ona e tu'uina atu meatotino eseese i pito - ae mo nisi fa'amatalaga, va'ai vaega 4.

Ae ui i lea, e tatau ona ioeina o lenei "lisi" e le faʻaalia ai le vave maua i le pito. Ma o iinei o le Associative Adjacency Array e sau i le laveai, lea o loʻo talanoaina i lalo.

3.2 Fa'asologa fa'atasi fa'atasi

O lea la, afai o le avanoa i se itu patino, o lona mamafa ma isi mea totino e taua tele mo i tatou, ma o manaʻoga manatua e le faʻatagaina i tatou e faʻaoga le matrix adjacency, seʻi o tatou mafaufau pe faʻafefea ona tatou suia le vector vavalalata e foia ai lenei faafitauli. O lea la, o le ki o se pito o le kalafi, lea e mafai ona faʻamaonia e pei o se paʻu faʻatonuina o numera. E faape'ī foliga o lenei mea? E le o se ki i se fa'asologa fa'atasi? Ma, afai o lea, aisea tatou te le faʻatinoina ai? Se'i tatou maua se la'au fa'atasi lea e fa'afeso'ota'i ai ki ta'itasi - o se pa'aga fa'asologa o numera - ma se tau - o se numera fa'atasi po'o se numera moni e fa'amaoti ai le mamafa o le pito. I le C++, e fautuaina le faʻatinoina o lenei fausaga faʻavae i luga o le std :: map container (std :: map , int> po'o le std::map , double>), po'o le std::multimap pe a fa'amoemoe e tele ni pito. Ia, o loʻo i ai se matou fausaga mo le teuina o kalafi e itiiti ifo le manatua nai lo fausaga o le "matrix", e mafai ona faʻamalamalamaina kalafi ma le tele o matasele ma pito, ma e le o iai foʻi ni manaʻoga faʻapitoa mo le le faʻaleagaina o numera vertex (Ou te le iloa. o ai e manaʻomia lenei mea, ae tumau).

4. Fa'amaumauga fa'amaumauga e tumu, ae o lo'o misi

Ma e moni: pe a foia le tele o faʻafitauli, atonu e manaʻomia le tuʻuina atu o ni uiga i pito o le kalafi ma, e tusa ai, teuina. Afai e mafai ona faʻaitiitia faʻaititia nei foliga i numera, ona mafai lea ona teuina ia "kalafa ma faʻaopoopoga faʻaopoopoga" e faʻaaoga ai faʻaopoopoga faʻaopoopoga o le vector adjacency ma fesoʻotaʻiga vavalalata array.

O lea la, ia tatou maua se kalafi le mamafa, mo pito taʻitasi e manaʻomia e teu ai, mo se faʻataʻitaʻiga, 2 faʻaopoopoga faʻapitoa e faʻamaonia e numera. I lenei tulaga, e mafai ona faʻamalamalamaina lona faʻataʻitaʻiga o se seti faʻatonu e le o "paiga", ae o "quartets" o numera (a [2i], a [2i + 1], a [2i + 2], a [2i+3]…) , lea o le a [2i+2] ma le a[2i+3] o le a iloa ai uiga o le pito tutusa. Mo se kalafi ma fua fa'atatau o pito, o le fa'atonuga e masani lava ona tutusa (na'o le eseesega o uiga o le a mulimuli i le mamafa o le pito ma o le a fa'amaonia e elemene a[2i+3] ma a[2i+4] , ma o le pito lava ia o le a faʻamaonia e le 4, ae 5 faʻatonu numera). Ma mo se kalafi e leai ni fua fa'atatau, e mafai ona tusia foliga i lona vaega e le'i mamafa.

Pe a faʻaaogaina se laina faʻapipiʻi fesoʻotaʻi mo kalafi ma fua faʻatatau o le numera, e mafai ona faʻamaonia o se tau e le o se numera tasi, ae o se laina (vector) o numera e faʻamaonia, faʻaopoopo i le mamafa o se pito, o isi mea uma e manaʻomia. foliga. I le taimi lava e tasi, o se faʻalavelave mo le tulaga o le mamafa e le o ni numera o le a manaʻomia le faʻamaonia o se faʻailoga ma se numera faʻafefeteina (ioe, o se faʻalavelave, ae afai e le tele naua faʻailoga, ma afai e te faia. 'aua ne'i fa'aluaina i latou, ona leai lea o se mea). O lona uiga e mafai ona faʻamatalaina i totonu o le C ++ faʻalauteleina fesoʻotaʻiga vavalalata faʻatasi: std :: map , std::vector> poʻo std::map , std ::vector, lea o le tau muamua i le "key-value-vector" o le mamafa o le pito, ona maua ai lea o le numera numera o ona uiga.

Tusitusiga:

E uiga i kalafi ma algorithms lautele:

1. Cormen, Thomas H., Leiserson, Charles I., Rivest, Ronald L., Stein, Clifford. Algorithms: fau ma au'ili'iliga, 2nd lomiga: Trans. mai le Igilisi – M.: Fale Lomitusi Williams, 2011.
2. Harari Frank. manatu o kalafi. M.: Mir, 1973.
Lipoti a le tusitala e uiga i nei lava vector ma faʻapipiʻi fesoʻotaʻiga o fesoʻotaʻiga:
3. Chernoukhov S.A. Veta fa'atasi ma fa'asologa fa'atasi fa'atasi e fai ma auala e fa'atusa ma teu ai kalafi / SA Chernouhov. Fa'asaienisi fa'atasi ma fa'afanua fa'atasi e fai ma fa'amaumauga fa'amaumauga e fai ma sui o se kalafi // Aoina o tala o le International Scientific and Practical Conference "Faafitauli o le fa'atinoina o taunu'uga o atina'e fou ma auala e foia ai" (Saratov, Setema 14.09.2019, 2019). – Sterlitamak: AMI, 65, itulau. 69-XNUMX
Fa'amatalaga aoga i luga ole laiga ile autu:
4. prog-cpp.ru/data-graph
5. ejuo.livejournal.com/4518.html

puna: www.habr.com

Faaopoopo i ai se faamatalaga