java graph tutorial how implement graph data structure
Овај свеобухватни водич за Јава графиконе детаљно објашњава структуру података графикона. Обухвата како креирати, применити, представити и прећи графиконе у Јави:
Структура података графикона углавном представља мрежу која повезује различите тачке. Те тачке се називају врховима, а везе које повезују ове врхове називају се „ивице“. Дакле, граф г је дефинисан као скуп темена В и ивица Е који повезују та темена.
Графикони се углавном користе за представљање различитих мрежа попут рачунарских мрежа, друштвених мрежа итд. Такође се могу користити за представљање различитих зависности у софтверу или архитектури. Ови графикони зависности су врло корисни у анализи софтвера, а понекад и у отклањању грешака у њему.
=> Овде проверите СВЕ Јава туторијале.
Шта ћете научити:
- Структура података графикона Јава
- Како направити графикон?
- Имплементација графикона у Јави
- Јава Грапх Либрари
- Закључак
Структура података графикона Јава
Доље је дат граф који има пет темена {А, Б, Ц, Д, Е} и ивице дате {{АБ}, {АЦ}, {АД}, {БД}, {ЦЕ}, {ЕД}}. Како ивице не показују никакве правце, овај графикон је познат као „неусмерени графикон“.

Поред горе усмереног графа, у Јави постоји неколико варијанти графа.
Размотримо ове варијанте детаљно.
Различите варијанте графикона
Следе неке од варијанти графикона.
# 1) Усмерени графикон
Усмерени граф или диграф је структура података графа у којој ивице имају одређени правац. Они потичу из једног темена, а кулминирају у други врх.
Следећи дијаграм приказује пример усмереног графа.

У горњем дијаграму постоји ивица од врха А до врха Б. Али имајте на уму да А до Б није исто што и Б до А као у неусмереном графикону, осим ако не постоји ивица наведена од Б до А.
Усмерени граф је цикличан ако постоји бар једна путања која има свој први и последњи врх исто. У горњем дијаграму, путања А-> Б-> Ц-> Д-> Е-> А формира усмерени циклус или циклични граф.
Супротно томе, усмерени ациклични граф је граф у којем не постоји усмерени циклус, тј. Не постоји путања која формира циклус.
аутоматизација градње ће вам помоћи
# 2) Пондерисани графикон
У пондерисаном графикону, тегје повезан са сваком ивицом графикона. Пондер обично показује растојање између два темена. Следећи дијаграм приказује пондерисани графикон. Како нису приказана упутства, ово је усмерени графикон.

Имајте на уму да пондерисани графикон може бити усмерен или усмерен.
Како направити графикон?
Јава не пружа пуноправну примену структуре података графикона. Међутим, можемо графички представити графикон користећи Збирке у Јави. Такође можемо имплементирати графикон користећи динамичке низове попут вектора.
Графове обично имплементирамо у Јави користећи колекцију ХасхМап. Елементи ХасхМап су у облику парова кључ / вредност. Списак суседности графова можемо представити у ХасхМап-у.
Најчешћи начин за креирање графикона је коришћење једног од приказа графикона попут матрице суседности или листе суседности. Следеће ћемо разговарати о овим приказима, а затим ћемо имплементирати графикон у Јави користећи листу суседности за коју ћемо користити АрраиЛист.
Приказ графикона у Јави
Приказивање графа значи приступ или технику помоћу којих се подаци графа чувају у меморији рачунара.
Имамо два главна приказа графикона као што је приказано у наставку.
Матрица суседства
Матрица суседности је линеарни приказ графикона. Ова матрица чува мапирање темена и ивица графикона. У матрици суседства, врхови графикона представљају редове и колоне. То значи да ако граф има Н врхова, тада ће матрица суседности имати величину НкН.
Ако је В скуп врхова графа, тада је пресек М.ијна листи суседности = 1 значи да постоји ивица између врхова и и ј.
Да бисмо боље разумели овај концепт, припремимо матрицу суседства за неусмерени графикон.
Као што се види из горњег дијаграма, видимо да су за врх А пресеци АБ и АЕ постављени на 1 јер постоји ивица од А до Б и А до Е. Слично томе, пресек БА је постављен на 1, јер је ово усмерено граф и АБ = БА. Слично томе, поставили смо сва остала пресека за која постоји ивица на 1.
У случају да је граф усмерен, пресек М.ијпоставиће се на 1 само ако постоји чиста ивица усмерена од Ви до Вј.
Ово је приказано на следећој илустрацији.
Као што видимо из горњег дијаграма, постоји ивица од А до Б. Дакле, пресек АБ је постављен на 1, али пресек БА је постављен на 0. То је зато што не постоји ивица усмерена од Б до А.
Размотримо темена Е и Д. Видимо да постоје ивице од Е до Д, као и Д до Е. Отуда смо поставили оба ова пресека на 1 у суседној матрици.
Сада прелазимо на пондерисане графиконе. Као што знамо за пондерисани граф, цео број познат и као тежина повезан је са сваком ивицом. Представљамо ову тежину у матрици суседства за ивицу која постоји. Ова тежина се наводи кад год постоји ивица из једног врха у други уместо „1“.
Овај приказ је приказан у наставку.
Листа суседства
Уместо да графикон представимо као матрицу суседства која је секвенцијалне природе, такође можемо користити повезано представљање. Ово повезано представљање познато је као листа суседства. Листа суседности није ништа друго до повезана листа и сваки чвор на листи представља врх.
Присуство ивице између два темена означава се показивачем од првог врха до другог. Ова листа суседности се одржава за сваки врх на графикону.
Када смо прешли све суседне чворове за одређени чвор, чувамо НУЛЛ у следећем пољу показивача последњег чвора листе суседности.
Сада ћемо користити горње графиконе које смо користили за представљање матрице суседности за демонстрацију листе суседности.
Горња слика приказује листу суседности за неусмерени графикон. Видимо да сваки врх или чвор има своју листу суседности.
У случају неусмереног графикона, укупне дужине листа суседства обично су двоструко веће од ивица. На горњем графикону, укупан број ивица је 6, а укупан или збир дужине све листе суседности је 12.
Сада припремимо листу суседности за усмерени графикон.
Као што се види са горње слике, у усмереном графикону укупна дужина листа суседности графикона једнака је броју ивица на графикону. У горњем графикону постоји 9 ивица и збир дужина листа суседности за овај графикон = 9.
Сада размотримо следећи пондерисани усмерени граф. Имајте на уму да је уз сваку ивицу пондерисаног графикона повезана тежина. Дакле, када представљамо овај графикон са листом суседности, у сваки чвор листе морамо додати ново поље које ће означавати тежину ивице.
Листа суседности за пондерисани графикон приказана је у наставку.
Горњи дијаграм приказује пондерисани графикон и његову листу суседности. Имајте на уму да на листи суседства постоји нови размак који означава тежину сваког чвора.
Имплементација графикона у Јави
Следећи програм приказује примену графа у Јави. Овде смо користили листу суседности да представимо графикон.
import java.util.*; //class to store edges of the weighted graph class Edge { int src, dest, weight; Edge(int src, int dest, int weight) { this.src = src; this.dest = dest; this.weight = weight; } } // Graph class class Graph { // node of adjacency list static class Node { int value, weight; Node(int value, int weight) { this.value = value; this.weight = weight; } }; // define adjacency list List adj_list = new ArrayList(); //Graph Constructor public Graph(List edges) { // adjacency list memory allocation for (int i = 0; i Излаз:

Графикон Траверсал Јава
Да бисмо извршили било коју значајну радњу попут тражења присуства било каквих података, треба да пређемо граф тако да се сваки врх и ивица графа посете бар једном. То се ради помоћу алгоритама графикона који нису ништа друго до скуп упутстава која нам помажу да пређемо граф.
Подржана су два алгоритма за прелазак графа у Јави .
- Дубина прво прелазак
- Прелазак прва ширина
Дубина прво прелажење
Дубинско претраживање (ДФС) је техника која се користи за прелазак стабла или графа. ДФС техника започиње коренским чвором, а затим прелази суседне чворове коренског чвора залазећи дубље у графикон. У ДФС техници, чворови се прелазе дубински док више нема деце за истраживање.
Једном када дођемо до чвора листа (нема више подређених чворова), ДФС се враћа и започиње са другим чворовима и врши заокрет на сличан начин. Техника ДФС користи структуру података стека за чување чворова који се прелазе.
Следи алгоритам за ДФС технику.
вр слушалице компатибилне са кбок оне
Алгоритам
Корак 1: Почните са основним чвором и уметните га у стек
Корак 2: Откачите ставку из стека и убаците је на листу „посећено“
Корак 3: За чвор означен као „посећен“ (или на посећеној листи) додајте суседне чворове овог чвора који још увек нису означени као посећени.
Корак 4: Понављајте кораке 2 и 3 док се стек не испразни.
Илустрација ДФС технике
Сада ћемо илустровати ДФС технику користећи одговарајући пример графикона.
Доље је дат пример графикона. Одржавамо стек за чување истражених чворова и листу за чување посећених чворова.

За почетак ћемо започети са А, означити га као посећено и додати на посећену листу. Тада ћемо размотрити све суседне чворове А и потиснути их на стек како је приказано доле.

Даље, ископчамо чвор из стека, тј. Б, и означавамо га као посећен. Затим га додајемо на листу „посећено“. Ово је представљено у наставку.

Сада разматрамо суседне чворове Б који су А и Ц. Од тога је А већ посећен. Дакле, ми то игноришемо. Даље, искачемо Ц из стека. Ознака Ц као посећена. Суседни чвор Ц тј. Е се додаје у стек.

Следеће, извлачимо следећи чвор Е из стека и означавамо га као посећен. Суседни чвор чвора Е је Ц који је већ посећен. Дакле, ми то игноришемо.

Сада у стеку остаје само чвор Д. Дакле, означавамо га као посећен. Његов суседни чвор је А који је већ посећен. Дакле, не додајемо га у стог.

У овом тренутку стек је празан. То значи да смо завршили прелазак дубине за дати графикон.
Посећени списак даје коначан редослед преласка техником дубине прве. Коначна ДФС секвенца за горњи графикон је А-> Б-> Ц-> Е-> Д.
Имплементација ДФС-а
import java.io.*; import java.util.*; //DFS Technique for undirected graph class Graph { private int Vertices; // No. of vertices // adjacency list declaration private LinkedList adj_list(); // graph Constructor: to initialize adjacency lists as per no of vertices Graph(int v) { Vertices = v; adj_list = new LinkedList(v); for (int i=0; i Излаз:

Примене ДФС-а
# 1) Откривање циклуса у графикону: ДФС омогућава откривање циклуса на графикону када се можемо вратити на ивицу.
# 2) Проналажење путање: Као што смо већ видели на илустрацији ДФС, с обзиром на било која два темена можемо пронаћи пут између ова два темена.
# 3) Минимум распрострањено дрво и најкраћи пут: Ако ДФС технику покренемо на непондерисаном графу, то ће нам дати минимално стабло распона и кратки пут.
# 4) Тополошко сортирање: Тополошко сортирање се користи када морамо да закажемо послове. Имамо зависности међу разним пословима. Тополошко сортирање такође можемо користити за решавање зависности међу везницима, планером инструкција, сериализацијом података итд.
Прелазак прва ширина
Техника прво ширине (БФС) користи ред за чување чворова графикона. За разлику од ДФС технике, у БФС-у графикон прелазимо у ширини. То значи да паметно прелазимо ниво графикона. Када истражимо све врхове или чворове на једном нивоу, прелазимо на следећи ниво.
Доље је дат алгоритам за технику преласка прво у ширину .
Алгоритам
Погледајмо алгоритам за БФС технику.
Дат је граф Г за који треба да изведемо БФС технику.
- Корак 1: Почните са коренским чвором и убаците га у ред.
- Корак 2: Поновите кораке 3 и 4 за све чворове на графикону.
- Корак 3: Уклоните коријенски чвор из реда и додајте га на листу Посећено.
- Корак 4: Сада додајте све суседне чворове коренског чвора у ред и поновите кораке 2 до 4 за сваки чвор. (ЕНД ОФ ЛООП)
- Корак 6: ЕКСИТ
Илустрација БФС-а
Да илуструјемо БФС технику користећи пример графикона приказан испод. Имајте на уму да смо одржали листу под називом „Посећено“ и ред. Користимо исти графикон који смо користили у примеру ДФС ради јасности.

Прво започињемо са роот-ом, односно чвором А, и додајемо га на посећену листу. Сви суседни чворови чвора А, тј. Б, Ц и Д, додају се у ред.

Даље уклањамо чвор Б из реда. Додајемо га на листу Посећено и означавамо као посећено. Даље истражујемо суседне чворове Б у реду (Ц је већ у реду). Други суседни чвор А је већ посећен, па га игноришемо.

Затим уклањамо чвор Ц из реда и означавамо га као посећен. На посећену листу додајемо Ц, а суседни чвор Е се додаје у ред.

Затим бришемо Д из реда и означавамо га као посећен. Суседни чвор А чвора Д је већ посећен, па га игноришемо.

Дакле, сада је само чвор Е у реду. Означавамо је као посећену и додајемо је на посећену листу. Суседни чвор Е је Ц који је већ посећен. Па занемари то.

У овом тренутку, ред је празан и посећена листа има секвенцу коју смо добили као резултат БФС обилажења. Низ је, А-> Б-> Ц-> Д-> Е.
Имплементација БФС-а
Следећи Јава програм приказује примену БФС технике.
import java.io.*; import java.util.*; //undirected graph represented using adjacency list. class Graph { private int Vertices; // No. of vertices private LinkedList adj_list(); //Adjacency Lists // graph Constructor:number of vertices in graph are passed Graph(int v) { Vertices = v; adj_list = new LinkedList(v); for (int i=0; i Излаз:

Примене БФС преласка
# 1) Сакупљање смећа: Један од алгоритама који користи техника сакупљања смећа за копирање сакупљања смећа је „Цхенеиев алгоритам“. Овај алгоритам користи технику преласка прво у ширину.
# 2) Емитирање у мрежама: Емитирање пакета са једне тачке на другу у мрежи врши се помоћу БФС технике.
# 3) ГПС навигација: БФС техником можемо да користимо за проналажење суседних чворова током навигације помоћу ГПС-а.
# 4) Веб локације за друштвене мреже: БФС техника се такође користи на веб локацијама за друштвене мреже да би се пронашла мрежа људи који окружују одређену особу.
# 5) Најкраћа стаза и минимално распростируће се дрво у непондерисаном графу: У непондерисаном графикону, БФС техника се може користити за проналажење стабла минималног распона и најкраћег пута између чворова.
Јава Грапх Либрари
Јава не обавезује програмере да увек имплементирају графиконе у програм. Јава нуди пуно спремних библиотека које се могу директно користити за коришћење графикона у програму. Ове библиотеке имају све АПИ функције графа потребне за потпуно коришћење графа и његових различитих карактеристика.
Доље је дат кратак увод у неке од библиотека графикона на Јави.
# 1) Гоогле Гуава: Гоогле Гуава пружа богату библиотеку која подржава графиконе и алгоритме, укључујући једноставне графиконе, мреже, графиконе вредности итд.
# 2) Апацхе Цоммонс: Апацхе Цоммонс је Апацхе пројекат који пружа компоненте структуре података графикона и АПИ-је који имају алгоритме који раде на овој структури података графикона. Ове компоненте се могу поново користити.
# 3) ЈГрапхТ: ЈГрапхТ је једна од широко коришћених Јава библиотека графикона. Пружа функционалност структуре података графа која садржи једноставни граф, усмјерени граф, пондерисани граф итд., Као и алгоритме и АПИ-је који раде на структури података графа.
# 4) СоурцеФорге ЈУНГ: ЈУНГ је скраћеница од „Јава Универсал Нетворк / Грапх“ и представља Јава оквир. ЈУНГ пружа прошириви језик за анализу, визуелизацију и моделирање података за које желимо да буду представљени у облику графикона.
ЈУНГ такође нуди разне алгоритме и рутине за разлагање, кластеризацију, оптимизацију итд.
Често постављана питања
П # 1) Шта је графички приказ на Јави?
Одговор: Графичка структура података углавном чува повезане податке, на пример, мрежа људи или мрежа градова. Структура података графа обично се састоји од чворова или тачака које се називају темена. Сваки врх је повезан са другим теменом помоћу веза које се називају ивице.
К # 2) Које су врсте графикона?
Одговор: У наставку су наведене различите врсте графикона.
- Линијски графикон: Линијски графикон се користи за цртање промена у одређеном својству у односу на време.
- Графикон: Тракасти графикони упоређују нумеричке вредности ентитета попут становништва у различитим градовима, процента писмености широм земље итд.
Поред ових главних типова имамо и друге типове као што су пиктограф, хистограм, графикон површине, тачка распршења итд.
П # 3) Шта је повезани граф?
Одговор: Повезани граф је граф у којем је сваки врх повезан са другим теменом. Дакле, у повезаном графу можемо доћи до сваког темена из сваког другог темена.
К # 4) Које су примене графа?
како отворити .дат датотеку на мац-у
Одговор: Графикони се користе у разним апликацијама. Графикон се може користити за представљање сложене мреже. Графови се такође користе у апликацијама за друштвене мреже да означе мрежу људи, као и за апликације попут проналаска суседних људи или веза.
Графикони се користе за означавање тока рачунања у рачунарству.
К # 5) Како чувате графикон?
Одговор: Постоје три начина за чување графа у меморији:
# 1) Чворове или темена можемо похранити као предмете, а ивице као показиваче.
#два) Такође можемо похранити графиконе као матрицу суседности чији су редови и колоне једнаки броју врхова. Пресек сваког реда и колоне означава присуство или одсуство ивице. У нетежном графикону присуство ивице се означава са 1 док се у пондерисаном графикону замењује тежином ивице.
# 3) Последњи приступ чувању графа је коришћење листе суседности ивица између врхова или чворова графа. Сваки чвор или врх има своју листу суседности.
Закључак
У овом упутству детаљно смо разговарали о графиконима на Јави. Истражили смо разне врсте графова, имплементацију графова и технике преласка. Графови се могу користити за проналажење најкраће путање између чворова.
У нашим предстојећим водичима наставићемо да истражујемо графиконе расправљајући о неколико начина проналажења најкраћег пута.
=> Овде припазите на једноставну серију Јава тренинга.
Препоручено читање
- Водич за Јава рефлексију са примерима
- Како применити Дијкстрин алгоритам у Јави
- Водич за Јава СВИНГ: Контејнери, компоненте и руковање догађајима
- Водич за ЈАВА за почетнике: 100+ практичних Јава видео водича
- ТрееМап у Јави - Водич за примере Јава ТрееМап
- Приступити модификаторима у Јави - Водич са примерима
- Јава Стринг са Стринг Буффер-ом и Стринг Буилдер Туториал
- Јава Стринг садржи () Водич за методе са примерима