Ana içeriğe geç

Set

Türkçe karşılığı
küme

Günlük kullanımda iki ad da yaygın.

Güncellendi 2 dk okuma

Bu sayfayı paylaşın

Bağlantıyı gönderin, tanımı bağlantısıyla birlikte alıntılayın ya da kendi sitenizde bir kart olarak gösterin.

https://softwaredictionary.org/tr/terimler/set-data-structure

Kısaca

Set, her farklı değeri en fazla bir kez saklayan ve bir değerin içinde olup olmadığını çoğunlukla sabit sürede kontrol edebilen bir koleksiyondur.

Set veri yapısı nedir?

Set, birbirinden farklı değerlerden oluşan bir koleksiyondur: her değer en fazla bir kez bulunur ve zaten var olan bir değeri eklemek hiçbir şeyi değiştirmez. Dizi ya da listeden farklı olarak Set konumla değil üyelikle ilgilidir; yanıtladığı temel soru, verilen bir değerin içinde olup olmadığıdır. Fikir matematikten gelir; orada küme, belirli bir sırası olmayan farklı nesnelerin topluluğudur.

Çoğu Set uygulaması hash tablosu üzerine kuruludur. Bir değeri eklemek, bucket seçmek için onu hash'ler; üyelik kontrolü de onu yeniden hash'leyip yalnızca o bucket'a bakar. Böylece ekleme, silme ve içerme kontrolü, bir listenin gerektirdiği O(n) taramaya karşılık ortalamada O(1) sürer. Java'nın TreeSet yapısı gibi ağaç tabanlı sürümler değerleri dengeli bir ağaçta sıralı tutar ve işlem başına O(log n) sürer. Setler ayrıca klasik matematiksel işlemleri de destekler: birleşim (ikisinden birindeki değerler), kesişim (ikisinde de olan değerler) ve fark (birincide olup ikincide olmayan değerler).

Kapıdaki bir davetli listesi iyi bir resimdir: ev sahibi yalnızca bir ismin listede olup olmadığına bakar ve bir ismi iki kez yazmak o misafirin iki kez girmesini sağlamaz. Setler yinelenenleri kaldırmak, BFS ve DFS gibi çizge aramalarında ziyaret edilen düğümleri izlemek, etiketleri ve izinleri hızla kontrol etmek ve hesap açıp hiç giriş yapmamış kullanıcıları bulmak gibi iki grubu karşılaştırmak için kullanılır. JavaScript'in Set ve Java'nın HashSet yapıları tipik yerleşik sürümlerdir; [...new Set(items)] ise bir dizideki yinelenenleri kaldırmak için kullanılan olağan JavaScript kalıbıdır.

Set sıklıkla liste ve map ile karşılaştırılır. Liste öğeleri sıralı tutar ve yinelenenlere izin verirken hash tabanlı bir Set yinelenenleri reddeder ve birçok dilde belirli bir sıra vaat etmez; ancak JavaScript'in Set yapısı ekleme sırasını korur. Sözlük ya da hash tablosu olarak da bilinen map her anahtar için bir değer saklar; Set ise yalnızca anahtarları saklar ve birçok dil onu içeride tam olarak böyle uygular. Üyelik ayrıca dilin değerleri nasıl karşılaştırdığına bağlıdır: JavaScript nesneleri kimliğine göre karşılaştırır, dolayısıyla [1, 2] içeren iki ayrı dizi iki farklı üye sayılır.

Önemli noktalar

  • Set her farklı değeri yalnızca bir kez saklar, bu yüzden yinelenenler yok sayılır.
  • Hash tabanlı setler ekleme, silme ve üyelik kontrolünü ortalamada O(1) sürede yapar.
  • Java'nın TreeSet yapısı gibi ağaç tabanlı setler değerleri işlem başına O(log n) maliyetle sıralı tutar.
  • Setler birleşim, kesişim ve fark işlemlerini destekler.
  • Python'ın set, JavaScript'in Set ve Java'nın HashSet yapıları yaygın yerleşik uygulamalardır.

Örnek

Python setleriyle yinelenenleri kaldırmak ve grupları karşılaştırmakpython
tags = ["python", "web", "python", "api", "web"]
unique = set(tags)          # duplicates disappear
print(len(unique))          # 3
print("api" in unique)      # True, in O(1) on average instead of scanning a list

signed_up = {"ana", "ben", "cy", "dee"}
logged_in = {"ben", "dee", "eve"}
print(signed_up & logged_in)  # intersection: ben and dee
print(signed_up | logged_in)  # union: all five names
print(signed_up - logged_in)  # difference: ana and cy never logged in

Sık sorulan sorular

Set ile liste arasındaki fark nedir?

Liste öğeleri sıralı tutar, yinelenenlere izin verir ve bir değeri içerip içermediğini kontrol etmek O(n) sürer. Hash tabanlı bir set ise her değeri bir kez saklar, genellikle sıra vaat etmez ve üyeliği ortalamada O(1)'de kontrol eder.

Setler sıralı mıdır?

Dile ve uygulamaya bağlıdır. Python'ın set gibi hash tabanlı setler sıra garantisi vermez, JavaScript'in Set yapısı ekleme sırasıyla dolaşılır ve Java'nın TreeSet gibi ağaç tabanlı setler değerleri sıralı tutar.

JavaScript'te bir dizideki yinelenenleri nasıl kaldırırım?

Diziyi bir Set'e verin ve tekrar diziye yayın: [...new Set(items)]. Bu, her değerin ilk geçtiği yeri korur ve O(n) sürede çalışır.

İlgili sayfalar

Bu sayfada bir hata ya da eksik mi gördünüz?Düzeltme önerin

Daha fazla

Ayarlar