Hôm nay chúng ta sẽ nói về tầm quan trọng của việc tối ưu hóa cấu trúc mã.
Đối với đấu giá, điều quan trọng nhất là hai thứ: 1) tỷ lệ sử dụng vốn; 2) tốc độ lấy hàng.
Tuy nhiên, đố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ã có thể làm cho chiến lược nhanh hơn vài chục mili giây, hoàn toàn không kém hiệu quả 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, cấu trúc mã được tối ưu hóa thường được tăng ít hơn 1ms, hầu như không có sự khác biệt.
Tăng tỷ lệ sử dụng vốn, thường cần cùng một khoản tiền để quan sát nhiều cặp giao dịch cùng một lúc, thì sẽ làm tăng số lần vòng lặp logic, tại thời điểm này lợi ích của việc tối ưu hóa cấu trúc mã trở nên rõ ràng. Sự phức tạp của các cuộc thăm dò đa giao dịch đa giao dịch đa giao dịch đa giao dịch đa giao dịch đa giao dịch đa giao dịch đa giao dịch đa giao dịch đa giao dịch đa giao dịch đa giao dịch đa giao dịch đa giao dịch đa giao dịch đa giao dịch đa giao dịch đa giao dịch đa giao dịch đa giao dịch đa giao dịch đa giao dịch đa giao dịch đa giao dịch đa giao dịch đa giao dịch đa giao dịch đa giao dịch đa giao dịch đa giao dịch đa giao dịch đa giao dịch đa giao dịch đa giao dịch đa giao dịch đa giao dịch đa giao dịch đa giao dịch đa giao dịch đa giao dịch đa giao dịch đa giao dịch đa giao dịch đa giao dịch đa giao dịch đa giao dịch đa giao dịch đa giao dịch đa giao dịch đa giao dịch đa giao dịch đa giao dịch đa giao dịch đa giao dịch đa giao dịch đa giao dịch đa giao dịch đa giao dịch đa giao dịch đa giao dịch đa giao dịch đa giao dịch đa giao dịch đa giao dịch đa*m) ((m) khi cặp giao dịch đạt đến hàng trăm và sàn giao dịch quan sát hàng chục đồng thời.
Một ví dụ về một vấn đề mà tôi thường gặp, ví dụ như có hai con đường thầu A-C và A-B-C, và một con đường thầu A-C và A-B-C. Hai con đường cần phải tính toán hai lần, một lần tính toán lợi nhuận mà con đường có thể mang lại, giả sử là p1 và p2, một lần tính toán giá và số tiền của mỗi sàn giao dịch cụ thể và giao dịch của họ đối với nhu cầu thanh toán cụ thể.
Một cách viết phổ biến nhất là viết một hàm, chức năng của hàm này là tính lợi nhuận, cụ thể là giá và số tiền. Sau đó gọi hàm này một vòng, lấy lợi nhuận cho mỗi con đường và sau đó chọn lợi nhuận lớn nhất để giao dịch.
Rõ ràng, khi so sánh, chúng ta chỉ cần tính lợi nhuận, không cần tính giá và số tiền ngay từ đầu.
Vì vậy, trong quá trình tối ưu hóa, có thể tách ra 2 hàm profit và trỏ. Chức năng gọi profit trước tiên, nhận được lợi nhuận cho mỗi con đường, sau đó chọn giao dịch lớn nhất của profit. Như vậy, hàm trỏ theo logic sẽ được gọi từ mỗi chu kỳ, trở thành chỉ được gọi một lần.
Sau đó, nếu phân tích thêm về mã, chúng ta sẽ thấy rằng trong nhiều trường hợp, vì có những nhân viên đánh giá khác, vì vậy một khi một con đường nào đó có lợi nhuận, thì nó thường được đánh giá bởi người khác. Vì vậy, rất khó có nhiều con đường cùng lúc có lợi nhuận.
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 trong câu if, nếu tìm thấy một con đường nào đó có lợi nhuận, chúng tôi sẽ phá vỡ nó, và sau đó tính toán số lượng và giá của con đường này.
Vì vậy, độ phức tạp sẽ được giảm từ O ((n + 1) cho O ((m + 1), m < n. Khi các sàn giao dịch có cơ hội bằng nhau, m bằng n / 2, tức là độ phức tạp giảm xuống O ((n / 2 + 1)
Đó là bằng cách phân tách hàm đơ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 code, có rất nhiều trường hợp có thể được tối ưu hóa, và tôi thường xuyên viết code sau khi viết xong, và thường xuyên thấy rằng logic tối ưu hóa có thể được tối ưu hóa một O ((n!)*(n+1)). Đôi khi nó thậm chí có thể lấy một logic được thực hiện trong vài trăm phần trăm giây, tối ưu hóa trong vòng 1ms.
Một trong những cách để giảm bớt khoảng cách giữa các cuộc thăm dò chính sách là dành một chút thời gian, và tôi khuyên bạn nên tối ưu hóa cấu trúc mã.