Hej tam! Jako dostawca przełączników często jestem pytany o techniczne aspekty przełączników i dość często pojawia się pytanie: „Jaka jest złożoność czasu wykonania instrukcji switch w C?” Zagłębmy się więc w ten temat i przeanalizujmy go w sposób łatwy do zrozumienia.
Na początek porozmawiajmy o tym, czym jest instrukcja switch w C. Instrukcja switch to instrukcja przepływu sterowania, która umożliwia sprawdzenie równości zmiennej z listą wartości. Każda wartość nazywana jest przypadkiem, a instrukcja switch wykonuje instrukcje powiązane z pierwszym przypadkiem pasującym do wartości zmiennej. Oto prosty przykład:
#include <stdio.h> int main() { int liczba = 2; switch (num) { case 1: printf("Liczba to 1.\n"); przerwa; przypadek 2: printf("Liczba to 2.\n"); przerwa; przypadek 3: printf("Liczba to 3.\n"); przerwa; domyślnie: printf("Ta liczba nie jest 1, 2 ani 3.\n"); } zwróć 0; }
Przejdźmy teraz do głównego pytania: jaka jest złożoność czasu wykonania tej instrukcji switch? Cóż, to zależy od tego, jak kompilator to zaimplementuje. Generalnie istnieją dwa popularne sposoby: seria instrukcji if - else lub tabela skoków.
Seria instrukcji if - else
W niektórych przypadkach kompilator może przetłumaczyć instrukcję switch na serię instrukcji if - else. Na przykład powyższą instrukcję switch można przepisać jako:
#include <stdio.h> int main() { int liczba = 2; if (num == 1) { printf("Liczba to 1.\n"); } else if (num == 2) { printf("Liczba to 2.\n"); } else if (num == 3) { printf("Liczba to 3.\n"); } else { printf("Ta liczba nie jest 1, 2 ani 3.\n"); } zwróć 0; }
Jeśli kompilator zastosuje to podejście, złożoność czasowa wynosi O(n), gdzie n to liczba przypadków w instrukcji switch. Dzieje się tak dlatego, że w najgorszym przypadku program będzie musiał sprawdzać każdy przypadek jeden po drugim, aż znajdzie dopasowanie. Na przykład, jeśli wartość zmiennej nie pasuje do żadnego z przypadków i musi przejść wszystkie kontrole if - else, nastąpi n porównań.
Tabela skoków
Jednak nowoczesne kompilatory są zwykle mądrzejsze. Jeśli przypadki w instrukcji switch są kolejnymi liczbami całkowitymi z małego zakresu, kompilator może użyć tabeli przeskoków. Tabela skoków to tablica adresów pamięci. Wartość włączanej zmiennej służy jako indeks tej tablicy, a program przeskakuje bezpośrednio pod odpowiedni adres pamięci.
Na przykład, jeśli mamy instrukcję switch z przypadkami od 0 do 9, kompilator może utworzyć tabelę skoków o rozmiarze 10. Kiedy program napotka instrukcję switch, przyjmuje wartość zmiennej, używa jej jako indeksu, aby uzyskać dostęp do tabeli skoków, a następnie przeskakuje do odpowiedniego bloku kodu.
Złożoność czasowa instrukcji switch zaimplementowanej za pomocą tabeli skoków wynosi O(1). Dzieje się tak dlatego, że niezależnie od liczby przypadków, program musi wykonać tylko jedną operację (indeksowanie do tabeli skoków), aby znaleźć odpowiedni blok kodu do wykonania.
Podsumowując, złożoność czasowa wykonania instrukcji switch w C może wynosić albo O(n), jeśli jest zaimplementowana jako seria instrukcji if - else, albo O(1), jeśli jest zaimplementowana z tabelą skoków.
Porozmawiajmy teraz o dostarczanych przez nas przełącznikach. Oferujemy szeroką gamę wysokiej jakości przełączników do różnych zastosowań. Do zastosowań motoryzacyjnych posiadamyMotoryzacyjny ogólny wyłącznik zasilania. Przełącznik ten został zaprojektowany tak, aby sprostać wymaganiom energetycznym systemów samochodowych, zapewniając niezawodne działanie.
Jeśli szukasz czegoś bardziej specyficznego do zastosowań motoryzacyjnych, naszeDwupedałowy przełącznik automatycznyto świetny wybór. Został zaprojektowany, aby zapewnić precyzyjną kontrolę w środowiskach motoryzacyjnych.
A do zastosowań wymagających chwilowego działania, naszeChwilowy przełącznik dwupozycyjnyto właściwa droga. Został zbudowany z myślą o trwałości i zapewnia płynne przełączanie.
Niezależnie od tego, czy jesteś programistą pracującym nad programem w języku C korzystającym z instrukcji switch, czy inżynierem motoryzacyjnym potrzebującym odpowiednich przełączników, mamy dla Ciebie wsparcie. Nasze przełączniki zostały zaprojektowane z myślą o wydajności i niezawodności, dlatego też staramy się dostarczać naszym klientom najlepsze produkty i usługi.
Jeśli interesują Cię nasze przełączniki lub masz pytania dotyczące ich specyfikacji technicznych, nie wahaj się z nami skontaktować. Jesteśmy tutaj, aby pomóc Ci dokonać właściwego wyboru dla Twojego projektu. Niezależnie od tego, czy chodzi o projekt hobbystyczny na małą skalę, czy o zastosowanie przemysłowe na dużą skalę, możemy współpracować z Tobą, aby znaleźć idealne rozwiązanie w zakresie przełączników.


Referencje
- KN King, „Programowanie C: nowoczesne podejście, wydanie drugie”
- BW Kernighan i DM Ritchie, „Język programowania C”