সময় সম্পর্কে কিছু নোট:
যদি আপনি একটি তালিকা দিয়ে শুরু করেন তবে আপনি l.append(l.pop(0))
ব্যবহার করতে পারেন এমন দ্রুত পদ্ধতি। এটি একা সময় জটিলতার সাথে দেখানো যেতে পারে:
- deque.rotate হল ও (কে) (কে = উপাদানগুলির সংখ্যা)
- যোগ্য রূপান্তরকরণের তালিকাটি হ'ল ও (এন)
- list.append এবং list.pop উভয়ই (1)
সুতরাং আপনি যদি কোনও deque
জিনিস দিয়ে শুরু করে থাকেন তবে আপনি deque.rotate()
ও (কে) এর ব্যয় করতে পারেন । তবে, যদি সূচনা পয়েন্টটি একটি তালিকা হয় তবে ব্যবহারের সময় জটিলতা deque.rotate()
হ'ল হে (এন)। l.append(l.pop(0)
ও (1) এ দ্রুত
কেবলমাত্র উদাহরণের জন্য, 1M পুনরাবৃত্তির উপর কয়েকটি নমুনার সময় এখানে দেওয়া হয়েছে:
ধরণের রূপান্তর প্রয়োজন এমন পদ্ধতিগুলি:
deque.rotate
ডেক অবজেক্ট সহ: 0.12380790710449219 সেকেন্ড (দ্রুততম)
deque.rotate
ধরণের রূপান্তর সহ: 6.853878974914551 সেকেন্ড
np.roll
এনপ্যারে সহ: 6.0491721630096436 সেকেন্ড
np.roll
ধরণের রূপান্তর সহ: 27.558452129364014 সেকেন্ড
তালিকা এখানে তালিকাভুক্ত:
l.append(l.pop(0))
: 0.32483696937561035 সেকেন্ড (দ্রুততম)
- "
shiftInPlace
": 4.819645881652832 সেকেন্ড
- ...
ব্যবহৃত টাইমিং কোডটি নীচে।
collections.deque
তালিকাগুলি থেকে ডিয়াক তৈরি করা হ'ল ও (এন):
from collections import deque
import big_o
def create_deque_from_list(l):
return deque(l)
best, others = big_o.big_o(create_deque_from_list, lambda n: big_o.datagen.integers(n, -100, 100))
print best
# --> Linear: time = -2.6E-05 + 1.8E-08*n
আপনার যদি ডিউক অবজেক্ট তৈরি করা দরকার:
1 এম পুনরাবৃত্তি @ 6.853878974914551 সেকেন্ড
setup_deque_rotate_with_create_deque = """
from collections import deque
import random
l = [random.random() for i in range(1000)]
"""
test_deque_rotate_with_create_deque = """
dl = deque(l)
dl.rotate(-1)
"""
timeit.timeit(test_deque_rotate_with_create_deque, setup_deque_rotate_with_create_deque)
আপনার যদি ইতিমধ্যে উপযুক্ত বস্তু থাকে:
1 এম পুনরাবৃত্তি @ 0.12380790710449219 সেকেন্ড
setup_deque_rotate_alone = """
from collections import deque
import random
l = [random.random() for i in range(1000)]
dl = deque(l)
"""
test_deque_rotate_alone= """
dl.rotate(-1)
"""
timeit.timeit(test_deque_rotate_alone, setup_deque_rotate_alone)
np.roll
আপনার যদি nparrays তৈরি করা প্রয়োজন
1 এম পুনরাবৃত্তি @ 27.558452129364014 সেকেন্ড
setup_np_roll_with_create_npa = """
import numpy as np
import random
l = [random.random() for i in range(1000)]
"""
test_np_roll_with_create_npa = """
np.roll(l,-1) # implicit conversion of l to np.nparray
"""
আপনার যদি ইতিমধ্যে এনপ্যারে থাকে:
1 এম পুনরাবৃত্তি @ 6.0491721630096436 সেকেন্ড
setup_np_roll_alone = """
import numpy as np
import random
l = [random.random() for i in range(1000)]
npa = np.array(l)
"""
test_roll_alone = """
np.roll(npa,-1)
"""
timeit.timeit(test_roll_alone, setup_np_roll_alone)
"স্থান পরিবর্তন"
কোনও ধরণের রূপান্তর প্রয়োজন
1 এম পুনরাবৃত্তি @ 4.819645881652832 সেকেন্ড
setup_shift_in_place="""
import random
l = [random.random() for i in range(1000)]
def shiftInPlace(l, n):
n = n % len(l)
head = l[:n]
l[:n] = []
l.extend(head)
return l
"""
test_shift_in_place="""
shiftInPlace(l,-1)
"""
timeit.timeit(test_shift_in_place, setup_shift_in_place)
l.append (l.pop (0))
কোনও ধরণের রূপান্তর প্রয়োজন
1 এম পুনরাবৃত্তি @ 0.32483696937561035
setup_append_pop="""
import random
l = [random.random() for i in range(1000)]
"""
test_append_pop="""
l.append(l.pop(0))
"""
timeit.timeit(test_append_pop, setup_append_pop)