Nói về tầm quan trọng của việc tối ưu hóa cấu trúc mã

Tác giả:Chú con trai, Tạo: 2021-05-22 05:57:14, Cập nhật:

Vì đã phát hành một chương trình công khai, bạn thường gặp một số vấn đề nhỏ. Hôm nay hãy nói về tầm quan trọng của việc tối ưu hóa cấu trúc mã.

Khi nói đến lợi nhuận, điều quan trọng nhất là hai điều: 1. tỷ lệ sử dụng vốn. 2. tốc độ gọi hàng.

Tuy nhiên, thực tế là đối với hầu hết những người mới bắt đầu, chỉ cần tối ưu hóa cấu trúc mã sẽ giúp chiến lược nhanh hơn vài chục mili giây, hoàn toàn không kém so với việc thay đổi một mạng tốt hơn. Tuy nhiên, chi phí thấp hơn nhiều.

Tuy nhiên, khi chỉ có một cặp giao dịch, tốc độ tối ưu hóa cấu trúc mã thường tăng dưới 1 ms, hầu như không có sự khác biệt.

Tăng tỷ lệ sử dụng vốn, thường đòi hỏi một số cặp giao dịch được quan sát đồng thời với cùng một khoản tiền, sẽ làm tăng số lần lặp hợp lý, khi đó lợi ích của việc tối ưu hóa cấu trúc mã rất rõ ràng. Thông thường, đa sàn giao dịch đa giao dịch đối với các cuộc khảo sát phức tạp là O ((n!), Bằng cách tối ưu hóa hoàn toàn có thể giảm xuống còn O ((n!/(m!)) hoặc thậm chí O ((n*m) ((m

Một câu hỏi mà tôi thường gặp, ví dụ như có hai con đường A-C và A-B-C. Hai con đường cần được tính toán hai lần, một lần tính toán con đường có thể mang lại lợi nhuận, giả sử là p1 và p2, một lần tính toán con đường cụ thể cho mỗi sàn giao dịch và giao dịch của họ về giá và số tiền cần được thanh toán cụ thể.

Một cách phổ biến nhất là viết trước một hàm tính toán lợi nhuận, cụ thể là price và amount. Sau đó, gọi vòng lặp hàm này, lấy lợi nhuận của mỗi đường dẫn, sau đó chọn lợi nhuận lớn nhất để giao dịch.

Rõ ràng, chúng ta chỉ cần tính toán lợi nhuận khi so sánh, không cần phải tính toán giá và số tiền đặt hàng ngay từ đầu.

Vì vậy, khi tối ưu hóa, bạn có thể tách profit và recall thành 2 hàm. Đầu tiên, bạn gọi chức năng profit, lấy profit của mỗi đường dẫn, và sau đó chọn giao dịch lớn nhất của profit.

Sau đó, nếu phân tích thêm về mã, bạn sẽ thấy rằng trong hầu hết các trường hợp, vì có những người làm việc lợi nhuận khác, một khi một con đường có lợi nhuận, nó thường được lợi nhuận bởi những người khác. Vì vậy, rất khó có nhiều con đường có lợi nhuận cùng một lúc.

Vì vậy, chúng ta có thể tối ưu hóa chiến lược hơn nữa, thiết lập một vòng lặp, vòng lặp thêm các câu nói if, nếu tìm thấy một đường dẫn có lợi nhuận, break ra, và tính toán số lượng đơn đặt hàng và giá của đường dẫn đó.

Sau đó, sự phức tạp được đơn giản hóa thêm từ O ((n + 1) để O ((m + 1), m < n. Khi các cơ hội giao dịch đều bằng nhau, m bằng n/2 hoặc sự phức tạp được giảm xuống O ((n/2 + 1).

Đó là bằng cách phân chia đơn giản, phân tích cấu trúc tối ưu hóa logic, bạn có thể giảm độ phức tạp thời gian từ O ((2n) xuống O ((n/2+1)).

Trong thực tế, khi viết mã, có rất nhiều tình huống có thể được tối ưu hóa, và tôi thường thấy sau khi viết mã, có khả năng tối ưu hóa một O ((n!) để tối ưu hóa O ((n* ((n+1)). Đôi khi thậm chí có thể tối ưu hóa một logic chỉ cần vài trăm mili giây để hoàn thành, tối ưu hóa trong vòng 1 ms.

Như một phần của một chút thời gian, bạn có thể giảm đáng kể khoảng thời gian hỏi chiến lược, nhưng tôi khuyên bạn nên tối ưu hóa cấu trúc mã.


Thêm nữa

Dao xươngBạn có thể cho tôi biết cách hiệu quả để tránh tình huống một chân?

Chú con traiĐợi đến sàn giao dịch

Allez-zCó phải sự chậm trễ là sự chậm trễ của dữ liệu sâu?

Chú con traiGhi lại sự chậm trễ, vượt quá một giá trị nào đó thì không được thực hiện.