Duy trì giá trị của đa thức trên đầu vào được cập nhật động


10

Đặt là một đa thức trên một trường hữu hạn cố định. Giả sử chúng ta được cho giá trị của trên một số vectơ và vectơ .P y { 0 , 1 } n yP(x1,x2,,xn)Py{0,1}ny

Bây giờ chúng tôi muốn tính giá trị của trên một vectơ sao cho và khác nhau trên một vị trí chính xác (nói cách khác, chúng tôi lật chính xác một bit theo ). Không gian và sự đánh đổi thời gian cho vấn đề này là gì?y '{ 0 , 1 } n y y ' yPy{0,1}nyyy

Ví dụ, nếu là số monomials trong , chúng ta có thể lưu trữ các hệ số và các giá trị của tất cả các monomials trong . Nếu được lật, chúng tôi sửa giá trị của từng đơn thức chứa và sau đó giá trị của bằng cách sử dụng thông tin được lưu trữ. Nhìn chung, chúng ta cần thời gian và không gian.P P y i y i P ( y ) O ( r )rPPyiyiP(y)O(r)

(Tôi không nói bất cứ điều gì về cách chúng tôi xác định các đơn thức có chứa cho mục đích. Bạn có thể chọn bất kỳ đại diện hợp lý nào của , trong ví dụ tôi giả sử rằng chúng tôi lưu trữ một danh sách các đơn thức chứa cho mỗi .) P y i iyiPyii

Có gì tốt hơn không?

Câu trả lời:


7

Ý tưởng của bạn khái quát như sau: đưa ra một mạch đại số (trên trường hữu hạn) hoặc mạch Boolean (tính toán biểu diễn bit-khôn ngoan của các phần tử trường hữu hạn của bạn) tính , sau đó duy trì giá trị tại mỗi cổng trong mạch. Khi bạn thay đổi bit thứ của , chỉ cần truyền sự thay đổi đó dọc theo DAG của mạch, bắt đầu từ đầu vào . Nếu mạch có kích thước , việc này sẽ mất thời gian và không gian . Điều này có thể nhỏ hơn nhiều so với số lượng đơn thức (tương ứng với kích thước của các mạch đại số có độ sâu chỉ 2).i y y i s O ( s )PTôiyyTôiSÔi(S)


1
Tôi không chắc chắn nếu điều này là có chủ ý, nhưng vấn đề không nói rằng chúng ta đang đưa ra , chỉ cần . f ( y )yf(y)
Andrew Morgan

1
@AndrewMorgan Phụ thuộc vào ứng dụng của bạn, đối với tôi, thật tốt khi cho rằng y được đưa ra. Cảm ơn bạn đã bình luận!
Tatiana Starikovskaya

2
@AndrewMorgan: Thật vậy, trong khi điều này là đúng về mặt kỹ thuật, cách xây dựng ví dụ trong OQ được đặt ra dường như mặc nhiên cho rằng được đưa ra. Nếu y không được đưa ra, tôi nghĩ vấn đề này trở nên khó khăn hơn nhiều . (Tatiana, có thể đáng để thêm điều này như một sự làm rõ cho câu hỏi.)yy
Joshua Grochow

5

Thật dễ dàng để sửa đổi cách tiếp cận lưu trữ đơn thức của bạn để mỗi bản cập nhật chỉ mất thời gian tỷ lệ thuận với số lượng đơn thức thay đổi: chỉ cần cập nhật tổng giá trị đa thức bằng cách thêm giá trị mới và trừ đi giá trị cũ cho mỗi đơn thức thay đổi.

Nếu bạn có công thức đọc một lần cho (tức là mọi biến xuất hiện ở một lá của cây công thức và mỗi nút bên trong là một phép tính số học hai đầu vào như cộng hoặc lần) thì bạn có thể duy trì giá trị của P theo logarit thời gian cho mỗi lần cập nhật bằng cách sử dụng cây cào nén theo công thức. Áp dụng phương pháp này cho một công thức tùy ý, thời gian để cập nhật một biến xuất hiện k lần sẽ là O ( k log N ) trong đó N là kích thước công thức. Vì vậy, ngoại trừ yếu tố log, điều này khái quát hóa giới hạn cho số lượng đơn thức thay đổi và áp dụng cho các kiểu mở rộng tổng quát hơn của đa thức thành công thức.PPkO(klogN)N

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.