Skip to main content

[java] So Sánh DFS và BFS trong thuật toán tìm kiếm

Khái niệm

DFS (Tìm kiếm Độ sâu thứ nhất) và BFS (Tìm kiếm Breadth Đầu tiên) là các thuật toán tìm kiếm được sử dụng cho đồ thị và cây. Khi bạn có cây hoặc đồ thị được sắp xếp, giống như BST, bạn có thể dễ dàng tìm kiếm cấu trúc dữ liệu để tìm nút mà bạn muốn. Tuy nhiên, khi đưa ra một cây hoặc đồ thị không có thứ bậc, thuật toán tìm kiếm BFS và DFS có thể hữu ích để tìm thấy những gì bạn đang tìm kiếm. Quyết định chọn một trong những khác cần được dựa trên loại dữ liệu mà một trong những là làm việc với.

Trong một tìm kiếm đầu tiên, bạn bắt đầu từ nút gốc, và sau đó quét từng nút ở mức đầu tiên bắt đầu từ nút trái, di chuyển về phía bên phải. Sau đó, bạn tiếp tục quét mức thứ hai (bắt đầu từ bên trái) và mức thứ ba, v.v ... cho đến khi bạn đã quét tất cả các nút hoặc cho đến khi bạn tìm thấy nút thực mà bạn đang tìm kiếm. Trong một BFS, khi vượt qua một mức độ, chúng ta cần một số cách để biết được các nút nào đi qua khi chúng ta đạt đến cấp độ tiếp theo. Cách này được thực hiện bằng cách lưu trữ các con trỏ tới các nút con của cấp độ trong khi tìm kiếm mức đó. Các con trỏ được lưu trữ trong hàng đợi FIFO (First-In-First-Out). Điều này, lần lượt, có nghĩa là BFS sử dụng một lượng lớn bộ nhớ vì chúng ta phải lưu trữ các con trỏ.

Ví dụ về BFS

Dưới đây là một ví dụ về một BFS sẽ như thế nào. Các con số đại diện cho thứ tự trong đó các nút được truy cập trong một BFS:



Trong một tìm kiếm sâu, bạn bắt đầu từ gốc, và đi theo một trong các chi nhánh của cây càng nhiều càng tốt cho đến khi tìm thấy nút hoặc tìm nút nào đó (nút không có con). Nếu bạn nhấn nút lá, sau đó bạn tiếp tục tìm kiếm ở tổ tiên gần nhất với trẻ em chưa được khám phá.

Ví dụ về DFS

Đây là một ví dụ về một DFS sẽ như thế nào. Các con số đại diện cho thứ tự trong đó các nút được truy cập trong một DFS:

Sự khác biệt giữa DFS và BFS 

So sánh BFS và DFS, lợi thế lớn của DFS là nó có yêu cầu bộ nhớ thấp hơn nhiều so với BFS, bởi vì nó không cần thiết để lưu trữ tất cả các con con trỏ ở mỗi cấp. Tùy thuộc vào dữ liệu và những gì bạn đang tìm kiếm, hoặc DFS hoặc BFS có thể là thuận lợi.

Ví dụ, nếu có một cây gia đình nếu ai đó đang tìm kiếm ai đó trên cây mà vẫn còn sống, thì có thể an toàn khi cho rằng người đó sẽ ở dưới đáy của cây. Điều này có nghĩa là một BFS sẽ mất một thời gian dài để đạt được mức độ cuối cùng. Một DFS, tuy nhiên, sẽ tìm thấy mục tiêu nhanh hơn. Nhưng, nếu một người đang tìm kiếm một người trong gia đình đã chết cách đây rất lâu, người đó sẽ ở gần đỉnh cây. Sau đó, một BFS thường sẽ nhanh hơn DFS. Vì vậy, những lợi thế của một trong hai thay đổi tùy thuộc vào dữ liệu và những gì bạn đang tìm kiếm.

Cám ơn các bạn đã quan tâm theo dõi.


Comments

Popular posts from this blog

[Java] Comparator - Assignment

1. Introduction Xin chào các bạn! Hôm nay, mình sẽ giới thiệu cho các bạn một bài thực hành trên trang cousera.org ,  trong bài học liên quan đến lập trình java, Nguyên lý thiết kế phần mềm để chúng ta ôn luyện thêm về phương pháp Sort trên mảng các đối tượng. Sau khi các bạn làm thành thục bài Assignment này, mình tin là các bạn sẽ phân biệt tốt và sử dụng hiệu quả Comparable và Comparator. Trong toàn bộ assignments này, bạn sẽ bắt đầu với các trường đã được cung cấp, sử dụng hầu hết các class, và chỉ việc chỉnh sửa một vài thứ của chúng mà thôi. Trước tiên, dưới đây là các lớp đã được cung cấp từ các bài học trước chưa có sự chỉnh sửa: - Location class, được lấy từ bài học Android và chỉnh sửa để dùng cho khoá học này. Các dữ liệu là geographic location.  Có một hàm constructors sử dụng 2 biến : latitude và longitude và một public method distanceTo. - QuakeEntry class, dây là một lớp Model Entity, được định nghĩa và sử dụng thông suốt khoá học. Bạn có thể thấy nó ...

[English] KNOW, MEET, MEET WITH, or MEET UP

Today, I want to talk with you about "meet", "meet with", or "meet up with", and this, in case you are wondering is the past tense of "meet". "know","meet","meet up with", and "meet with", and: What are the differences between those different words? Please see this example : "I knew Kien last week" -> "knew" is the past of "know" and "met" is the past of "meet" so: "I met up with Kien last week." Do you know what is difference between these sentences are? Are there ony ones that have a mistake in them or all these all good sentences? So take a moment and think about it. So let's first look at the difference between these two.  "meet" will be used in case the first time that two people are talking.  Thye don't know each other. We use "meet" when we're meeting somebody for the first time. We will use ...