Mengalokasikan ruang untuk daftar kosong dengan python dalam waktu O(1) [duplikat]

Saya memiliki situasi di mana saya memiliki rentang input tertentu dan dengan demikian, saya dapat melakukan pengindeksan seluruhnya di O(1) dengan membuat daftar yang merupakan ukuran rentang input dan mengindeks input itu sendiri. Untuk lebih jelasnya, pada dasarnya saya memiliki situasi berikut

a = "inputrange"
rng = ord(max(a)) - ord(min(s))
data = [None] * rng

Masalah saya adalah, saya tidak yakin apakah proses alokasi untuk data adalah O(1) atau tidak. Secara intuitif, harus ada beberapa cara untuk melakukannya di O(1), karena pada tumpukan saya hanya mendefinisikan titik awal dan akhir untuk data, dan dengan demikian hanya memerlukan waktu O(1) untuk mengalokasikan, tetapi python agak dihapus dari ini jadi saya tidak yakin.

Sangat penting saya dapat mengalokasikan di O(1), karena saya membuat pohon sufiks untuk data masukan, dan untuk memastikan pengindeksan O(1) saat melintasi pohon, saya memerlukan daftar ukuran alfabet (atau peta hash , meskipun saya menghindarinya), tetapi karena pada dasarnya saya mengalokasikan untuk setiap sufiks, saya perlu mengalokasikan agar konstan.

Ide lain yang saya miliki adalah membuat daftar templat dan menyalinnya, tetapi penyalinan memerlukan waktu O(n) sehingga tidak akan berhasil.

EDIT: Ini bukan duplikat dari kompleksitas waktu [var]*n, saya dengan jelas menyatakan bahwa saya sedang mencari cara untuk membuat daftar alokasi memori di O(1). Hanya karena saya kebetulan menggunakan [var]*n sebagai metode saya saat ini dalam mengalokasikan memori ini, tidak berarti jawabannya terjawab dengan mengetahui kompleksitas metode ini.

Pertanyaannya masih tetap: Apakah ada cara mengalokasikan ruang untuk daftar kosong dengan python dalam waktu O(1)


person Recessive    schedule 21.04.2021    source sumber
comment
Alokasinya harus O(1). Ia tahu persis seberapa besar yang dibutuhkan dari penggandaan tersebut, sehingga tidak perlu mengembangkannya secara bertahap.   -  person Barmar    schedule 21.04.2021
comment
Perhatikan bahwa meskipun alokasi memori adalah O(1), memasukkan None ke dalam setiap elemen adalah O(n).   -  person Barmar    schedule 21.04.2021
comment
Anda benar-benar harus berhenti menganggap objek Python list sebagai array primitif C. [None] * rng adalah operasi waktu linier. Tapi tidak ada jalan keluarnya. Alternatifnya, pertimbangkan numpy dan numpy.empty   -  person juanpa.arrivillaga    schedule 21.04.2021
comment
Sekali lagi, tidak ada cara untuk melakukan apa yang Anda inginkan dengan daftar Python. Tidak ada konsep alokasi memori, Anda membuat objek daftar. Jika Anda memerlukan objek daftar dengan ukuran tertentu, objek tersebut selalu memerlukan operasi O(N), dengan N adalah ukuran daftar tersebut. Catatan, [None]*n adalah tidak kosong (kecuali n ==0), [] adalah daftar kosong, [None, None, None] tidak   -  person juanpa.arrivillaga    schedule 21.04.2021