Berbincang tentang pentingnya mengoptimumkan struktur kod

Penulis:Puteri, Dicipta: 2021-05-22 05:57:14, Dikemas kini:

Oleh kerana program terbuka, terdapat beberapa masalah kecil yang sering berlaku. Hari ini, mari kita bincangkan pentingnya mengoptimumkan struktur kod.

Untuk keuntungan, dua perkara yang paling penting ialah: 1. penggunaan dana. 2. kelajuan pesanan.

Kelajuan pesanan biasanya boleh diselesaikan dengan bergantung kepada pelayan yang lebih dekat dengan bursa, membeli rangkaian yang lebih baik, dan sebagainya. Tetapi sebenarnya bagi kebanyakan pemula, hanya mengoptimumkan struktur kod boleh membuat strategi lebih cepat beberapa puluh milidetik, tidak kalah daripada menukar rangkaian yang lebih baik. Walau bagaimanapun, kosnya jauh lebih rendah.

Walau bagaimanapun, apabila hanya ada satu pasangan urus niaga, peningkatan struktur kod yang dioptimumkan sering kurang dari 1ms, hampir tidak dapat dilihat perbezaannya.

Peningkatan penggunaan dana, yang sering memerlukan wang yang sama untuk mengamati lebih banyak pasangan dagangan pada masa yang sama, akan menyebabkan peningkatan jumlah gelung logik, di mana faedah struktur kod yang dioptimumkan adalah jelas. Kompleksiti rundingan dengan banyak pertukaran adalah O ((n!), Dengan pengoptimuman sepenuhnya dapat dikurangkan kepada O ((n!/(m!)) atau bahkan O ((n*m) ((m

Saya akan membincangkan satu masalah yang sering saya hadapi, contohnya, terdapat dua laluan A-C dan A-B-C, dan saya akan membincangkan satu lagi. Kedua-dua laluan masing-masing memerlukan pengiraan dua kali, sekali pengiraan laluan boleh membawa keuntungan, andaikan p1 dan p2, sekali pengiraan laluan tertentu untuk setiap bursa dan urus niaga mereka untuk harga dan jumlah yang diperlukan.

Salah satu kaedah yang paling biasa adalah dengan menuliskan fungsi yang mempunyai fungsi untuk mengira keuntungan, iaitu harga dan jumlah. Kemudian anda akan memanggil fungsi ini, mendapatkan keuntungan dari setiap laluan, dan kemudian memilih keuntungan terbesar untuk berdagang.

Jelas sekali, kita hanya perlu mengira keuntungan semasa perbandingan, tanpa perlu mengira harga dan jumlah pesanan dari awal.

Oleh itu, dalam pengoptimuman, anda boleh membahagikan fungsi keuntungan dan pengundian menjadi dua fungsi. Pertama, panggil fungsi keuntungan untuk mendapatkan keuntungan dari setiap laluan, dan kemudian pilih yang paling besar untuk melakukan transaksi. Dengan itu, secara logik, fungsi pengundian akan dipanggil dari setiap putaran, menjadi hanya dipanggil sekali. Kerumitan masa berubah dari O (((2n untuk O (((n + 1), n untuk jumlah keseluruhan laluan keuntungan.

Kemudian jika kita menganalisis kod lebih lanjut, kita mendapati bahawa dalam keadaan biasa, kerana terdapat pekerja yang lain, apabila satu laluan menguntungkan, ia seringkali menguntungkan oleh orang lain. Oleh itu, sangat sukar untuk terdapat banyak laluan yang menguntungkan pada masa yang sama.

Jadi kita boleh mengoptimumkan lagi strategi ini, menetapkan satu lingkaran, lingkaran ini ditambah dengan if statement, jika terdapat jalan yang mendapat keuntungan, maka break out, dan kemudian mengira jumlah pesanan dan harga untuk jalan itu.

Kemudian kerumitan akan disederhanakan lagi dari O ((n + 1) kepada O ((m + 1), m < n. Apabila peluang pertukaran sama, m kira-kira sama dengan n / 2, iaitu kerumitan dikurangkan kepada O ((n / 2 + 1).

Dengan menggunakan fungsi pembahagian yang mudah, struktur optimasi logik dapat dianalisis untuk mengurangkan kerumitan masa dari O ((2n) kepada O ((n/2+1)).

Sebenarnya, terdapat banyak situasi yang boleh dioptimumkan semasa menulis kod, dan saya sering mendapati bahawa logik pengoptimuman terdapat kemungkinan untuk mengoptimumkan O ((n!) kepada O ((n* ((n+1)); kadang-kadang logik yang hanya perlu beberapa ratus milidetik untuk selesai dioptimumkan dalam masa 1ms.

Sebagai satu perkara yang boleh mengurangkan selang waktu yang sedikit, saya cadangkan anda mengoptimumkan struktur kod anda.


Lebih lanjut

Pisau tulangAdakah anda boleh memberitahu saya bagaimana untuk mengelakkan keadaan kaki satu dengan cara yang berkesan?

PuteriPenangguhan pesanan yang tiba di bursa

Allez-zAdakah penundaan itu merujuk kepada penundaan data mendalam?

PuteriMencatatkan kelewatan, melebihi satu nilai, tidak berlaku.