Un algorisme és una seqüència d'instruccions que es duen a terme en una seqüència predeterminada per tal de resoldre un problema o completar un treball. Una funció és un bloc de codi que es pot cridar i executar des d'altres parts del programa.
Conjunt d'instruccions per resoldre un problema o dur a terme una determinada activitat. En informàtica, els algorismes s'utilitzen per a una àmplia gamma d'operacions, des de les matemàtiques fonamentals fins al processament complex de dades.
Un dels algorismes comuns utilitzats en C és l'algorisme d'ordenació. Un algorisme d'ordenació organitza una col·lecció d'elements en un ordre determinat, com ara numèricament o alfabèticament.
Hi ha molts algorismes d'ordenació, cadascun amb avantatges i desavantatges. Els algorismes d'ordenació més comuns en C són l'ordenació ràpida, la fusió i l'ordenació.
Una de les característiques clau de C és el suport del punter. Això permet una manipulació eficient d'estructures de dades com ara matrius, cues, etc. Això fa que sigui adequat per implementar algorismes que requereixen una manipulació de dades complexa, com ara l'ordenació i la cerca algorítmica.
Un dels exemples famosos de biblioteca de programari implementada en C és la Standard Template Library (STL). Aquesta biblioteca ofereix una gran varietat d'algorismes per a tasques com ara ordenar, cercar i manipular estructures de dades.
Característiques de l'algorisme
Defineix diverses característiques importants de l'algorisme, com ara:
Anàlisi d'algoritmes
L'anàlisi algorítmica és el procés d'avaluació del rendiment de l'algorisme en termes d'eficiència, complexitat i altres criteris. Normalment, això es fa per avaluar molts algorismes i seleccionar la solució òptima per a un determinat problema o programari.
L'anàlisi dels algorismes sol implicar mesurar la seva complexitat temporal i espacial.
Igual que amb la complexitat de l'espai, que descriu la quantitat de memòria o espai de disc necessari, la complexitat de temps descriu quant de temps determina un algorisme per dur a terme una tasca.
Hi ha diferents maneres d'analitzar la complexitat temporal dels algorismes, com la notació Big O i Omega. El símbol Omega proporciona un límit superior per a la complexitat temporal de l'algorisme, mentre que el símbol Omega proporciona un límit inferior.
A més de mesurar la complexitat del temps i l'espai, l'anàlisi d'algoritmes també inclou altres criteris com l'estabilitat, el paral·lelisme i l'escalabilitat.
Inclouen dos tipus d'anàlisi.
ells són:-
- Anàlisi prèvia.
- Anàlisi posterior.
Anàlisi previ
Prior és un mètode d'anàlisi d'algorismes que se centra a estimar el rendiment d'un algorisme basant-se en les seves propietats matemàtiques sense executar realment l'algorisme.
Aquest enfocament us permet analitzar la complexitat temporal i espacial dels algorismes i altres mètriques sense la necessitat d'implementar i executar els algorismes.
Anàlisi posterior
L'anàlisi posterior, d'altra banda, és un mètode d'anàlisi d'algoritmes que realment executa l'algorisme i mesura el seu rendiment.
Aquest enfocament proporciona informació més precisa i detallada sobre el rendiment de l'algorisme, però requereix la implementació i l'execució de l'algorisme.
Complexitat de l'algoritme
La complexitat algorítmica és una mesura per mesurar l'eficiència i el rendiment de l'algorisme. Els algorismes s'avaluen normalment en funció del temps i l'espai necessaris per resoldre un problema o assolir un objectiu concret.
S'utilitzen dos factors en la complexitat de l'algorisme.
ells són:-
subcadena del mètode java
- Factor temps.
- Factor espacial.
Factor temps
- La quantitat de temps que necessita un algorisme per fer una tasca s'anomena complexitat temporal. Normalment es mesura pel nombre d'operacions o passos que ha de realitzar un algorisme per resoldre un problema.
- La complexitat temporal d'un algorisme és important perquè determina quant de temps triga a executar-se i pot tenir un impacte significatiu en el rendiment del programa i del sistema.
- La complexitat temporal d'un algorisme es pot expressar mitjançant la notació Big O, una manera d'expressar un límit superior de la complexitat temporal d'un algorisme.
- Un algorisme amb complexitat temporal O(n) significa que el temps necessari per executar l'algorisme és directament proporcional a la mida de les dades d'entrada (n).
- Altres complexitats temporals comunes són la complexitat quadràtica O(n^2) i la complexitat logarítmica O(log n).
Anàlisi espacial
- D'altra banda, la complexitat de l'espai fa referència a la quantitat de memòria o espai d'emmagatzematge necessari per executar l'algorisme.
- Això és important perquè determina el nombre de recursos necessaris per executar algorismes que poden afectar el rendiment global de la vostra aplicació o sistema.
- Si la complexitat espacial de l'algorisme és O(n), utilitza una quantitat de memòria que creix linealment amb la mida de l'entrada.
- Si l'algorisme té complexitat espacial O(1), utilitza una quantitat fixa de memòria independentment de la mida de l'entrada.
Com escriure un algorisme
1. Primer definiu el problema que voleu que resolgui l'algorisme.
Per exemple, suposem que volem escriure un algorisme per trobar el valor màxim d'una llista de nombres.
2. Desglosseu el problema en passos més petits i manejables.
- Inicialitzeu la variable 'max' al primer valor de la llista.
- Per a cada valor posterior de la llista, compareu amb 'màx'.
- Si el valor és superior a 'max', establiu 'max' en aquest valor.
- Continueu fent això fins que s'hagin comparat tots els valors de la llista.
- Retorna el valor 'màxim' final.
3. Escriu el teu algorisme en pseudocodi o en un llenguatge de programació.
Algorisme escrit en pseudocodi:
MAX (list) max = list[0] For i = 1 the length of the list list IF[i] > max max = list[i] End for Maximum return Maximum end
4. Proveu el vostre algorisme per assegurar-vos que és correcte i eficient.
Podeu provar l'algorisme introduint diferents llistes de números i comprovant que retorna el valor màxim correcte. També podeu analitzar la complexitat temporal del vostre algorisme per determinar com s'escala per a entrades més grans.
Exemple: -
Entrada: [1, 5, 2, 7, 3]
Sortida: 7.
Explicació: 7 és el valor màxim de la llista.
5. Optimitzar l'algorisme.
Busqueu maneres d'optimitzar els algorismes per fer-los més ràpids i eficients. Això pot implicar modificar el pseudocodi o implementar estructures de dades o algorismes més eficients.
Redacció bàsica d'algorismes
Exemple: - La suma de dos nombres enters.
Pas 1 - Començar
Pas 2 - Declara tres nombres enters a, b, c
Pas 3 - Definir els valors de a i b
Pas 4 - Sumar els valors de a i b
Pas 5 - Deseu la sortida del pas 4 a c
Pas 6 - Imprimir c
Pas 7 - Atura
Tipus d'algorismes utilitzats en llenguatge C.
1. Algorismes d'ordenació
C proporciona un conjunt ric de tipus de dades i operadors que es poden utilitzar per implementar diversos algorismes d'ordenació, com ara l'ordenació de bombolles, l'ordenació per inserció i l'ordenació ràpida.
Aquests algorismes són útils en moltes aplicacions perquè es poden utilitzar per ordenar dades de diferents mides i tipus.
Hi ha diferents algorismes d'ordenació.
ells són:-
(i) Classificació de bombolles: Un algorisme d'ordenació senzill que compara components propers repetidament i els desactiva si estan fora d'ordre.
L'algoritme per a l'ordenació de bombolles és:
- Comenceu amb una llista d'elements sense ordenar.
- Compareu els dos primers elements de la llista. Si el primer element és més gran que el segon, canvieu-los.
- Passeu al següent parell d'elements i repetiu el pas 2 fins que s'arribi al final de la llista.
- Per a cada element de la llista, repetiu els passos 2 i 3 una vegada més. això s'anomena passades.
- Repetiu els passos 2-4 per a tota la llista. A mesura que repeteixes les passades, els elements 'bombollaran' a la seva posició correcta a la llista ordenada.
- Un cop s'ha completat una passada i no es fan canvis, la llista s'ordena i l'algorisme es pot aturar.
- Es retorna la llista ordenada final.
(ii) Classificació per inserció : un mètode d'ordenació que crea una llista ordenada d'un element individual a la vegada col·locant cadascun al lloc adequat.
L'algoritme per a l'ordenació d'inserció és:
- Inicialitzar una llista ordenada buida i una llista sense ordenar dels elements que s'han d'ordenar.
- El primer membre de la llista no ordenada s'ha de prendre i col·locar a la posició adequada de la llista ordenada.
- Repetiu el pas 2 per a cada element posterior de la llista sense ordenar.
- Compareu l'element actual amb els elements de la llista ordenada, començant per l'element immediatament a l'esquerra.
- Canvia els dos elements si l'element actual és més petit que l'element a la seva esquerra.
- Si l'element actual és més gran que l'element de la seva esquerra, inseriu-lo a la posició correcta a la llista ordenada.
- Repetiu els passos 4-6 per a cada element posterior de la llista sense ordenar.
- Un cop s'hagin processat tots els elements, la llista ordenada contindrà tots els elements en l'ordre correcte.
- El procés de classificació s'ha completat.
(iii) Ordenació de selecció : un mètode d'ordenació que comença constantment la llista ordenada amb el més petit detall de la llista no ordenada.
L'algorisme per a l'ordenació de la selecció és:
- Comenceu establint l'element principal de la llista com a element min.
- Repetiu els elements restants de la llista, comparant cadascun amb el mínim actual.
- Establiu un nou mínim si es troba que un element és més petit que l'existent.
- Canvieu el mínim actual al primer element de la llista sempre que arribi a la seva conclusió.
- Per a la part restant de la llista sense ordenar, repetiu els passos 2-4, però comenceu amb el segon element de la llista (ja que el primer element ja està ordenat).
- Continueu ordenant la llista d'aquesta manera fins que estigui tot ordenat.
(iv) Classificació ràpida : un algorisme d'ordenació de dividir i conquerir que tria un element pivot i divideix la llista en subllistes en funció de si els elements són menys o més que el pivot. Després d'això, les subllistes s'ordenen repetidament fins que s'ordena la llista completa.
L'algoritme per a l'ordenació ràpida és:
- Trieu un element pivot de la llista. Aquest és normalment el primer element, però també pot ser un element aleatori o la mediana de la llista.
- Dividiu la llista en dues subllistes: una que conté elements inferiors al pivot i una altra que conté elements més grans que el pivot.
- Ordena recursivament la subllista que conté elements menys que el pivot mitjançant el mateix procés.
- Utilitzeu el mateix procediment per ordenar recursivament la subllista d'entrades més grans que el pivot.
- Concatena les subllistes ordenades amb l'element pivot entremig per formar una llista completament ordenada.
- Retorna la llista completament ordenada.
(v) El lot va : l'algoritme d'ordenació de dividir i vencer divideix la llista en dues meitats, ordena cada meitat i després fusiona les dues meitats en ordre ordenat.
Algoritme d'ordenació combinada:
- Feu dues subllistes de la llista: una amb elements per sota del pivot i una amb elements per sobre del pivot.
- Produeix una nova subllista ordenada combinant subllistes iterativament fins que només existeix una subllista. Aquesta serà la vostra llista ordenada.
- Passos per combinar dos subdirectoris: -
- Creeu una llista buida per contenir els elements ordenats.
- Compara el primer element de cada subllista.
- Afegeix l'element més petit a la llista nova i l'elimina de la subllista principal.
- Repetiu els passos 2 i 3 fins que una llista estigui completament buida.
- Afegeix els elements restants d'altres subllistes a una llista nova.
- Substitueix la subllista combinada per la nova llista ordenada.
- Repetiu aquest procés fins que totes les subllistes es fusionin en una llista ordenada.
(vi) Classificació de pila : un algorisme d'ordenació que ordena elements mitjançant una estructura de dades anomenada heap.
Aquest és l'algorisme de classificació:
- Apila la resta d'elements. A partir de l'arrel, cada node es compara amb els seus fills, intercanviant els nodes amb els seus fills grans fins que es compleix la propietat de màxim heap.
- Repetiu els passos 2 i 3 amb els nous elements apilats, excepte l'últim element en la posició correcta.
- Repetiu aquest procés fins que només quedi un element a la pila. Això ara està ordenat.
(vii) Radix sort : un algorisme d'ordenació que ordena els elements en funció dels dígits o dígits de la seva representació binària.
L'algoritme per a l'ordenació de Radix és:
- determinar quants dígits hi ha a l'element més gran de la llista d'entrada.
- Inicialitzeu una variable, per exemple, el lloc del dígit, a 1, que representa el lloc del dígit actual.
- Creeu una llista buida per a cada valor de dígit possible del 0 al 9.
- Itereu per la llista d'entrada i afegiu cada element a la llista adequada segons el valor de la posició actual del dígit.
- Concatena totes les llistes per formar la nova llista en l'ordre de les llistes de dígits.
- Multiplica digitPlace per 10 per passar al següent dígit.
- Repetiu els passos 4-6 per a cada dígit fins que s'hagin considerat tots els dígits de l'element més gran.
- La llista final s'ordenarà en ordre ascendent pels dígits dels elements.
- Retorna la llista ordenada final.
2. Algorismes de cerca
C també proporciona les eines necessàries per implementar una varietat d'algorismes de cerca, com ara la cerca lineal i la cerca binària. Aquests algorismes poden trobar ràpidament elements específics en un conjunt de dades, cosa que els fa útils per a una àmplia gamma d'aplicacions.
Hi ha molts tipus d'algorismes de cerca.
Ells són:-
(i) Cerca lineal : un algorisme de cerca bàsic que examina cada element de la llista un per un fins que troba l'element desitjat.
Algorisme per a la cerca lineal: -
- Definiu l'entrada per a l'algorisme: l'entrada per a un algorisme de cerca lineal és una llista d'elements (o una matriu) i un element objectiu que estem cercant.
- Inicialitzar una variable anomenada 'índex' a -1: aquesta variable s'utilitzarà per emmagatzemar l'índex de l'element objectiu si es troba.
- Recorre la llista d'elements: a partir del primer element, comproveu cada element de la llista un per un.
- Compareu l'element actual amb l'element desitjat per a l'avaluació: manteniu l'índex de l'element actual a la variable d'índex i sortiu del bucle si l'element modern i l'element objectiu són idèntics.
- Retorna l'índex de l'element objectiu: un cop finalitzat el bucle, retorna el valor emmagatzemat a la variable d'índex. Si no es troba l'element objectiu, el valor de l'índex serà -1.
(ii) Cerca binària : un algorisme de cerca que funciona dividint la llista en meitats i les cerques dins d'aquestes meitats és més probable que inclogui l'element.
Algorisme per a la cerca binària: -
- Entrada: una llista ordenada de n elements i un element objectiu x.
- Inicialitzar variables: establiu l'índex baix a 0, l'índex alt a n-1 i mitjà a (baix+alt)/2.
- Inicieu un bucle: mentre que l'índex baix és menor o igual que l'índex alt, repetiu els passos següents.
- Compareu l'element mitjà amb x: si l'element central és igual a x, retorneu l'índex mitjà.
- Actualitzeu l'índex baix o alt: si x és més gran que l'element mitjà, establiu l'índex baix a mig + 1. En cas contrari, establiu l'índex alt a mig - 1.
- Actualitzeu l'índex mitjà: Mitjà = (baix+alt)/2.
- Final del bucle: si l'índex baix és més gran que l'índex alt, aleshores x no és a la llista i l'algorisme retorna un error.
- Sortida: l'índex de x a la llista o missatge d'error.
(iii) Recerca en profunditat : un algorisme de cerca que examina cada branca tant com sigui possible abans de donar la volta.
Les directrius següents s'apliquen a la cerca en profunditat:
- seleccioneu el vèrtex o node inicial del gràfic per començar.
- Afegiu una marca de visita al primer vèrtex.
- Col·loqueu directament el vèrtex inicial en una pila.
- Fins que la pila estigui buida, repetiu les accions següents: -
- Traieu el vèrtex superior de la pila.
- Marqueu com a visitat i inseriu a la pila cada veí no visitat del vèrtex emergent.
- Continueu aquest procés fins que s'hagin visitat tots els vèrtexs del gràfic.
- Un cop s'han visitat tots els vèrtexs, l'algoritme s'ha completat i es realitza una cerca en profunditat al gràfic.
(iv) Recerca en primer lloc : un algorisme de cerca que explora tots els veïns d'un node abans de passar al següent nivell.
L'algorisme per a la cerca en amplitud és:
encapsulació java
- Comenceu amb el node arrel o l'estat inicial.
- Afegiu el node arrel a una cua.
- Comproveu si la cua està buida; si és així, tanqueu l'algorisme.
- Agafeu el primer element de la cua i marqueu-lo com a visitat.
- Amplieu el node contemporani afegint tots els seus veïns no visitats a la cua.
- Fins que es trobi el node desitjat o la cua estigui buida, repetiu els passos del 3 al 5.
- Torna el camí des de l'estat preliminar a l'estat objectiu si es troba el node objectiu.
- Finalitzeu el conjunt de regles i informeu que l'estat de l'objectiu no s'ha identificat si la cua està buida.
(v) Cerca per interpolació : un algorisme de cerca que utilitza els valors dels elements cercats per estimar la posició a l'índex.
És important que la matriu es distribueixi uniformement. En cas contrari, és un algorisme.
Funciona com s'esperava.
L'algorisme es pot resumir de la següent manera.
- Obteniu la llista d'entrada i el valor de la clau per cercar.
- Inicialitzar les variables inferior i superior al primer i al darrer índex de la llista.
- Si el valor inferior és menor o igual al valor superior, aleshores:
- Calcula la ubicació estimada amb la fórmula següent:
pos = baix + ((alt - baix) / (arr[alt] - arr[baix])) * (x - arr[baix]). - Retorna la posició si el valor estimat de la posició és un valor clau.
- c) Si el valor de la posició estimada és inferior al valor de la clau, establiu-lo més baix.
Posició + 1. - d) Si el valor de la posició estimada és superior al valor de la clau Set, posició - 1 amunt.
- Calcula la ubicació estimada amb la fórmula següent:
- Si no es troba el valor de la clau, retorneu -1 per indicar que el valor no és a la llista.
(vi) Saltar de cerca : un mètode de cerca que itera per la llista en passos de longitud constant fins que troba l'element rellevant o determina que ja no està present.
L'algoritme de cerca de salt és el següent:
- Primer, establiu la mida del salt a l'arrel quadrada del nombre d'elements de la matriu.
- Estableix una variable anomenada 'actual' al primer element de la matriu.
- Itera sobre la matriu saltant per la mida del salt mentre s'incrementa una variable anomenada 'salt'.
- Passeu al següent salt si l'element existent és més petit que l'element desitjat.
- Si l'element actual és més gran que l'element objectiu, feu una cerca lineal entre l'element actual i l'element de salt anterior per trobar l'element objectiu.
- Si l'element objectiu no es troba a la matriu, retorna -1 per indicar que no és a la matriu.
- Si es troba l'element, retorna l'índex de l'element a la matriu.
3. Algorismes gràfics
El suport de C per a punters i estructures de dades, com ara matrius i llistes enllaçades, el fa adequat per implementar algorismes que manipulen gràfics, com ara trobar el camí més curt entre dos nodes en un gràfic.
Hi ha diferents tipus d'algoritmes de gràfics.
ells són:-
4. Algorismes criptogràfics
C admet operacions de baix nivell i una manipulació eficient de dades, el que el fa ideal per implementar algorismes utilitzats en criptografia, com ara algorismes de xifratge i desxifrat de dades.
Hi ha diferents tipus d'algoritmes de xifratge.
Ells són:-
Avantatges de l'algorisme
Els algorismes tenen molts avantatges.
ells són:-
Inconvenients de l'algorisme
Els algorismes són molt útils per a la programació, però els algorismes tenen inconvenients.
ells són:-