C dilinde switch ifadesinin yürütme zaman karmaşıklığı nedir?

Jan 19, 2026

Mesaj bırakın

James Anderson
James Anderson
James şirkette ürün test uzmanıdır. Performans ve güvenliklerini sağlamak için röleler ve otomotiv parçaları üzerinde kapsamlı testler yaparak ürün kalitesine önemli katkılar sağlamaktadır.

Selam! Bir anahtar tedarikçisi olarak bana sık sık anahtarların teknik yönleriyle ilgili sorular soruluyor ve sık sık ortaya çıkan sorulardan biri şu: "C'deki bir switch ifadesinin yürütme süresi karmaşıklığı nedir?" O halde hemen konunun içine dalalım ve anlaşılması kolay bir şekilde parçalara ayıralım.

Öncelikle C'de switch ifadesinin ne olduğundan bahsedelim. Switch ifadesi, bir değişkenin bir değerler listesine göre eşitlik açısından test edilmesine olanak tanıyan bir kontrol akışı ifadesidir. Her değere case adı verilir ve switch deyimi, değişkenin değeriyle eşleşen ilk durumla ilişkili deyimleri çalıştırır. İşte basit bir örnek:

#include <stdio.h> int main() { int sayı = 2; switch (sayı) { case 1: printf("Sayı 1.\n"); kırmak; durum 2: printf("Sayı 2'dir.\n"); kırmak; durum 3: printf("Sayı 3'tür.\n"); kırmak; default: printf("Sayı 1, 2 veya 3 değil.\n"); } 0'ı döndür; }

Şimdi asıl soruya geçelim: Bu switch ifadesinin yürütme süresi karmaşıklığı nedir? Bu, derleyicinin bunu nasıl uyguladığına bağlıdır. Genellikle iki yaygın yol vardır: bir dizi if - else ifadesi veya bir atlama tablosu.

if – else İfadeleri Dizisi

Bazı durumlarda derleyici switch ifadesini bir dizi if - else ifadesine çevirebilir. Örneğin yukarıdaki switch ifadesi şu şekilde yeniden yazılabilir:

#include <stdio.h> int main() { int sayı = 2; if (sayı == 1) { printf("Sayı 1.\n"); } else if (sayı == 2) { printf("Sayı 2.\n"); } else if (sayı == 3) { printf("Sayı 3.\n"); } else { printf("Sayı 1, 2 veya 3 değil.\n"); } 0'ı döndür; }

Derleyici bu yaklaşımı kullanırsa zaman karmaşıklığı O(n) olur; burada n, switch ifadesindeki durumların sayısıdır. Bunun nedeni, en kötü senaryoda, programın bir eşleşme bulana kadar her durumu tek tek kontrol etmesi gerekmesidir. Örneğin, değişkenin değeri durumların hiçbiriyle eşleşmiyorsa ve tüm if - else kontrollerinden geçmesi gerekiyorsa, n tane karşılaştırma yapılması gerekecektir.

Atlama Tablosu

Ancak modern derleyiciler genellikle daha akıllıdır. Switch ifadesindeki durumlar küçük aralıklı ardışık tamsayılar olduğunda derleyici bir atlama tablosu kullanabilir. Atlama tablosu bir dizi bellek adresidir. Açılan değişkenin değeri bu dizide bir indeks olarak kullanılır ve program doğrudan karşılık gelen hafıza adresine atlar.

Örneğin, 0'dan 9'a kadar durumları olan bir switch ifademiz varsa, derleyici 10 boyutunda bir atlama tablosu oluşturabilir. Program switch ifadesiyle karşılaştığında değişkenin değerini alır, bunu atlama tablosuna erişmek için bir dizin olarak kullanır ve ardından uygun kod bloğuna atlar.

Atlama tablosuyla uygulanan switch ifadesinin zaman karmaşıklığı O(1)'dir. Bunun nedeni, vaka sayısına bakılmaksızın, programın yürütülecek doğru kod bloğunu bulmak için yalnızca tek bir işlemi (atlama tablosuna indeksleme) gerçekleştirmesi gerekmesidir.

Yani özetle, C'deki bir switch ifadesinin yürütme süresi karmaşıklığı, bir dizi if - else ifadesi olarak uygulandığında O(n) veya bir atlama tablosuyla uygulandığında O(1) olabilir.

Şimdi tedarik ettiğimiz switchlerden bahsedelim. Çeşitli uygulamalar için geniş bir yelpazede yüksek kaliteli anahtarlar sunuyoruz. Otomotiv kullanımı için elimizdeOtomotiv Genel Güç Anahtarı. Bu anahtar, otomotiv sistemlerinin güç gereksinimlerini karşılayacak ve güvenilir çalışmayı sağlayacak şekilde tasarlanmıştır.

Bir otomotiv uygulaması için daha spesifik bir şey arıyorsanız,İki pedallı Otomatik Anahtarharika bir seçimdir. Otomotiv ortamlarında hassas kontrol sağlamak üzere tasarlanmıştır.

Anlık çalışma gerektiren uygulamalar için iseAnlık Geçiş Anahtarıgidilecek yoldur. Uzun süre dayanacak ve sorunsuz bir geçiş deneyimi sunacak şekilde tasarlandı.

İster anahtar ifadelerini kullanan bir C programı üzerinde çalışan bir geliştirici olun, ister doğru anahtarlara ihtiyaç duyan bir otomotiv mühendisi olun, yanınızdayız. Anahtarlarımız performans ve güvenilirlik göz önünde bulundurularak tasarlanmıştır ve müşterilerimize en iyi ürün ve hizmeti sunmaya kararlıyız.

Anahtarlarımızla ilgileniyorsanız veya teknik özellikleriyle ilgili sorularınız varsa bizimle iletişime geçmekten çekinmeyin. Projeniz için doğru seçimi yapmanıza yardımcı olmak için buradayız. İster küçük ölçekli bir hobi projesi, ister büyük ölçekli bir endüstriyel uygulama olsun, mükemmel anahtar çözümünü bulmak için sizinle birlikte çalışabiliriz.

Momentary Toggle Switch priceAutomotive General Power Switch high quality

Referanslar

  • KN King, "C Programlama: Modern Bir Yaklaşım, İkinci Baskı"
  • BW Kernighan ve DM Ritchie, "C Programlama Dili"
Soruşturma göndermek