Tại sao bao thanh toán số nguyên lớn được coi là khó khăn?


17

Tôi đã đọc ở đâu đó rằng thuật toán hiệu quả nhất được tìm thấy có thể tính toán các yếu tố trong thời gian , nhưng mã tôi đã viết là hoặc có thể là tùy thuộc vào mức độ phân chia và mô đun nhanh như thế nào. Tôi khá chắc chắn rằng tôi đã hiểu nhầm một cái gì đó ở đâu đó, nhưng tôi không chắc là ở đâu. viết dưới dạng mã giả.O ( n ) O ( n log n )Ôi(điểm kinh nghiệm((64/9b)1/3(đăng nhậpb)2/3)Ôi(n)Ôi(nđăng nhậpn)

function factor(number) -> list
    factors = new list
    if number < 0
        factors.append(-1)
        number = -number
    i = 2
    while i <= number
        while number % i == 0
            factors.append(i)
            number /= i
        i++
    return factors

3
Google "đa thức giả".
Raphael

Thuật toán đó thực sự rất chậm - nếu số là số nguyên tố vòng lặp trong khi lặp (số) lần. Có một đối số rất đơn giản cho phép bạn thoát khỏi các lần lặp sqrt (số).
gnasher729

Câu trả lời:


26

Bạn đang nhầm lẫn số với số bit cần thiết để biểu diễn n . Ở đây b = số bit cần thiết để biểu diễn n (vì vậy b lg n ). Cái này tạo ra một sự khác biệt lớn. Một O ( n ) -time thuật toán là một O ( 2 b ) -time thuật toán - mũ trong số bit. Để so sánh, thuật toán "hiệu quả" mà bạn tìm thấy có thời gian hoạt động là phụ trong b .nnb= =nblgnÔi(n)Ôi(2b)b

Ví dụ: Xét (2 triệu). Khi đó b = 21 bit là đủ để biểu diễn số n . Vì vậy, một thuật toán đó là O ( 2 b 1 / 3 ) sẽ nhanh hơn nhiều so với một thuật toán đó là O ( 2 b ) . Một thuật toán O ( n ) rơi vào loại sau, nghĩa là rất chậm.n= =2,000,000b= =21nÔi(2b1/3)Ôi(2b)Ôi(n)

Xem https://en.wikipedia.org/wiki/Integer_factorization


1
Tôi biết nó là một cái gì đó đơn giản như thế.
EnderShadow

3
@EnderShadow: Ngoài ra, loại số mà bao thanh toán được coi là khó sử dụng phần cứng hiện có và được sử dụng, ví dụ như trong mã hóa RSA, có (tức là n > 2 1.000 ) hoặc hơn. Là một tập thể dục, giả định rằng máy tính của bạn có thể chạy của bạn O ( n ) thuật toán ở, nói rằng, một tỷ lặp mỗi giây, tính toán bao nhiêu năm nó sẽ mất đến yếu tố n 2 1000 . (Nếu phản ứng ban đầu của bạn là "điều đó không thể đúng!", Có lẽ bạn đã tính toán chính xác.)b>1.000n>21.000Ôi(n)n21.000
Ilmari Karonen

1

bạn có khoảng hai câu hỏi ở đây, một câu hỏi chung và một câu hỏi cụ thể về mã của bạn. một cụ thể được xử lý trong câu trả lời khác. câu hỏi chung trong tiêu đề về sự phức tạp của bao thanh toán là rất sâu sắc. Thật không may, không có bằng chứng khoa học mạnh mẽ nào cho thấy bao thanh toán nằm ngoài P ngoài (phần lớn là hoàn cảnh) "rất nhiều chuyên gia đã thử và thất bại" và một số chuyên gia phỏng đoán nó nằm trong P; nó được coi là một trong những vấn đề quan trọng hàng đầu (và rất khó giải quyết) của lý thuyết phức tạp. sau nhiều thập kỷ "tấn công nặng nề", các thuật toán tốt nhất là theo cấp số nhân. độ phức tạp bao thanh toán là một trong "một số vấn đề đặc biệt" được biết là nói dối "giữa" P và NP hoàn chỉnh nhưng cho đến nay vẫn chưa được phân loại.

như đã chỉ ra, sự phức tạp không phải là vấn đề lớn cho đến khi nó được sử dụng ("đại khái") trong các hệ thống mật mã RSA vào giữa những năm 1980, nơi bảo mật mật mã phụ thuộc vào giả định. (Hai người kia "không-chính xác-khuyến khích" datapoints liên quan: thuật toán Shors cho bao thanh toán lượng tử P-thời gian và thử nghiệm tính nguyên đã được chứng minh là trong P trong đầu những năm 2000 trong nổi tiếng / nổi tiếng thuật toán AKS .) một kết quả tích cực có thể sẽ là trong thời gian quasipolynomial của nó , yếu hơn NP hoàn thành (giả sử P ≠ NP và NP hoàn thành có thời gian giới hạn thấp hơn theo cấp số nhân ) nhưng về mặt kỹ thuật vẫn "cứng".

cho đến nay vẫn chưa tìm thấy một khảo sát tuyệt vời về subj key này. tuy nhiên cũng thấy


một kịch bản có vẻ hơi "trường hợp cạnh" có thể là bao thanh toán có thể ở P nhưng vẫn không có thuật toán khả thi. hay còn gọi là thuật toán thiên hà
vzn

Cần phải đề cập rằng RSA là về bao thanh toán sản phẩm của hai số nguyên tố lớn (trong đó ai đó biết các số nguyên tố và chỉ cần nhân chúng, và một người khác được cung cấp sản phẩm và có nghĩa vụ phải tìm các số nguyên tố). Có thể hình dung rằng có thể có một thuật toán có thể tạo ra các sản phẩm của hai số nguyên tố lớn, nhưng không phải là sản phẩm của hơn hai số nguyên tố lớn. Cũng giống như các số bao thanh toán là các số nguyên tố lớn (nhưng không được biết trước là các số nguyên tố lớn) có thể được thực hiện trong thời gian đa thức.
gnasher729
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.