Szia! Kapcsoló beszállítóként gyakran kérdeznek tőlem a kapcsolók műszaki vonatkozásairól, és az egyik gyakran felbukkanó kérdés: "Mi a C nyelvű switch utasítás végrehajtási időbeli bonyolultsága?" Tehát merüljünk el benne, és bontsuk szét olyan módon, hogy könnyen érthető legyen.
Először is beszéljünk arról, hogy mi a switch utasítás C-ben. A switch utasítás egy vezérlőfolyamat-utasítás, amely lehetővé teszi egy változó egyenlőségének tesztelését egy értéklistával. Minden értéket esetnek nevezünk, és a switch utasítás végrehajtja az első esethez társított utasításokat, amelyek megfelelnek a változó értékének. Íme egy egyszerű példa:
#include <stdio.h> int main() { int szám = 2; switch (szám) { case 1: printf("A szám 1.\n"); szünet; 2. eset: printf("A szám 2.\n"); szünet; 3. eset: printf("A szám 3.\n"); szünet; default: printf("A szám nem 1, 2 vagy 3.\n"); } return 0; }
Most pedig térjünk rá a fő kérdésre: mi ennek a switch utasításnak a végrehajtási időbeli összetettsége? Nos, ez attól függ, hogy a fordító hogyan valósítja meg. Általában két általános módszer létezik: if - else utasítások sorozata vagy ugrótábla.
If - else nyilatkozatok sorozata
Egyes esetekben a fordító lefordíthatja a switch utasítást if - else utasítások sorozatává. Például a fenti switch utasítás átírható a következőképpen:
#include <stdio.h> int main() { int szám = 2; if (szám == 1) { printf("A szám 1.\n"); } else if (szám == 2) { printf("A szám 2.\n"); } else if (szám == 3) { printf("A szám 3.\n"); } else { printf("A szám nem 1, 2 vagy 3.\n"); } return 0; }
Ha a fordító ezt a megközelítést használja, az időbonyolultság O(n), ahol n a switch utasításban szereplő esetek száma. Ennek az az oka, hogy a legrosszabb esetben a programnak minden esetet egyenként kell ellenőriznie, amíg egyezést nem talál. Például, ha a változó értéke nem egyezik egyik esettel sem, és át kell mennie az összes if - else ellenőrzésen, akkor n összehasonlítás szükséges.
Jump Table
A modern fordítók azonban általában okosabbak. Ha a switch utasításban szereplő esetek egymást követő egész számok kis tartománnyal, a fordító használhat ugrótáblát. Az ugrótábla memóriacímek tömbje. A bekapcsolt változó értéke indexként kerül ebbe a tömbbe, és a program közvetlenül a megfelelő memóriacímre ugrik.
Például, ha van egy switch utasításunk 0-tól 9-ig terjedő esetekkel, akkor a fordító létrehozhat egy 10-es méretű ugrótáblát. Amikor a program találkozik a switch utasítással, felveszi a változó értékét, indexként használja az ugrótábla eléréséhez, majd a megfelelő kódblokkra ugrik.
Az ugrótáblázattal megvalósított switch utasítás időbonyolultsága O(1). Ennek az az oka, hogy az esetek számától függetlenül a programnak csak egyetlen műveletet kell végrehajtania (indexelni az ugrástáblázatba), hogy megtalálja a végrehajtandó helyes kódblokkot.
Összefoglalva tehát, egy C-beli switch utasítás végrehajtási időbonyolultsága lehet O(n), ha if - else utasítások sorozataként van megvalósítva, vagy O(1), ha ugrótáblával valósítjuk meg.
Most pedig beszéljünk az általunk szállított kapcsolókról. Kiváló minőségű kapcsolók széles választékát kínáljuk különféle alkalmazásokhoz. Autóipari felhasználásra nálunk aAutóipari általános tápkapcsoló. Ezt a kapcsolót úgy tervezték, hogy megfeleljen az autóipari rendszerek teljesítményigényének, biztosítva a megbízható működést.
Ha valami konkrétabbat keres egy autóipari alkalmazáshoz, keressen minketKétpedálos automatikus kapcsolónagyszerű választás. Úgy tervezték, hogy pontos vezérlést biztosítson autóipari környezetben.
A pillanatnyi működést igénylő alkalmazásokhoz pedig a miPillanatnyi billenő kapcsolóez a járható út. Tartósra készült, és zökkenőmentes váltási élményt kínál.
Legyen szó fejlesztőről, aki egy C-programon dolgozik, amely switch utasításokat használ, vagy autóipari mérnök, akinek szüksége van a megfelelő kapcsolókra, mi mindent megtalálunk. Kapcsolóinkat a teljesítmény és a megbízhatóság szem előtt tartásával terveztük, és elkötelezettek vagyunk amellett, hogy a legjobb termékeket és szolgáltatásokat nyújtsuk ügyfeleinknek.
Ha érdeklik kapcsolóink, vagy bármilyen kérdése van a műszaki jellemzőkkel kapcsolatban, forduljon bizalommal. Azért vagyunk itt, hogy segítsünk Önnek meghozni a megfelelő választást projektje számára. Legyen szó kis léptékű hobbiprojektről vagy nagyszabású ipari alkalmazásról, Önnel együttműködve megtaláljuk a tökéletes kapcsolómegoldást.


Hivatkozások
- KN King, "C programozás: modern megközelítés, második kiadás"
- BW Kernighan és DM Ritchie, "A C programozási nyelv"