Vra

Ek het 'n program geskep met behulp van dev-cpp en wxwidgets wat 'n legkaart oplos.
Die gebruiker moet die bewerkingsblokke en die resultateblokke vul, en die program sal dit oplos.
Ek los dit op met bruteforce, ek genereer alle nie-herhaalde 9-lengte-getalkombinasies met behulp van 'n rekursiewe algoritme.Dit doen dit redelik vinnig.
Tot hier is alles wonderlik!
Maar die probleem is wanneer my program werk afhangende van die karakter op die blokke.Dit is uiters stadig (dit kry nooit die antwoord nie), as gevolg van die karakters vergelyking met +, -, *, ens.Ek doen 'n GEVAL.
Is daar een of ander manier of een of ander programmeertaal wat dinamiese skepping van operateurs toelaat?So ek kan die operateur ROW1COL2 definieer as 'n +, en op dieselfde manier vir alle ander bewerkings.
Ek laat 'n skermskoot van die toepassing, sodat dit makliker is om te verstaan ​​hoe die legkaart werk.
http://www.imageshare.web.id/images/9gg5cev8vyokp8rhlot9.png


PD:Die algoritme werk, ek het dit met 'n onbenullige legkaart probeer en dit binne 'n sekonde opgelos.

Was dit nuttig?

Oplossing

Nie seker dat dit regtig is waarna jy soek nie, maar ..
Enige objekgeoriënteerde taal soos C++ of C# sal jou toelaat om 'n "Operator" basisklas te skep en dan 'n "PlusOperator" of "MinusOperator" ens' van hierdie basisklas af te lei.dit is die standaard manier om sulke gevalstellings te vermy.

Ek is egter nie seker dat dit jou prestasieprobleem sal oplos nie.
Die gebruik van gewone brute krag vir so 'n probleem sal lei tot 'n eksponensiële oplossing.dit sal blykbaar vinnig werk vir klein invoer - sê om al die getalle te voltooi.Maar as jy die operasies wil voltooi, is dit 'n veel groter probleem met baie meer moontlikhede.
So dit is waarskynlik dat selfs sonder die CASE jou program dit nie sal kan oplos nie.

Die regte manier om hierdie soort probleme op te los, is om 'n paar gevorderde soekmetodes te gebruik wat een of ander heuristiese funksie gebruik.Sien die A* (A-ster) algoritme byvoorbeeld.

Sterkte!

Ander wenke

Jy kan die getalle en operateurs as voorwerpe voorstel, dus word die ontleding slegs een keer aan die begin van die oplossing gedoen.

Gelisensieer onder: CC-BY-SA met toeskrywing
Nie verbonde aan StackOverflow
scroll top