Sự khác biệt giữa cấu trúc dữ liệu Cây và đồ thị là gì?


139

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:


150

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.


8
Đồ thị rất hữu ích và có thể được sử dụng để mô hình hóa một lượng lớn thứ. Rất nhiều cấu trúc dữ liệu khác có thể được xem như một biểu đồ với các hạn chế. Ví dụ, danh sách liên kết đơn là trường hợp đặc biệt của DAG.
JR Garcia

7
@ user785287 Ý của bạn là gì khi thể hiện bản đồ tập trung ?
Geek

36
"Cây không phải là cấu trúc dữ liệu đệ quy" là sai lệch và sai. Một cây có thể được biểu diễn với cấu trúc dữ liệu không đệ quy (ví dụ: một mảng các cạnh; một cây đầy đủ, giống như nằm dưới một đống nhị phân, có thể được biểu diễn rất gọn trong một mảng; có các biểu diễn cô đọng khác , v.v.), nhưng có lẽ cách phổ biến và hữu ích nhất để biểu diễn chúng là sử dụng cấu trúc dựa trên con trỏ đệ quy. Đại diện không phải là duy nhất cho cây không có cây, nhưng đó là không quan trọng.
j_random_hacker

2
Không hẳn. Cây không nhất thiết phải có hướng. vi.wikipedia.org/wiki/Tree_(graph_theory) hiển thị một ví dụ về cây không có hướng. Chúng thường được sử dụng trong bối cảnh sinh học.
Michal Palczewski

2
@ khắc nghiệt, các cây không được định hướng theo nghĩa: "X và Y nằm trong mối quan hệ cha-con" không có hướng. Mặc dù vậy, các mối quan hệ cá nhân, "X là con của Y" và "Y là con của X", là quan hệ trực tiếp. Hướng chỉ ra rằng; hướng của "phong trào". Trong cây, ý tưởng về hướng là không thực sự cần thiết trừ khi nó có ý nghĩa (đó là trường hợp thường gặp nhất với cây). Đó là cách tôi xem nó ít nhất.
Kostas Mouratidis

105

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 cái cây trong thời gian thực

Một đồ thị trong sử dụng thực tế

Biểu đồ thời gian thực

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 :

nhập mô tả hình ảnh ở đây

Biểu đồ:

nhập mô tả hình ảnh ở đây

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 :

  1. http://www.introprogramming.info/english-intro-csharp-book/read-online/ch CHƯƠNG-17-trrees-and-graphs / #_Toc362296541

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

  3. Wikipedia


7

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ị

Đồ thị vô hướng, nguồn hình ảnh: Wikipedia

Đồ thị có hướng, nguồn hình ảnh: Wikipedia

  • Bao gồm một tập hợp các đỉnh (hoặc nút) và một tập hợp các cạnh kết nối một số hoặc tất cả chúng
  • Bất kỳ cạnh nào cũng có thể kết nối bất kỳ hai đỉnh nào chưa được kết nối bởi một cạnh giống hệt nhau (theo cùng một hướng, trong trường hợp biểu đồ có hướng)
  • Không phải kết nối (các cạnh không phải kết nối tất cả các đỉnh với nhau): một biểu đồ có thể bao gồm một vài đỉnh được ngắt kết nối
  • 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ây

Nguồn hình ảnh: Wikipedia

  • Một loại biểu đồ
  • Các đỉnh thường được gọi là "nút"
  • Các cạnh được định hướng và thể hiện mối quan hệ "là con của" (hoặc "là cha mẹ của")
  • Mỗi nút (ngoại trừ nút gốc) có chính xác một cha mẹ (và không hoặc nhiều con)
  • Có chính xác một nút "gốc" (nếu cây có ít nhất một nút), đó là nút không có cha mẹ
  • Phải kết nối
  • Là chu kỳ, có nghĩa là nó không có chu kỳ : "một chu trình là một đường dẫn [chuỗi AKA] của các cạnh và đỉnh trong đó một đỉnh có thể tiếp cận được từ chính nó"

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ú ý.


3

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.


2

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.


1
Xin lỗi, ý tôi là đồ thị, tôi đã gõ bản đồ.
user918304

"Đồ thị" khó hiểu cho "bản đồ" là rất khó hiểu. " :)
cpz

1
Nói "đồ thị phức tạp hơn cây" cũng giống như nói "Quạ chuyên hơn chim". Thay vào đó chúng ta không nên nói rằng "Tất cả các cây đều là đồ thị, nhưng không phải tất cả các đồ thị đều là cây"?
dudewad

Tôi không quan tâm sáu năm sau. Chắc chắn bạn có thể sử dụng thời gian của bạn tốt hơn ở đây.
duffymo

2

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/


0

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.


0

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.


0

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ỳ

  1. Bạn có thể loại bỏ giả định rằng nó là chu kỳ
  2. 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

  1. 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


0

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.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.