Hledám způsob, jak vytvořit Hasseův diagram z dané části objednejte binární relaci. Relace bude uvedena explicitně, například: Hasse[{{1,2},{2,3},{1,3}}] a výstupem bude odpovídající graf.

Vyhledal jsem řešení , a našel jsem nějaké řešení, ale nedostal jsem, jak jej používat .. zde je to, co jsem našel.

Pokud existuje způsob, jak vygenerovat Hasseův diagram pro podmíněnou množinu dílčího řádu a pro konečný vztah (samozřejmě mě v tomto případě zajímá pouze přibližný diagram), rád bych o tom uslyšel také.

Komentáře

  • Které části kódu, na kterou jste odkazovali, jste ' nerozuměli?
  • No, nerozuměl jsem ' tomu, jak to použít pro můj účel. význam, jak tedy definuji vztah explicitně (jako příklad výše). zdá se, že to umožňuje jen mě nakreslit graf pouze pro podmíněný vztah .. no mohl bych definovat vztah s podmínkou, ale není tam ' něco jednoduššího? a ještě jeden problém, trochu jsem si s tím pohrál a nemohl jsem najít způsob, jak změnit velikost písma štítků .. Chci zkopírovat graf do slova a štítky musí být čitelné, a ne tak malé.
  • Pokud zadáte vztahy mezi uzly výslovně, nejde ' pouze o graf?
  • I ' Je mi líto, ' m jsem v Mathematice nová. Všechno, co by vypadalo jako graf mého popisu, by bylo v pořádku. Nemusím ' z toho dělat výpočty. Mám ale hodně grafů, které jsem mohl nakreslit, a doufal jsem, že existuje speciální funkce pro mé potřeby. pokud máte jiné řešení, neváhejte a dejte mi vědět .. mějte však na paměti, že jsem ' m v Mathematice nový, takže jsem ' nejsem obeznámen se spoustou základních metod programu.
  • Vítejte na Mathematica Stack Exchange RB14, brzy pošlu odpověď (dobře … po obědě :-))

Odpověď

Ve verzích 10+ můžeme sestavit TransitiveReductionGraph a RelationGraph k získání funkce Hasse diagramu s stejnými argumenty a možnostmi jako RelationGraph:

ClearAll[hasseF] hasseF = TransitiveReductionGraph @* RelationGraph 

Příklady:

hasseF[SubsetQ, Subsets[Range[4]], VertexShapeFunction -> "Name"] 

zde zadejte popis obrázku

substringQ[s1_, s2_] := UnsameQ[s1 , s2] && StringMatchQ[s1, ___ ~~ s2 ~~ ___] hasseF[substringQ, {"a", "b", "c","ab", "ac","abc", "abcd"}, VertexShapeFunction -> "Name"] 

zde zadejte popis obrázku

Odpověď

Myslím, že to, co chcete, je ve skutečnosti velmi jednoduché (poznamenal také @ SjoerdC.deVries ve svém komentáři):

Graph[{1 -> 2, 2 -> 3, 3 -> 1}, DirectedEdges -> False, GraphStyle -> "DiagramGold"] 

zde zadejte popis obrázku

Pokud byste naopak chtěli prozkoumat plně vybavené Hasseovy diagramy, je kód, na který jste odkazovali, dobrý začátek. Také Demonstrační projekt má několik relevantních příkladů – je je vždy dobré tam hledat.

Když se podíváte hlouběji, Mathematica zabudovaná do balíčku Combinatorica má balíček HasseDiagram. Podívejte se na tento příklad z Dokumentace vyžaduje

<< Combinatorica` ShowGraph[HasseDiagram[MakeGraph[Subsets[4], #2 \[Intersection] #1 === #1 && #1 != #2 &]]] 

zde zadejte popis obrázku

Pro ještě hlubší funkce můžete kontaktovat autoři tohoto příspěvku:

„Balíček Mathematica, který zvládne částečně objednané sady“ , P. Codara

nebo si získejte tuto knihu:

„Výpočetní diskrétní matematika: Kombinatorika a teorie grafů s Mathematica“ , Sriram Pemmaraju, Steven Skiena

Komentáře

  • Pokud žadatel chce skutečný Hasseův diagram, určitě chce automatický způsob výpočtu přechodné zmenšení směrovaného grafu generovaného binárním vztahem. Myslím, že šipky by měly být nasměrovány a šipky mezi 1 a 3 by tam neměly být '.
  • @JOwen Víte, proč tedy standardní reprezentace je neřízený? alturl.com/jribp
  • I ' nejsem si jistý, ale myslím, že existuje směr informace na okrajích.V odkazu, který jste zveřejnili, se říká, že je třeba nakreslit " úsečku nebo křivku, která jde nahoru [kurzíva v originále] od x do y, kdykoli y pokryje x (tj. Kdykoli x < y a neexistuje z takové, že x < z < y) "

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *