Hej tamo! Kao dobavljač prekidača, često me pitaju o tehničkim aspektima prekidača, a jedno pitanje koje se često pojavljuje je: "Koja je složenost vremena izvršavanja naredbe switch u C?" Dakle, hajde da zaronimo direktno u to i razložimo ga na način koji je lak za razumevanje.
Prvo, hajde da razgovaramo o tome šta je naredba switch u C. Naredba switch je izjava toka kontrole koja omogućava da se varijabla testira na jednakost u odnosu na listu vrednosti. Svaka vrijednost se naziva slučaj, a naredba switch izvršava naredbe povezane s prvim slučajem koji odgovara vrijednosti varijable. Evo jednostavnog primjera:
#include <stdio.h> int main() { int num = 2; switch (num) { case 1: printf("Broj je 1.\n"); break; slučaj 2: printf("Broj je 2.\n"); break; slučaj 3: printf("Broj je 3.\n"); break; default: printf("Broj nije 1, 2 ili 3.\n"); } return 0; }
Sada, idemo na glavno pitanje: koja je složenost vremena izvršenja ove naredbe switch? Pa, zavisi od toga kako ga kompajler implementira. Generalno, postoje dva uobičajena načina: niz if - else naredbi ili tabela za skok.
Serija if - else izjava
U nekim slučajevima, prevodilac može prevesti naredbu switch u niz if - else naredbi. Na primjer, gornja izjava switch bi se mogla prepisati kao:
#include <stdio.h> int main() { int num = 2; if (num == 1) { printf("Broj je 1.\n"); } else if (num == 2) { printf("Broj je 2.\n"); } else if (num == 3) { printf("Broj je 3.\n"); } else { printf("Broj nije 1, 2 ili 3.\n"); } return 0; }
Ako kompajler koristi ovaj pristup, vremenska složenost je O(n), gdje je n broj slučajeva u naredbi switch. To je zato što u najgorem slučaju, program mora provjeravati svaki slučaj jedan po jedan dok ne pronađe podudaranje. Na primjer, ako vrijednost varijable ne odgovara nijednom od slučajeva i mora proći kroz sve if - else provjere, biće potrebno n poređenja.
Jump Table
Međutim, moderni kompajleri su obično pametniji. Kada su slučajevi u naredbi switch uzastopni cijeli brojevi sa malim rasponom, kompajler može koristiti tablicu skokova. Tablica skokova je niz memorijskih adresa. Vrijednost varijable koja se uključuje se koristi kao indeks u ovom nizu, a program skače direktno na odgovarajuću memorijsku adresu.
Na primjer, ako imamo naredbu switch sa slučajevima od 0 do 9, kompajler može kreirati tablicu skoka veličine 10. Kada program naiđe na naredbu switch, uzima vrijednost varijable, koristi je kao indeks za pristup tablici skoka, a zatim skače na odgovarajući blok koda.
Vremenska složenost naredbe switch implementiranog sa tablicom skokova je O(1). To je zato što bez obzira na broj slučajeva, program treba izvršiti samo jednu operaciju (indeksiranje u tablicu skokova) da pronađe ispravan blok koda za izvršenje.
Dakle, ukratko, složenost vremena izvršenja naredbe switch u C-u može biti ili O(n) ako se implementira kao serija if - else naredbi ili O(1) ako se implementira sa tablicom za skok.
Sada, hajde da pričamo o prekidačima koje isporučujemo. Nudimo širok asortiman visokokvalitetnih prekidača za različite primjene. Za automobilsku upotrebu imamoAutomobilski generalni prekidač za napajanje. Ovaj prekidač je dizajniran da ispuni zahtjeve za napajanjem automobilskih sistema, osiguravajući pouzdan rad.
Ako tražite nešto specifičnije za automobilsku primjenu, našAutomatski prekidač sa dvije pedaleje odličan izbor. Dizajniran je da pruži preciznu kontrolu u automobilskom okruženju.
A za aplikacije koje zahtijevaju trenutni rad, našTrenutačni prekidačje put kojim treba ići. Napravljen je da traje i nudi glatko iskustvo prebacivanja.
Bilo da ste programer koji radi na C programu koji koristi naredbe prekidača ili automobilski inženjer kojem su potrebni pravi prekidači, mi ćemo vas pokriti. Naši prekidači su dizajnirani imajući na umu performanse i pouzdanost, a mi smo posvećeni pružanju najboljih proizvoda i usluga našim kupcima.
Ako ste zainteresovani za naše prekidače ili imate bilo kakva pitanja o njihovim tehničkim specifikacijama, ne ustručavajte se da nam se obratite. Tu smo da vam pomognemo da napravite pravi izbor za vaš projekat. Bilo da se radi o malom hobi projektu ili velikoj industrijskoj primjeni, možemo raditi s vama kako bismo pronašli savršeno rješenje prekidača.


Reference
- KN King, "C programiranje: moderan pristup, drugo izdanje"
- BW Kernighan i DM Ritchie, "Programski jezik C"