Làm thế nào để lặp lại các vectơ theo thứ tự xác suất trong không gian nhỏ


12

Hãy xem xét một vectơ chiều trong đó . Đối với mỗi chúng ta biết và giả sử là độc lập. Sử dụng các xác suất này, có cách nào hiệu quả để lặp lại các vectơ chiều nhị phân theo thứ tự từ rất có thể đến ít nhất (với các lựa chọn tùy ý cho các mối quan hệ) bằng cách sử dụng đường con không gian trong kích thước đầu ra? nvvi{0,1}ipi=P(vi=1)vin

Lấy ví dụ . Vectơ có khả năng nhất là và ít có khả năng nhất là . p={0.8,0.3,0.6}(1,0,1){0,1,0}

Đối với rất nhỏ, chúng ta có thể gắn nhãn cho mỗi vectơ với xác suất của nó và chỉ đơn giản là sắp xếp nhưng điều này tất nhiên sẽ vẫn không sử dụng không gian tuyến tính.2 nn2n

Một biến thể gần gũi của câu hỏi này đã được hỏi trước đây tại /cs/24123/how-to-iterate-over-vector-in-order-of-probability .


Có bất kỳ lý do nào bạn không hỏi câu hỏi tiếp theo ở đó không? Có phải vấn đề chính ở đây là một trong những điều này trong không gian tuyến tính?
Suresh Venkat

@SureshVenkat Có vấn đề hoàn toàn là về không gian tuyến tính (ở kích thước đầu ra). Tôi đã hỏi nó ở đây vì tôi nghĩ rằng câu hỏi có thể rất khó.
Lembik

Việc giải quyết điều này trong không gian và thời gian dường như đòi hỏi các kỹ thuật tương tự SUBSET-SUM (nhanh chóng biết được các khoản tiền con nào gần như hủy bỏ các khoản tiền khác nhau). Vì vậy, không có khả năng có một giải pháp nhanh chóng. poly(n)
Geoffrey Irving

@GeoffreyIrving Bạn có nghĩ rằng trực giác này có thể được làm cho trang trọng hơn không?
Lembik

Câu trả lời:


9

Sau đây cung cấp một thuật toán sử dụng khoảng thời gian và 2 n / 2 không gian.2n2n/2

Trước tiên, hãy xem xét vấn đề sắp xếp các khoản tiền của tất cả các tập hợp con của mục.n

Hãy xem xét bài toán con này: bạn có hai danh sách được sắp xếp có độ dài và bạn muốn tạo một danh sách được sắp xếp gồm các cặp tổng của các số trong danh sách. Bạn muốn làm điều này trong khoảng thời gian O ( m 2 ) (kích thước đầu ra), nhưng không gian tuyến tính. Chúng ta có thể đạt được không gian O ( m ) . Chúng tôi giữ một hàng đợi ưu tiên và kéo các khoản tiền ra khỏi hàng ưu tiên theo thứ tự tăng dần.mO(m2)O(m)

Hãy để cho danh sách có b 1 ... b m , sắp xếp theo thứ tự tăng dần. Chúng tôi lấy m khoản tiền một i + b 1 , i = 1 ... m , và đặt chúng trong một hàng đợi ưu tiên.a1amb1bmmai+b1i=1m

Bây giờ, khi chúng ta rút tổng nhỏ nhất còn lại ra khỏi hàng ưu tiên, nếu j < m chúng ta đặt tổng a i + b j + 1 vào hàng ưu tiên. Không gian bị chi phối bởi hàng đợi ưu tiên, luôn chứa tối đa m tổng. Và thời gian là O ( m 2 log m ) , vì chúng tôi sử dụng O ( log m ) cho mỗi hoạt động hàng đợi ưu tiên. Điều này cho thấy chúng ta có thể thực hiện bài toán con trong O ( m 2ai+bjj<mai+bj+1mÔi(m2đăng nhậpm)Ôi(đăng nhậpm) thời gian và không gian O ( m ) .Ôi(m2đăng nhậpm)Ôi(m)

Bây giờ, để sắp xếp tổng của tất cả các tập hợp con của số, chúng ta chỉ cần sử dụng chương trình con này trong đó danh sách a i là tập hợp các tập con của nửa mục đầu tiên và danh sách b i là tập hợp các tập con của nửa sau của các mặt hàng. Chúng ta có thể tìm thấy các danh sách này theo cách đệ quy với cùng một thuật toán.nmộtTôibTôi

Bây giờ chúng tôi sẽ xem xét vấn đề ban đầu. Đặt là tập hợp tọa độ bằng 0S 1 là tập hợp tọa độ là 1 . Sau đó Π i S 0 p ( v i = 0 ) Π i S 1 p ( v i = 1 )S00S11

iS0p(vi=0)iS1p(vi=1)=1inp(vi=0)iS1p(vi=1)p(vi=0)=1inp(vi=0)exp(iS1logp(vi=1)p(vi=0)).

Sắp xếp các số này giống như sắp xếp các số , vì vậy chúng tôi đã giảm vấn đề sắp xếp các tập hợp con của n mục.iS1logp(vi=1)logp(vi=0)n


Có một sự giảm đáng kể nào sẽ làm cho một giải pháp đa thời gian / không gian trở nên hợp lý không?
Lembik

Có lẽ bạn sẽ không nhận được một giải pháp mất ít hơn thời gian, vì đó là kích thước của đầu ra (và giải pháp của tôi mất n2nThời gian 2 n ). Tôi không có một giới hạn thấp hơn cho không gian, mặc dù. n2n
Peter Shor

Cảm ơn bạn. Tôi không có nghĩa là thời gian poly tất nhiên mà là một cái gì đó tuyến tính trong kích thước đầu ra và không gian poly.
Lembik

4

Chúng ta có thể làm điều đó trong không gian (nếu chúng ta không quan tâm đến thời gian chạy).O(n)

  1. Đối với một chuỗi đã cho , chúng ta có thể tính toán trong không gian O ( n ) số r ( x ) của các chuỗi có nhiều khả năng hơn x ; đó là số xx{0,1}nO(n)r(x)x st p ( x ' ) > p ( x ) : chỉ cần đi qua tất cả các x '{ 0 , 1 } n và đếm số x ' stxp(x)>p(x)x{0,1}nx . Lưu ý rằng r ( x ) là số chuỗi x liên tiếp trong đầu ra.p(x)>p(x)r(x)x
  2. Với mọi , chúng ta có thể tìm x với r ( x ) = k trong không gian O ( n ) : đi qua tất cả x { 0 , 1 } n , với mỗi x tính r ( x ) , dừng và xuất x nếu r ( x ) = k .kxr(x)=kO(n)x{0,1}nxr(x)xr(x)=k
  3. Bây giờ chỉ cần đi qua tất cả từ 0 đến 2 n - 1 , với mỗi k in x với r ( x ) = k .k02n1kxr(x)=k

(Chúng ta cũng nên quan tâm đến các mối quan hệ có thể, nhưng điều này không khó.)


Cảm ơn bạn. Đó là một thuật toán khá chậm tuy nhiên :)
Lembik

0

Chỉnh sửa: Câu trả lời này không chính xác. Xem ý kiến ​​để biết chi tiết. ~ kẻ phá hoại

Tuyến tính trong đầu ra có nghĩa là . Tôi nghĩ rằng thuật toán rõ ràng chỉ sử dụng không gian O ( n ) , ngoài bản thân đầu ra tất nhiên.O(2n)O(n)

  1. Lấy danh sách chứa các cặp và sắp xếp nó theo | 0,5 - p i | , lớn nhất trước.(i,pi)|0.5pi|

  2. Xác định hàm đệ quy gấp đôi có danh sách các cặp như vậy và vectơ được điền một phần , đặt giá trị của v i1 nếu p i > 0,50 khác, và đệ quy (sử dụng đuôi của danh sách và v ) , sau đó lật v i và đệ quy lại. Nếu danh sách trống, thay vào đó, đầu ra v .vvi1pi>0.50vviv

  3. Gọi hàm đệ quy này trong danh sách đã sắp xếp và một vectơ trống.

Trực giác là bạn đặt giá trị của các phần tử nhất định trong vectơ trước (phần tử có xác suất gần nhất bằng 1 ) và điền vào vectơ như thế, kết thúc với phần tử có xác suất gần 0,5 nhất . Mỗi giá trị có thể mà toàn bộ vectơ có thể lấy được xuất ra theo thứ tự xác suất của nó.010.5

Thời gian chạy là , là giới hạn dưới vì đó là độ dài của đầu ra. Độ phức tạp không gian là O ( n ) vì loại không yêu cầu nhiều hơn thế và độ dài đệ quy là độ dài của vectơ, là n . Tôi tin rằng đây cũng là giới hạn dưới bởi vì phải có một trạng thái khác nhau trong bộ nhớ cho mỗi bước chạy thuật toán và độ phức tạp thời gian là O ( 2 n ) . Các trạng thái O ( n ) trong bộ nhớ được yêu cầu để liệt kê O ( 2 n )O(2n)O(n)nO(2n)O(n)O(2n)bước thời gian. Do đó, thuật toán này là trường hợp tối ưu phức tạp nhất.


Câu trả lời khác chắc chắn là khác nhau vì nó yêu cầu hàng đợi ưu tiên và do đó sử dụng không gian . Θ(2n)
Lembik

Cảm ơn. Tôi rõ ràng đã không đọc nó đủ cẩn thận! Tôi đã chỉnh sửa câu trả lời của mình.
kẻ phá hoại

3
Bạn có chắc giải pháp này hoạt động? Tôi không thể tìm ra các chi tiết của đệ quy kép (mã giả sẽ giúp!) Nhưng tôi không thấy cách này có thể hoạt động. Cụ thể, giải pháp của bạn có vẻ là cục bộ: nếu nó đặt thì bây giờ sẽ xuất ra 2 n - 1 câu trả lời với v 1 = 1 . Nhưng các câu trả lời thực tế không nên nhìn theo cách này. Trong thực tế, theo như tôi hiểu giải pháp của bạn, nó dường như thất bại ngay cả trong trường hợp đơn giản nhất với tất cả p i = 0,5 . v1=12n1v1=1pi=0.5
bánh bao mobius

Bạn nói đúng, điều này không hiệu quả. Lấy làm tiếc!
kẻ phá hoại
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.