10 Algoritmiska problem ännu för att lösa

10 Algoritmiska problem ännu för att lösa - dummies

Algoritmer har faktiskt funnits i århundraden, så du tror att forskare skulle ha upptäckt och löst varje algoritm nu. Tyvärr är motsatsen sant. Att lösa en viss algoritm presenterar ofta några fler frågor som algoritmen inte löser och det verkade inte tydligt förrän någon kom upp med lösningen.

Algoritmer är en rad steg som används för att lösa ett problem, och du bör inte förväxla dem med andra enheter, till exempel ekvationer. En algoritm är aldrig en lösning på jakt efter ett problem. Ingen skulle skapa en serie åtgärder för att lösa ett problem som ännu inte finns (eller kan aldrig existera).

Denna lista handlar om algoritmiska problem som skulle tjäna ett syfte om någon skulle hitta en lösning för dem.

Hantera textsökningar

Många textsökningar inbegriper användningen av reguljära uttryck - ett slags stenografi som berättar för datorn vad man ska hitta. Den grammatik som används för det reguljära uttrycket beror på språket eller applikationen, men du hittar vanliga uttryck som används på ett antal platser, inklusive ordbehandlare, e-postprogram, sökdialoger och på alla andra ställen där du behöver tillhandahålla exakt sökning Villkor för en rad textobjekt.

Ett av de nuvarande problemen med regelbundna uttryck är att det verkar som om varje applikationsmiljö har en liknande uppsättning regler, men med tillräckligt många skillnader för att skapa en sökterm hård. Det generaliserade stjärnhöjdsproblemet syftar till att upptäcka huruvida en generaliserad regelbunden expressionssyntax existerar. Om så är fallet skulle den resulterande algoritmen göra det möjligt för någon att lära sig en metod för att skapa regelbundna uttryck för att utföra sökningar.

Differentierande ord

När man arbetar med tecken ser en dator siffror, inte bokstäver. Siffrorna är faktiskt bara en serie av 0s och 1s till datorn och har egentligen ingen mening. Kombinationen av tecken i strängar gör bara serien av 0s och 1s längre. Följaktligen kan man jämföra två strängar, något som en människa kan göra i ett ögonkast, ta tid inom en dator och förvirring är sannolikt mellan konjugat. Om du till exempel inte är noga med att konstruera algoritmen kan en dator förvirra enlist och lyssna. Viktigare, datorn skulle kräva tid för att skilja skillnaden mellan de två. Skiljeproblemet syftar till att hitta den minsta (och snabbaste) möjliga algoritmen (en deterministisk ändlig automat, DFN, i detta fall) för att utföra ordseparation.Målet är att acceptera ett ord och avvisa ett annat, med två ord av en viss längd.

Att avgöra om en ansökan kommer att sluta

Ett av de problem som Alan Turing föreslog 1936 är frågan om en algoritm, med en beskrivning av ett program och en ingång, kunde avgöra om programmet skulle sluta stoppproblem ). När man arbetar med en enkel applikation är det lätt att i många fall avgöra huruvida programmet stannar eller fortsätter att springa i en ändlös loop. Men eftersom programkomplexiteten ökar blir det svårare att bestämma resultatet av att köra programmet med vilken ingång som helst. En Turing-maskin kan inte göra denna bestämning; Resultatet är buggy-kod med oändliga loopar. Inget antal test som använder nuvarande teknik kan lösa detta problem.

En hyperdator är en datormodell som går utöver Turing-maskinen för att lösa problem som stoppproblemet. Sådana maskiner är emellertid inte möjliga med användning av nuvarande teknik. Om de var möjliga skulle du kunna fråga dem alla slags imponderables att datorer inte kan svara för närvarande. Den här artikeln ger dig en bra bild av vad som skulle hända om någon kunde lösa detta problem.

Skapa och använda envägsfunktioner

En enkelriktad funktion är en funktion som är lätt att använda för att få ett svar i en riktning, men nästan omöjligt att använda med det omvända svaret. Med andra ord använder du en envägsfunktion för att skapa något som en hash som skulle framstå som en del av en lösning för kryptering, personlig identifiering, autentisering eller andra datasäkerhetsbehov.

Förekomsten av en enkelriktad funktion är mindre mysterium och mer en fråga om bevis. Många telekommunikations-, e-handels- och e-banksystem förlitar sig för närvarande på funktioner som påstås enstaka, men ingen vet verkligen om de verkligen är en väg. Förekomsten av en envägsfunktion är för närvarande en hypotes, inte en teori. Om någon kunde bevisa att en enkelriktad funktion finns, skulle datasäkerhetsfrågor vara lättare att lösa ur ett programmeringsperspektiv.

Multiplicera riktigt stora siffror

Egentligen finns stora antal på många ställen. Tänk på att utföra beräkningarna med avstånd till Mars, eller kanske Pluto. Metoder finns för närvarande för att utföra multiplikation på riktigt stora antal, men de tenderar att vara långsamma eftersom de kräver flera operationer att slutföra. Problemet uppstår när siffrorna är för stora för att passa in i processorns register. Vid den tidpunkten måste multiplikationen ske i mer än ett steg, vilket fördröjer sakerna avsevärt. De nuvarande lösningarna innefattar:

  • Gauss komplexa multiplicationsalgoritm
  • Karatsubas multiplikation
  • Toom-Cook
  • Fourier transformationsmetoder

Även om många av de metoder som för närvarande finns tillgängliga ger goda resultat, tar de alla tid och när du har många beräkningar att utföra kan tidsproblemet bli kritiskt. Följaktligen är ett stort antal multiplikationer ett av de problem som kräver en bättre lösning än de som finns tillgängliga idag.

Dela en resurs lika

Det kan inte verka svårt att dela resurser lika, men människor, som är avundsjuk, kan se att resursen är ojämnt uppdelad om du inte hittar ett sätt att försäkra alla om att divisionen verkligen är rättvis. Detta är den avundasfria kakskärningsproblemet. Naturligtvis, när du skär en tårta, oavsett hur rättvist du försöker göra det, finns det alltid uppfattningen att divisionen är orättvis. Att skapa en rättvis fördelning av resurser är viktig i det dagliga livet för att minimera strid mellan intressenter i någon organisation och göra alla mer effektiva.

Två lösningar finns redan för det avundsjuka kakskärningsproblemet med ett visst antal människor, men ingen allmän lösning finns. När det är två personer som är involverade, skär den första kakan och den andra väljer den första delen. På detta sätt är båda parter försäkrade om en jämn uppdelning. Problemet blir svårare med tre personer, men du kan prova Selfridge-Conway-lösningen för problemet. Men när du kommer till fyra personer finns ingen lösning.

Reducera beräkningstid för beräknad distans

Redigeringsavstånd mellan två strängar är antalet operationer som krävs för att omvandla en sträng till den andra strängen. Avståndsberäkningen går runt Levenshtein-distansoperationerna, som är borttagning, infogning eller substitution av ett tecken i strängen. Denna speciella teknik ser användning i naturliga språkgränssnitt, DNA-sekvensering och alla andra ställen där du kan ha två liknande strängar som kräver någon form av jämförelse eller modifiering.

Ett antal lösningar för detta problem finns för närvarande, alla är ganska långsamma. Faktum är att de flesta tar exponentiell tid, så den tid som krävs för att utföra en omvandling lägger snabbt upp till den punkt där människor kan se pauser i behandlingen av inmatningen. Pausen är inte riktigt så dålig när du använder en ordbehandlare som utför automatiska ordkontroller och ändrar ett felstavat ord i rätt. Men när du använder röstgränssnitt kan pausen bli ganska märkbar och få den mänskliga operatören att göra misstag.

Problemlösning snabbt

När maskininlärningen startar och vi räknas mer och mer på datorer för att lösa problem, blir problemet med hur snabbt en dator kan lösa ett problem kritiskt. P-versus NP-problemet frågar helt enkelt om en dator snabbt kan lösa ett problem när det snabbt kan verifiera lösningen på problemet. Med andra ord, om datorn med rimlighet kan fastställa att ett mänskligt svar på ett problem är korrekt i polynomaltid eller mindre, kan det med andra ord lösa problemet själv i polynomaltid eller mindre?

Denna fråga diskuterades ursprungligen på 1950-talet av John Nash i brev till National Security Agency (NSA) och igen i brev mellan Kurt Gödel och John von Neumann. Förutom maskininlärning (och AI i allmänhet) är detta problem ett problem för många andra områden, inklusive matematik, kryptografi, algoritmforskning, spelteori, multimediabehandling, filosofi och ekonomi.

Spelar paritetsspelet

Först kan det inte vara så användbart att lösa ett spel i det verkliga livet. Ja, spel är roliga och intressanta, men de ger inte riktigt en bakgrund för att göra något användbart - åtminstone det är den allmänna teorin. Spelteorin spelar dock in spel i ett stort antal scenarier i verkligheten, av vilka många innefattar komplexa processer som någon lättare kan förstå som spel än som faktiska processer. I det här fallet hjälper spelet människor att bland annat förstå automatiserad verifiering och styrningssyntes. Du kan läsa mer om paritetsspelet. Faktum är att du kan spela det.

Förstå rumsliga problem

Tänk på att det här problemet i ett sammanhang, tänk på rörliga lådor runt i ett lager eller några andra situationer där du måste överväga det utrymme där saker rör sig. Självklart, om du har många lådor i ett stort lager och alla behöver en gaffeltruck för att hämta, vill du inte försöka hitta hur man lagrar dem optimalt genom att omorganisera dem fysiskt. Det är här du behöver arbeta igenom problemet genom att visualisera en lösning.

Emellertid är frågan om alla rumsliga problem har en lösning. Tänk i det här fallet på en av de barnens pussel som du sätter en bild tillsammans genom att skjuta de små kakel runt. Det verkar som om en lösning borde finnas i alla fall, men i vissa situationer kan en dålig utgångspunkt resultera i en situation som inte har någon lösning.

Matematiker som Sam Loyd använder ofta pussel för att visa komplicerade matematiska problem, av vilka några inte har någon lösning idag. Att besöka dessa platser är roligt för att du inte bara får lite fri underhållning men också, mat för tanke. De problem som dessa pussel höjer har praktiska tillämpningar, men de presenteras på ett roligt sätt.