Rumah > pembangunan bahagian belakang > Golang > Apakah Kerumitan Masa `tambah` dalam Go?

Apakah Kerumitan Masa `tambah` dalam Go?

DDD
Lepaskan: 2024-12-17 16:52:17
asal
506 orang telah melayarinya

What is the Time Complexity of `append` in Go?

Tambah Kerumitan dalam Go

Masalah:

Apakah kerumitan pengiraan bagi gelung berikut dalam Go?

var a []int
for i := 0 ; i < n ; i++ {
  a = append(a, i)
}
Salin selepas log masuk

Adakah tambahan beroperasi dalam masa linear, atau dalam pemalar terlunas masa?

Jawapan:

Spesifikasi Bahasa Pengaturcaraan Go menyatakan bahawa tambah melakukan pengagihan semula jika perlu:

If the capacity of s is not large enough to fit the additional values, append allocates a new, sufficiently large slice that fits both the existing slice elements and the additional values. Thus, the returned slice may refer to a different underlying array.
Salin selepas log masuk

Walau bagaimanapun, algoritma khusus untuk kembangkan kepingan sasaran apabila perlu adalah bergantung kepada pelaksanaan. Untuk pengkompil gc semasa, algoritma dilunaskan masa malar.

Penjelasan Masa Malar Dilunaskan:

Kapasiti hirisan ditingkatkan dengan cara yang tamak:

  • Jika kapasiti lama lebih besar daripada dua kali ganda kapasiti lama, kapasiti baharu ditetapkan kepada kapasiti lama kapasiti.
  • Jika tidak, jika panjang lama kurang daripada 1024, kapasiti baharu ditetapkan untuk menggandakan kapasiti lama.
  • Jika tidak, kapasiti baharu dinaikkan sebanyak satu perempat sehingga ia berada pada sekurang-kurangnya saiz kapasiti lama.

Pendekatan ini memastikan bahawa jumlah masa yang dibelanjakan untuk memperuntukkan semula dilunaskan kepada O(n), di mana n ialah panjang kepingan yang terhasil.

Pertimbangan Pelaksanaan:

Spesifikasi bahasa Go membolehkan pelaksanaan lampiran yang berbeza. Sebagai contoh, pelaksanaannya mungkin murah hati (memperuntukkan lebih daripada jumlah minimum yang diperlukan) atau parsimonious (memperuntukkan jumlah minimum yang diperlukan). Pengkompil Go gc menggunakan algoritma masa malar terlunas tatasusunan dinamik yang besar.

Ringkasan:

Kerumitan penambahan dalam Go bergantung pada pelaksanaan. Walau bagaimanapun, pelaksanaan biasa seperti pengkompil Go gc dan gccgo menggunakan algoritma masa malar terlunas.

Atas ialah kandungan terperinci Apakah Kerumitan Masa `tambah` dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan