Tìm phần còn lại của một đa thức cố định lớn khi chia cho một đa thức nhỏ chưa biết


9

Giả sử chúng ta hoạt động trong một lĩnh vực hữu hạn. Chúng tôi được cung cấp một đa thức cố định lớn p (x) (của, giả sử, độ 1000) trong lĩnh vực này. Đa thức này được biết trước và chúng tôi được phép thực hiện tính toán bằng cách sử dụng nhiều tài nguyên trong "giai đoạn ban đầu". Những kết quả này có thể được lưu trữ trong các bảng tra cứu nhỏ hợp lý.

Vào cuối "giai đoạn ban đầu", chúng ta sẽ được cung cấp một đa thức nhỏ chưa biết q (x) (của, giả sử, mức 5 trở xuống).

Có cách nào nhanh chóng để tính p (x) mod q (x) cho rằng chúng ta được phép thực hiện một số phép tính phức tạp trong "giai đoạn ban đầu" không? Một cách rõ ràng là tính p (x) mod q (x) cho tất cả các giá trị có thể có của q (x). Có cách nào tốt hơn để làm điều này?

Câu trả lời:


3

Các thuật toán sau hoạt động tốt nếu các lĩnh vực cơ bản có một trật tự rất nhỏ .S

Giả sử chúng ta biết là không thể giảm được, ở một mức độ cố định d . Sau đó, mod q , chúng ta biết x s d = x giữ. Do đó, nó đủ để tính toán trước p ( x )qdqxSd= =x .p(x)modxSd-x

Nói chung, có thể phân hủy thành một sản phẩm của tối giản đa thức q = q 1 ... q r . Trong trường hợp này, một cuộc tranh luận tương tự áp dụng cho máy tính p modulo mỗi q 1 , ... , q r riêng biệt, và sau đó vẽ ra các kết quả với nhau. Vì vậy, chúng tôi thực sự cần phải tính p ( x )q(x)q= =q1Giáo dụcqrpq1,Giáo dục,qr với mỗi d d .p(x)modxSd'-xd'd


2

Tôi nghĩ rằng có một cách khá nhanh để làm điều này. Đặt các hệ số của đa thức chưa biết là b i , do đó q = d i = 0 b i x i trong đó d là một số nhỏ. Bây giờ chúng ta hãy bắt đầu tính toán pqbTôiq= =ΣTôi= =0dbTôixTôid trong đó p = D i = 0 a i x i , trong đó D lớn và a i được biết đến. Điều này chúng tôi làm bằng cách giảm mức độ sử dụng các đẳng thức như một D x D = - a Dp(modq)p= =ΣTôi= =0DmộtTôixTôiDmộtTôi. Cuối cùng, những gì chúng ta nhận được là một mức độ<d-1đa thức, có hệ số là đa thức củabi(vìai đãbiết). Các đa thức này chúng ta có thể tính toán nhanh khi chúng ta nhận đượcq.mộtDxD= =-mộtDbdΣTôi= =1d-1bd-TôixD-Tôi<d-1bTôimộtTôiq


-1

Xem bình luận tuyệt vời về bài viết này dưới đây. :)


Sơ chế; đầu vào: p(x)

  1. Yếu tố p ( x ) = 1000 i = 0 ( x i - r i ) .p(x)p(x)= =ΠTôi= =01000(xTôi-rTôi)

  2. Lưu trữ này dưới dạng bảng gồm các gốc khác biệt r j và bội số tương ứng của chúng m j .Trjmj

Giai đoạn trực tuyến; đầu vào: q(x)

  1. Hệ số q ( x ) = 5 i = 0 ( x i - r i ) .q(x)q(x)= =ΠTôi= =05(xTôi-rTôi')

  2. Lưu trữ này dưới dạng một danh sách gồm các gốc khác biệt r j và bội số tương ứng của chúng m j .Lrj'mj'

  3. Trong khi không phải là trống rỗng, loại bỏ các gốc tiếp theo / đa dạng từ L và bất kỳ như điều khoản trong T .LLT

  4. Đọc từ bảng T đã sửa đổi và đầu ra.p(x)modq(x)T


Những bình luận khác:

  • Rõ ràng bạn muốn sắp xếp bảng và truy cập nó bằng tìm kiếm nhị phân (hoặc một cái cây).T
  • (Đặt là mức độ của p ( x ) .) Nếu bạn muốn đầu ra p ( x ) mod q ( x ) ở dạng biểu diễn hệ số, bạn chỉ cần thực hiện một loạt các FFT ở cuối để có ˜ O ( d ) thời gian.dp(x)p(x)modq(x)Ôi~(d)
  • Tùy thuộc vào cách bạn chính thức hóa nó, bạn có thể tính toán trước rất nhiều cách khác nhau mà bạn kết hợp lại các thuật ngữ trong trước (kiểu lập trình động), do đó hầu hết (hoặc tất cả) các phép nhân chỉ là tra cứu. Chi phí thống trị sau đó là số lần tra cứu, hoặc khoảng O ( log d ) . Nếu d = 1000 , đây chỉ là một số ít các hoạt động cụ thể, số học.TÔi(đăng nhậpd)d= =1000

2
Lĩnh vực bạn đang bao thanh toán p trong? Làm thế nào lớn để bạn mong đợi đại diện này là về các lĩnh vực ban đầu? Và khi bạn nói đọc từ bảng sửa đổi và đầu ra, bạn có ý gì?
David Eppstein

2
Điều này sẽ chỉ hoạt động nếu bạn đang hoạt động trên một lĩnh vực nơi cả q tách ra. Nhưng điều này dường như phụ thuộc vào q ; đặc biệt, bạn không thể precompute rễ cho p một mình. Hơn nữa, tính toán gốc của q trên một trường lớn như vậy sẽ mất thời gian (ít nhất) | p | ; Điều này không tốt hơn thuật toán ngây thơ. pqqpq|p|
David Harris
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.