2013-04-02 22 views
6

Tôi phải tính toán tổng số tiền có thể lập hóa đơn cho chủ thẻ, để truy cập thẻ dựa vào bãi đỗ xe. Cấu trúc lãi suất của tôi trông như thế này. Mỗi khu vực trong bãi đỗ xe sẽ có danh sách ưu tiên các mức giá này.Làm cách nào để tính toán tỷ lệ đỗ xe trong vài ngày khi giá được chỉ định hàng ngày?

public partial class HourlyPrice 
{ 
    public int Id { get; set; } 
    public int DayId { get; set; } 
    public DateTime StartTime { get; set; } 
    public DateTime EndTime { get; set; } 
    public int MinHour { get; set; } 
    public int MaxHour { get; set; } 
    public decimal Price { get; set; } 
} 

DayId cho phép, ví dụ: 'miễn phí vào Chủ Nhật từ 13h00'. MinNour và 'MaxHour' cho phép từ 0 đến 2 giờ miễn phí, trong đó 5 đến 6 giờ tốn R11.00. StartTimeEndTime cho phép 'sau 18h00 chi phí R7,00, tỷ lệ căn hộ'.

Mối quan tâm của tôi là nơi không xác định giá nhiều ngày. Khi một chiếc xe đi vào dưới một cấu trúc giá trong một ngày, và đi theo một cấu trúc giá khác vào một ngày khác. Điều này trông giống như tôi sẽ phải liên tục truy cập mỗi giờ đậu xe và tích lũy số tiền đến hạn. Điều này có vẻ là một cách làm rất tốn kém.

Bất kỳ lời khuyên nào về kết quả như vậy sẽ được đánh giá cao.

+0

Bạn có thể đo tổng thời gian dành cho mỗi 'HourlyPrice' bằng cách đi từ" thời điểm hiện tại "đến đường biên của' HourlyPrice' tương ứng, sau đó làm cho khoảnh khắc biên giới đó là "thời điểm hiện tại" và đệ quy (chú ý chồng lên nhau)). –

+2

"Điều này có vẻ là một cách làm rất tốn kém." Có bao nhiêu ngàn chiếc xe bạn mong đợi để xử lý mỗi giây? – Corak

+0

Từ khi xem xét các yêu cầu của bạn, tôi không thấy bất kỳ cách nào xung quanh phá vỡ mỗi khoảng thời gian đỗ xe tính theo giờ và tính toán chi phí mỗi giờ bằng cách sử dụng bộ quy tắc. Tôi rất thích xem các giải pháp khác, nhưng tôi không thể nghĩ ra một giải pháp ... –

Trả lời

0

Bạn có thể lưu trữ các chính sách giá cả của mỗi ngày cụ thể trong một khoảng thời gian cây. Cây nên lưu trữ tất cả các giờ trong ngày. Cùng với giới hạn giờ, một số thông tin phải được giữ:

  • Căn hộ boolean: Giá phẳng có được xếp hạng không? (ví dụ: R7,00 cho tất cả khoảng thời gian)
  • Giá nguyên: chi phí của một giờ trong kỳ. Nếu flat được đặt thành true, đây là chi phí của toàn bộ thời gian.

Bạn nhận hồ sơ đỗ xe ở đầu vào. Tôi cho rằng đó là dấu thời gian cho thời gian đến và rời khỏi xe. Hai giờ đầu tiên miễn phí, vì vậy bạn "tăng" thời gian đến hai tiếng đồng hồ. Từ dấu thời gian kết quả, bạn có thể tạo chuỗi thứ tự ba (ngày, thời gian bắt đầu, thời gian kết thúc). Nó có thể là rỗng (nếu chủ sở hữu chiếc xe đậu ít hơn hai tiếng đồng hồ), trường hợp này là tầm thường: chi phí R0.00

Bây giờ, một thuật toán xử lý chuỗi sẽ trông như thế này:

cost <- 0 
while (NOT is_empty(sequence)) { 
    dayTriplet <- pop(sequence) 
    down <- dayTriplet.StartTime 
    up <- dayTriplet.EndTime 
    pricingTree <- getPriceTree(dayTriplet.dayId) 
    while (down < up) { 
     node <- findNode(pricingTree, down) 
     nbHours <- min(up, node.up) - down 
     if (node.flat) { 
      cost <- cost + node.price 
     } else { 
      cost <- cost + nbHours*node.price 
     } 
     down <- down + nbHours 
    } 
} 

Các thuật toán là một chút sai lầm nhưng tôi cảm thấy những ý tưởng đằng sau nó đã được giá trị bắn. Ví dụ, nếu một chiếc xe đậu sau 18h00 một ngày cho đến 4h00 ngày hôm sau, thuật toán này sẽ phân tích (d, 18, 24) và (d + 1, 0, 4), và do đó chủ sở hữu sẽ được lập hóa đơn hai lần tỷ lệ căn hộ của kỳ thay vì chỉ một lần. Một hệ thống mang theo giống như vậy nên làm thủ thuật cho vấn đề này. Tôi chỉ không tích hợp nó để lại một thuật toán tương đối rõ ràng.

Các vấn đề liên quan