K binary sayılarımız olduğunu varsayalım (her biri aynı uzunlukta). Bu K ikili sayılarını benzersiz bir şekilde tanımlamak için gereken minimum sayıda bit bulmamız gerekir (sürekli olmamak gerekir). Örneğin 100, 110, 1 bit (ikinci pozisyonda) ile ayırt edilebilir. 111, 110, 101, ayırt edilmesi için 2 bit gerekir.Bir ikili sayı grubunu ayırt etmek için minimum sayıda bit bulmak üzere algoritma
cevap
Minimum Set Cover kümesi U ve bir dizi alt kümeleri U arasında S açısından tanımlanmaktadır. U numaralı her öğenin, S'daki kümelerden birinin (en az) tarafından karşılanması gerekir.
Set Cover'u çözebilirseniz, bu sorunu da çözebilirsiniz. Bir dizi U her girişin, u i, j (i < j olduğu), çiftler tekabül (i, j) ve (j, i) arasında inşa varsayalım senin k numaraları (dolayısıyla | U | = k (k - 1)/2). Şimdi n setleri, S inşa , ..., n S , n olası bit pozisyonlarına karşılık gelen. S j farklı çiftler grubuna karşılık gelen tüm elemanların alt kümesidir. sayılar k, l pozisyon j farklıdır Yani, eğer, o zaman u k, l ∈ S j ayarlayın. Bununla birlikte, bu azalma ile NP-zor bir sorundur. Açgözlü yaklaşımla, minimum sayıda bit için sınırlı bir yaklaşım elde edebilirsiniz, ancak tam olarak minimum değil.
Redüksiyonunuzu yanlış yönde yaptınız. Bu sorunu çözmek için set setini kullanmayın, minimum set kapak çözmek için bu sorunu kullanmanız gerekir. –
Bu ikilileri bir dizi doğrusal denklem olarak görebiliriz. bu ikili varsa Yani, örneğin için,:
Buradanx1 + x2 + x3 + x4 = y1
x1 + x2 + 0 + 0 = y2
x1 + 0 + 0 + x4 = y3
, biz ekstra ortadan kaldırmak için o denklemleri azaltmak için Gaussian elimination kullanabilirsiniz fark: 1111, 1100, 1001, biz takip kendilerini temsil edebilir değişkenler (yukarıdaki örnekte, x1). İndirgemenin sonucu K değişken değişkenleri olacak ve orijinal sorunun sonucunu elde etmek için bir ek değişken çıkarıyoruz.
Bu, farklı olan tüm bitleri verecektir. Örneğin, örneğinizde bu, yalnızca ayırt etmek için gereken minimum miktarın 2 olduğu bir değişkeni ortadan kaldırır. –
@PapudeetBerandhi Cevabımda bahsettiğim, son cevabı almak için her zaman Gauss eleme sonucundan bir parça daha alabilirsiniz. –
@PapudeetBerandhi, Pham, Bence soruyu yanlış anladım - lütfen bana sadece iki bitin nasıl ayrıldığını anlatayım * [1111, 1100, 1001] '(ve hangileri)? Ayrıca, bu örneğe '1000' eklediğimizde, Gauss eleme ve ayırt edici bitler açısından nasıl farklı olurdu? –
Girişte kısıtlamalar var mı? Sayılar 32 bit, 64 bit mi, keyfi uzunluk mu? K için izin verilen değerler nelerdir? –
Sorun, girdileri sınıflandırabilen bir karar ağacı oluşturma ile ilgili. Belki de ID3 algoritmasına bir göz atın: https://en.wikipedia.org/wiki/ID3_algorithm –
Gönderinizi tahrif etmeyin. – dorukayhan