OK, đây là giao dịch. Tôi có một loạt các hàm tuyến tính, một dấu * x + b.Tìm các chức năng tối thiểu
Mục tiêu của tôi là trả lời câu hỏi/truy vấn sau: Chức năng tối thiểu tại x = q là gì?
Ví dụ: Nếu tôi có hàm f (x) = 3 * x + 2, g (x) = 5 * x - 6 và h (x) = 2 * x + 1, tôi sẽ trả lời ví dụ:
cho x = 4, chức năng h
cho x = 2, chức năng g
cho x = 1, chức năng g
Ý tưởng của tôi như sau:
Sắp xếp các hàm theo hệ số x, theo thứ tự giảm dần.
Sắp xếp các truy vấn trong thứ tự tăng dần
Loại bỏ các chức năng song song, giữ những người thân với giá trị bất biến nhỏ nhất (ví dụ: nếu tôi có f (x) = 2 * x + 4 và g (x) = 2 * x + 2, f (x) sẽ không bao giờ nhỏ hơn g (x), vì vậy tôi không cần f (x)).
Ngay bây giờ tôi đang trên khoảng từ -INF đối với một số số thực, gọi nó là W1 và tôi biết rằng trên khoảng thời gian này, các chức năng với hệ số tuyến tính cao nhất là nhỏ nhất
Tìm W1 bằng cách tìm nhỏ nhất x1 st f (x1) = g (x1) trong đó f là hàm hiện tại của tôi và g lặp lại thông qua tất cả các hàm khác với hệ số tuyến tính nhỏ hơn, w1 = x1
Lặp lại miễn là truy vấn của tôi nằm trong khoảng (-inf, w1): xuất ra hàm hiện tại, sau đó tiến hành truy vấn tiếp theo.
Nếu tôi vẫn có các truy vấn cần trả lời, hãy để chức năng hiện tại là hàm giao cắt hàm hiện tại thực tế của tôi tại x = w1 và thay vì -inf đặt w1, lặp lại các bước tương tự.
Tuy nhiên, việc triển khai hoặc ý tưởng của tôi không đủ nhanh. Có điều gì mà tôi không nhận thấy có thể tăng tốc chương trình của tôi không?
Cảm ơn bạn trước.
Bạn có thể giải thích một chút về ý nghĩa của từng "khoảng thời gian" không? –
@RobertBadea, chắc chắn rồi. – goat
Tôi tin rằng việc xây dựng các khoảng thời gian đó sẽ có giá trị 'N^2' nếu bạn đang kiểm tra từng giao lộ. Tỷ lệ chức năng truy vấn là gì? Điều này sẽ cung cấp cho một ý tưởng về loại precalculation là hợp lý. –