Açık hashing ve Kapalı hashing'in anlamı


98

Açık Karma (Ayrı Zincirleme):

Açık karma işlemde, anahtarlar bir karma tablonun hücrelerine eklenmiş bağlantılı listelerde saklanır.

Kapalı Hashing (Açık Adresleme):

Kapalı özetlemede, tüm anahtarlar, bağlantılı listeler kullanılmadan karma tablosunun kendisinde saklanır.

Neden açık, kapalı ve Ayrı olarak adlandırıldıklarını anlayamıyorum. Biri bunu açıklayabilir mi?


Aslında anahtarları hash tablolarında saklamayız, bir demet (Anahtar, Değer) alırız ve değerin nerede saklanacağını hesaplamak için anahtarı kullanırız. Yani aslında değerleri Karma Tablosunda
saklıyoruz

Yanıtlar:


120

"Kapalı" ve "açık" kullanımı, belirli bir konumu veya veri yapısını kullanmak için kilitli olup olmadığımızı yansıtır (bu son derece belirsiz bir tanımdır, ancak umarız geri kalanı yardımcı olur).

Örneğin, "açık adreslemede" "açık" bize, karma tablosunda bir nesnenin depolanacağı dizinin (diğer adıyla adres) karma kodu tarafından tam olarak belirlenmediğini söyler. Bunun yerine, dizin, hash tablosunda zaten bulunana bağlı olarak değişebilir.

"Kapalı hash" içindeki "kapalı", hash tablosundan asla ayrılmadığımızı ifade eder; her nesne doğrudan hash tablosunun dahili dizisindeki bir dizinde saklanır. Bunun yalnızca bir tür açık adresleme stratejisi kullanarak mümkün olduğunu unutmayın. Bu, "kapalı karma" ve "açık adreslemenin" neden eşanlamlı olduğunu açıklar.

Bunu açık hashing ile karşılaştırın - bu stratejide, nesnelerin hiçbiri aslında hash tablosunun dizisinde saklanmaz; bunun yerine, bir nesne bir kez karma hale getirildiğinde, karma tablonun dahili dizisinden ayrı bir listede saklanır. "açık", karma tablodan çıkıp ayrı bir liste kullanarak elde ettiğimiz özgürlüğü ifade eder. Bu arada, "ayrı liste", açık karmanın neden "ayrı zincirleme" olarak da bilindiğini gösterir.

Kısacası, "kapalı" her zaman, nesnelerin her zaman doğrudan hash tablosunda (kapalı hashing) depolandığını garanti ettiğimizde olduğu gibi bir tür katı garantiyi ifade eder. O zaman, "kapalı" nın tersi "açık" dır, bu nedenle bu tür garantileriniz yoksa, strateji "açık" olarak kabul edilir.


17
Açık Hashing'in (Ayrı Zincirleme), önbellek dostu olmayan ve çarpışma saldırılarını O (n / 2) davranışına düşüren bağlantılı listelerle sınırlı olmadığını eklemeliyiz. Çarpışan kovalar için ağaçları veya sıralı dizileri de kullanabilirsiniz.
kırsal bölge

çelişkili bilgiler nedeniyle olumsuz oy verin: "açık" ve "kapalı" eşanlamlılar dediniz, sonra sonunda: "" kapalı "nın tersi" açık "
Marwen Trabelsi

1
@MarwenTrabelsi "Kapalı" ve "açık" ın eşanlamlı olduğunu hiç söylemedim.
Ken Wayne VanderLinde

"Bu," kapalı karma "ve" açık adreslemenin "neden eşanlamlı olduğunu açıklıyor."
Marwen Trabelsi

1
Birisi bunun doğru tarihsel etimoloji olduğunu kanıtlayan bir kaynak sağlayabilir mi?
Santropedro

3

"Karma tablo" olan bir diziniz var.

Açık Karma İşlemde dizideki her hücre, çarpışmaları içeren bir listeye işaret eder. Hashing, bağlantılı listedeki tüm öğeler için aynı dizini üretti.

Kapalı Hashing'de her şey için yalnızca bir dizi kullanırsınız. Çarpışmaları aynı dizide saklarsınız. İşin püf noktası, çarpışmadan çarpışma birimine atlamak için akıllıca bir yol kullanmaktır. Ve bunu tekrarlanabilir / deterministik bir şekilde yapın.


2

Ad açık adresleme , elemanın konumunun ("adres") hash değeriyle belirlenmediği gerçeğini ifade eder. (Bu yönteme kapalı hash de denir).

Gelen ayrı zincirleme , her kova bağımsızdır ve aynı endekse sahip girişlerinin ADT (listenin, ikili arama ağaçları, vb) bir tür vardır. İyi bir karma tablosunda, her bir kova sıfır veya bir girişe sahiptir, çünkü ekleme, arama vb.

Bu bir örnek, bir ayrı zincirleme mod operatörü kullanarak basit bir karma işlev ile C ++ (açıkça kötü hızlı arama fonksiyonu)

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.