Ko nga hanganga raraunga mo te penapena kauwhata: he arotake o nga mea o mua me nga mea e rua "tata hou".

Aroha katoa.

I roto i tenei tuhipoka, i whakatau ahau ki te whakarārangi i nga hanganga raraunga matua e whakamahia ana ki te penapena kauwhata i roto i te pūtaiao rorohiko, a ka korero ano ahau mo etahi atu momo hanganga penei i te ahua "maamaa" mo au.

Na, me timata. Engari ehara mai i te timatanga - Ki taku whakaaro kua mohio katoa tatou he aha te kauwhata me te aha o aua mea (he mea anga, he kore, he taumaha, he kore taumaha, he maha nga tapa me nga koropiko maha ranei).

Na, me haere. He aha nga whiringa mo nga hanganga raraunga mo "te rokiroki kauwhata" kei a tatou?

1. Nga hanganga raraunga matrix

1.1 Matrix tata. Ko te matrix tata he matrix e hono ana nga pane haupae me te poupou ki nga tau o nga poupou o te kauwhata, a ko te uara o ia huānga a(i,j) ka whakatauhia e te noho, te ngaro ranei o nga tapa i waenga i nga poupou. i me j (e marama ana mo te kauwhata kore e whai tikanga ka hangarite te ahua o te matrix, ka whakaae ranei ka penapena nga uara katoa ki runga ake i te hauroki matua). Mo nga kauwhata kore taumaha, ka taea te whakarite a(i,j) ma te maha o nga tapa mai i te i ki te j (mehemea karekau he tapa pera, na a(i,j)= 0), me nga kauwhata taumaha, me te taumaha hoki (taimaha katoa) o nga tapa kua whakahuahia.

1.2 Matrix takahanga. I tenei ahuatanga, ka penapenahia to maatau kauwhata ki roto i te ripanga, ko te tikanga, ko nga tau haupae e rite ana ki nga tau o ona poupou, a ko nga tau pou e rite ana ki nga tapa kua tohua. Mēnā ka pā mai tētahi pito me tētahi tapa ki a rātou anō, ka tuhia he uara kore-kore ki roto i te pūtau e hāngai ana (mo nga kauwhata kauwhata, ka tuhia te 1 ki te mea ka pa te poki me te tapa, mo nga mea whai mana - “1” mena ko te tapa "Ka puta" mai i te tihi me te "-1" mena ka "whakauru" ki roto (he ngawari noa te mahara, na te mea ko te tohu "minus" te ahua "kei roto" ki te nama "-1")). Mo nga kauwhata taumaha, ano, hei utu mo te 1 me te -1, ka taea e koe te tautuhi i te taumaha katoa o te tapa.

2. Nga hanganga raraunga tatau

2.1 Rarangi tata. Ana, he ngawari nga mea katoa i konei. Ka taea e ia pito o te kauwhata te hono ki tetahi hanganga tatau (rarangi, vector, huānga, ...), ka penapena i nga tau o nga poutoko katoa e tata ana ki te mea kua homai. Mo nga kauwhata whai, ka taapirihia e matou ki taua rarangi ko nga poutoko anake kei reira he tapa "whakaaro" mai i tetahi tohu ahua. Mo nga kauwhata taumaha ka uaua ake te whakatinanatanga.

2.2 Rarangi rara. He hanganga raraunga rongonui. Ko te rarangi o nga tapa, e kii mai ana a Kapene Obviousness, he rarangi o nga tapa o te kauwhata, ko ia waahanga kua tohua e te tihi timata, te pito mutunga (mo nga kauwhata kore he mea nui te ota i konei, ahakoa mo te whakakotahi ka taea e koe. whakamahi i nga momo ture, hei tauira, te tohu i nga poutoko kia piki ake) me te taumaha (mo nga kauwhata taumaha anake).

Ka taea e koe te titiro ki nga rarangi matrix kua whakarārangihia i runga ake nei (me nga whakaahua), hei tauira, konei.

2.3 Raupapa tata. Ehara i te hanganga tino noa. Ko tona uho, he ahua o te "whakakapi" rarangi piri ki roto i te hanganga tatau kotahi (te huānga, vector). Ko te n tuatahi (e ai ki te maha o nga poupou o te kauwhata) nga huānga o taua huānga kei roto nga tohu timatanga o te huinga kotahi, timata mai i nga poupou katoa e tata ana ki te mea kua tuhia ki te rarangi.

I konei ka kitea e au te whakamaramatanga tino marama (mo ahau) ejuo.livejournal.com/4518.html

3. Te Huahanga Whakatata me te Huanga Whakatata

I puta mai ko te kaituhi o enei rarangi, ehara i te mea he kaiwhakatakoto kaupapa ngaio, engari nana i mahi nga kauwhata i ia wa, i te nuinga o nga wa e mahi ana ki nga rarangi o nga tapa. Ae, he watea mena he maha nga koropiko me nga tapa o te kauwhata. Na, i roto i te whakawhanaketanga o nga rarangi matarohia o nga taha, ka whakaaro ahau ki te aro ki o raatau "whakawhanaketanga/manga/whakarereketanga/whakarereketanga", ara: te vector tata me te huinga hononga hono.

3.1 Vector Whakatata

Take (a1): kauwhata kore taumaha

Ka karangahia he vector tata mo te kauwhata kore taumaha he huinga raupapa o te tau taurite (a[2i], a[2i+1],..., kei te tatauhia te i c 0), kei roto ia takirua tau. he [2i], he [2i+1 ] he tohu kauwhata i waenganui i nga poupou a[2i] me a[2i+1], ia.
Karekau he korero kei roto i tenei whakatakotoranga rekoata mo te anga o te kauwhata (ka taea nga whiringa e rua). Ina whakamahi ana i te whakatakotoranga digraph, ka kiia ko te tapa te ahu mai i te [2i] ki te [2i+1]. I konei me raro: mo nga kauwhata kore, mena e tika ana, ka taea te tono i nga whakaritenga mo te raupapa o te tuhi i nga poupou (hei tauira, ko te tohu me te uara iti o te tau kua tohua ki a ia ka puta tuatahi).

I roto i te C++, he mea tika ki te tohu i tetahi vector taapiri ma te whakamahi i te std::vector, no reira te ingoa o tenei hanganga raraunga.

Take (a2): kauwhata kore taumaha, he tauoti nga taumahatanga tapa

Ma te whakataurite ki te take (a1), ka kiia te vector piri mo te kauwhata taumaha me nga taumahatanga tapaoti tauoti he huinga raupapa (te huinga hihiri) o nga tau (a[3i], a[3i+1], a[3i+2], ..., ko te i te nama c 0), ko ia "takitoru" o nga tau a[3i], a[3i+1], a[3i+2] ka tohu i te tapa o te kauwhata i waenga i nga poutoko kua tau a[3i] me te a[3i+1], ko te uara a [3i+2] te taumaha o tenei tapa. Ko te kauwhata penei ka taea te whakatika, kaore ranei.

Take (b): kauwhata kore taumaha, taumaha tapa tauoti kore

I te mea kaore e taea te penapena huānga rereke i roto i te huinga kotahi (vector), hei tauira, ka taea te whakatinanatanga e whai ake nei. Ka penapenahia te kauwhata ki roto i nga vectors takirua, ko te vector tuatahi ko te vector tata o te kauwhata me te kore e tohu i nga taumahatanga, kei roto i te vector tuarua nga taumahatanga e rite ana (ka taea te whakatinana mo C++: std::pair ). No reira, mo te tapa kua tautuhia e te rua o nga poupou i raro i nga tohu 2i, 2i+1 o te vector tuatahi, ka rite te taumaha ki te huānga kei raro i te taupū i o te vector tuarua.

Ana, he aha te take e tika ai tenei?

Ana, i kitea e te kaituhi o enei rarangi he tino pai mo te whakaoti rapanga maha. Ana, mai i te tirohanga okawa, ka puta nga painga e whai ake nei:

  • Ko te vector taapiri, pera i etahi atu hanganga "whakaraupapa", he tino totika, he iti ake te mahara ki te matrix tatai (mo nga kauwhata iti), he ngawari ki te whakatinana.
  • Ko nga poupou o te kauwhata, hei tikanga, ka taea hoki te tohu ki nga tau kino. He aha mehemea ka hiahiatia he "whakakino"?
  • Ka taea e nga kauwhata nga tapa maha me nga koropiko maha, me nga taumaha rereke (he pai, he kino, he kore noa). Karekau he here i konei.
  • Ka taea hoki e koe te tautapa i nga ahuatanga rereke ki nga taha - engari mo etahi atu korero, tirohia te waahanga 4.

Engari, me whakaae ko tenei "rarangi" kaore e kii i te uru tere ki te taha. Na konei ka tae mai te Associative Adjacency Array ki te whakaora, e korerohia ana i raro nei.

3.2 Huranga pirihono hono

Na, ki te uru atu ki tetahi tapa motuhake, he mea nui ki a tatou tona taumaha me etahi atu taonga, a, kaore e taea e nga whakaritenga mahara te whakamahi i te matrix tatai, katahi ka whakaaro me pehea e taea ai e tatou te whakarereke i te vector taapiri hei whakaoti i tenei raru. Na, ko te matua he tapa o te kauwhata, ka taea te tohu hei takirua tauoti kua whakaritea. He aha te ahua o tenei? Ehara i te mea he mea matua i roto i te huinga hono? A, ki te pera, he aha tatou e kore ai e whakatinana? Tukuna he huinga hono ka hono ia ki - he takirua tauoti kua whakaritea - ki tetahi uara - he tauoti, he tau tuturu ranei e tohu ana i te taumaha o te tapa. I roto i te C++, he mea tika kia whakatinanahia tenei hanganga i runga i te ipu std::map (std::map , int> ranei std::map , double>), ranei std::maherehere ki te hiahia kia maha nga tapa. Ana, he anga ta matou mo te penapena kauwhata he iti ake te mahara ki nga hanganga "matrix", ka taea te tautuhi kauwhata me nga koropiko maha me nga tapa, kaore hoki he tino whakaritenga mo te kore-kino o nga tau vertex (Kaore au e mohio ko wai e hiahia ana ki tenei, engari tonu).

4. Kua ki tonu nga hanganga raraunga, engari kei te ngaro tetahi mea

A he pono: i te whakaoti rapanga maha, me tautapa etahi ahuatanga ki nga tapa o te kauwhata, me te rongoa. Mena ka taea te whakaiti i enei ahuatanga ki nga tauoti, ka taea te penapena i nga "kauwhata me etahi atu waahanga" ma te whakamahi i nga putanga roa o te vector piri me te huinga taapiri hono.

Na, me waiho he kauwhata kore taumaha, mo ia tapa e tika ana ki te penapena, hei tauira, e 2 nga waahanga taapiri kua tohua e te tauoti. I roto i tenei take, ka taea te tautuhi i tana vector tata hei huinga raupapa ehara i te "takirua", engari he "whawha" o nga tauoti (a[2i], a[2i+1], a[2i+2], a [2i+3]…) , ka whakatauhia e a[2i+2] me a[2i+3] nga ahuatanga o te tapa e rite ana. Mo te kauwhata whai taumaha tauoti o nga tapa, he rite tonu te raupapa (ko te rereke anake ko nga huanga ka whai i te taumaha o te tapa, ka tohua e nga huānga a[2i+3] me a[2i+4] , a ko te taha tonu ka tohuhia ehara i te 4, engari 5 nga tau kua whakaritea). A, mo te kauwhata me nga taumahatanga tapa-kore, ka taea te tuhi i nga ahuatanga ki roto i tana waahanga kore taumaha.

Ina whakamahi ana i te huānga pirihono hono mo nga kauwhata whai taumaha tapa tauoti, ka taea te tohu hei uara ehara i te tau kotahi, engari he huānga (vector) o nga tau e tohu ana, hei taapiri i te taumaha o tetahi tapa, me era atu mea e tika ana. āhuatanga. I te wa ano, he raru mo te keehi o nga taumahatanga kore-tauoti ko te hiahia ki te tohu i tetahi tohu me te tau ira maanu (ae, he raru tenei, engari mena kaore i te maha nga tohu penei, a ki te kore koe e mahi. Kaua e whakatauhia kia rua nga mea "tinihanga", katahi ka kore noa iho). Ko te tikanga, i roto i te C++, ka taea te tautuhi i nga huinga taapiri honotanga e whai ake nei: std::map , std::vector> or std::map , std::vector, ko te uara tuatahi i roto i te “key-value-vector” ko te taumaha o te tapa, katahi ka kitea nga tohu tau o ona huanga.

Pukapuka:

Mō ngā kauwhata me ngā hātepe hātepe whānui:

1. Cormen, Thomas H., Leiserson, Charles I., Rivest, Ronald L., Stein, Clifford. Algorithms: hanga me te tātari, putanga tuarua: Trans. mai i te reo Ingarihi – M.: Williams Publishing House, 2.
2. Harari Frank. Te ariā kauwhata. M.: Mir, 1973.
Ko te purongo a te kaituhi mo enei momo vector me te huinga hono o nga taapiri:
3. Chernoukhov S.A. Vector tata me te huinga pirihono hono hei huarahi hei tohu me te penapena kauwhata / SA Chernouhov. Ko te vector taapiri me te mapi taapiri hei hanganga raraunga hei tohu i te kauwhata // Kohinga tuhinga o te Huihuinga Putaiao me nga Mahi Mahi "Nga raru o te whakatinana i nga hua o nga whanaketanga auaha me nga huarahi hei whakaoti" (Saratov, Mahuru 14.09.2019, 2019). – Sterlitamak: AMI, 65, wh. 69-XNUMX
He puna ipurangi whai hua mo te kaupapa:
4. prog-cpp.ru/data-graph
5. ejuo.livejournal.com/4518.html

Source: will.com

Tāpiri i te kōrero