Về mặt học thuật, sự khác biệt cơ bản giữa cấu trúc dữ liệu Cây và đồ thị là gì? Và làm thế nào về tìm kiếm dựa trên cây và tìm kiếm dựa trên đồ thị?
Về mặt học thuật, sự khác biệt cơ bản giữa cấu trúc dữ liệu Cây và đồ thị là gì? Và làm thế nào về tìm kiếm dựa trên cây và tìm kiếm dựa trên đồ thị?
Câu trả lời:
Cây chỉ là một dạng hạn chế của đồ thị.
Cây có hướng (mối quan hệ cha mẹ / con cái) và không chứa chu kỳ. Chúng phù hợp với danh mục Đồ thị chu kỳ có hướng (hoặc DAG). Vì vậy, Cây là DAG với hạn chế là một đứa trẻ chỉ có thể có một cha mẹ.
Một điều quan trọng cần chỉ ra, Cây xanh không phải là cấu trúc dữ liệu đệ quy. Chúng không thể được thực hiện như một cấu trúc dữ liệu đệ quy vì những hạn chế ở trên. Nhưng bất kỳ triển khai DAG nào, thường không được đệ quy, cũng có thể được sử dụng. Việc triển khai Cây ưa thích của tôi là biểu diễn bản đồ tập trung và không đệ quy.
Đồ thị thường được tìm kiếm theo chiều rộng đầu tiên hoặc độ sâu đầu tiên. Điều tương tự cũng áp dụng cho Cây.
Thay vì giải thích tôi thích thể hiện nó trong hình ảnh.
Một cái cây trong thời gian thực
Một đồ thị trong sử dụng thực tế
Có một bản đồ có thể được hình dung như một cấu trúc dữ liệu đồ thị.
Nhìn thấy họ như thế này làm cho cuộc sống dễ dàng hơn. Cây được sử dụng ở những nơi mà chúng ta biết rằng mỗi nút chỉ có một cha. Nhưng đồ thị có thể có nhiều tiền thân (thuật ngữ cha mẹ thường không được sử dụng cho biểu đồ).
Trong thế giới thực, bạn có thể biểu diễn hầu hết mọi thứ bằng biểu đồ. Tôi đã sử dụng một bản đồ, ví dụ. Nếu bạn coi mỗi thành phố là một nút, nó có thể đạt được từ nhiều điểm. Các điểm dẫn đến nút này được gọi là các điểm trước và các điểm mà nút này sẽ dẫn đến được gọi là các điểm kế tiếp.
sơ đồ mạch điện, sơ đồ của một ngôi nhà, mạng máy tính hoặc hệ thống sông là một vài ví dụ nữa về đồ thị. Nhiều ví dụ trong thế giới thực có thể được coi là biểu đồ.
Sơ đồ kỹ thuật có thể như thế này
Cây :
Biểu đồ:
Hãy chắc chắn để tham khảo các liên kết dưới đây. Những người sẽ trả lời gần như tất cả các câu hỏi của bạn trên cây và đồ thị.
Người giới thiệu :
Các câu trả lời khác là hữu ích, nhưng chúng thiếu các thuộc tính của mỗi:
Đồ thị vô hướng, nguồn hình ảnh: Wikipedia
Đồ thị có hướng, nguồn hình ảnh: Wikipedia
Có thể được định hướng hoặc vô hướng (sẽ áp dụng cho tất cả các cạnh trong biểu đồ)
Theo Wikipedia :
Ví dụ: nếu các đỉnh đại diện cho mọi người trong một bữa tiệc và có một cạnh giữa hai người nếu họ bắt tay, thì biểu đồ này không bị ảnh hưởng bởi vì bất kỳ người nào A chỉ có thể bắt tay với một người B chỉ khi B cũng bắt tay với A. Ngược lại, nếu bất kỳ cạnh nào từ người A đến người B tương ứng với A ngưỡng mộ B, thì biểu đồ này được định hướng, bởi vì sự ngưỡng mộ không nhất thiết phải được đáp lại.
Có một số chồng chéo trong các thuộc tính trên. Cụ thể, hai thuộc tính cuối cùng được ngụ ý bởi phần còn lại của các thuộc tính. Nhưng tất cả chúng đều đáng chú ý.
Trong cây, mỗi nút (trừ nút gốc) có chính xác một nút tiền thân và một hoặc hai nút kế tiếp. Nó có thể được duyệt qua bằng cách sử dụng các giao dịch theo thứ tự, thứ tự trước, sau khi đặt hàng và chiều rộng đầu tiên. Cây là một loại đồ thị đặc biệt không có chu kỳ nên được gọi là DAG (Đồ thị theo chu kỳ có hướng). Cây là một mô hình phân cấp.
Trong biểu đồ, mỗi nút có một hoặc nhiều nút tiền thân và các nút kế tiếp. Biểu đồ được duyệt qua bằng cách sử dụng thuật toán Depth First Search (DFS) và Breadth First Search (BFS). Đồ thị có chu kỳ nên phức tạp hơn cây. Đồ thị là một mô hình mạng. Có hai loại biểu đồ: đồ thị có hướng và đồ thị vô hướng.
Cây rất rõ ràng: chúng là các cấu trúc dữ liệu đệ quy bao gồm các nút có con.
Bản đồ (còn gọi là từ điển) là các cặp khóa / giá trị. Đưa ra một bản đồ một khóa và nó sẽ trả về giá trị liên quan.
Bản đồ có thể được thực hiện bằng cách sử dụng cây, tôi hy vọng bạn không thấy khó hiểu.
CẬP NHẬT: "Đồ thị" khó hiểu cho "bản đồ" là rất khó hiểu.
Đồ thị phức tạp hơn cây. Cây ngụ ý mối quan hệ cha mẹ / con đệ quy. Có nhiều cách tự nhiên để vượt qua một cái cây: chiều sâu trước, chiều rộng đầu tiên, thứ tự cấp độ, v.v.
Các biểu đồ có thể có các đường đơn hướng hoặc hai chiều giữa các nút, theo chu kỳ hoặc theo chu kỳ, v.v. Tôi sẽ coi các biểu đồ là phức tạp hơn.
Tôi nghĩ rằng một tìm kiếm chữ thảo trong bất kỳ văn bản cấu trúc dữ liệu phong nha nào (ví dụ: "Hướng dẫn thiết kế thuật toán") sẽ cung cấp nhiều thông tin hơn và tốt hơn bất kỳ số câu trả lời SO nào. Tôi khuyên bạn không nên đi theo con đường thụ động và bắt đầu thực hiện một số nghiên cứu cho chính mình.
Cây là dạng biểu đồ đặc biệt tức là đồ thị được kết nối tối thiểu và chỉ có một đường dẫn giữa hai đỉnh bất kỳ.
Trong biểu đồ có thể có nhiều hơn một đường dẫn, biểu đồ có thể có các đường dẫn hai chiều hoặc hai chiều (các cạnh) giữa các nút
Ngoài ra, bạn có thể xem thêm chi tiết: http://freefeast.info/difference-b between / default-b between-trees-and-graphs-trees-vs-graphs/
Trong toán học, đồ thị là biểu diễn của một tập hợp các đối tượng trong đó một số cặp đối tượng được kết nối bằng các liên kết. Các đối tượng được kết nối với nhau được biểu diễn bằng các tóm tắt toán học được gọi là các đỉnh và các liên kết kết nối một số cặp đỉnh được gọi là các cạnh. [1] Thông thường, một biểu đồ được mô tả dưới dạng sơ đồ như một tập hợp các dấu chấm cho các đỉnh, được nối bởi các đường hoặc đường cong cho các cạnh. Đồ thị là một trong những đối tượng nghiên cứu trong toán học rời rạc.
một nút gốc trong cây và chỉ có một cha mẹ cho một con. Tuy nhiên, không có khái niệm về nút gốc. Một sự khác biệt nữa là, cây là mô hình phân cấp nhưng đồ thị là mô hình mạng.
Cây là một sơ đồ sao cho:
a) với các hướng cạnh bị loại bỏ, nó được kết nối và theo chu kỳ
- Bạn có thể loại bỏ giả định rằng nó là chu kỳ
- Nếu nó là hữu hạn, bạn có thể loại bỏ giả định rằng nó được kết nối
b) mỗi đỉnh nhưng một, gốc, có 1
c) gốc có 0
- Nếu chỉ có nhiều nút hữu hạn, bạn có thể loại bỏ giả định rằng gốc có ký tự 0 hoặc giả định rằng các nút khác với gốc có độ 1
Tham khảo: http://www.cs.cornell.edu/cifts/cs2800/2016sp/lectures/lec27-29-graphtheory.pdf
Cây về cơ bản là đồ thị vô hướng không chứa chu kỳ, vì vậy chúng ta có thể nói rằng cây là dạng đồ thị hạn chế hơn. Tuy nhiên, cây và đồ thị có ứng dụng khác nhau để thực hiện các thuật toán khác nhau trong lập trình. Ví dụ, biểu đồ có thể được sử dụng cho bản đồ đường mẫu và cây có thể được sử dụng để thực hiện bất kỳ cấu trúc dữ liệu phân cấp nào.