Tôi nghĩ rằng bây giờ tôi có thể chứng minh một giới hạn thấp hơn không cần thiết. Ý tưởng là để thực hiện bất kỳ chương trình như vậy với một nhóm các chương trình phân nhánh so sánh. Giả định 'chỉ đọc' có nghĩa là họ các chương trình phân nhánh của chúng ta sử dụng rất ít, tức là , khoảng trắng. Sau đó, chúng tôi áp dụng ràng buộc thấp hơn được chứng minh bởi Borodin et al. trong "Một sự đánh đổi không gian thời gian để sắp xếp trên các máy không bị lãng quên." Điều này mang lại cho chúng tôi một giới hạn thấp hơn cho thời gian.S T = Ω ( n 2 ) n 2 / log nO ( nhật kýn )ST= Ω ( n2)n2/ đăng nhậpn
Chi tiết hơn một chút: Chúng ta có thể phân phối với thao tác 5 ở trên. Nói một cách lỏng lẻo, nếu chúng ta đã có thể so sánh các đầu của hai danh sách và in phần đầu của danh sách, thì chúng ta không cần phải cách ly phần đầu của một danh sách trên một thanh ghi cụ thể. Giả sử điều này, chúng ta thấy rằng mọi thanh ghi trong máy chỉ lưu trữ một chuỗi con cuối cùng của đầu vào.
Giả sử chương trình đăng ký của chúng tôi có dòng mã và thanh ghi k , X 1 , Lọ , X k .ℓkX1, Lọ , Xk
Sửa . Chúng tôi xây dựng chương trình phân nhánh so sánh cho các chuỗi có độ dài n như sau. Tạo một nút cho mỗi tuple ( i , d 1 , ... , d k ) nơi 1 ≤ i ≤ ℓ và 0 ≤ d 1 , ... , d k ≤ n . Ý tưởng là, các tính toán trong máy đăng ký tương ứng với các đường dẫn trong chương trình phân nhánh và chúng ta đang ở nút ( i , d 1 , Lỗi , dnn( tôi , d1, Lọ , dk)1 ≤ i ≤ ℓ0 ≤ d1, Lọ , dk≤ n nếu chúng ta ở dòng i trong máy đăng ký và độ dài của chuỗi được lưu trong X i là d i . Bây giờ, chúng ta phải xác định các cạnh được định hướng của chương trình rẽ nhánh( tôi , d1, Lọ , dk)TôiXTôidTôi
Nếu dòng có dạngTôi
nếu thì goto i 1 khác goto i 2Xbạn< XvTôi1Tôi2
sau đó cho tất cả các , nút ( i , d 1 , HP , d k ) được gắn nhãn bằng cách so sánh phần tử d u -th và d v -th của đầu vào và có cạnh "đúng" ( i 1 , d 1 , Vay , d k ) và cạnh "sai" thành ( i 2 , d 1 , Bắn , d kd1, Lọ , dk( tôi , d1, Lọ , dk)dbạndv( tôi1, d1, Lọ , dk) .( tôi2, d1, Lọ , dk)
Nếu dòng có dạngTôi
, goto dòng i 'X1← t a i l ( X2)Tôi'
sau đó có một mũi tên từ bất kỳ nút nào đến ( i ′ , d 2 - 1 , Lỗi , d k ) .( tôi , d1, Lọ , dk)( tôi', d2- 1 , góc , dk)
Nếu dòng có dạngTôi
, goto dòng i 'p r i n t ( h e a d( Xbạn) )Tôi'
sau đó có một mũi tên từ bất kỳ nút nào đến ( i ′ , d 1 , Rắc , d k ) được gắn nhãn bởi nút d u -th của đầu vào.( tôi , d1, Lọ , dk)( tôi', d1, Lọ , dk)dbạn
Hy vọng những ví dụ này cho thấy rõ tôi dự định xây dựng chương trình rẽ nhánh như thế nào. Khi tất cả được nói và làm, chương trình phân nhánh này có ít nhất nút, vì vậy nó có không gian O ( log n )ℓ ⋅ nkO ( nhật kýn )