簡體   English   中英

區分n張圖片的算法

[英]Algorithm to differentiate n pictures

假設您給出長度為k的N位數組。 意味着每個向量v i的形式為{1,0,0,1 ... 1}(k個分量)等。

現在我想找到最小索引集S = {I 0 ,I 1 ...,I q-1 },其中0 <= I i <= k-1這樣

當在S上評估v i時,其給出二進制序列{v i [I 0 ],v i [I 1 ] ..}對於每個v i是唯一的。

因此,例如,如果有64個向量{v 0 ... v 63 },則最小索引集| S | 可以有6號給定v 很長很不一樣。 因為2 6 = 64。

應用程序是給定一個固定的黑白圖片列表,0 ... 63,你知道輸入將是那些圖片之一,圖片足夠大,你只需要檢查輸入的6個像素來弄清楚它是哪張照片。

這個問題似乎應該已經證明NP或在某處解決了。

任何提示? 謝謝。

我無法找到與此相對應的NP難題,盡管我確定它是NP難的。 我希望有人可以挖出一個,因為我認為我已經遇到了幾個不同的偽裝問題。 如果沒有,如果我有時間,我可能會稍后嘗試減少。

每列將圖像集分成兩部分; 我們從包含所有圖像的單個集合開始,我們的目標是到達一個分區,其中每個部分(在分區中設置)由單個圖像組成,並且使用盡可能少的列。

一種方法是制作和解決最小集合覆蓋問題 ,其中地面集由所有k(k-1)/ 2 圖像組成,並且對於每列v_r,我們制作由該列的所有圖像對組成的集合區分 - 即所有圖像對(i,j)使得v_r [i]!= v_r [j]。 然后,任何封面都會將每個圖像與其他所有圖像區分開來,並且最小尺寸的封面將使用盡可能少的列來完成。

實際解決此集合覆蓋問題的最快方法可能是通過制定和求解ILP ,但分支和綁定也可以工作,也可以很容易地變成(快速但可能是次優的)啟發式。

無論哪種方式,在嘗試解決問題之前(以及在添加每個列之后,如果使用B&B),這里有一些簡單的簡化規則可以應用,這通常會減少問題的大小:

  1. 如果將所有1更改為0,則列提供相同的“區分能力”,反之亦然。 因此,如果列的第一個元素是1,則通過反轉來“規范化”列。
  2. 將所有相同的列折疊為單個列,因為它們中的任何一列都與其他列完全一樣好。 這可以通過首先對它們進行排序來輕松完成:然后所有相同的列形成一個連續的塊。 執行第一次減少后執行此操作將導致更多減少。
  3. 您當然可以刪除任何“常量列” - 它們無法用於區分圖像。
  4. 如果你有任何一對相同的行,那么就沒有解決方案:也就是說,即使包括所有k位也不能讓你區分這兩行(圖像)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM