ในทางวิชาการโครงสร้างข้อมูลโครงสร้างข้อมูลและกราฟแตกต่างกันอย่างไร แล้วการค้นหาตามต้นไม้และการค้นหาตามกราฟล่ะ?
ในทางวิชาการโครงสร้างข้อมูลโครงสร้างข้อมูลและกราฟแตกต่างกันอย่างไร แล้วการค้นหาตามต้นไม้และการค้นหาตามกราฟล่ะ?
คำตอบ:
ต้นไม้เป็นเพียงรูปแบบกราฟที่ถูก จำกัด
ต้นไม้มีทิศทาง (ความสัมพันธ์พ่อแม่ / ลูก) และไม่มีวัฏจักร เหมาะกับในหมวดหมู่ของ Directed Acyclic Graphs (หรือ DAG) ต้นไม้จึงเป็น DAG ที่มีข้อ จำกัด ว่าเด็กจะมีพ่อแม่ได้เพียงคนเดียว
สิ่งหนึ่งที่สำคัญที่ต้องชี้ให้เห็นคือต้นไม้ไม่ใช่โครงสร้างข้อมูลแบบวนซ้ำ ไม่สามารถใช้เป็นโครงสร้างข้อมูลแบบเรียกซ้ำได้เนื่องจากข้อ จำกัด ข้างต้น แต่การใช้งาน DAG ใด ๆ ซึ่งโดยทั่วไปจะไม่เกิดซ้ำก็สามารถใช้ได้เช่นกัน การใช้งาน Tree ที่ฉันต้องการคือการนำเสนอแผนที่แบบรวมศูนย์และไม่ใช่แบบวนซ้ำ
โดยทั่วไปกราฟจะค้นหาแบบกว้างก่อนหรือเชิงลึกก่อน เช่นเดียวกับ Tree
แทนที่จะอธิบายฉันชอบแสดงเป็นรูปภาพมากกว่า
ต้นไม้ตามเวลาจริง
กราฟในชีวิตจริง
ใช่แผนที่สามารถมองเห็นเป็นโครงสร้างข้อมูลกราฟได้
เห็นพวกเขาแบบนี้ทำให้ชีวิตง่ายขึ้น ต้นไม้ถูกใช้ในสถานที่ที่เรารู้ว่าแต่ละโหนดมีพ่อแม่เพียงคนเดียว แต่กราฟสามารถมีบรรพบุรุษได้หลายตัว (โดยทั่วไปคำว่าพาเรนต์จะไม่ใช้สำหรับกราฟ)
ในโลกแห่งความเป็นจริงคุณสามารถแสดงเกือบทุกอย่างโดยใช้กราฟ ตัวอย่างเช่นฉันใช้แผนที่ หากคุณพิจารณาแต่ละเมืองเป็นโหนดคุณสามารถเข้าถึงได้จากหลายจุด จุดที่นำไปสู่โหนดนี้เรียกว่ารุ่นก่อนและจุดที่โหนดนี้จะนำไปสู่เรียกว่าตัวต่อ
แผนภาพวงจรไฟฟ้าแผนผังบ้านเครือข่ายคอมพิวเตอร์หรือระบบแม่น้ำเป็นตัวอย่างกราฟอีกเล็กน้อย ตัวอย่างในโลกแห่งความเป็นจริงจำนวนมากถือได้ว่าเป็นกราฟ
แผนภาพทางเทคนิคอาจเป็นเช่นนี้
ต้นไม้:
กราฟ:
อย่าลืมอ้างถึงลิงค์ด้านล่าง สิ่งเหล่านี้จะตอบคำถามของคุณเกือบทั้งหมดเกี่ยวกับต้นไม้และกราฟ
อ้างอิง:
คำตอบอื่น ๆ มีประโยชน์ แต่ไม่มีคุณสมบัติของแต่ละข้อ:
กราฟที่ไม่ได้กำหนดทิศทางแหล่งที่มาของรูปภาพ: Wikipedia
กราฟกำกับแหล่งที่มาของภาพ: Wikipedia
สามารถกำหนดทิศทางหรือไม่ได้ทิศทาง (ซึ่งจะใช้กับขอบทั้งหมดในกราฟ)
ตามWikipedia :
ตัวอย่างเช่นหากจุดยอดเป็นตัวแทนของคนในงานปาร์ตี้และมีขอบระหว่างคนสองคนหากพวกเขาจับมือกันกราฟนี้จะถูกยกเลิกเนื่องจากบุคคลใด ๆ A สามารถจับมือกับบุคคล B ได้ก็ต่อเมื่อ B จับมือกับ A ด้วย ในทางตรงกันข้ามถ้าความได้เปรียบใด ๆ จากบุคคล A ถึงบุคคล B สอดคล้องกับ A ที่น่าชื่นชม B กราฟนี้จะถูกส่งไปเพราะความชื่นชมไม่จำเป็นต้องตอบสนอง
คุณสมบัติข้างต้นมีความทับซ้อนกันอยู่บ้าง โดยเฉพาะคุณสมบัติสองประการสุดท้ายเป็นนัยโดยคุณสมบัติที่เหลือ แต่ทั้งหมดนี้มีมูลค่า noting อย่างไรก็ตาม
ในแผนภูมิแต่ละโหนด (ยกเว้นโหนดรูท) จะมีโหนดก่อนหน้าหนึ่งโหนดและโหนดต่อเนื่องหนึ่งหรือสองโหนด สามารถข้ามผ่านได้โดยใช้ In-order, Pre-order, Post-order และ Breadth First traversals Tree เป็นกราฟชนิดพิเศษที่ไม่มีวงจรดังนั้นจึงเรียกว่า DAG (Directed Acyclic Graph) ทรีเป็นแบบจำลองลำดับชั้น
ในกราฟแต่ละโหนดมีโหนดก่อนหน้าและโหนดต่อเนื่องอย่างน้อยหนึ่งโหนด กราฟถูกสำรวจโดยใช้อัลกอริทึม Depth First Search (DFS) และ Breadth First Search (BFS) กราฟมีวัฏจักรจึงซับซ้อนกว่าต้นไม้ กราฟเป็นรูปแบบเครือข่าย กราฟมีสองประเภท ได้แก่ กราฟกำกับและกราฟที่ไม่ได้กำหนดทิศทาง
ต้นไม้มีความชัดเจน: โครงสร้างข้อมูลแบบวนซ้ำซึ่งประกอบด้วยโหนดที่มีลูก ๆ
แผนที่ (aka dictionary) เป็นคู่คีย์ / ค่า ให้คีย์แผนที่และจะส่งคืนค่าที่เกี่ยวข้อง
แผนที่สามารถใช้งานได้โดยใช้ต้นไม้ฉันหวังว่าคุณจะไม่สับสน
UPDATE: "กราฟ" ที่สับสนสำหรับ "แผนที่" นั้นสับสนมาก
กราฟซับซ้อนกว่าต้นไม้ ต้นไม้หมายถึงความสัมพันธ์ของพ่อแม่และลูกแบบเรียกซ้ำ มีวิธีธรรมชาติในการสำรวจต้นไม้: ความลึกก่อนกว้างก่อนลำดับระดับ ฯลฯ
กราฟสามารถมีเส้นทางแบบทิศทางเดียวหรือสองทิศทางระหว่างโหนดเป็นวัฏจักรหรือวงจรเป็นต้นฉันคิดว่ากราฟจะซับซ้อนกว่านี้
ฉันคิดว่าการค้นหาแบบคร่าวๆในข้อความโครงสร้างข้อมูลที่เหมาะสม (เช่น "คู่มือการออกแบบอัลกอริทึม") จะให้ข้อมูลที่มากกว่าและดีกว่าคำตอบ SO จำนวนเท่าใดก็ได้ ฉันอยากจะแนะนำว่าอย่าใช้เส้นทางแบบพาสซีฟและเริ่มหาข้อมูลด้วยตัวคุณเอง
ทรีเป็นรูปแบบพิเศษของกราฟคือกราฟที่เชื่อมต่อกันน้อยที่สุดและมีเพียงเส้นทางเดียวระหว่างจุดยอดทั้งสอง
ในกราฟอาจมีมากกว่าหนึ่งเส้นทางเช่นกราฟสามารถมีเส้นทางเดียวหรือสองทิศทาง (ขอบ) ระหว่างโหนด
นอกจากนี้คุณสามารถดูรายละเอียดเพิ่มเติม: http://freefeast.info/difference-between/difference-between-trees-and-graphs-trees-vs-graphs/
ต้นไม้เป็นรูปจำลองที่:
ก) เมื่อถอดทิศทางขอบออกจะเชื่อมต่อและเป็นแบบวงกลม
- คุณสามารถลบสมมติฐานที่ว่าเป็นแบบอะไซคลิกได้
- หากมีข้อ จำกัด คุณสามารถลบข้อสันนิษฐานที่เชื่อมโยงกันได้
b) ทุกจุดยอดยกเว้นหนึ่งรากมีดัชนี 1
c) รากมีดัชนี 0
- หากมีโหนดจำนวนมากเท่านั้นคุณสามารถลบสมมติฐานที่ว่ารูทมีดัชนี 0 หรือสมมติว่าโหนดอื่นที่ไม่ใช่รูทมีระดับ 1
อ้างอิง: http://www.cs.cornell.edu/courses/cs2800/2016sp/lectures/lec27-29-graphtheory.pdf
ในทางคณิตศาสตร์กราฟคือการแสดงชุดของวัตถุที่คู่ของวัตถุบางคู่เชื่อมต่อกันด้วยลิงก์ วัตถุที่เชื่อมต่อกันจะแสดงด้วยนามธรรมทางคณิตศาสตร์ที่เรียกว่าจุดยอดและลิงก์ที่เชื่อมต่อจุดยอดบางคู่เรียกว่าขอบ โดยทั่วไปกราฟจะแสดงในรูปแบบแผนภาพเป็นชุดของจุดสำหรับจุดยอดโดยต่อด้วยเส้นหรือส่วนโค้งสำหรับขอบ กราฟเป็นหนึ่งในเป้าหมายของการศึกษาคณิตศาสตร์ไม่ต่อเนื่อง
โหนดรูทหนึ่งโหนดในทรีและพาเรนต์เดียวสำหรับเด็กหนึ่งคน อย่างไรก็ตามไม่มีแนวคิดของโหนดรูท ความแตกต่างอีกประการหนึ่งคือต้นไม้เป็นแบบจำลองลำดับชั้น แต่กราฟเป็นแบบจำลองเครือข่าย
โดยทั่วไปแล้ว Tree เป็นกราฟที่ไม่มีการกำหนดทิศทางซึ่งไม่มีวัฏจักรดังนั้นเราจึงสามารถพูดได้ว่าต้นไม้เป็นรูปแบบกราฟที่ จำกัด มากกว่า อย่างไรก็ตามต้นไม้และกราฟมีแอปพลิเคชั่นที่แตกต่างกันในการใช้อัลกอริทึมต่างๆในการเขียนโปรแกรม ตัวอย่างเช่นกราฟสามารถใช้สำหรับแผนที่ถนนแบบจำลองและต้นไม้สามารถใช้สำหรับการใช้โครงสร้างข้อมูลแบบลำดับชั้นใด ๆ