อะไรคือความแตกต่างระหว่างโครงสร้างข้อมูล Tree และ Graph?


144

ในทางวิชาการโครงสร้างข้อมูลโครงสร้างข้อมูลและกราฟแตกต่างกันอย่างไร แล้วการค้นหาตามต้นไม้และการค้นหาตามกราฟล่ะ?

คำตอบ:


154

ต้นไม้เป็นเพียงรูปแบบกราฟที่ถูก จำกัด

ต้นไม้มีทิศทาง (ความสัมพันธ์พ่อแม่ / ลูก) และไม่มีวัฏจักร เหมาะกับในหมวดหมู่ของ Directed Acyclic Graphs (หรือ DAG) ต้นไม้จึงเป็น DAG ที่มีข้อ จำกัด ว่าเด็กจะมีพ่อแม่ได้เพียงคนเดียว

สิ่งหนึ่งที่สำคัญที่ต้องชี้ให้เห็นคือต้นไม้ไม่ใช่โครงสร้างข้อมูลแบบวนซ้ำ ไม่สามารถใช้เป็นโครงสร้างข้อมูลแบบเรียกซ้ำได้เนื่องจากข้อ จำกัด ข้างต้น แต่การใช้งาน DAG ใด ๆ ซึ่งโดยทั่วไปจะไม่เกิดซ้ำก็สามารถใช้ได้เช่นกัน การใช้งาน Tree ที่ฉันต้องการคือการนำเสนอแผนที่แบบรวมศูนย์และไม่ใช่แบบวนซ้ำ

โดยทั่วไปกราฟจะค้นหาแบบกว้างก่อนหรือเชิงลึกก่อน เช่นเดียวกับ Tree


8
กราฟมีประโยชน์มากและสามารถใช้เพื่อจำลองสิ่งต่างๆจำนวนมหาศาลได้ โครงสร้างข้อมูลอื่น ๆ จำนวนมากสามารถมองเห็นเป็นกราฟที่มีข้อ จำกัด ตัวอย่างเช่นรายการที่เชื่อมโยงเดี่ยวเป็นกรณีพิเศษของ DAG
JR Garcia

7
@ user785287 สิ่งที่คุณหมายถึงโดยการแสดงแผนที่ส่วนกลาง ?
Geek

37
"ต้นไม้ไม่ใช่โครงสร้างข้อมูลซ้ำ" ทำให้เข้าใจผิดและไม่ถูกต้อง ต้นไม้สามารถแสดงด้วยโครงสร้างข้อมูลที่ไม่เรียกซ้ำ (เช่นอาร์เรย์ของขอบต้นไม้เต็มเช่นเดียวกับที่อยู่ภายใต้ฮีปไบนารีสามารถแสดงได้อย่างกะทัดรัดมากในอาร์เรย์มีการแทนแบบรวบรัดอื่น ๆ เป็นต้น) แต่วิธีที่ได้รับความนิยมและเป็นประโยชน์มากที่สุดในการนำเสนอคือการใช้โครงสร้างแบบใช้ตัวชี้แบบเรียกซ้ำ การแสดงจะไม่ซ้ำกันสำหรับต้นไม้ที่ไม่ได้รูท แต่นั่นก็ไม่มีสาระสำคัญ
j_random_hacker

3
ไม่มาก ต้นไม้ไม่จำเป็นต้องมีทิศทาง en.wikipedia.org/wiki/Tree_(graph_theory) แสดงตัวอย่างของต้นไม้ที่ไม่มีทิศทาง สิ่งเหล่านี้มักใช้ในบริบททางชีววิทยา
Michal Palczewski

3
ต้นไม้ @ harnesspatel991 ไม่ได้ชี้นำในแง่ที่ว่า "X และ Y อยู่ในความสัมพันธ์แม่ลูก" ไม่มีทิศทาง แม้ว่าความสัมพันธ์ของแต่ละบุคคล "X คือลูกของ Y" และ "Y เป็นลูกของ X" เป็นความสัมพันธ์โดยตรง ทิศทางบ่งบอกแค่นั้น ทิศทางของ 'การเคลื่อนไหว' ความคิดเรื่องทิศทางในต้นไม้ไม่จำเป็นจริงๆเว้นแต่จะมีความหมาย (ซึ่งมักเกิดกับต้นไม้) นั่นเป็นวิธีที่ฉันดูอย่างน้อย
Kostas Mouratidis

108

แทนที่จะอธิบายฉันชอบแสดงเป็นรูปภาพมากกว่า

ต้นไม้ตามเวลาจริง

ต้นไม้ตามเวลาจริง

กราฟในชีวิตจริง

กราฟตามเวลาจริง

ใช่แผนที่สามารถมองเห็นเป็นโครงสร้างข้อมูลกราฟได้

เห็นพวกเขาแบบนี้ทำให้ชีวิตง่ายขึ้น ต้นไม้ถูกใช้ในสถานที่ที่เรารู้ว่าแต่ละโหนดมีพ่อแม่เพียงคนเดียว แต่กราฟสามารถมีบรรพบุรุษได้หลายตัว (โดยทั่วไปคำว่าพาเรนต์จะไม่ใช้สำหรับกราฟ)

ในโลกแห่งความเป็นจริงคุณสามารถแสดงเกือบทุกอย่างโดยใช้กราฟ ตัวอย่างเช่นฉันใช้แผนที่ หากคุณพิจารณาแต่ละเมืองเป็นโหนดคุณสามารถเข้าถึงได้จากหลายจุด จุดที่นำไปสู่โหนดนี้เรียกว่ารุ่นก่อนและจุดที่โหนดนี้จะนำไปสู่เรียกว่าตัวต่อ

แผนภาพวงจรไฟฟ้าแผนผังบ้านเครือข่ายคอมพิวเตอร์หรือระบบแม่น้ำเป็นตัวอย่างกราฟอีกเล็กน้อย ตัวอย่างในโลกแห่งความเป็นจริงจำนวนมากถือได้ว่าเป็นกราฟ

แผนภาพทางเทคนิคอาจเป็นเช่นนี้

ต้นไม้:

ป้อนคำอธิบายภาพที่นี่

กราฟ:

ป้อนคำอธิบายภาพที่นี่

อย่าลืมอ้างถึงลิงค์ด้านล่าง สิ่งเหล่านี้จะตอบคำถามของคุณเกือบทั้งหมดเกี่ยวกับต้นไม้และกราฟ

อ้างอิง:

  1. http://www.introprogramming.info/english-intro-csharp-book/read-online/chapter-17-trees-and-graphs/#_Toc362296541

  2. http://www.community-of-knowledge.de/beitrag/data-trees-as-a-means-of-presenting-complex-data-analysis/

  3. Wikipedia


10

คำตอบอื่น ๆ มีประโยชน์ แต่ไม่มีคุณสมบัติของแต่ละข้อ:

กราฟ

กราฟที่ไม่ได้กำหนดทิศทางแหล่งที่มาของรูปภาพ: Wikipedia

กราฟกำกับแหล่งที่มาของภาพ: Wikipedia

  • ประกอบด้วยชุดของจุดยอด (หรือโหนด) และชุดของขอบที่เชื่อมต่อบางส่วนหรือทั้งหมด
  • ขอบใด ๆ สามารถเชื่อมต่อจุดยอดสองจุดที่ยังไม่ได้เชื่อมต่อด้วยขอบที่เหมือนกัน (ในทิศทางเดียวกันในกรณีของกราฟที่กำหนดทิศทาง)
  • ไม่จำเป็นต้องเชื่อมต่อ (ขอบไม่จำเป็นต้องเชื่อมจุดยอดทั้งหมดเข้าด้วยกัน) กราฟเดียวสามารถประกอบด้วยจุดยอดที่ไม่ได้เชื่อมต่อสองสามชุด
  • สามารถกำหนดทิศทางหรือไม่ได้ทิศทาง (ซึ่งจะใช้กับขอบทั้งหมดในกราฟ)
    ตามWikipedia :

    ตัวอย่างเช่นหากจุดยอดเป็นตัวแทนของคนในงานปาร์ตี้และมีขอบระหว่างคนสองคนหากพวกเขาจับมือกันกราฟนี้จะถูกยกเลิกเนื่องจากบุคคลใด ๆ A สามารถจับมือกับบุคคล B ได้ก็ต่อเมื่อ B จับมือกับ A ด้วย ในทางตรงกันข้ามถ้าความได้เปรียบใด ๆ จากบุคคล A ถึงบุคคล B สอดคล้องกับ A ที่น่าชื่นชม B กราฟนี้จะถูกส่งไปเพราะความชื่นชมไม่จำเป็นต้องตอบสนอง

ต้นไม้

แหล่งที่มาของภาพ: Wikipedia

  • ประเภทของกราฟ
  • จุดยอดมักเรียกว่า "โหนด"
  • ขอบจะกำกับและแสดงถึงความสัมพันธ์ "is child of" (หรือ "is parent of")
  • แต่ละโหนด (ยกเว้นโหนดรูท) มีพาเรนต์เดียว (และมีลูกศูนย์หรือมากกว่า)
  • มีโหนด "รูท" หนึ่งโหนด (หากทรีมีอย่างน้อยหนึ่งโหนด) ซึ่งเป็นโหนดที่ไม่มีพาเรนต์
  • จะต้องมีการเชื่อมต่อ
  • เป็นแบบ acyclic ซึ่งหมายความว่าไม่มีวัฏจักร : "วัฏจักรคือเส้นทาง [ลำดับ AKA] ของขอบและจุดยอดซึ่งจุดยอดสามารถเข้าถึงได้จากตัวมันเอง"

คุณสมบัติข้างต้นมีความทับซ้อนกันอยู่บ้าง โดยเฉพาะคุณสมบัติสองประการสุดท้ายเป็นนัยโดยคุณสมบัติที่เหลือ แต่ทั้งหมดนี้มีมูลค่า noting อย่างไรก็ตาม


รูปภาพทำให้เข้าใจง่าย!
Raghav Gupta

3

ในแผนภูมิแต่ละโหนด (ยกเว้นโหนดรูท) จะมีโหนดก่อนหน้าหนึ่งโหนดและโหนดต่อเนื่องหนึ่งหรือสองโหนด สามารถข้ามผ่านได้โดยใช้ In-order, Pre-order, Post-order และ Breadth First traversals Tree เป็นกราฟชนิดพิเศษที่ไม่มีวงจรดังนั้นจึงเรียกว่า DAG (Directed Acyclic Graph) ทรีเป็นแบบจำลองลำดับชั้น

ในกราฟแต่ละโหนดมีโหนดก่อนหน้าและโหนดต่อเนื่องอย่างน้อยหนึ่งโหนด กราฟถูกสำรวจโดยใช้อัลกอริทึม Depth First Search (DFS) และ Breadth First Search (BFS) กราฟมีวัฏจักรจึงซับซ้อนกว่าต้นไม้ กราฟเป็นรูปแบบเครือข่าย กราฟมีสองประเภท ได้แก่ กราฟกำกับและกราฟที่ไม่ได้กำหนดทิศทาง


2

ต้นไม้มีความชัดเจน: โครงสร้างข้อมูลแบบวนซ้ำซึ่งประกอบด้วยโหนดที่มีลูก ๆ

แผนที่ (aka dictionary) เป็นคู่คีย์ / ค่า ให้คีย์แผนที่และจะส่งคืนค่าที่เกี่ยวข้อง

แผนที่สามารถใช้งานได้โดยใช้ต้นไม้ฉันหวังว่าคุณจะไม่สับสน

UPDATE: "กราฟ" ที่สับสนสำหรับ "แผนที่" นั้นสับสนมาก

กราฟซับซ้อนกว่าต้นไม้ ต้นไม้หมายถึงความสัมพันธ์ของพ่อแม่และลูกแบบเรียกซ้ำ มีวิธีธรรมชาติในการสำรวจต้นไม้: ความลึกก่อนกว้างก่อนลำดับระดับ ฯลฯ

กราฟสามารถมีเส้นทางแบบทิศทางเดียวหรือสองทิศทางระหว่างโหนดเป็นวัฏจักรหรือวงจรเป็นต้นฉันคิดว่ากราฟจะซับซ้อนกว่านี้

ฉันคิดว่าการค้นหาแบบคร่าวๆในข้อความโครงสร้างข้อมูลที่เหมาะสม (เช่น "คู่มือการออกแบบอัลกอริทึม") จะให้ข้อมูลที่มากกว่าและดีกว่าคำตอบ SO จำนวนเท่าใดก็ได้ ฉันอยากจะแนะนำว่าอย่าใช้เส้นทางแบบพาสซีฟและเริ่มหาข้อมูลด้วยตัวคุณเอง


1
ขออภัยฉันหมายถึงกราฟฉันพิมพ์แผนที่
user918304

"กราฟ" ที่สับสนสำหรับ "แผนที่" นั้นสับสนมาก " :)
cpz

1
การพูดว่า "กราฟซับซ้อนกว่าต้นไม้" ก็เหมือนกับการพูดว่า "อีกาเชี่ยวชาญกว่านก" เราไม่ควรพูดแทนว่า "ต้นไม้ทั้งหมดเป็นกราฟ แต่กราฟทั้งหมดไม่ใช่ต้นไม้"?
dudewad

ฉันไม่สนใจหกปีต่อมา แน่นอนคุณสามารถใช้เวลาของคุณให้ดีขึ้นที่นี่
duffymo

2

ทรีเป็นรูปแบบพิเศษของกราฟคือกราฟที่เชื่อมต่อกันน้อยที่สุดและมีเพียงเส้นทางเดียวระหว่างจุดยอดทั้งสอง

ในกราฟอาจมีมากกว่าหนึ่งเส้นทางเช่นกราฟสามารถมีเส้นทางเดียวหรือสองทิศทาง (ขอบ) ระหว่างโหนด

นอกจากนี้คุณสามารถดูรายละเอียดเพิ่มเติม: http://freefeast.info/difference-between/difference-between-trees-and-graphs-trees-vs-graphs/


1

ต้นไม้เป็นรูปจำลองที่:

ก) เมื่อถอดทิศทางขอบออกจะเชื่อมต่อและเป็นแบบวงกลม

  1. คุณสามารถลบสมมติฐานที่ว่าเป็นแบบอะไซคลิกได้
  2. หากมีข้อ จำกัด คุณสามารถลบข้อสันนิษฐานที่เชื่อมโยงกันได้

b) ทุกจุดยอดยกเว้นหนึ่งรากมีดัชนี 1

c) รากมีดัชนี 0

  1. หากมีโหนดจำนวนมากเท่านั้นคุณสามารถลบสมมติฐานที่ว่ารูทมีดัชนี 0 หรือสมมติว่าโหนดอื่นที่ไม่ใช่รูทมีระดับ 1

อ้างอิง: http://www.cs.cornell.edu/courses/cs2800/2016sp/lectures/lec27-29-graphtheory.pdf


0

ในทางคณิตศาสตร์กราฟคือการแสดงชุดของวัตถุที่คู่ของวัตถุบางคู่เชื่อมต่อกันด้วยลิงก์ วัตถุที่เชื่อมต่อกันจะแสดงด้วยนามธรรมทางคณิตศาสตร์ที่เรียกว่าจุดยอดและลิงก์ที่เชื่อมต่อจุดยอดบางคู่เรียกว่าขอบ โดยทั่วไปกราฟจะแสดงในรูปแบบแผนภาพเป็นชุดของจุดสำหรับจุดยอดโดยต่อด้วยเส้นหรือส่วนโค้งสำหรับขอบ กราฟเป็นหนึ่งในเป้าหมายของการศึกษาคณิตศาสตร์ไม่ต่อเนื่อง


0

โหนดรูทหนึ่งโหนดในทรีและพาเรนต์เดียวสำหรับเด็กหนึ่งคน อย่างไรก็ตามไม่มีแนวคิดของโหนดรูท ความแตกต่างอีกประการหนึ่งคือต้นไม้เป็นแบบจำลองลำดับชั้น แต่กราฟเป็นแบบจำลองเครือข่าย


0

โดยทั่วไปแล้ว Tree เป็นกราฟที่ไม่มีการกำหนดทิศทางซึ่งไม่มีวัฏจักรดังนั้นเราจึงสามารถพูดได้ว่าต้นไม้เป็นรูปแบบกราฟที่ จำกัด มากกว่า อย่างไรก็ตามต้นไม้และกราฟมีแอปพลิเคชั่นที่แตกต่างกันในการใช้อัลกอริทึมต่างๆในการเขียนโปรแกรม ตัวอย่างเช่นกราฟสามารถใช้สำหรับแผนที่ถนนแบบจำลองและต้นไม้สามารถใช้สำหรับการใช้โครงสร้างข้อมูลแบบลำดับชั้นใด ๆ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.