Sự khác biệt giữa heuristic và một thuật toán là gì?


103

Sự khác biệt giữa heuristic và một thuật toán là gì?



1
Nếu bạn xem một thuật toán heuristic như một loại cấu trúc cây, tôi đoán bạn có thể gọi nó là một thuật toán mục đích đặc biệt.
James P.

Heuristic là một thuật toán không (có thể) hoạt động.
JeffE

Câu trả lời:


99

Thuật toán là mô tả của một giải pháp tự động cho một vấn đề . Những gì thuật toán làm được xác định chính xác. Giải pháp có thể có hoặc không thể là giải pháp tốt nhất có thể nhưng bạn biết ngay từ đầu bạn sẽ nhận được loại kết quả nào. Bạn triển khai thuật toán bằng một số ngôn ngữ lập trình để lấy (một phần của) chương trình .

Bây giờ, một số vấn đề khó khăn và bạn có thể không có được một giải pháp chấp nhận được trong thời gian có thể chấp nhận được. Trong những trường hợp như vậy, bạn thường có thể nhận được một giải pháp không quá tệ nhanh hơn nhiều, bằng cách áp dụng một số lựa chọn tùy ý (phỏng đoán có giáo dục): đó là một phương pháp phỏng đoán .

Heuristic vẫn là một loại thuật toán, nhưng một thuật toán sẽ không khám phá tất cả các trạng thái có thể có của vấn đề hoặc sẽ bắt đầu bằng cách khám phá những trạng thái có khả năng xảy ra nhất.

Ví dụ điển hình là từ trò chơi. Khi viết một chương trình trò chơi cờ vua, bạn có thể tưởng tượng việc thử mọi nước đi có thể ở một mức độ sâu nào đó và áp dụng một số chức năng đánh giá cho bàn cờ. Một heuristic sẽ loại trừ đầy đủ các nhánh bắt đầu với các nước đi rõ ràng là xấu.

Trong một số trường hợp, bạn không tìm kiếm giải pháp tốt nhất, nhưng bất kỳ giải pháp nào phù hợp với một số hạn chế. Một kinh nghiệm luận tốt sẽ giúp tìm ra giải pháp trong thời gian ngắn, nhưng cũng có thể không tìm được giải pháp nào nếu giải pháp duy nhất nằm ở những trạng thái mà nó đã chọn không thử.


3
Một cách sử dụng phổ biến khác của heuristics là phát hiện vi-rút, nơi bạn có thể không chắc có vi-rút ở đó, nhưng bạn có thể tìm kiếm các thuộc tính chính cụ thể của vi-rút.
Dana Holt

Heah thats đúng và cho nứt programms
streetparade

1
@kriss, Vậy .. heuristic là một loại thuật toán.
Pacerier

1
@Pacerier: vâng. Đó là một thuật toán giúp điều hướng trong không gian giải pháp của một vấn đề cụ thể. Bạn cũng có thể xem nó như một chiến lược để sửa đổi một thuật toán để làm cho nó trở nên thực tế (một thuật toán meta). Nó vẫn là một thuật toán, tất cả các phương pháp đều như vậy, và Heuristic chắc chắn là một phương pháp.
kriss

33
  • Một thuật toán thường mang tính xác định và được chứng minh là mang lại kết quả tối ưu
  • Phương pháp heuristic không có bằng chứng xác thực, thường liên quan đến các yếu tố ngẫu nhiên và có thể không mang lại kết quả tối ưu.

Nhiều vấn đề mà không có thuật toán hiệu quả nào để tìm ra giải pháp tối ưu được biết đến có các phương pháp tiếp cận heuristic mang lại kết quả gần tối ưu rất nhanh chóng.

Có một số điểm trùng lặp: "thuật toán di truyền" là một thuật ngữ được chấp nhận, nhưng nói một cách chính xác, đó là những khám nghiệm, không phải thuật toán.


2
Tôi sẽ không nói rằng một thuật toán được chứng minh là mang lại kết quả tối ưu: nó phụ thuộc vào thuật toán đối với vấn đề nào.
nbro

Mang lại một kết quả tối ưu không phải là chất lượng cơ bản của các thuật toán, nó là tính chính xác tức là kết quả chính xác trong khi heuristic cung cấp cho bạn kết quả gần đúng.
Marina Dunst

22

Tóm lại, Heuristic là một "Dự đoán có giáo dục". Wikipedia giải thích nó độc đáo. Cuối cùng, một phương pháp "chấp nhận chung" được coi là một giải pháp tối ưu cho vấn đề được chỉ định.

Heuristic là một tính từ chỉ các kỹ thuật dựa trên kinh nghiệm giúp giải quyết vấn đề, học tập và khám phá. Phương pháp heuristic được sử dụng để nhanh chóng đi đến một giải pháp được hy vọng là gần với câu trả lời tốt nhất có thể, hoặc 'giải pháp tối ưu'. Heuristics là "quy tắc ngón tay cái", phỏng đoán được giáo dục, phán đoán trực quan hoặc đơn giản là nhận thức thông thường. Heuristic là một cách chung để giải quyết một vấn đề. Heuristics như một danh từ là một tên khác của phương pháp heuristic.

Nói một cách chính xác hơn, heuristics là viết tắt của các chiến lược sử dụng thông tin dễ tiếp cận, mặc dù có thể áp dụng lỏng lẻo, để kiểm soát việc giải quyết vấn đề ở con người và máy móc.

Trong khi thuật toán là một phương pháp chứa tập hợp hữu hạn các lệnh được sử dụng để giải quyết một vấn đề. Phương pháp này đã được chứng minh về mặt toán học hoặc khoa học để giải quyết vấn đề. Có phương pháp chính thức và chứng minh.

Thuật toán heuristic là một thuật toán có thể tạo ra một giải pháp chấp nhận được cho một vấn đề trong nhiều tình huống thực tế, theo kiểu phương pháp heuristic chung, nhưng không có bằng chứng chính thức về tính đúng đắn của nó.


8

Một thuật toán là một bước-by-step bộ khép kín của các hoạt động được thực hiện 4 , thường hiểu là một dãy hữu hạn các hướng dẫn (máy tính hay con người) để xác định một giải pháp cho một vấn đề như: có một đường đi từ A đến B, hoặc con đường nhỏ nhất giữa A và B. Trong trường hợp sau, bạn cũng có thể hài lòng với một giải pháp thay thế 'gần hợp lý'.

Có một số loại thuật toán nhất định, trong đó thuật toán heuristic là một. Tùy thuộc vào các thuộc tính (đã được chứng minh) của thuật toán trong trường hợp này, nó thuộc một trong ba loại sau (lưu ý 1):

  • Chính xác : giải pháp được chứng minh là giải pháp tối ưu (hoặc chính xác ) cho vấn đề đầu vào
  • Tính gần đúng : độ lệch của giá trị giải pháp được chứng minh là không bao giờ xa giá trị tối ưu hơn một số giới hạn xác định trước (ví dụ: không bao giờ lớn hơn 50% so với giá trị tối ưu)
  • Heuristic : thuật toán chưa được chứng minh là tối ưu, cũng như không nằm trong giới hạn xác định trước của giải pháp tối ưu

Lưu ý rằng thuật toán xấp xỉ cũng là một thuật toán heuristic, nhưng với thuộc tính mạnh hơn là có một ràng buộc đã được chứng minh đối với giải pháp (giá trị) mà nó xuất ra.

Đối với một số vấn đề, chưa ai tìm ra thuật toán 'hiệu quả' để tính toán các giải pháp tối ưu (lưu ý 2). Một trong những vấn đề đó là Bài toán Nhân viên Bán hàng Đi du lịch nổi tiếng. Ví dụ, thuật toán của Christophides cho Bài toán Người bán hàng Đi du lịch, từng được gọi là phương pháp heuristic , vì nó không được chứng minh rằng nó nằm trong 50% giải pháp tối ưu. Tuy nhiên, vì nó đã được chứng minh, thuật toán Christophides được gọi chính xác hơn là một thuật toán xấp xỉ.

Do những hạn chế về những gì máy tính có thể làm, không phải lúc nào bạn cũng có thể tìm ra giải pháp tốt nhất có thể một cách hiệu quả . Nếu có đủ cấu trúc trong một bài toán, có thể có một cách hiệu quả để đi qua không gian lời giải, mặc dù không gian lời giải là rất lớn (tức là trong bài toán đường đi ngắn nhất).

Heuristics thường được áp dụng để cải thiện thời gian chạy của các thuật toán, bằng cách thêm 'thông tin chuyên gia' hoặc 'phỏng đoán được đào tạo' để hướng dẫn hướng tìm kiếm. Trong thực tế, heuristic cũng có thể là một quy trình phụ cho một thuật toán tối ưu, để xác định vị trí cần xem xét đầu tiên .

(lưu ý 1) : Ngoài ra, các thuật toán được đặc trưng bởi liệu chúng có bao gồm các yếu tố ngẫu nhiên hay không xác định. Một thuật toán luôn thực hiện theo cùng một cách và tạo ra cùng một câu trả lời, được gọi là xác định.

(lưu ý 2) : Đây được gọi là bài toán P vs NP và các bài toán được phân loại là NP-đầy đủ và NP-khó không có khả năng có một thuật toán 'hiệu quả'. Ghi chú; như @Kriss đã đề cập trong các nhận xét, thậm chí còn có những loại vấn đề 'tồi tệ hơn', có thể cần thời gian hoặc không gian theo cấp số nhân để tính toán.

Có một số câu trả lời trả lời một phần của câu hỏi. Tôi cho rằng chúng kém hoàn chỉnh và không đủ chính xác và quyết định không chỉnh sửa câu trả lời được chấp nhận bởi @Kriss


Tôi tin rằng định nghĩa của bạn về thuật toán từ quá hạn chế. Việc sử dụng chuỗi từ có ngụ ý không song song không? Các thuật toán parallell ngày nay vẫn ổn và thậm chí là bình thường. Điều gì về giải quyết một vấn đề bằng cách sử dụng mạng nơ-ron? Hay một công cụ lan truyền hạn chế? Các thuật toán? Siêu thuật toán?
kriss

Người đọc có cảm giác vấn đề NP càng tồi tệ hơn. Đó là sự thật. Có những vấn đề thực sự khó khăn cần các thuật toán thực sự tồi tệ như cấp số nhân hoặc tệ hơn. NP đặc biệt bởi vì nếu chúng ta có một giải pháp thì việc kiểm tra nó rất dễ dàng và nhanh chóng, trong khi chúng ta rất khó tìm thấy nó nếu chúng ta chưa có nó. Thật dễ dàng để kiểm tra xem chúng tôi có hướng dẫn chính xác để thoát ra khỏi mê cung hay không, còn khó hơn nhiều để tìm ra lối ra. Như vậy NP vừa dễ vừa khó nếu chúng ta có thể thử tất cả các giải pháp có thể cùng một lúc (không mang tính xác định) thì việc giải nó sẽ rất đơn giản ... nhưng chúng ta không thể.
kriss

Cảm ơn vì bạn đã phản hồi! Tôi đã cập nhật cụm từ một chút và tiếp cận nó theo cách khác. Theo quan điểm của tôi, lan truyền ràng buộc là một kỹ thuật để tiếp cận một cái gì đó, nhưng chưa phải là một thuật toán mô tả cách đi đến giải pháp một cách khôn ngoan được mô tả trong lan truyền ràng buộc. Tất nhiên bạn đã đúng về các lớp của dấu cách và 'tệ hơn', tôi cũng đã thêm một lưu ý về điều đó. BTW: vui lòng viết đầy đủ NP-Complete và / hoặc NP-Hard, vì tập hợp con của NP cũng chứa các bài toán có thể giải 'hiệu quả', không (được phỏng đoán là) cùng một lớp.
Joost

Tất nhiên bạn nói đúng, tôi nên viết NP-Complete. Lỗi của tôi.
kriss

Đó là cách tốt hơn so với những gì một trong những đồng nghiệp của tôi tên nó: NP-Ness (mà âm thanh chỉ là khủng khiếp và kinda gross ...)
Joost

6

Thực sự tôi không nghĩ rằng có nhiều điểm chung giữa họ. Một số thuật toán sử dụng heuristics trong logic của chúng (thường để thực hiện ít phép tính hơn hoặc nhận được kết quả nhanh hơn). Thông thường heuristics được sử dụng trong cái gọi là thuật toán tham lam.

Heuristics là một số "kiến thức" mà chúng tôi cho là tốt để sử dụng để có được lựa chọn tốt nhất trong thuật toán của chúng tôi (khi một lựa chọn nên được thực hiện). Ví dụ ... một kinh nghiệm trong cờ vua có thể là (luôn lấy quân hậu của đối thủ nếu bạn có thể, vì bạn biết đây là con số mạnh hơn). Heuristics không đảm bảo rằng sẽ dẫn bạn đến câu trả lời chính xác, nhưng (nếu giả định là đúng) thường nhận được câu trả lời gần với câu trả lời tốt nhất trong thời gian ngắn hơn nhiều.


4

Heuristics là các thuật toán, vì vậy theo nghĩa đó không có, tuy nhiên, heuristics có cách tiếp cận 'phỏng đoán' để giải quyết vấn đề, mang lại câu trả lời 'đủ tốt', thay vì tìm ra giải pháp 'tốt nhất có thể'.

Một ví dụ điển hình là khi bạn gặp một vấn đề rất khó (đọc NP-đầy đủ), bạn muốn có giải pháp nhưng không có thời gian để giải quyết nó, vì vậy phải sử dụng một giải pháp đủ tốt dựa trên thuật toán heuristic, chẳng hạn như tìm giải pháp cho vấn đề nhân viên bán hàng đi du lịch bằng cách sử dụng thuật toán di truyền.


4

Thuật toán là một chuỗi gồm một số phép toán mà đầu vào sẽ tính toán một thứ gì đó (một hàm) và đưa ra kết quả.

Thuật toán có thể mang lại giá trị chính xác hoặc gần đúng.

Nó cũng có thể tính một giá trị ngẫu nhiên có xác suất cao gần với giá trị chính xác.

Thuật toán heuristic sử dụng một số thông tin chi tiết về các giá trị đầu vào và tính giá trị không chính xác (nhưng có thể gần với giá trị tối ưu). Trong một số trường hợp đặc biệt, heuristic có thể tìm ra giải pháp chính xác.


3

Thuật toán là một tập hợp các hướng dẫn được xác định rõ ràng để giải quyết một vấn đề, Heuristics liên quan đến việc sử dụng phương pháp tiếp cận học hỏi và khám phá để đạt được giải pháp.

Vì vậy, nếu bạn biết cách giải quyết một vấn đề thì hãy sử dụng một thuật toán. Nếu bạn cần phát triển một giải pháp thì đó là kinh nghiệm.


2

Heuristic thường là một tối ưu hóa hoặc một chiến lược thường cung cấp một câu trả lời đủ tốt, nhưng không phải lúc nào và hiếm khi là câu trả lời tốt nhất. Ví dụ, nếu bạn giải quyết vấn đề người bán hàng lưu động bằng thói vũ phu, việc loại bỏ giải pháp từng phần một khi chi phí của nó vượt quá giải pháp tốt nhất hiện tại là một sự suy xét: đôi khi có ích, lần khác thì không, và chắc chắn là không ' t cải thiện thời gian chạy lý thuyết (ký hiệu lớn) của thuật toán


2

Tôi nghĩ Heuristic là một hạn chế được sử dụng trong Mô hình Dựa trên Học tập trong Thông minh Nhân tạo vì các trạng thái giải pháp trong tương lai rất khó dự đoán.

Nhưng nghi ngờ của tôi sau khi đọc các câu trả lời ở trên là "Làm thế nào để Heuristic có thể được áp dụng thành công khi sử dụng Kỹ thuật Tối ưu hóa Stochastic? Hay chúng có thể hoạt động như các thuật toán chính thức khi được sử dụng với Tối ưu hóa Stochastic?"

http://en.wikipedia.org/wiki/Stochastic_optimization


Giáo sư!! sai chính tả nó phải được "trí tuệ nhân tạo"
A_tanA

2

Một trong những lời giải thích hay nhất mà tôi đã đọc đến từ cuốn sách tuyệt vời Code Complete , mà bây giờ tôi trích dẫn:

Khám phá là một kỹ thuật giúp bạn tìm kiếm câu trả lời. Kết quả của nó có thể tùy thuộc vào sự may rủi bởi vì một kinh nghiệm học chỉ cho bạn biết cách nhìn chứ không phải tìm cái gì. Nó không cho bạn biết làm thế nào để đi trực tiếp từ điểm A đến điểm B; nó thậm chí có thể không biết điểm A và điểm B ở đâu. Trên thực tế, heuristic là một thuật toán trong bộ đồ hề. Nó ít khả năng dự đoán hơn, nó thú vị hơn và nó đến mà không cần đảm bảo hoàn tiền trong 30 ngày.

Đây là một thuật toán để lái xe đến nhà của ai đó: Đi theo Quốc lộ 167 về phía nam đến Puy-allup. Đi theo lối Hill Mall Nam và lái xe 4,5 dặm lên đồi. Rẽ phải ở chỗ có đèn bên cửa hàng tạp hóa, rồi rẽ trái trước. Rẽ vào đường lái xe của ngôi nhà rám nắng lớn ở bên trái, tại 714 North Cedar.

Đây là một bí quyết để đến nhà ai đó: Tìm lá thư cuối cùng chúng tôi gửi cho bạn. Lái xe đến thị trấn trong địa chỉ trở lại. Khi bạn đến thị trấn, hãy hỏi ai đó xem nhà của chúng tôi ở đâu. Mọi người đều biết chúng tôi — ai đó sẽ sẵn lòng giúp đỡ bạn. Nếu bạn không tìm thấy ai, hãy gọi cho chúng tôi từ điện thoại công cộng, và chúng tôi sẽ đến tìm bạn.

Sự khác biệt giữa thuật toán và phương pháp heuristic là rất nhỏ, và hai thuật ngữ này có phần sai lệch. Đối với mục đích của cuốn sách này, sự khác biệt chính giữa cả hai là mức độ chuyển hướng từ giải pháp. Một thuật toán cung cấp cho bạn các hướng dẫn trực tiếp. Khám phá cho bạn biết cách khám phá các hướng dẫn cho chính bạn, hoặc ít nhất là nơi để tìm kiếm chúng.


Nói rằng tồn tại sự khác biệt giữa thuật toán và phương pháp heuristic giống như nói rằng có sự khác biệt giữa một con chim và một con gà. Heuristics là một loại thuật toán.
Joost

0

Họ tìm thấy một giải pháp dưới mức tối ưu mà không có bất kỳ sự đảm bảo nào về chất lượng của giải pháp được tìm thấy, rõ ràng là nó có ý nghĩa đối với sự phát triển của heuristics chỉ đa thức. Ứng dụng của các phương pháp này phù hợp để giải các bài toán trong thế giới thực hoặc các bài toán lớn đến mức khó xử theo quan điểm tính toán mà đối với chúng, thậm chí không có thuật toán nào có khả năng tìm ra lời giải gần đúng trong thời gian đa thức.

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.