| | | | |
| |||||||
| | LinkBack | Themen-Optionen | Thema bewerten |
| | |
| Neuer Benutzer Registriert seit: 04.07.2005
Beiträge: 24
![]() | Ok, die Tabelle Felder ist folgender Maßen aufgebaut: Feldnummer | x-Koordinate | y-Koordinate | Feldtyp | Flusstyp Flusstyp gibt an, ob sich an einer oder mehreren Kanten des quadratischen Feldes ein Fluss befinded. Die Zahl gibt die Position an und so kann dann gepüft werden, ob ein Fluss überquert werden muss, was mit zusätzlichen Zeitkosten verbunden ist. Diesen Zusatz habe ich jedoch noch nicht implementiert. Zu der Karte als ganzes: Sie ist nicht quadratisch oder rechteckig aufgebaut, und daher gibt es keinen direkten Zusammenhang zwischen Feldnummer und den Koordinaten. Hier erstmal die ersten 50 Datensätze der Tabelle: (insgesamt sind es 662) # phpMyAdmin SQL Dump # version 2.5.5-pl1 # http://www.phpmyadmin.net # # Host: localhost # Generation Time: Jul 10, 2005 at 12:30 AM # Server version: 4.0.17 # PHP Version: 4.3.4 # # Database : `inselspiel` # # -------------------------------------------------------- # # Table structure for table `felder` # CREATE TABLE `felder` ( `Feldnr` smallint(5) unsigned NOT NULL default '0', `x` tinyint(3) unsigned NOT NULL default '0', `y` tinyint(3) unsigned NOT NULL default '0', `typ` tinyint(4) NOT NULL default '0', `fluss` tinyint(1) NOT NULL default '0', PRIMARY KEY (`Feldnr`) ) TYPE=MyISAM; # # Dumping data for table `felder` # INSERT INTO `felder` VALUES (1, 21, 1, 1, 0); INSERT INTO `felder` VALUES (2, 22, 1, 1, 0); INSERT INTO `felder` VALUES (3, 23, 1, 1, 0); INSERT INTO `felder` VALUES (4, 18, 2, 1, 0); INSERT INTO `felder` VALUES (5, 19, 2, 1, 0); INSERT INTO `felder` VALUES (6, 20, 2, 1, 0); INSERT INTO `felder` VALUES (7, 21, 2, 1, 0); INSERT INTO `felder` VALUES (8, 22, 2, 3, 0); INSERT INTO `felder` VALUES (9, 23, 2, 1, 0); INSERT INTO `felder` VALUES (10, 16, 3, 1, 0); INSERT INTO `felder` VALUES (11, 17, 3, 1, 0); INSERT INTO `felder` VALUES (12, 18, 3, 1, 0); INSERT INTO `felder` VALUES (13, 19, 3, 5, 0); INSERT INTO `felder` VALUES (14, 20, 3, 3, 0); INSERT INTO `felder` VALUES (15, 21, 3, 3, 0); INSERT INTO `felder` VALUES (16, 22, 3, 3, 0); INSERT INTO `felder` VALUES (17, 23, 3, 1, 0); INSERT INTO `felder` VALUES (18, 24, 3, 1, 0); INSERT INTO `felder` VALUES (19, 14, 4, 1, 4); INSERT INTO `felder` VALUES (20, 15, 4, 1, 1); INSERT INTO `felder` VALUES (21, 16, 4, 1, 0); INSERT INTO `felder` VALUES (22, 17, 4, 2, 0); INSERT INTO `felder` VALUES (23, 18, 4, 2, 0); INSERT INTO `felder` VALUES (24, 19, 4, 5, 0); INSERT INTO `felder` VALUES (25, 20, 4, 4, 0); INSERT INTO `felder` VALUES (26, 21, 4, 4, 0); INSERT INTO `felder` VALUES (27, 22, 4, 3, 0); INSERT INTO `felder` VALUES (28, 23, 4, 3, 0); INSERT INTO `felder` VALUES (29, 24, 4, 1, 0); INSERT INTO `felder` VALUES (30, 25, 4, 1, 0); INSERT INTO `felder` VALUES (31, 26, 4, 1, 0); INSERT INTO `felder` VALUES (32, 13, 5, 1, 0); INSERT INTO `felder` VALUES (33, 14, 5, 1, 4); INSERT INTO `felder` VALUES (34, 15, 5, 4, 1); INSERT INTO `felder` VALUES (35, 16, 5, 2, 0); INSERT INTO `felder` VALUES (36, 17, 5, 2, 0); INSERT INTO `felder` VALUES (37, 18, 5, 5, 0); INSERT INTO `felder` VALUES (38, 19, 5, 5, 0); INSERT INTO `felder` VALUES (39, 20, 5, 4, 0); INSERT INTO `felder` VALUES (40, 21, 5, 4, 0); INSERT INTO `felder` VALUES (41, 22, 5, 3, 0); INSERT INTO `felder` VALUES (42, 23, 5, 3, 0); INSERT INTO `felder` VALUES (43, 24, 5, 3, 0); INSERT INTO `felder` VALUES (44, 25, 5, 3, 0); INSERT INTO `felder` VALUES (45, 26, 5, 1, 0); INSERT INTO `felder` VALUES (46, 27, 5, 1, 0); INSERT INTO `felder` VALUES (47, 28, 5, 1, 0); INSERT INTO `felder` VALUES (48, 29, 5, 1, 0); INSERT INTO `felder` VALUES (49, 30, 5, 1, 0); INSERT INTO `felder` VALUES (50, 31, 5, 1, 0); |
| |
| | |
| PHP Code Flüsterer Registriert seit: 21.08.2005 Beiträge: 4682 PHP-Kenntnisse: Fortgeschritten | |
| | |
| Neuer Benutzer Registriert seit: 04.07.2005
Beiträge: 24
![]() | Habe jetzt mal versucht meine Anfänge an dem Spiel bei Lycos zu veröffentlichen. Leider funktionieren die meisten Links noch nicht (konnte noch nicht ergründen warum nicht). Aber wenn ihr euch unter http://mitglied.lycos.de/muk13/Insel...iten/login.php mit "Martin" und PW.: "a" anmeldet könnt ihr zumindest mal einen Blick auf die Karte werfen um die es geht... @Axo: Die Scriptverbesserungen die du hier vorgeschlagen hast habe ich leider noch nicht lauffähig einbauen können... |
| |
| | ||||||
| Erfahrener Benutzer Registriert seit: 24.12.2004
Beiträge: 1.818
![]() | Zitat:
Zitat:
Zitat:
allerdings würde ich das ganze nicht so berechnen, sondern unter der prämisse, dass sich die karte eigentlich nie ändert, die 'fixkosten' von jedem punkt A zu jedem punkt B einmal vorberechnen und in der datenbank speichern. eine typische optimierung 'speicherplatz <-> programmlaufzeit'. d.h. du berechnest mit dem dijkstra-algorithmus einmal alle wege und speicherst die in der datenbank; wenn ein user sich von A nach B bewegt, brauchst du die kosten nur noch auszulesen (bzw. zusätzlich überprüfen, ob sich inzwischen auf einem punkt zwischen A und B ein hindernis befindet). Zitat:
eine hochperformante lösung des problems ist mit php nicht wirklich machbar - php ist für wirklich rechenintensive sachen nicht wirklich gut zu gebrauchen, das stimmt schon. wenn man aber den dijkstra-algorithmus sauber implementiert, hast du aber nicht mehr den n^2-aufwand, sondern nur noch m+n log n - (dafür müsste man die updateDistance() und findBestPath() als binary heap implementieren) - was sich anscheinend aber erst ab kartengrößen mit mehr als 10.000 knoten wirklich bemerkbar macht. mit php hast du allerdings noch die möglichkeit, eine eigene extension in C zu schreiben, die du in php einkompilieren kannst - ist zwar eine kunst für sich, aber du könntest allein dadurch ca. 90% ausführungszeit bei den elementar-operationen sparen und vor allem die bestehenden c-implementierungen des algorithmus verwenden. ein großes problem ist aber der immense speicherverbrauch - ich hab leider immer noch nicht herausbekommen, warum so viel speicher benötigt wird, aber eine karte mit 1000 einträgen frisst mit der aktuellen version ca. 60 MB RAM - das kann nicht sein. ich find aber leider keine dokumentation zum speicherverhalten des dijkstra-algorithmus. die beste optimierung wäre aber meiner meinung nach, nicht den dijkstra- sondern den a* (a star) - algorithmus für die weg-suche zu verwenden ( http://en.wikipedia.org/wiki/A-star_algorithm ) - das ganze funktioniert für deinen anwendungsfall besser. Zitat:
| |||||
| |
| Themen-Optionen | |
| Thema bewerten | |
|
|
| Besucher kamen über folgende Suchanfragen bei Google auf diese Seite |
| java \a star\ path algorithm, d star algorithm, dijkstra optimierung, d stern algorithmus, java a star path algorithm, a stern optimieren, a stern algorithmus tausend knoten, php astar pathfinding, a star algorithm sql, a-stern algorithmus optimieren, astar algorithmus, a stern algorithmus java, dijistra java schnell, php dijkstra, a stern algorithmus optimieren, \a*\ pathfinding optimieren, dijkstra php, pathfinding php, pathfinding, dijkstra javascript |

Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.