ဂရပ်များကို သိမ်းဆည်းရန်အတွက် ဒေတာဖွဲ့စည်းပုံများ- ရှိပြီးသားအရာများကို ပြန်လည်သုံးသပ်ခြင်းနှင့် "အသစ်နီးပါး" နှစ်ခု

ဟယ်လို။

ဤမှတ်စုတွင်၊ ကွန်ပျူတာသိပ္ပံတွင် ဂရပ်များကို သိမ်းဆည်းရန် အသုံးပြုသည့် အဓိကဒေတာဖွဲ့စည်းပုံများကို စာရင်းပြုစုရန် ဆုံးဖြတ်ခဲ့ပြီး၊ ကျွန်ုပ်အတွက် တစ်နည်းနည်းဖြင့် “ပုံသွင်းထား” သော နောက်ထပ်ဖွဲ့စည်းပုံအချို့ကိုလည်း ပြောပြပါမည်။

ဒါဆို စလိုက်ရအောင်။ ဒါပေမယ့် အစကတည်းက မဟုတ်ဘူး - ဂရပ်တစ်ခုဆိုတာ ဘာလဲဆိုတာနဲ့ အဲဒါတွေက (ညွှန်ပြတာ၊ ညွှန်ပြတာ၊ ချိန်ဆတာ၊ အလေးချိန်မပါတဲ့၊ အစွန်းများစွာနဲ့ ကွင်းပတ်) တွေကို အားလုံးသိပြီးသားလို့ထင်ပါတယ်။

ဒါဆို သွားကြရအောင်။ "ဂရပ်ဖစ်သိုလှောင်မှု" အတွက် ဒေတာဖွဲ့စည်းပုံများအတွက် မည်သည့်ရွေးချယ်စရာများ ကျွန်ုပ်တို့တွင်ရှိသနည်း။

1. Matrix ဒေတာတည်ဆောက်ပုံများ

1.1 ကပ်လျက်မက်ထရစ်။ ကပ်လျက်မက်ထရစ်သည် အတန်းနှင့်ကော်လံခေါင်းစီးများသည် ဂရပ်၏ ဒေါင်လိုက်နံပါတ်များနှင့် သက်ဆိုင်ပြီး ၎င်း၏ဒြပ်စင်တစ်ခုစီ၏တန်ဖိုးကို ထောင့်စွန်းများကြားရှိ အစွန်းများကြားရှိ သို့မဟုတ် မရှိခြင်းမှ ဆုံးဖြတ်သည်။ i နှင့် j (လမ်းညွှန်မထားသောဂရပ်တစ်ခုအတွက်၊ ထိုကဲ့သို့သော matrix သည် အချိုးကျလိမ့်မည်၊ သို့မဟုတ် ကျွန်ုပ်တို့သည် တန်ဖိုးအားလုံးကို ပင်မထောင့်ဖြတ်အထက်တွင်သာ သိမ်းဆည်းကြောင်း ကျွန်ုပ်တို့သဘောတူနိုင်သည်)။ အလေးမထားသောဂရပ်များအတွက် a(i,j) ကို i မှ j အနားသတ်အရေအတွက်ဖြင့် သတ်မှတ်နိုင်သည် (ထိုအစွန်းများမရှိပါက a(i,j)= 0) နှင့် အလေးချိန်ဂရပ်များအတွက် အလေးချိန်အားဖြင့်လည်း သတ်မှတ်နိုင်သည်။ ဖော်ပြထားသော အစွန်းများ၏ (စုစုပေါင်းအလေးချိန်)။

1.2 ဖြစ်ပွားမှု matrix ဤကိစ္စတွင်၊ ကျွန်ုပ်တို့၏ဂရပ်ဖစ်ကို စည်းကမ်းအရ၊ အတန်းနံပါတ်များသည် ၎င်း၏ ဒေါင်လိုက်နံပါတ်များနှင့် ကိုက်ညီပြီး ကော်လံနံပါတ်များသည် ကြိုတင်နံပါတ်တပ်ထားသော အစွန်းများနှင့် သက်ဆိုင်ပါသည်။ အစွန်းတစ်ခုနှင့် အစွန်းသည် တစ်ခုနှင့်တစ်ခု ဖြစ်ပျက်နေပါက၊ သုညမဟုတ်သောတန်ဖိုးကို သက်ဆိုင်ရာဆဲလ်တွင် ရေးထားသည် (ညွှန်ပြခြင်းမရှိသော ဂရပ်များအတွက်၊ 1 သည် vertex နှင့် edge သည် အဖြစ်အပျက်ဖြစ်ပြီး၊ ဦးတည်ထားသူများအတွက် - အစွန်းဖြစ်ပါက "1" ၎င်းတွင် "ပါဝင်သည်" ရှိပါက အောက်ခြေမှ "ထွက်" နှင့် "-1" (၎င်းတွင် "အနုတ်" သင်္ကေတသည်လည်း နံပါတ် "-1" တွင် "ပါဝင်သည်" ဟုထင်ရသောကြောင့်)))။ တွက်ဆထားသောဂရပ်များအတွက်၊ 1 နှင့် -1 အစား အစွန်း၏စုစုပေါင်းအလေးချိန်ကို သင်သတ်မှတ်နိုင်သည်။

2. စာရင်းကောက်ဒေတာဖွဲ့စည်းပုံများ

2.1 ကပ်လျက်စာရင်း။ ကောင်းပြီ၊ ဤတွင်အရာအားလုံးရိုးရှင်းပုံရသည်။ ယေဘုယျအားဖြင့် ဂရပ်၏ vertex တစ်ခုစီသည် ပေးထားသည့် တစ်ခုနှင့် ကပ်လျက် ရှိသော vertices အားလုံး၏ နံပါတ်များကို သိမ်းဆည်းမည့် မည်သည့် စာရင်းကောက်ဖွဲ့စည်းပုံ (စာရင်း၊ ကွက်လပ်၊ အခင်းအကျင်း၊ ...) နှင့် ဆက်စပ်နိုင်သည်။ ညွှန်ပြထားသောဂရပ်များအတွက်၊ အင်္ဂါရပ် vertex မှ "ညွှန်ပြသော" အစွန်းများရှိသည့် ဒေါင်လိုက်များကိုသာ ဤစာရင်းထဲသို့ ပေါင်းထည့်ပါမည်။ တွက်ဆထားသော ဂရပ်များအတွက် အကောင်အထည်ဖော်မှုသည် ပိုမိုရှုပ်ထွေးမည်ဖြစ်သည်။

2.2 နံရိုးများစာရင်း။ အတော်လေးရေပန်းစားသောဒေတာဖွဲ့စည်းပုံ။ Captain Obviousness ကကျွန်ုပ်တို့အားပြောပြသည့်အတိုင်း အစွန်းများစာရင်းသည် အမှန်တကယ်တွင် ဂရပ်၏အစွန်းများစာရင်းဖြစ်သည်၊ တစ်ခုစီသည် အစ vertex ၊ ending vertex ဖြင့်သတ်မှတ်ထားသော (တစ်ခုချင်းစီကို လမ်းညွှန်မထားသောဂရပ်များအတွက် ဤနေရာ၌ အမှာစာသည် အရေးမကြီးပါ၊ သင်ပေါင်းစည်းနိုင်သော်လည်း၊ အမျိုးမျိုးသော စည်းမျဥ်းများ ဥပမာအားဖြင့် တိုးလာရန်အတွက် ဒေါင်လိုက်များကို သတ်မှတ်ခြင်း) နှင့် အလေးချိန် (အလေးချိန်ရှိသော ဂရပ်များအတွက်သာ)။

အထက်တွင်ဖော်ပြထားသော matrix စာရင်းများကို ပိုမိုအသေးစိတ် (ဥပမာ သရုပ်ဖော်ပုံများဖြင့်) ကြည့်ရှုနိုင်ပါသည်။ ဒီမှာ.

2.3 ကပ်လျက်နေရာခင်း။ အသုံးအများဆုံးဖွဲ့စည်းပုံမဟုတ်ပါ။ ၎င်း၏အဓိကတွင်၊ ၎င်းသည် စာရင်းကောက်ဖွဲ့စည်းပုံ (array၊ vector) တစ်ခုသို့ “packing” adjacency lists ပုံစံဖြစ်သည်။ ထို array ၏ ပထမ n (ဂရပ်၏ ဒေါင်လိုက် အရေအတွက်အရ) ဒြပ်စင်များတွင် တူညီသော array ၏ အစအညွှန်းများပါရှိပြီး၊ ပေးထားသော တစ်ခုနှင့် ကပ်လျက် ရှိသော ဒေါင်လိုက် အားလုံးကို ဆက်တိုက် ရေးထားသည်မှ စတင်သည်။

ဤတွင် ကျွန်ုပ်သည် နားလည်နိုင်ဆုံးသော (ကိုယ်တိုင်အတွက်) ရှင်းလင်းချက်ကို တွေ့ရှိခဲ့သည်- ejuo.livejournal.com/4518.html

3. Adjacency Vector နှင့် Associative Adjacency Array

ပရော်ဖက်ရှင်နယ်ပရိုဂရမ်မာတစ်ဦးမဟုတ်ဘဲ ဂရပ်ဖစ်များကို အချိန်အခါအလိုက် ကိုင်တွယ်ဖြေရှင်းပေးသူဖြစ်ပြီး အများစုမှာ အစွန်းများစာရင်းများကို ကိုင်တွယ်ဖြေရှင်းလေ့ရှိကြောင်း ဤစာကြောင်းများ၏စာရေးသူမှာ တွေ့ရှိရသည်။ အမှန်မှာ၊ ဂရပ်တွင် loops နှင့် edges များစွာပါလျှင် အဆင်ပြေပါသည်။ ထို့ကြောင့်၊ ဂန္ထဝင်အစွန်းများစာရင်းများ ဖွံ့ဖြိုးတိုးတက်ရေးတွင်၊ ၎င်းတို့သည် ၎င်းတို့၏ "ဖွံ့ဖြိုးတိုးတက်မှု/အကိုင်းအခက်/ပြုပြင်မွမ်းမံခြင်း/ဗီဇပြောင်းလဲခြင်း" ကို အာရုံစိုက်ရန် အဆိုပြုသည်- ဥပမာ- adjacency vector နှင့် associative adjacency array တို့ဖြစ်သည်။

3.1 Adjacency vector

Case (a1) : အလေးမထားသော ဂရပ်

အလေးမထားသောဂရပ်တစ်ခုအတွက် ကပ်လျက်ကိန်းဂဏန်းတစ်ခုကို ကိန်းပြည့်အတွဲတစ်ခုစီ၏ အစီအစဥ် (a[2i]၊ a[2i+1]၊...၊ i နံပါတ် c 0) ဟူသော ဂဏန်းအတွဲတစ်ခုစီတွင်၊ a[2i]၊ a[2i+1] သည် a[2i] နှင့် a[2i+1] အကြား ဂရပ်ဖစ်အစွန်းတစ်ခုကို အသီးသီး သတ်မှတ်သည်။
ဤအသံသွင်းဖော်မတ်တွင် ဂရပ်ကို ညွှန်ကြားခြင်းရှိမရှိအကြောင်း အချက်အလက်မပါဝင်ပါ (ရွေးချယ်စရာနှစ်ခုလုံး ဖြစ်နိုင်သည်)။ Digraph ဖော်မတ်ကို အသုံးပြုသည့်အခါ အစွန်းအား a[2i] မှ [2i+1] သို့ ညွှန်ကြားသည်ဟု ယူဆပါသည်။ ဤနေရာနှင့် အောက်တွင်- လမ်းညွှန်မထားသော ဂရပ်များအတွက် လိုအပ်ပါက၊ ဒေါင်လိုက်များ မှတ်တမ်းတင်ခြင်း အစီအစဥ်အတွက် လိုအပ်ချက်များကို အသုံးချနိုင်သည် (ဥပမာ၊ ၎င်းအား သတ်မှတ်ပေးထားသည့် နံပါတ်၏နိမ့်သောတန်ဖိုးရှိသော ထိပ်တန်းသည် ဦးစွာရောက်ရှိသည်)။

C++ တွင် std::vector ကို အသုံးပြု၍ adjacency vector တစ်ခုကို သတ်မှတ်ရန် အကြံပြုလိုသည်၊ ထို့ကြောင့် ဤဒေတာဖွဲ့စည်းပုံ၏ အမည်ကို ဖော်ပြထားသည်။

Case (a2)- အလေးမထားသောဂရပ်၊ အစွန်းအလေးများသည် ကိန်းပြည့်ဖြစ်သည်။

ဖြစ်ရပ် (a1) နှင့် ယှဉ်တွဲ၍ ကိန်းပြည့်အစွန်းဖြင့် အလေးချိန်ရှိသော ဂရပ်အတွက် ကပ်လျက် vector ကို ဂဏန်းများ (a[3i]၊ a[3i+1]၊ a[3i+2]၊ ငါက c 0 လို့ရေတွက်ထားတဲ့နေရာ)၊ a[3i]၊ a[3i+1]၊ a[3i+2] က a[3i] နံပါတ်တပ်ထားတဲ့ ဒေါင်လိုက်တွေကြားက ဂရပ်တွေရဲ့ အစွန်းတစ်ခုကို သတ်မှတ်ပါတယ်။ နှင့် a[3i+1] အသီးသီးရှိပြီး တန်ဖိုး a [3i+2] သည် ဤအစွန်း၏အလေးချိန်ဖြစ်သည်။ ထိုကဲ့သို့ ဂရပ်ဖစ်ကိုလည်း ညွှန်ကြားနိုင်သည်ဖြစ်စေ မပြုလုပ်နိုင်ပါ။

Case (b) : အလေးမထားသောဂရပ်၊ ကိန်းပြည့်မဟုတ်သော အစွန်းများ

array (vector) တစ်ခုတွင် ကွဲပြားသောဒြပ်စင်များကို သိမ်းဆည်းရန် မဖြစ်နိုင်သောကြောင့် ဥပမာအားဖြင့်၊ အောက်ပါ အကောင်အထည်ဖော်မှု ဖြစ်နိုင်သည်။ ဂရပ်ကို အလေးမသတ်မှတ်ဘဲ ပထမ vector သည် ဂရပ်၏ ကပ်လျက် vector ဖြစ်သည့် vector တစ်စုံတွင် သိမ်းဆည်းထားပြီး ဒုတိယ vector တွင် သက်ဆိုင်ရာ အလေးချိန်များပါရှိသည် (C++ အတွက် ဖြစ်နိုင်ချေ အကောင်အထည်ဖော်မှု: std::pair ) ထို့ကြောင့်၊ အညွှန်း 2i၊ ပထမပုံ၏ 2i+1 အောက်ရှိ ဒေါင်လိုက်တစ်စုံက သတ်မှတ်ထားသော အစွန်းတစ်ခုအတွက် အလေးချိန်သည် ဒုတိယ vector ၏ အညွှန်း i အောက်ရှိ ဒြပ်စင်နှင့် ညီမျှမည်ဖြစ်သည်။

အင်း၊ ဒါက ဘာကြောင့် လိုအပ်တာလဲ။

ကောင်းပြီ၊ ဤစာကြောင်းများကို ရေးသားသူသည် ပြဿနာများစွာကို ဖြေရှင်းရန်အတွက် အလွန်အသုံးဝင်ကြောင်း တွေ့ရှိခဲ့သည်။ ကောင်းပြီ၊ တရားဝင်အမြင်အရ၊ အောက်ပါအားသာချက်များ ရှိလိမ့်မည်-

  • အခြား "ကိန်းဂဏန်းများ" တည်ဆောက်ပုံကဲ့သို့ ကပ်လျက်နေပုံသည် အလွန်ကျစ်လျစ်ပြီး ကပ်လျက်မက်ထရစ် (ကျဲဂရပ်များအတွက်) ထက် မှတ်ဉာဏ်နည်းပါးပြီး အကောင်အထည်ဖော်ရန် အတော်လေး လွယ်ကူသည်။
  • မူအရ ဂရပ်၏ ဒေါင်လိုက်များကို အနှုတ်နံပါတ်များဖြင့် မှတ်သားနိုင်သည်။ ထိုသို့သော “ဖောက်ပြန်ခြင်း” ကို လိုအပ်ပါက မည်သို့နည်း။
  • ဂရပ်ဖစ်များသည် ကွဲပြားခြားနားသောအလေးချိန်များ (အပြုသဘော၊ အနုတ်၊ သုညပင်) ဖြင့် အစွန်းများစွာနှင့် ကွင်းများစွာ ပါဝင်နိုင်သည်။ ဤနေရာတွင် ကန့်သတ်ချက်များ မရှိပါ။
  • သင်သည် မတူညီသော ဂုဏ်သတ္တိများကို အစွန်းများသို့လည်း သတ်မှတ်နိုင်သည် - သို့သော် ၎င်းနှင့်ပတ်သက်ပြီး နောက်ထပ်သိရှိလိုပါက အပိုင်း 4 ကို ကြည့်ပါ။

သို့သော်၊ ဤ "စာရင်း" သည် အစွန်းသို့ အမြန်ဝင်ရောက်ခွင့်ကို ဆိုလိုခြင်းမဟုတ်ကြောင်း ဝန်ခံရပါမည်။ ဤနေရာတွင် Associative Adjacency Array သည် အောက်တွင် ဆွေးနွေးထားသော ကယ်တင်ခြင်းသို့ ရောက်ပါသည်။

3.2 Associative adjacency array

ထို့ကြောင့်၊ တိကျသောအစွန်းတစ်ခုသို့ဝင်ရောက်ခွင့်၊ ၎င်း၏အလေးချိန်နှင့် အခြားဂုဏ်သတ္တိများသည် ကျွန်ုပ်တို့အတွက် အရေးပါပြီး မှတ်ဉာဏ်လိုအပ်ချက်များက ကျွန်ုပ်တို့အား adjacency matrix ကိုအသုံးပြုခွင့်မပြုပါက၊ ဤပြဿနာကိုဖြေရှင်းရန် adjacency vector ကို မည်သို့ပြောင်းလဲနိုင်သည်ကို စဉ်းစားကြည့်ကြပါစို့။ ထို့ကြောင့်၊ သော့သည် ဂရပ်၏အစွန်းတစ်ခုဖြစ်ပြီး၊ အစဉ်လိုက်ကိန်းပြည့်အတွဲအဖြစ် သတ်မှတ်နိုင်သည်။ ဒါက ဘယ်လိုပုံလဲ။ ၎င်းသည် associative array တွင် သော့တစ်ခုမဟုတ်လော။ ဒါဆိုလျှင်၊ ငါတို့က ဘာလို့ အကောင်အထည်မဖော်တာလဲ။ သော့တစ်ခုစီ - စီထားသော ကိန်းပြည့်အတွဲ - တန်ဖိုးတစ်ခု - အစွန်း၏အလေးချိန်ကိုသတ်မှတ်သည့် ကိန်းပြည့် သို့မဟုတ် အစစ်အမှန်နံပါတ်တစ်ခုနှင့် ဆက်စပ်နေသည့် ဆက်စပ်အခင်းတစ်ခုရှိကြပါစို့။ C++ တွင် std::map container (std::map ကိုအခြေခံ၍ ဤဖွဲ့စည်းပုံကိုအကောင်အထည်ဖော်ရန်အကြံပြုလိုပါသည်။ , int> သို့မဟုတ် std::မြေပုံ အစွန်းများစွာကို မျှော်လင့်ထားလျှင် , double>), သို့မဟုတ် std::multimap။ ကောင်းပြီ၊ ကျွန်ုပ်တို့တွင် "matrix" တည်ဆောက်ပုံများထက် မှတ်ဉာဏ်နည်းသော ဂရပ်ဖစ်များကို သိမ်းဆည်းရန်အတွက် တည်ဆောက်ပုံ၊ အကွက်များနှင့် အစွန်းများစွာရှိသော ဂရပ်များကို သတ်မှတ်နိုင်ပြီး vertex နံပါတ်များ၏ အနုတ်လက္ခဏာမဟုတ်သည့်အတွက် တင်းကျပ်သောလိုအပ်ချက်များပင်မရှိပါ (ကျွန်တော်မသိပါ။ ဒါဘယ်သူလိုအပ်သေးလဲ)။

4. ဒေတာတည်ဆောက်ပုံများ ပြည့်နေသော်လည်း တစ်ခုခုတော့ လွဲနေသည်။

၎င်းသည် အမှန်ဖြစ်သည်- ပြဿနာအများအပြားကို ဖြေရှင်းသည့်အခါ၊ ကျွန်ုပ်တို့သည် ဂရပ်၏အစွန်းများသို့ လက္ခဏာအချို့ကို သတ်မှတ်ပေးကာ ၎င်းတို့ကို သိမ်းဆည်းရန် လိုအပ်ပေမည်။ အကယ်၍ ၎င်းသည် ဤအင်္ဂါရပ်များကို ကိန်းပြည့်များသို့ ရှင်းရှင်းလင်းလင်း လျှော့ချရန် ဖြစ်နိုင်ပါက၊ ၎င်းသည် adjacency vector နှင့် associative adjacency array ၏ တိုးချဲ့ဗားရှင်းများကို အသုံးပြု၍ ထိုကဲ့သို့သော "ဂရပ်များနှင့်အတူ အပိုဆောင်းအင်္ဂါရပ်များ" ကို သိမ်းဆည်းထားနိုင်သည်။

ထို့ကြောင့်၊ ဥပမာ၊ ကိန်းပြည့်ဖြင့်သတ်မှတ်ထားသော နောက်ထပ်အင်္ဂါရပ် ၂ ခုကို သိမ်းဆည်းရန် အစွန်းတစ်ခုစီအတွက် အလေးမထားသော ဂရပ်တစ်ခုရှိပါစေ။ ဤကိစ္စတွင်၊ ၎င်း၏ ကပ်လျက်ရှိသည့် vector ကို "အတွဲများ" မဟုတ်ဘဲ ကိန်းပြည့် "လေးပုံတစ်ပုံ" ၏ အစီအစဥ်အဖြစ် သတ်မှတ်နိုင်သည် (a[2i]၊ a[2i+2]၊ a[1i+2]၊ a [2i+2]…) ၊ a[3i+2] နှင့် [2i+2] သည် သက်ဆိုင်ရာ အစွန်း၏ ဝိသေသလက္ခဏာများကို ဆုံးဖြတ်မည်ဖြစ်သည်။ အစွန်းများ၏ ကိန်းပြည့်အလေးများပါသည့် ဂရပ်တစ်ခုအတွက်၊ အစီအစဥ်သည် ယေဘူယျအားဖြင့် ဆင်တူသည် (တစ်ခုတည်းသော ကွာခြားချက်မှာ အစွန်း၏အလေးချိန်ကို လိုက်နာရမည်ဖြစ်ပြီး အင်္ဂါရပ်များ a[3i+2] နှင့် a[3i+2] ဖြင့် သတ်မှတ်ပေးမည်ဖြစ်သည်။ ၊ နှင့်အစွန်းကိုယ်တိုင်က 4 မဟုတ်သော်လည်း 4 နံပါတ်များကိုသတ်မှတ်ထားလိမ့်မည်။) ကိန်းပြည့်မဟုတ်သော အစွန်းအလေးများပါသည့် ဂရပ်တစ်ခုအတွက်၊ အင်္ဂါရပ်များကို ၎င်း၏အလေးချိန်မရှိသော အစိတ်အပိုင်းတွင် ရေးသားနိုင်သည်။

ကိန်းပြည့်အစွန်းအလေးများပါသည့် ဂရပ်များအတွက် ဆက်စပ်ဆက်စပ် ဆက်စပ်အခင်းအကျင်းကို အသုံးပြုသည့်အခါ၊ ၎င်းသည် ဂဏန်းတစ်လုံးတည်းမဟုတ်ဘဲ တန်ဖိုးတစ်ခုအဖြစ် သတ်မှတ်နိုင်သော်လည်း အစွန်းတစ်ခု၏အလေးချိန်အပြင် အခြားလိုအပ်သည့်အရာအားလုံးကို သတ်မှတ်ပေးသည့် ဂဏန်းများ၏ အခင်းအကျင်း (vector)၊ အင်္ဂါရပ်များ။ တစ်ချိန်တည်းမှာပင်၊ ကိန်းပြည့်မဟုတ်သော အလေးများအတွက် အဆင်မပြေမှုမှာ ရေပေါ်အမှတ်အမှတ်ဖြင့် သင်္ကေတတစ်ခု သတ်မှတ်ရန် လိုအပ်လိမ့်မည် (ဟုတ်ပါတယ်၊ ဒါက အဆင်မပြေပါ၊ ဒါပေမယ့် အဲဒီလို လက္ခဏာတွေ အများကြီးမရှိရင်၊ သင်လုပ်ရင်၊ ၎င်းတို့ကို အလွန် "ဆန်းကျယ်သော" နှစ်ဆဟု မသတ်မှတ်ပါနှင့်၊ ထို့နောက် ၎င်းသည် ဘာမှဖြစ်နိုင်သည်)။ ဆိုလိုသည်မှာ C++ တွင် တိုးချဲ့ထားသော associative adjacency array များကို အောက်ပါအတိုင်း သတ်မှတ်နိုင်သည်- std::map , std::vector> သို့မဟုတ် std::map , std::vector တွင် "သော့တန်ဖိုး-vector" ရှိ ပထမတန်ဖိုးသည် အစွန်း၏အလေးချိန်ဖြစ်မည်ဖြစ်ပြီး၊ ထို့နောက် ၎င်း၏လက္ခဏာရပ်များ၏ ကိန်းဂဏာန်းပုံစံများတည်ရှိသည်။

စာပေ:

ယေဘုယျအားဖြင့် ဂရပ်များနှင့် အယ်လဂိုရီသမ်များအကြောင်း-

1. Cormen, Thomas H., Leiserson, Charles I., Rivest, Ronald L., Stein, Clifford. အယ်လဂိုရီသမ်များ- တည်ဆောက်မှုနှင့် ခွဲခြမ်းစိတ်ဖြာမှု၊ 2nd ထုတ်ဝေမှု- Trans အင်္ဂလိပ်ထံမှ – M.: Williams Publishing House၊ 2011။
2. Harari Frank။ ဂရပ်သီအိုရီ။ M.: Mir, 1973။
ဤတူညီသော vector နှင့် adjacencies ၏ဆက်စပ်မှုခင်းကျင်းခြင်းအကြောင်း စာရေးသူ၏အစီရင်ခံစာ။
3. Chernoukhov S.A. ဂရပ်များကို ကိုယ်စားပြုပြီး သိမ်းဆည်းရန် နည်းလမ်းများအဖြစ် ကပ်လျက် ကွက်ကွက်နှင့် ဆက်စပ်သော ကပ်လျက် ခင်းကျင်းမှု / SA Chernouhov ။ ဂရပ်ကိုကိုယ်စားပြုရန် ဒေတာဖွဲ့စည်းပုံများအဖြစ် ကပ်လျက်နေပုံနှင့် ကပ်လျက်မြေပုံ // နိုင်ငံတကာသိပ္ပံနှင့်လက်တွေ့ကွန်ဖရင့်၏ “ဆန်းသစ်တီထွင်ဆန်းသစ်တီထွင်မှုများ၏ရလဒ်များကို အကောင်အထည်ဖော်ရာတွင် ပြဿနာများနှင့် ၎င်းတို့ကိုဖြေရှင်းရန်နည်းလမ်းများ” (Saratov၊ စက်တင်ဘာ 14.09.2019၊ 2019)။ – Sterlitamak- AMI၊ 65၊ စ။ ၆၅-၆၉
ခေါင်းစဉ်အတွက် အသုံးဝင်သော အွန်လိုင်းရင်းမြစ်များ
4. prog-cpp.ru/data-graph
5. ejuo.livejournal.com/4518.html

source: www.habr.com

မှတ်ချက် Add