Usoro data maka ịchekwa eserese: nyocha nke ndị dị adị na abụọ "fọrọ nke nta ka ọ dị ọhụrụ".

Ndewonu onye obula.

N'ime ndetu a, ekpebiri m ịdepụta usoro data bụ isi a na-eji echekwa eserese na sayensị kọmputa, m ga-ekwukwa maka otu di na nwunye ndị ọzọ dị otú ahụ nke “crystallized” maka m.

Ya mere, ka anyị malite. Mana ọ bụghị site na mmalite - echere m na anyị niile amatalarị ihe eserese bụ na ihe ha bụ (eduzi, enweghị ntụzịaka, nha, enweghị oke, yana ma ọ bụ enweghị ọtụtụ akụkụ na loops).

Yabụ, ka anyị gawa. Kedu nhọrọ maka nhazi data maka "nchekwa eserese" anyị nwere?

1. Matrix data Ọdịdị

1.1 Adjacency matrix. The adjacency matrix bụ matrix ebe ahịrị na kọlụm isiokwu kwekọrọ na ọnụ ọgụgụ nke vertices nke eserese, na uru nke nke ọ bụla n'ime ya ọcha a(i,j) kpebisiri ike na ọnụnọ ma ọ bụ enweghị ọnụ n'etiti vertices. i na j (o doro anya na maka eserese na-enweghị ntụzi aka, matriks dị otú ahụ ga-abụ symmetrical, ma ọ bụ anyị nwere ike ikweta na anyị na-echekwa ụkpụrụ niile naanị n'elu diagonal isi). Maka eserese na-enweghị atụ, a (i,j) nwere ike ịtọ site na ọnụ ọgụgụ nke ọnụ site na i ruo j (ọ bụrụ na enweghị ihu dị otú ahụ, mgbe ahụ a(i,j) = 0), na maka eserese ndị dị arọ, nakwa site na ịdị arọ. (ngụkọta ibu) nke akụkụ ndị a kpọtụrụ aha.

1.2 Matrix ihe omume. N'okwu a, a na-echekwa eserese anyị na tebụl nke, dị ka a na-achị, ọnụ ọgụgụ ahịrị ahịrị na-adaba na ọnụ ọgụgụ nke vertices ya, na ọnụ ọgụgụ kọlụm kwekọrọ n'ọnụ ọnụ ụzọ. Ọ bụrụ na vertex na ọnụ na-eme ibe ha, mgbe ahụ, a na-ede uru na-abụghị efu na cell kwekọrọ (maka eserese ndị na-enweghị isi, edere 1 ma ọ bụrụ na vertex na ihu bụ ihe merenụ, maka eserese gbadoro ụkwụ - "1" ma ọ bụrụ na nsọtụ. "wepụ" site na vertex na "-1" ma ọ bụrụ na ọ "gụnyere" na ya (ọ dị mfe iji cheta, n'ihi na akara "mwepu" na-eyikwa ka ọ "gụnyere" na nọmba "-1")). Maka eserese ndị dị arọ, ọzọ, kama 1 na -1, ị nwere ike ịkọwapụta mkpokọta ịdị arọ nke ọnụ.

2. Nhazi data nchịkọta

2.1 Ndepụta adjacency. Ọfọn, ihe niile yiri ka ọ dị mfe ebe a. Vertex ọ bụla nke eserese ahụ nwere ike, n'ozuzu, jikọtara ya na nhazi ndekọ aha ọ bụla (ndepụta, vector, array, ...), nke ga-echekwa ọnụọgụ nke vertices niile dị n'akụkụ nke enyere. Maka eserese ndị eduzire, anyị ga-agbakwunye na ndepụta dị otú ahụ naanị vertices ndị ahụ nwere akụkụ “eduzi” site na vertex njirimara. Maka eserese ndị dị arọ, mmejuputa a ga-adị mgbagwoju anya.

2.2 Ndepụta nke ọgịrịga. Nhazi data ama ama. Ndepụta nke ọnụ, dị ka Captain doro anya na-agwa anyị, bụ n'ezie ndepụta nke akụkụ nke eserese ahụ, nke ọ bụla na-akọwapụta site na mmalite mmalite, njedebe njedebe (maka eserese ndị na-enweghị isi, iwu adịghị mkpa ebe a, ọ bụ ezie na maka ịdị n'otu ị nwere ike. jiri iwu dị iche iche, dịka ọmụmaatụ, ịkọwapụta vertices ka ọ na-abawanye) na ịdị arọ (maka eserese dị arọ naanị).

Ị nwere ike ilele ndepụta matrix ndị edepụtara n'elu n'ụzọ zuru ezu (yana ihe atụ), dịka ọmụmaatụ, ebe a.

2.3 N'usoro adjacency. Ọ bụghị usoro a na-ahụkarị. N'isi ya, ọ bụ ụdị nke "nkwakọ ngwaahịa" n'akụkụ ndepụta n'ime otu nhazi usoro (n'usoro, vector). Nke mbụ n (dị ka ọnụ ọgụgụ nke vertices nke eserese) ihe ndị dị otú ahụ nwere akara mmalite nke otu nhazi ahụ, na-amalite site na nke a na-ede akụkụ niile dị n'akụkụ nke e nyere n'ahịrị.

N'ebe a, ahụrụ m nkọwa kachasị nghọta (maka onwe m): ejuo.livejournal.com/4518.html

3. Adjacency Vector na Associative Adjacency Array

Ọ tụgharịrị na onye edemede nke ahịrị ndị a, ọ bụghị ịbụ onye mmemme ọkachamara, mana onye na-emekọ eserese oge ụfọdụ, na-ejikarị ndepụta nke akụkụ. N'ezie, ọ dị mma ma ọ bụrụ na eserese ahụ nwere ọtụtụ loops na ọnụ. Ya mere, na mmepe nke kpochapụwo anatara nke n'ọnụ, M na-atụ aro ịṅa ntị na ha "mmepe / alaka / mgbanwe / mmụgharị", ya bụ: adjacency vector na associative adjacency n'usoro.

3.1 Adjacency vector

Ikpe (a1): eserese na-enweghị atụ

Anyị ga-akpọ vector adjacency maka eserese na-enweghị oke, usoro iwu nyere iwu nke ọnụọgụ ọnụọgụgụ (a[2i], a[2i+1],..., ebe a na-agụ m ọnụ c 0), nke ọnụọgụ abụọ nke ọ bụla. bụ a[2i], a[2i+1] na-akọwapụta akụkụ eserese n'etiti vertices a[2i] na a[2i+1], otu n'otu.
Usoro ndekọ a enweghị ozi gbasara ma eduzi eserese ahụ (nhọrọ abụọ a ga-ekwe omume). Mgbe ị na-eji usoro digraph, a na-ewere ọnụ ya ka a ga-eduzi ya site na a[2i] gaa na [2i+1]. N'ebe a na n'okpuru: maka eserese ndị na-enweghị ntụzi aka, ọ bụrụ na ọ dị mkpa, enwere ike itinye ihe achọrọ maka usoro ntinye ederede (dịka ọmụmaatụ, na vertex nwere ọnụ ala dị ala nke ọnụ ọgụgụ e kenyere ya na-ebute ụzọ).

Na C ++, ọ bụ ihe amamihe dị na ya ịkọwa vector adjacency site na iji std :: vector, yabụ aha nhazi data a.

Ikpe (a2): Eserese na-enweghị atụ, nha ihu bụ integer

Site na ntụnyere na ikpe (a1), anyị na-akpọ vector adjacency maka eserese dị arọ nke nwere ọnụọgụ ọnụọgụ ọnụọgụ ọnụọgụ nọmba (a[3i], a[3i+1], a[3i+2], ..., ebe a na-agụ m ọnụ c 0), ebe "triplet" ọ bụla nke ọnụọgụgụ a[3i], a[3i+1], a[3i+2] na-akọwapụta nsọtụ eserese n'etiti vertices nwere nọmba a[3i] na a[3i+1], n'otu n'otu, na uru a [3i+2] bụ arọ nke akụkụ a. Ụdị eserese dị otú ahụ nwekwara ike iduzi ma ọ bụ ghara.

Ikpe (b): eserese na-enweghị atụ, ọ̀tụ̀tụ̀ ọnụ ọnụ na-abụghị ọnụọgụ

Ebe ọ bụ na ọ gaghị ekwe omume ịchekwa ihe dị iche iche dị iche iche n'otu nhazi (vector), dịka ọmụmaatụ, mmejuputa a ga-ekwe omume. A na-echekwa eserese ahụ na vectors abụọ, nke vector nke mbụ bụ vector dị n'akụkụ nke eserese na-akọwapụtaghị nha, vector nke abụọ nwere nha kwekọrọ (mmejuputa omume maka C ++: std :: abụọ). ). Ya mere, maka ọnụ ọnụ ụzọ abụọ akọwapụtara n'okpuru indexes 2i, 2i+1 nke vector nke mbụ, ịdị arọ ga-adaba na mmewere n'okpuru index i nke vector nke abụọ.

Ọfọn, gịnị kpatara nke a ji dị mkpa?

Ọfọn, onye dere ahịrị ndị a hụrụ na ọ bara uru nke ukwuu maka idozi ọtụtụ nsogbu. Ọfọn, site n'echiche nkịtị, a ga-enwe uru ndị a:

  • Vector dị n'akụkụ, dị ka usoro “ngụkọta” ọ bụla, dị obere kọmpat, na-ewe obere ebe nchekwa karịa matrix adjacency (maka eserese ndị na-adịghị ahụkebe), ọ dịkwa mfe iji mejuputa ya.
  • Akwụsị nke eserese ahụ, na ụkpụrụ, nwekwara ike iji ọnụọgụ na-adịghị mma akara. Gịnị ma ọ bụrụ na ọ dị mkpa “mgbagwoju anya” dị otú ahụ?
  • Eserese nwere ike ịnwe ọtụtụ akụkụ yana ọtụtụ loops, nwere nha dị iche iche (nke dị mma, adịghị mma, ọbụlagodi efu). Enweghị mgbochi ebe a.
  • Ị nwekwara ike kenye akụrụngwa dị iche iche n'akụkụ - mana maka ihe ndị ọzọ na nke ahụ, lee ngalaba 4.

Otú ọ dị, a ghaghị ikweta na "ndepụta" a apụtaghị ịnweta ngwa ngwa na nsọtụ. Na ebe a, Associative Adjacency Array na-abịa napụta, nke a na-atụle n'okpuru ebe a.

3.2 Njikọ n'usoro

Ya mere, ọ bụrụ na ịnweta ọnụ ọnụ kpọmkwem, ịdị arọ ya na ihe ndị ọzọ dị oké mkpa maka anyị, na ihe nchekwa chọrọ adịghị ekwe ka anyị jiri matrix adjacency, mgbe ahụ, ka anyị chee echiche banyere otú anyị nwere ike isi gbanwee vector adjacency iji dozie nsogbu a. Yabụ, igodo ahụ bụ nsọtụ eserese, nke enwere ike ịkọwapụta dị ka ọnụọgụ ọnụọgụgụ enyere iwu. Kedu ihe nke a dị? Ọ bụghị igodo n'usoro ihe mmekọrịta? Ma, ọ bụrụ otu a, gịnị kpatara na anyị anaghị etinye ya? Ka anyị nwee nhazi njikọ ebe igodo ọ bụla - ọnụọgụ ọnụọgụ abụọ nyere iwu - ga-ejikọta ya na uru - integer ma ọ bụ nọmba n'ezie nke na-akọwapụta ịdị arọ nke nsọtụ. Na C ++, ọ bụ ihe amamihe dị na ya mejuputa usoro a dabere na akpa std :: map (std :: map). , int> ma ọ bụ std :: map , ugboro abụọ>), ma ọ bụ std :: multimap ma ọ bụrụ na a na-atụ anya ọtụtụ akụkụ. Ọ dị mma, anyị nwere usoro maka ịchekwa eserese nke na-ewe obere ebe nchekwa karịa usoro “matrix”, nwere ike ịkọwa eserese nwere ọtụtụ loops na ọnụ ọnụ, yana enweghịdị ihe achọrọ siri ike maka enweghị nhụsianya nke ọnụọgụ vertex (Amaghị m. onye chọrọ nke a, mana ka).

4. Ihe owuwu data juputara, mana ihe na-efu efu

Ma ọ bụ eziokwu: mgbe anyị na-edozi ọtụtụ nsogbu, anyị nwere ike ịnye ụfọdụ njirimara na nsọtụ nke eserese ahụ ma, ya mere, chekwaa ha. Ọ bụrụ na ọ ga-ekwe omume ibelata njirimara ndị a n'enweghị mgbagha ka ọ bụrụ ọnụọgụ, mgbe ahụ, ọ ga-ekwe omume ịchekwa ụdị "graphs nwere njirimara ndị ọzọ" site na iji ụdị ogologo nke vector adjacency na associative adjacency array.

Ya mere, ka anyị nwee eserese na-enweghị atụ, maka akụkụ ọ bụla nke ọ dị mkpa iji chekwaa, dịka ọmụmaatụ, atụmatụ 2 ọzọ akọwapụtara site na ọnụọgụ. N'okwu a, ọ ga-ekwe omume ịkọwa vector dị n'akụkụ ya dị ka ihe enyere iwu na ọ bụghị nke "pairs", kama nke "quartets" nke integers (a[2i], a[2i+1], a[2i+2], a [2i+3]…) , ebe a[2i+2] na a[2i+3] ga-ekpebi njirimara nke nsọtụ kwekọrọ. Maka eserese nwere ọnụ ọgụgụ integer nke ọnụ, usoro a na-adịkarị ka (naanị ihe dị iche ga-abụ na njirimara ga-agbaso ịdị arọ nke ọnụ ma ihe ndị ahụ ga-akọwapụta ya site na a[2i+3] na [2i+4] , na ọnụ n'onwe ya ka a ga-akọwapụta ọ bụghị 4, mana nọmba 5 nyere iwu). Na maka eserese nke nwere oke ọnụ ọnụ na-abụghị ọnụọgụ, enwere ike idepụta atụmatụ ya n'ime akụrụngwa ya enweghị oke.

Mgbe ị na-eji ihe ndị na-akpakọrịta adjacency array maka eserese nwere ọnụọgụ ọnụọgụ ọnụọgụ ọnụọgụ, ọ ga-ekwe omume ịkọwapụta dị ka uru ọ bụghị otu nọmba, mana ọnụọgụ (vector) nke ọnụọgụ na-akọwapụta, na mgbakwunye na ịdị arọ nke ihu, ndị ọzọ niile dị mkpa. atụmatụ. N'otu oge ahụ, ihe na-adịghị mma maka ikpe nke ịdị arọ ndị na-abụghị ọnụọgụ ọnụọgụ ga-adị mkpa iji kọwaa akara na nọmba na-ese n'elu mmiri (ee, nke a bụ ihe na-adịghị mma, ma ọ bụrụ na enweghi ọtụtụ ihe ịrịba ama dị otú ahụ, ma ọ bụrụ na ị meghị ya. 'Tụkwa ha nke ukwuu" aghụghọ" okpukpu abụọ, mgbe ahụ ọ nwere ike ịbụ ihe ọ bụla) . Nke a pụtara na na C++ nwere ike ịkọwapụta ihe ndị ọzọ na-akpakọrịta dị ka ndị a: std :: map. , std :: vector > ma ọ bụ std :: map , std :: vector, nke uru mbụ dị na "key-value-vector" ga-abụ ịdị arọ nke ọnụ, mgbe ahụ, a na-edepụta aha ọnụọgụ nke njirimara ya.

Akwụkwọ:

Banyere eserese na algọridim n'ozuzu:

1. Cormen, Thomas H., Leiserson, Charles I., Rivest, Ronald L., Stein, Clifford. Algorithms: owuwu na nyocha, mbipụta nke abụọ: Trans. site na bekee – M.: Ụlọ obibi akwụkwọ Williams, 2.
2. Harari Frank. Ozizi eserese. M.: Ndewo, 1973.
Akuko onye odee gbasara otu vector na ihe mmekọ nke adjacencies:
3. Chernoukhov S.A. Adjacency vector na associative adjacency n'usoro dị ka ụzọ na-anọchi anya na-echekwa eserese / SA Chernouhov. Adjacency vector na adjacency map dị ka data Ọdịdị na-anọchi anya eserese // mkpokọta nke isiokwu nke International Scientific and Practical Conference "Nsogbu nke mmejuputa atumatu nke ọhụrụ mmepe na ụzọ isi dozie ha" (Saratov, September 14.09.2019, 2019). – Sterlitamak: AMI, 65, p. 69-XNUMX
Isi mmalite ịntanetị bara uru na isiokwu a:
4. prog-cpp.ru/data-graph
5. ejuo.livejournal.com/4518.html

isi: www.habr.com

Tinye a comment