10 Algoritmische problemen om toch

Op te lossen> 10 algoritmische problemen die nog niet zijn opgelost - dummies

Algoritmen zijn er inderdaad al eeuwen, dus je zou denken dat wetenschappers elk algoritme inmiddels hebben ontdekt en opgelost. Helaas is het tegenovergestelde waar. Het oplossen van een bepaald algoritme geeft vaak nog een paar vragen die het algoritme niet oplost en dat leek niet duidelijk totdat iemand de oplossing bedacht.

Algoritmen zijn een reeks stappen die worden gebruikt om een ​​probleem op te lossen, en u moet ze niet verwarren met andere entiteiten, zoals vergelijkingen. Een algoritme is nooit een oplossing bij het zoeken naar een probleem. Niemand zou een reeks stappen maken om een ​​probleem op te lossen dat nog niet bestaat (of misschien nooit zal bestaan).

Deze lijst gaat over algoritmische problemen die een doel zouden dienen als iemand een oplossing voor hen zou vinden.

Omgaan met tekstzoekopdrachten

Veel tekstzoekopdrachten omvatten het gebruik van reguliere expressies - een soort steno die de computer vertelt wat hij moet vinden. De grammatica die voor de reguliere expressie wordt gebruikt, is afhankelijk van de taal of toepassing, maar u vindt reguliere expressies die op een aantal plaatsen worden gebruikt, zoals tekstverwerkers, e-mailtoepassingen, zoekdialogen en op allerlei andere plaatsen waar u nauwkeurig moet zoeken voorwaarden voor een reeks tekstitems.

Een van de huidige problemen met reguliere expressies is dat het lijkt alsof elke applicatieomgeving een vergelijkbare set regels heeft, maar met net genoeg verschillen om het maken van een zoekterm moeilijk te maken. Het gegeneraliseerde probleem met de hoogte van een ster probeert te achterhalen of er een gegeneraliseerde syntaxis voor reguliere expressies bestaat. Als dit het geval is, zou het resulterende algoritme het voor iemand mogelijk maken om slechts één methode te leren om reguliere expressies te maken om zoekopdrachten uit te voeren.

Onderscheidende woorden

Wanneer u met tekens werkt, ziet een computer cijfers en geen letters. De cijfers zijn eigenlijk slechts een reeks 0s en 1s voor de computer en hebben geen enkele betekenis. Het combineren van karakters in strings maakt de reeks van 0s en 1s langer. Als je dus twee strings vergelijkt, kan iets dat een mens in een oogopslag kan doen, tijd in beslag nemen in een computer en is er waarschijnlijk verwarring tussen conjugaten. Als u bijvoorbeeld niet voorzichtig bent met het maken van het algoritme, kan een computer luisterlist en verwarren. Belangrijker nog is dat de computer tijd nodig heeft om het verschil tussen beide te onderscheiden. Het probleem van de scheidende woorden tracht het kleinste (en snelst) mogelijke algoritme te vinden (een deterministische eindige automaat, DFN, in dit geval) om woordscheiding uit te voeren.Het doel is om een ​​woord te accepteren en een ander af te wijzen, gegeven twee woorden van een bepaalde lengte.

Bepalen of een toepassing eindigt

Een van de problemen die Alan Turing in 1936 voorstelde, was de vraag of een algoritme, gegeven een beschrijving van een programma en een invoer, kon bepalen of het programma uiteindelijk zou stoppen (de stopprobleem ). Wanneer u met een eenvoudige applicatie werkt, is het eenvoudig om in veel gevallen vast te stellen of het programma zal stoppen of in een eindeloze lus zal blijven lopen. Naarmate de programmacomplexiteit toeneemt, wordt het bepalen van het resultaat van het uitvoeren van het programma met een gegeven invoer echter moeilijker. Een Turing-machine kan deze vaststelling niet maken; het resultaat is een buggy-code met oneindige lussen. Geen enkele test die gebruikmaakt van de huidige technologie kan dit probleem oplossen.

Een hypercomputer is een computermodel dat verder gaat dan de Turing-machine om problemen op te lossen, zoals het stopprobleem. Dergelijke machines zijn echter niet mogelijk met behulp van de huidige technologie. Als ze mogelijk waren, zou je in staat zijn om hen allerlei onweegbare zaken te stellen die computers momenteel niet kunnen beantwoorden. Dit artikel geeft u een goed idee van wat er zou gebeuren als iemand dit probleem zou kunnen oplossen.

Eenrichtingsfuncties maken en gebruiken

Een eenrichtingsfunctie is een functie die gemakkelijk te gebruiken is om een ​​antwoord in één richting te krijgen, maar bijna onmogelijk om te gebruiken met het omgekeerde van dat antwoord. Met andere woorden, u gebruikt een eenrichtingsfunctie om iets als een hash te maken dat zou verschijnen als onderdeel van een oplossing voor cryptografie, persoonlijke identificatie, authenticatie of andere behoeften op het gebied van gegevensbeveiliging.

Het bestaan ​​van eenrichtingsfunctie is minder mysterieus en meer een kwestie van bewijs. Veel systemen voor telecommunicatie, e-commerce en e-banking zijn momenteel afhankelijk van functies die ogenschijnlijk één manier zijn, maar niemand weet echt of ze echt één manier zijn. Het bestaan ​​van een eenrichtingsfunctie is momenteel een hypothese, geen theorie. Als iemand zou kunnen aantonen dat er een eenrichtingsfunctie bestaat, zijn problemen met gegevensbeveiliging gemakkelijker op te lossen vanuit een programmeringsperspectief.

Echt grote aantallen vermenigvuldigen

Er bestaan ​​op heel veel plaatsen echt grote aantallen. Overweeg bijvoorbeeld om berekeningen uit te voeren met afstanden naar Mars, of misschien Pluto. Er bestaan ​​momenteel methoden voor het uitvoeren van vermenigvuldiging op hele grote getallen, maar deze hebben de neiging traag te zijn omdat ze meerdere bewerkingen vereisen om te voltooien. Het probleem treedt op als de cijfers te groot zijn om in de registers van de processor te passen. Op dat moment moet de vermenigvuldiging in meer dan één stap plaatsvinden, wat de dingen aanzienlijk vertraagt. De huidige oplossingen omvatten:

  • Gauss complexe vermenigvuldigingsalgoritme
  • Karatsuba-vermenigvuldiging
  • Toom-Cook
  • Fourier-transformatiemethoden

Hoewel veel van de momenteel beschikbare methoden acceptabele resultaten opleveren, kost het ze allemaal tijd, en wanneer u veel berekeningen moet uitvoeren, kan het tijdprobleem kritiek worden. Groot aantal vermenigvuldigingen is daarom een ​​van die problemen waarvoor een betere oplossing vereist is dan de huidige.

Een resource gelijk verdelen

Evenveel middelen verdelen lijkt misschien niet zo moeilijk, maar mensen, die jaloers zijn, kunnen de resource als ongelijk verdeeld beschouwen, tenzij je een manier kunt vinden om iedereen ervan te verzekeren dat de verdeling inderdaad eerlijk is. Dit is het jaloersmakende cake-cutting probleem. Natuurlijk, als je een cake snijdt, hoe eerlijk je het ook probeert, er is altijd de perceptie dat de verdeling oneerlijk is. Het creëren van een eerlijke verdeling van middelen is belangrijk in het dagelijks leven om de strijd tussen belanghebbenden in elke organisatie te minimaliseren, waardoor iedereen efficiënter wordt.

Er bestaan ​​al twee oplossingen voor het jaloersmakende cakebesnoeiingsprobleem met een specifiek aantal mensen, maar er bestaat geen algemene oplossing. Wanneer er twee mensen bij betrokken zijn, snijdt de eerste de taart en de tweede kiest het eerste stuk. Op deze manier zijn beide partijen verzekerd van een gelijke verdeling. Het probleem wordt moeilijker met drie mensen, maar je kunt de oplossing van Selfridge-Conway proberen voor het probleem. Echter, nadat u bij vier mensen bent, bestaat er geen oplossing.

De bewerkingsafstand berekenen

De bewerkingsafstand tussen twee strings is het aantal bewerkingen dat nodig is om de ene reeks in de andere reeks te transformeren. De afstandsberekening draait om de Levenshtein-afstandsbewerkingen, die bestaan ​​uit het verwijderen, invoegen of vervangen van een teken in de tekenreeks. Deze specifieke techniek ziet gebruik in natuurlijke taalinterfaces, kwantificatie van DNA-sequenties en allerlei andere plaatsen waar je twee vergelijkbare reeksen kunt hebben die een soort vergelijking of aanpassing vereisen.

Er bestaan ​​momenteel een aantal oplossingen voor dit probleem, allemaal vrij traag. Sterker nog, de meesten van hen nemen exponentiële tijd, dus de tijd die nodig is om een ​​transformatie uit te voeren, neemt snel toe tot het punt waarop mensen pauzes kunnen zien in de verwerking van invoer. De pauze is niet helemaal zo slecht bij het gebruik van een tekstverwerker die automatische woordcontroles uitvoert en een verkeerd gespeld woord in de juiste verandert. Bij gebruik van spraakinterfaces kan de pauze echter behoorlijk opvallen en ervoor zorgen dat de menselijke operator fouten maakt.

Problemen snel oplossen

Naarmate machine learning toeneemt en we steeds meer op computers rekenen om problemen op te lossen, wordt de vraag hoe snel een computer een probleem kan oplossen, van cruciaal belang. Het P versus NP-probleem vraagt ​​eenvoudigweg of een computer een probleem snel kan oplossen wanneer het de oplossing voor het probleem snel kan verifiëren. Met andere woorden, kan de computer, als de computer redelijkerwijs kan vaststellen dat een menselijke reactie op een probleem correct is in polynomiale tijd of minder, het probleem zelf oplossen in polynomiale tijd of minder?

Deze vraag werd oorspronkelijk in de jaren vijftig besproken door John Nash in brieven aan de National Security Agency (NSA) en opnieuw in brieven tussen Kurt Gödel en John von Neumann. Naast machinaal leren (en AI in het algemeen), is dit specifieke probleem een ​​zorg voor vele andere gebieden, waaronder wiskunde, cryptografie, algoritmisch onderzoek, speltheorie, multimediaverwerking, filosofie en economie.

Het pariteitsspel spelen

In eerste instantie lijkt het oplossen van een game in het echt niet zo nuttig. Ja, games zijn leuk en interessant, maar ze bieden niet echt een achtergrond om iets nuttigs te doen - tenminste, dat is de algemene theorie. Speltheorie speelt echter een rol in een groot aantal praktijkscenario's, waarvan er veel complexe processen zijn die iemand gemakkelijker kan begrijpen als games dan als echte processen. In dit geval helpt het spel mensen onder andere geautomatiseerde verificatie en controller-synthese te begrijpen. Je kunt meer lezen over het pariteitsspel. In feite kun je het spelen.

Ruimtelijke problemen begrijpen

Om dit specifieke probleem in de juiste context te plaatsen, moet u nadenken over het verplaatsen van dozen in een magazijn of een andere situatie waarin u rekening moet houden met de ruimte waarin dingen bewegen. Het is duidelijk dat als je veel dozen in een groot magazijn hebt en ze allemaal een heftruck nodig hebben om op te halen, je niet wilt proberen te achterhalen hoe je ze optimaal kunt opslaan door ze fysiek opnieuw te rangschikken. Dit is waar je het probleem moet oplossen door een oplossing te visualiseren.

De vraag is echter of alle ruimtelijke problemen een oplossing hebben. Denk in dit geval aan een van de puzzels van die kinderen waarin je een plaatje samenstelt door de kleine tegels rond te schuiven. Het lijkt erop dat in alle gevallen een oplossing moet bestaan, maar in sommige situaties kan een slecht startpunt leiden tot een situatie die geen oplossing biedt.

Wiskundigen zoals Sam Loyd gebruiken vaak puzzels om complexe wiskundige problemen aan te tonen, waarvan sommige vandaag geen oplossing bieden. Het bezoeken van deze sites is leuk omdat je niet alleen wat gratis entertainment krijgt, maar ook stof tot nadenken. De problemen die deze puzzels oproepen, hebben praktische toepassingen, maar ze worden op een leuke manier gepresenteerd.