Dalam kod ini, prestasi perlahan timbul daripada pengiraan heuristik yang mahal dalam fungsi astar. Untuk meningkatkan prestasi, pertimbangkan perkara berikut:
Seperti yang ditunjukkan dalam analisis, alatan pemprofilan seperti pensampelan tindanan boleh mengenal pasti kesesakan prestasi dengan cepat. Dengan memeriksa surih tindanan, anda boleh menentukan penyataan yang menggunakan masa yang berlebihan.
Fungsi heuristik, heuristik, tidak perlu bergelung pada keseluruhan tatasusunan pembentukan, menghasilkan overhed yang ketara. Pendekatan yang lebih cekap ialah mengekalkan jumlah fCamel dan bCamel semasa melintasi tatasusunan.
def heuristic(formation): fCamels, bCamels = 0, 0 for i in formation: if i == fCamel: fCamels += 1 elif i == bCamel: bCamels += fCamels * bCamels # Update to fCamel * bCamel differences else: pass return bCamels
Dalam fungsi astar, senarai terbuka ialah baris gilir keutamaan yang menyusun nod berdasarkan nilai f mereka. Panggilan openlist.put menimbulkan overhed yang tidak perlu kerana nilai f sudah dikira dan disimpan dalam objek nod.
Pendekatan yang lebih cekap ialah mengatasi pengendali __lt__ untuk kelas nod untuk membandingkan secara langsung nilai f. Ini menghapuskan keperluan untuk parameter f dalam openlist.put.
def __lt__(self, other): return self.f < other.f
Selain itu, pastikan senarai terbuka dikekalkan dalam tertib menaik bagi nilai f, seperti yang diperlukan oleh algoritma A*. Pelaksanaan lalai dalam modul Baris Gilir tidak menjamin tingkah laku ini.
Atas ialah kandungan terperinci Bagaimanakah Kami Boleh Mengoptimumkan Prestasi Algoritma A* dengan Meningkatkan Fungsi Heuristik dan Pengurusan Baris Keutamaan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!