CTCI'dan kaynaklanan bir sorun üzerinde çalışıyorum.
1. bölümün üçüncü problemi, aşağıdaki gibi bir dizge almanızı gerektirir:
'Mr John Smith '
ve sizden ara boşlukları aşağıdakilerle değiştirmenizi ister %20
:
'Mr%20John%20Smith'
Yazar bu çözümü Python'da O (n) olarak adlandırarak sunuyor:
def urlify(string, length):
'''function replaces single spaces with %20 and removes trailing spaces'''
counter = 0
output = ''
for char in string:
counter += 1
if counter > length:
return output
elif char == ' ':
output = output + '%20'
elif char != ' ':
output = output + char
return output
Benim sorum:
Soldan sağa gerçek dizgide tarama açısından bunun O (n) olduğunu anlıyorum. Ancak Python'daki dizeler değişmez değil mi? Bir dizem varsa ve işleçle ona başka bir dize +
eklersem, gerekli alanı ayırmaz, orijinalin üzerine kopyalamaz ve ardından eklenen dizenin üzerine kopyalamaz mı?
n
Her biri 1 uzunluğunda dizelerden oluşan bir koleksiyonum varsa , o zaman şunu alır:
1 + 2 + 3 + 4 + 5 + ... + n = n(n+1)/2
veya O (n ^ 2) zamanı , evet? Yoksa Python'un eklemeyi nasıl işlediği konusunda yanılıyor muyum?
Alternatif olarak, bana balık tutmayı öğretmeye istekli olsaydın: Bunu kendim bulmaya nasıl giderdim? Resmi bir kaynak olarak Google’a girişimlerimde başarısız oldum. Https://wiki.python.org/moin/TimeComplexity buldum ama bu dizelerde hiçbir şey içermiyor.
urllib.urlencode