logo

Algorisme en llenguatge C

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:

    Entrades: els algorismes han de rebre entrades que es poden representar com a valors o dades.Sortida: L'algorisme hauria de produir alguna sortida. Pot ser conseqüència d'un problema o d'una solució dissenyada per resoldre'l.Claredat: Els algorismes s'han de definir amb precisió, utilitzant instruccions inequívoques que un ordinador o un altre sistema pugui seguir sense ambigüitats.Finitud: L'algorisme requereix uns passos limitats. Significa que s'ha de sortir després d'executar un nombre determinat d'ordres.Validesa: l'algorisme ha de ser vàlid. En altres paraules, hauria de ser capaç de produir una solució al problema que l'algorisme està dissenyat per resoldre en un període de temps raonable.Eficàcia:Un algorisme ha de ser eficaç, és a dir, ha de ser capaç de produir una solució al problema que està dissenyat per resoldre en un període de temps raonable.Generalitat:Un algorisme ha de ser general, és a dir, que es pot aplicar a una àmplia gamma de problemes en lloc de ser específic per a un sol problema.

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.

    Estabilitat:- Això fa referència a la capacitat de l'algorisme per mantenir l'ordre relatiu dels elements del conjunt de dades.Paral·lelització:- Això fa referència a la capacitat d'executar operacions en paral·lel entre diversos processadors.Escalabilitat:- D'altra banda, es refereix a la capacitat d'un algorisme per gestionar grans volums de dades i altres entrades.

Inclouen dos tipus d'anàlisi.

ells són:-

  1. Anàlisi prèvia.
  2. 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
  1. Factor temps.
  2. 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:

  1. Comenceu amb una llista d'elements sense ordenar.
  2. Compareu els dos primers elements de la llista. Si el primer element és més gran que el segon, canvieu-los.
  3. Passeu al següent parell d'elements i repetiu el pas 2 fins que s'arribi al final de la llista.
  4. Per a cada element de la llista, repetiu els passos 2 i 3 una vegada més. això s'anomena passades.
  5. 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.
  6. Un cop s'ha completat una passada i no es fan canvis, la llista s'ordena i l'algorisme es pot aturar.
  7. 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:

  1. Inicialitzar una llista ordenada buida i una llista sense ordenar dels elements que s'han d'ordenar.
  2. El primer membre de la llista no ordenada s'ha de prendre i col·locar a la posició adequada de la llista ordenada.
  3. Repetiu el pas 2 per a cada element posterior de la llista sense ordenar.
  4. Compareu l'element actual amb els elements de la llista ordenada, començant per l'element immediatament a l'esquerra.
  5. Canvia els dos elements si l'element actual és més petit que l'element a la seva esquerra.
  6. 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.
  7. Repetiu els passos 4-6 per a cada element posterior de la llista sense ordenar.
  8. Un cop s'hagin processat tots els elements, la llista ordenada contindrà tots els elements en l'ordre correcte.
  9. 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:

  1. Comenceu establint l'element principal de la llista com a element min.
  2. Repetiu els elements restants de la llista, comparant cadascun amb el mínim actual.
  3. Establiu un nou mínim si es troba que un element és més petit que l'existent.
  4. Canvieu el mínim actual al primer element de la llista sempre que arribi a la seva conclusió.
  5. 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).
  6. 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:

  1. 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.
  2. 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.
  3. Ordena recursivament la subllista que conté elements menys que el pivot mitjançant el mateix procés.
  4. Utilitzeu el mateix procediment per ordenar recursivament la subllista d'entrades més grans que el pivot.
  5. Concatena les subllistes ordenades amb l'element pivot entremig per formar una llista completament ordenada.
  6. 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:

  1. Feu dues subllistes de la llista: una amb elements per sota del pivot i una amb elements per sobre del pivot.
  2. Produeix una nova subllista ordenada combinant subllistes iterativament fins que només existeix una subllista. Aquesta serà la vostra llista ordenada.
  3. Passos per combinar dos subdirectoris: -
  4. Creeu una llista buida per contenir els elements ordenats.
  5. Compara el primer element de cada subllista.
  6. Afegeix l'element més petit a la llista nova i l'elimina de la subllista principal.
  7. Repetiu els passos 2 i 3 fins que una llista estigui completament buida.
  8. Afegeix els elements restants d'altres subllistes a una llista nova.
  9. Substitueix la subllista combinada per la nova llista ordenada.
  10. 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ó:

    Construeix un munt màxim: Començant pel primer node que no és full, compareu cada node amb els seus nodes fills i substituïu els nodes pel més gran dels seus fills per satisfer la propietat d'emmagatzematge màxim.Canvia l'arrel amb l'últim element: Canvia l'arrel (element més gran) amb l'últim element de la pila.
  1. 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.
  2. Repetiu els passos 2 i 3 amb els nous elements apilats, excepte l'últim element en la posició correcta.
  3. Repetiu aquest procés fins que només quedi un element a la pila. Això ara està ordenat.
  4. Heapify Down: A partir del node arrel, compara els elements amb els seus fills i intercanvia amb el més gran dels dos fins que es compleix la propietat del munt màxim.Heapify Up: Comenceu amb l'últim element del munt, compareu-lo amb el seu pare i intercanvieu-lo amb el pare per satisfer la propietat del munt màxim.

(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:

  1. determinar quants dígits hi ha a l'element més gran de la llista d'entrada.
  2. Inicialitzeu una variable, per exemple, el lloc del dígit, a 1, que representa el lloc del dígit actual.
  3. Creeu una llista buida per a cada valor de dígit possible del 0 al 9.
  4. Itereu per la llista d'entrada i afegiu cada element a la llista adequada segons el valor de la posició actual del dígit.
  5. Concatena totes les llistes per formar la nova llista en l'ordre de les llistes de dígits.
  6. Multiplica digitPlace per 10 per passar al següent dígit.
  7. 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.
  8. La llista final s'ordenarà en ordre ascendent pels dígits dels elements.
  9. 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: -

  1. 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.
  2. Inicialitzar una variable anomenada 'índex' a -1: aquesta variable s'utilitzarà per emmagatzemar l'índex de l'element objectiu si es troba.
  3. Recorre la llista d'elements: a partir del primer element, comproveu cada element de la llista un per un.
  4. 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.
  5. 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: -

  1. Entrada: una llista ordenada de n elements i un element objectiu x.
  2. Inicialitzar variables: establiu l'índex baix a 0, l'índex alt a n-1 i mitjà a (baix+alt)/2.
  3. Inicieu un bucle: mentre que l'índex baix és menor o igual que l'índex alt, repetiu els passos següents.
  4. Compareu l'element mitjà amb x: si l'element central és igual a x, retorneu l'índex mitjà.
  5. 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.
  6. Actualitzeu l'índex mitjà: Mitjà = (baix+alt)/2.
  7. 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.
  8. 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:

  1. seleccioneu el vèrtex o node inicial del gràfic per començar.
  2. Afegiu una marca de visita al primer vèrtex.
  3. Col·loqueu directament el vèrtex inicial en una pila.
  4. 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.
  5. Continueu aquest procés fins que s'hagin visitat tots els vèrtexs del gràfic.
  6. 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
  1. Comenceu amb el node arrel o l'estat inicial.
  2. Afegiu el node arrel a una cua.
  3. Comproveu si la cua està buida; si és així, tanqueu l'algorisme.
  4. Agafeu el primer element de la cua i marqueu-lo com a visitat.
  5. Amplieu el node contemporani afegint tots els seus veïns no visitats a la cua.
  6. Fins que es trobi el node desitjat o la cua estigui buida, repetiu els passos del 3 al 5.
  7. Torna el camí des de l'estat preliminar a l'estat objectiu si es troba el node objectiu.
  8. 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.

  1. Obteniu la llista d'entrada i el valor de la clau per cercar.
  2. Inicialitzar les variables inferior i superior al primer i al darrer índex de la llista.
  3. Si el valor inferior és menor o igual al valor superior, aleshores:
    1. Calcula la ubicació estimada amb la fórmula següent:
      pos = baix + ((alt - baix) / (arr[alt] - arr[baix])) * (x - arr[baix]).
    2. Retorna la posició si el valor estimat de la posició és un valor clau.
    3. c) Si el valor de la posició estimada és inferior al valor de la clau, establiu-lo més baix.
      Posició + 1.
    4. d) Si el valor de la posició estimada és superior al valor de la clau Set, posició - 1 amunt.
  4. 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:

  1. Primer, establiu la mida del salt a l'arrel quadrada del nombre d'elements de la matriu.
  2. Estableix una variable anomenada 'actual' al primer element de la matriu.
  3. Itera sobre la matriu saltant per la mida del salt mentre s'incrementa una variable anomenada 'salt'.
  4. Passeu al següent salt si l'element existent és més petit que l'element desitjat.
  5. 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.
  6. Si l'element objectiu no es troba a la matriu, retorna -1 per indicar que no és a la matriu.
  7. 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:-

    Algoritme de Dijkstra: un algorisme que troba el camí més curt entre dos nodes en un gràfic actualitzant contínuament la distància més curta des de cada node.Algorisme A*: un mètode que actualitza contínuament el recorregut més curt a cada node en un gràfic per determinar la ruta més curta entre ells.Algoritme de Prim: Un enfocament per esbrinar l'arbre allargat més petit del gràfic connectat ponderat.algorisme de Kruskal: Un enfocament per identificar l'arbre abastant més baix del gràfic ponderat enllaçat.Algoritme Bellman-Ford: un algorisme que, fins i tot quan el gràfic té pesos de vora negatiu, mostra el camí més curt entre un node de subministrament concret i tots els altres nodes de la xarxa.

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:-

    Algoritmes hash: Aquests algorismes produeixen sortides de mida fixa (hash) a partir d'entrades de mida arbitrària. Alguns exemples inclouen MD5, SHA-1 i SHA-2.Algorismes de clau simètrica: els passos de xifratge i desxifrat d'aquests algorismes utilitzen la mateixa clau privada. AES, DES i Blowfish en són alguns exemples.Algorismes de clau asimètrica: aquests mètodes utilitzen una clau pública i una clau no pública com a claus separades per al xifratge i el desxifrat. Alguns exemples inclouen RSA, ECC i DSA.Algoritmes d'intercanvi de claus: Aquests algorismes permeten a dues parts intercanviar claus per un canal insegur de manera segura. Per exemple, podem esmentar Diffie-Hellman i el·líptic Curve Diffie-Hellman.

Avantatges de l'algorisme

Els algorismes tenen molts avantatges.

ells són:-

    Velocitat i eficiència: els algorismes poden processar grans quantitats de dades de manera ràpida i precisa, cosa que els fa útils per a tasques que requereixen massa temps o propenses a errors perquè les persones les realitzin.Coherència: els algorismes segueixen un conjunt de directrius predeterminades. Pot produir resultats consistents sense estar influenciat per prejudicis i emocions personals.Automatització: els algorismes poden realitzar tasques automàticament, deixant la gent lliure per centrar-se en tasques més complexes o creatives.Augment de la precisió: els algorismes sovint poden assolir nivells de precisió més alts que els humans, especialment quan tracten grans quantitats de dades.Millor presa de decisions: Els algorismes ens ajuden a prendre decisions més informades i objectives mitjançant l'anàlisi de dades i la identificació de patrons i tendències que no són fàcilment visibles per a la gent.Escalabilitat: els algorismes es poden augmentar o reduir fàcilment per satisfer les demandes i càrregues de treball canviants.

Inconvenients de l'algorisme

Els algorismes són molt útils per a la programació, però els algorismes tenen inconvenients.

ells són:-

    Àmbit limitat: Els algorismes només poden resoldre problemes dins del seu abast i poden no ser capaços de resoldre problemes complexos o abstractes.Parcialitat: Els algorismes poden perpetuar i reforçar els biaixos en les dades utilitzades per a la formació, donant lloc a resultats injustos.Transparència insuficient: Molts algorismes amaguen el procés mitjançant el qual arriben a les seves conclusions. Això pot fer que sigui difícil pensar o comprovar els resultats.Confiança en la finesa de les dades:La correcció del conjunt de regles depèn en gran mesura de la finesa i l'aplicabilitat de les dades utilitzades en la instrucció. Els efectes inexactes o inexactes poden ser el resultat de dades defectuoses.Adaptabilitat limitada:Els algorismes estan dissenyats per seguir les directrius i no s'adaptaran a circumstàncies i condicions canviants.