Hướng dẫn is a python script an algorithm? - một tập lệnh python có phải là một thuật toán không?


Thuật toán là một thủ tục từng bước, trong đó xác định một tập hợp các hướng dẫn được thực thi theo một thứ tự nhất định để có được đầu ra mong muốn. Các thuật toán thường được tạo ra độc lập với các ngôn ngữ cơ bản, tức là một thuật toán có thể được thực hiện bằng nhiều ngôn ngữ lập trình.

Từ quan điểm cấu trúc dữ liệu, sau đây là một số loại thuật toán quan trọng -

  • Tìm kiếm - Thuật toán để tìm kiếm một mục trong cấu trúc dữ liệu. − Algorithm to search an item in a data structure.

  • Sắp xếp - thuật toán để sắp xếp các mục theo một thứ tự nhất định. − Algorithm to sort items in a certain order.

  • Chèn - Thuật toán để chèn mục trong cấu trúc dữ liệu. − Algorithm to insert item in a data structure.

  • Cập nhật - Thuật toán để cập nhật một mục hiện có trong cấu trúc dữ liệu. − Algorithm to update an existing item in a data structure.

  • Xóa - Thuật toán để xóa một mục hiện có khỏi cấu trúc dữ liệu. − Algorithm to delete an existing item from a data structure.

Đặc điểm của thuật toán

Không phải tất cả các thủ tục có thể được gọi là thuật toán. Một thuật toán phải có các đặc điểm sau -

  • Không rõ ràng - thuật toán phải rõ ràng và không rõ ràng. Mỗi bước (hoặc giai đoạn) của nó và đầu vào/đầu ra của chúng phải rõ ràng và chỉ phải dẫn đến một ý nghĩa. − Algorithm should be clear and unambiguous. Each of its steps (or phases), and their inputs/outputs should be clear and must lead to only one meaning.

  • Đầu vào-một thuật toán nên có các đầu vào được xác định rõ hơn 0 hoặc nhiều hơn. − An algorithm should have 0 or more well-defined inputs.

  • Đầu ra-Một thuật toán nên có 1 hoặc nhiều đầu ra được xác định rõ hơn và phải khớp với đầu ra mong muốn. − An algorithm should have 1 or more well-defined outputs, and should match the desired output.

  • Độ mốt - thuật toán phải chấm dứt sau một số bước hữu hạn. − Algorithms must terminate after a finite number of steps.

  • Tính khả thi - nên khả thi với các tài nguyên có sẵn. − Should be feasible with the available resources.

  • Độc lập-một thuật toán nên có các hướng từng bước, nên độc lập với bất kỳ mã lập trình nào. − An algorithm should have step-by-step directions, which should be independent of any programming code.

Làm thế nào để viết một thuật toán?

Không có tiêu chuẩn được xác định rõ để viết thuật toán. Thay vào đó, đó là vấn đề và phụ thuộc vào tài nguyên. Các thuật toán không bao giờ được viết để hỗ trợ một mã lập trình cụ thể.

Như chúng ta biết rằng tất cả các ngôn ngữ lập trình đều chia sẻ các cấu trúc mã cơ bản như các vòng lặp (làm, vì, while), kiểm soát dòng chảy (if-else), v.v ... Các cấu trúc phổ biến này có thể được sử dụng để viết một thuật toán.

Chúng tôi viết các thuật toán theo cách từng bước, nhưng nó không phải lúc nào cũng đúng. Viết thuật toán là một quá trình và được thực thi sau khi miền vấn đề được xác định rõ. Đó là, chúng ta nên biết miền vấn đề, mà chúng ta đang thiết kế một giải pháp.

Thí dụ

Chúng ta hãy cố gắng học thuật toán viết bằng cách sử dụng một ví dụ.

  • Vấn đề - Thiết kế một thuật toán để thêm hai số và hiển thị kết quả. − Design an algorithm to add two numbers and display the result.

Bước 1 - Bắt đầu − START

Bước 2 - Khai báo ba số nguyên A, B & C − declare three integers a, b & c

Bước 3 - Xác định các giá trị của A & B − define values of a & b

Bước 4 - Thêm các giá trị của A & B − add values of a & b

Bước 5 - Lưu trữ đầu ra của Bước 4 đến C − store output of step 4 to c

Bước 6 - In C − print c

Bước 7 - Dừng − STOP

Các thuật toán cho các lập trình viên biết cách viết mã chương trình. Ngoài ra, thuật toán có thể được viết là -

Bước 1 - Bắt đầu Thêm − START ADD

Bước 2 - Nhận các giá trị của A & B − get values of a & b

Bước 3 - C ← A + B − c ← a + b

Bước 4 - Hiển thị C − display c

Bước 5 - Dừng − STOP

Trong thiết kế và phân tích các thuật toán, thông thường phương pháp thứ hai được sử dụng để mô tả một thuật toán. Nó giúp nhà phân tích dễ dàng phân tích thuật toán bỏ qua tất cả các định nghĩa không mong muốn. Anh ta có thể quan sát những gì hoạt động đang được sử dụng và cách thức quá trình chảy.

Viết số bước, là tùy chọn.step numbers, is optional.

Chúng tôi thiết kế một thuật toán để có được một giải pháp cho một vấn đề nhất định. Một vấn đề có thể được giải quyết theo nhiều cách.

Hướng dẫn is a python script an algorithm? - một tập lệnh python có phải là một thuật toán không?

Do đó, nhiều thuật toán giải pháp có thể được lấy cho một vấn đề nhất định. Bước tiếp theo là phân tích các thuật toán giải pháp được đề xuất đó và thực hiện giải pháp phù hợp nhất.

Bạn có thể tạo các thuật toán của riêng mình bằng cách viết mã Python tương ứng và thêm một vài dòng để cung cấp thêm thông tin cần thiết để xác định ngữ nghĩa của thuật toán. Bạn có thể tìm thấy một menu Tạo tập lệnh mới trong nhóm Công cụ trong khối thuật toán tập lệnh của hộp công cụ. Nhấp đúp vào nó để mở hộp thoại Phiên bản tập lệnh. Đó là nơi mà bạn nên nhập mã của bạn. Lưu tập lệnh từ đó trong thư mục Scripts (bản mặc định khi bạn mở hộp thoại Lưu tệp), với phần mở rộng .Py, sẽ tự động tạo thuật toán tương ứng.scripts folder (the default one when you open the save file dialog), with .py extension, will automatically create the corresponding algorithm.

Tên của thuật toán (cái bạn sẽ thấy trong hộp công cụ) được tạo từ tên tệp, loại bỏ phần mở rộng của nó và thay thế các dấu gạch nối thấp bằng khoảng trống.

Hãy để có mã sau, tính toán chỉ số độ ẩm địa hình (TWI) trực tiếp từ DEM

##dem=raster
##twi=output raster
ret_slope = processing.runalg("saga:slopeaspectcurvature", dem, 0, None,
                None, None, None, None)
ret_area = processing.runalg("saga:catchmentarea", dem,
                0, False, False, False, False, None, None, None, None, None)
processing.runalg("saga:topographicwetnessindextwi, ret_slope['SLOPE'],
                ret_area['AREA'], None, 1, 0, twi)

Như bạn có thể thấy, nó liên quan đến 3 thuật toán, tất cả chúng đều đến từ Saga. Một trong số chúng tính toán TWI, nhưng nó cần một lớp dốc và lớp tích lũy dòng chảy. Chúng tôi không có những cái này, nhưng vì chúng tôi có DEM, chúng tôi có thể tính toán chúng gọi các thuật toán saga tương ứng.

Một phần của mã nơi xử lý này diễn ra không khó hiểu nếu bạn đã đọc chương trước. Các dòng đầu tiên, tuy nhiên, cần một số giải thích bổ sung. Họ cung cấp thông tin cần thiết để biến mã của bạn thành một thuật toán có thể được chạy từ bất kỳ thành phần GUI nào, như Hộp công cụ hoặc Trình mô hình đồ họa.

Những dòng này bắt đầu bằng biểu tượng bình luận python kép (##) và có cấu trúc sau##) and have the following structure

[parameter_name]=[parameter_type] [optional_values]

Dưới đây là danh sách tất cả các loại tham số được hỗ trợ trong các tập lệnh xử lý, cú pháp của chúng và một số ví dụ.

  • raster. Một lớp raster. A raster layer
  • vector. Một lớp vector. A vector layer
  • bàn. Một cái bàn. A table
  • con số. Một giá trị số. Một giá trị mặc định phải được cung cấp. Chẳng hạn, độ sâu = số2.4. A numerical value. A default value must be provided. For instance, depth=number 2.4
  • sợi dây. Một chuỗi văn bản. Như trong trường hợp của các giá trị số, một giá trị mặc định phải được thêm vào. Ví dụ, name = StringVictor. A text string. As in the case of numerical values, a default value must be added. For instance, name=string Victor
  • LongString. Giống như chuỗi, nhưng một hộp văn bản lớn hơn sẽ được hiển thị, vì vậy nó phù hợp hơn với các chuỗi dài, chẳng hạn như một tập lệnh mong đợi một đoạn mã nhỏ.. Same as string, but a larger text box will be shown, so it is better suited for long strings, such as for a script expecting a small code snippet.
  • Boolean. Một giá trị boolean. Thêm đúng hoặc sai sau khi đặt giá trị mặc định. Ví dụ: verbose = booleantrue.. A boolean value. Add True or False after it to set the default value. For example, verbose=boolean True.
  • Multleraster. Một tập hợp các lớp raster đầu vào. raster. A set of input raster layers.
  • nhiều người. Một tập hợp các lớp vectơ đầu vào. vector. A set of input vector layers.
  • đồng ruộng. Một trường trong bảng thuộc tính của một lớp vectơ. Tên của lớp phải được thêm vào sau thẻ trường. Chẳng hạn, nếu bạn đã khai báo đầu vào vectơ với mylayer = vectơ, bạn có thể sử dụng myfield = fieldmylayer để thêm một trường từ lớp đó làm tham số.. A field in the attributes table of a vector layer. The name of the layer has to be added after the field tag. For instance, if you have declared a vector input with mylayer=vector, you could use myfield=field mylayer to add a field from that layer as parameter.
  • thư mục. Một thư mục. A folder
  • tập tin. Một tên tệp. A filename
  • CRS. Một hệ thống tham chiếu tọa độ. A Coordinate Reference System

Tên tham số là tên sẽ được hiển thị cho người dùng khi thực thi thuật toán và cũng là tên biến để sử dụng trong mã tập lệnh. Giá trị được nhập bởi người dùng cho tham số đó sẽ được gán cho một biến với tên đó.

Khi hiển thị tên của tham số cho người dùng, tên sẽ được chỉnh sửa để cải thiện ngoại hình của nó, thay thế dấu gạch nối thấp bằng khoảng trắng. Vì vậy, ví dụ, nếu bạn muốn người dùng thấy một tham số có tên AnumericalValue, bạn có thể sử dụng tên biến A_Numerical_Value.A numerical value, you can use the variable name A_numerical_value.

Các giá trị các lớp và bảng là các chuỗi chứa filepath của đối tượng tương ứng. Để biến chúng thành một đối tượng QGIS, bạn có thể sử dụng hàm xử lý.getObjectFromURI (). Nhiều đầu vào cũng có giá trị chuỗi, chứa các filepath cho tất cả các đối tượng được chọn, được phân tách bằng dấu chấm phẩy (;).processing.getObjectFromUri() function. Multiple inputs also have a string value, which contains the filepaths to all selected objects, separated by semicolons (;).

Đầu ra được xác định theo cách tương tự, sử dụng các thẻ sau:

  • đầu ra raster
  • đầu ra vector
  • OutputTable table
  • Outputhtml html
  • OutputFile file
  • đầu ra number
  • đầu ra string
  • Outputextent extent

Giá trị được gán cho các biến đầu ra luôn là một chuỗi có filepath. Nó sẽ tương ứng với một filepath tạm thời trong trường hợp người dùng chưa nhập bất kỳ tên tệp đầu ra nào.

Ngoài các thẻ cho các tham số và đầu ra, bạn cũng có thể xác định nhóm theo đó thuật toán sẽ được hiển thị, sử dụng thẻ nhóm.group tag.

Thẻ cuối cùng mà bạn có thể sử dụng trong tiêu đề tập lệnh của mình là ## nomodeler. Sử dụng điều đó khi bạn không muốn thuật toán của mình được hiển thị trong cửa sổ mô hình. Điều này nên được sử dụng cho các thuật toán không có cú pháp rõ ràng (ví dụ, nếu số lượng lớp được tạo trước##nomodeler. Use that when you do not want your algorithm to be shown in the modeler window. This should be used for algorithms that do not have a clear syntax (for instance, if the number of layers to be created is not known in advance, at design time), which make them unsuitable for the graphical modeler

Bàn giao dữ liệu được tạo bởi thuật toán

Khi bạn khai báo một đầu ra đại diện cho một lớp (raster, vectơ hoặc bảng), thuật toán sẽ cố gắng thêm nó vào QGIS sau khi nó kết thúc. Đó là lý do tại sao, mặc dù phương thức runalg () không tải các lớp mà nó tạo ra, lớp TWI cuối cùng sẽ được tải, vì nó được lưu vào tệp được nhập bởi người dùng, là giá trị của đầu ra tương ứng.runalg() method does not load the layers it produces, the final TWI layer will be loaded, since it is saved to the file entered by the user, which is the value of the corresponding output.

Không sử dụng phương thức Load () trong các thuật toán tập lệnh của bạn, nhưng chỉ khi làm việc với dòng điều khiển. Nếu một lớp được tạo dưới dạng đầu ra của thuật toán, nó nên được khai báo như vậy. Mặt khác, bạn sẽ không thể sử dụng đúng thuật toán trong trình mô hình, vì cú pháp của nó (như được xác định bởi các thẻ được giải thích ở trên) sẽ không khớp với những gì thuật toán thực sự tạo ra.load() method in your script algorithms, but just when working with the console line. If a layer is created as output of an algorithm, it should be declared as such. Otherwise, you will not be able to properly use the algorithm in the modeler, since its syntax (as defined by the tags explained above) will not match what the algorithm really creates.

Đầu ra ẩn (số và chuỗi) không có giá trị. Thay vào đó, chính bạn là người phải gán một giá trị cho họ. Để làm như vậy, chỉ cần đặt giá trị của một biến với tên bạn đã sử dụng để khai báo đầu ra đó. Ví dụ, nếu bạn đã sử dụng tuyên bố này,

Dòng sau sẽ đặt giá trị của đầu ra thành 5:

Giao tiếp với người dùng

Nếu thuật toán của bạn mất nhiều thời gian để xử lý, thì bạn nên thông báo cho người dùng. Bạn có sẵn một tiến trình toàn cầu có tên toàn cầu, với hai phương thức có sẵn: setText (văn bản) và setpercentage (phần trăm) để sửa đổi văn bản tiến trình và thanh tiến trình.progress available, with two available methods: setText(text) and setPercentage(percent) to modify the progress text and the progress bar.

Nếu bạn phải cung cấp một số thông tin cho người dùng, không liên quan đến tiến trình của thuật toán, bạn có thể sử dụng phương thức setInfo (văn bản), cũng từ đối tượng tiến trình.setInfo(text) method, also from the progress object.

Nếu tập lệnh của bạn có một số vấn đề, cách truyền bá chính xác là nêu ra một ngoại lệ của loại geoalgorithMexecutException (). Bạn có thể chuyển một thông báo làm đối số cho hàm tạo ngoại lệ. Xử lý sẽ chăm sóc việc xử lý nó và giao tiếp với người dùng, tùy thuộc vào nơi thuật toán đang được thực thi từ (Hộp công cụ, người tạo mô hình, bảng điều khiển Python ...)GeoAlgorithmExecutionException(). You can pass a message as argument to the constructor of the exception. Processing will take care of handling it and communicating with the user, depending on where the algorithm is being executed from (toolbox, modeler, Python console...)

Ghi lại các tập lệnh của bạn

Như trong trường hợp của các mô hình, bạn có thể tạo tài liệu bổ sung cho tập lệnh của mình, để giải thích những gì chúng làm và cách sử dụng chúng. Trong hộp thoại chỉnh sửa tập lệnh, bạn sẽ tìm thấy nút [chỉnh sửa tập lệnh]. Nhấp vào nó và nó sẽ đưa bạn đến hộp thoại chỉnh sửa trợ giúp. Kiểm tra chương về người mô hình đồ họa để biết thêm về hộp thoại này và cách sử dụng nó.[Edit script help] button. Click on it and it will take you to the help editing dialog. Check the chapter about the graphical modeler to know more about this dialog and how to use it.

Các tệp trợ giúp được lưu trong cùng một thư mục với chính tập lệnh, thêm tiện ích mở rộng .help vào tên tệp. Lưu ý rằng bạn có thể chỉnh sửa tập lệnh của bạn Trợ giúp trước khi lưu nó lần đầu tiên. Nếu sau đó bạn đóng hộp thoại chỉnh sửa tập lệnh mà không lưu tập lệnh (tức là bạn loại bỏ nó), nội dung trợ giúp bạn đã viết sẽ bị mất. Nếu tập lệnh của bạn đã được lưu và được liên kết với tên tệp, việc lưu được thực hiện tự động..help extension to the filename. Notice that you can edit your script’s help before saving it for the first time. If you later close the script editing dialog without saving the script (i.e. you discard it), the help content you wrote will be lost. If your script was already saved and is associated to a filename, saving is done automatically.

Ví dụ tập lệnh

Một số ví dụ có sẵn trong bộ sưu tập các tập lệnh trực tuyến mà bạn có thể truy cập bằng cách chọn tập lệnh GET từ công cụ thu thập tập lệnh trực tuyến trong mục nhập tập lệnh/công cụ trong hộp công cụ.

Hướng dẫn is a python script an algorithm? - một tập lệnh python có phải là một thuật toán không?

Xin vui lòng, hãy kiểm tra chúng để xem các ví dụ thực về cách tạo các thuật toán bằng cách sử dụng các lớp khung xử lý. Bạn có thể nhấp chuột phải vào bất kỳ thuật toán tập lệnh nào và chọn Chỉnh sửa tập lệnh để chỉnh sửa mã của nó hoặc chỉ để xem nó.

Thực tiễn tốt nhất để viết thuật toán tập lệnh

Dưới đây, một bản tóm tắt nhanh chóng về các ý tưởng để xem xét khi tạo thuật toán tập lệnh của bạn và, đặc biệt, nếu bạn muốn chia sẻ với người dùng QGIS khác. Theo các quy tắc đơn giản này sẽ đảm bảo tính nhất quán trên các yếu tố xử lý khác nhau như Hộp công cụ, Trình mô hình hoặc Giao diện xử lý hàng loạt.

  • Không tải các lớp kết quả. Để xử lý xử lý kết quả của bạn và tải các lớp của bạn nếu cần.
  • Luôn luôn khai báo các đầu ra của bạn. Tránh những thứ như giải mã một đầu ra và sau đó sử dụng tên tệp đích cho đầu ra đó để tạo ra một bộ sưu tập chúng. Điều đó sẽ phá vỡ các ngữ nghĩa chính xác của thuật toán và làm cho nó không thể sử dụng nó một cách an toàn trong người lập mô hình. Nếu bạn phải viết một thuật toán như vậy, hãy chắc chắn rằng bạn thêm thẻ ## nomodeler.##nomodeler tag.
  • Không hiển thị hộp tin nhắn hoặc sử dụng bất kỳ phần tử GUI nào từ tập lệnh. Nếu bạn muốn giao tiếp với người dùng, hãy sử dụng phương thức setInfo ()setInfo() method or throw an GeoAlgorithmExecutionException
  • Theo nguyên tắc thông thường, đừng quên rằng Agorithm của bạn có thể được thực thi trong một bối cảnh khác với hộp công cụ xử lý.

Hook script trước và sau khi thực hiện

Các tập lệnh cũng có thể được sử dụng để đặt các móc trước và sau khi thực hiện được chạy trước và sau khi một thuật toán được chạy. Điều này có thể được sử dụng để tự động hóa các tác vụ nên được thực hiện bất cứ khi nào một thuật toán được thực thi.

Cú pháp giống hệt với cú pháp được giải thích ở trên, nhưng một biến toàn cầu bổ sung có tên ALG có sẵn, đại diện cho thuật toán vừa được thực hiện).alg is available, representing the algorithm that has just been (or is about to be) executed.

Trong nhóm chung của hộp thoại Cấu hình xử lý, bạn sẽ tìm thấy hai mục có tên là tệp tập lệnh trước khi thực hiện và tệp tập lệnh sau khi thực hiện trong đó tên tệp của các tập lệnh được chạy trong mỗi trường hợp có thể được nhập.

Là một kịch bản là một thuật toán?

Một thuật toán được mô tả tốt nhất trong các từ, có thể là mã giả.Kịch bản là một chương trình được viết bằng ngôn ngữ kịch bản.Cả C và C ++ đều không thể được mô tả là 'ngôn ngữ kịch bản'.A script is a program written in a scripting language. Neither C nor C++ could be described as 'scripting languages'.

Thuật toán nào được sử dụng trong Python?

Nhà vô địch thuật toán ML trị vì được cho là gói Scikit-Learn của Python, cung cấp cú pháp đơn giản và dễ dàng kết hợp với một kho báu của nhiều thuật toán.Trong khi một số thuật toán phù hợp hơn cho các nhiệm vụ cụ thể, những thuật toán khác được áp dụng rộng rãi cho bất kỳ dự án nào.scikit-learn package, which offers simple and easy syntax paired with a treasure trove of multiple algorithms. While some algorithms are more appropriate for specific tasks, others are widely applicable to any project.

Mã hóa có giống như thuật toán không?

Bạn sử dụng mã để nói với một máy tính phải làm gì.Trước khi bạn viết mã, bạn cần một thuật toán.Thuật toán là một danh sách các quy tắc để tuân theo để giải quyết vấn đề.Các thuật toán cần phải có các bước của chúng theo đúng thứ tự.Before you write code you need an algorithm. An algorithm is a list of rules to follow in order to solve a problem. Algorithms need to have their steps in the right order.

Mã có thể là một thuật toán không?

Tất cả mã về cơ bản là một thuật toán.Đó là một chuỗi các hướng dẫn được xác định rõ để khiến máy tính thực hiện điều bạn muốn nó làm.. It's a sequence of well-defined instructions to get the computer to do the thing you want it to do.