দেখে মনে হবে এই সমস্যাটি পূর্ণসংখ্যা / বহুভুজ স্কোয়ারিংয়ের সমতুল্য:
1. এটি বহুল পরিমাণ গুণফল পূর্ণসংখ্যার গুণকের সমান বলে জানা যায় ।
২ স্পষ্টতই, আপনি ইতিমধ্যে সমস্যাটিকে বহুবর্ষ / পূর্ণসংখ্যার স্কোয়ারিংয়ে কমিয়ে দিয়েছেন; সুতরাং এই সমস্যাটি স্কোয়ারিংয়ের মতো সর্বাধিক শক্ত।
এখন আমি এই সমস্যার পূর্ণসংখ্যা স্কোয়ারিং হ্রাস করব:
মনে করুন আপনার একটি অ্যালগোরিদম ছিল:
F(a⃗ )→P2(x),where P(x)=∑ai∈a⃗ xai
এই অ্যালগরিদমটি মূলত আপনার প্রশ্নের আপনার অনুরোধ করা অ্যালগরিদম। সুতরাং, যদি আমার কাছে এমন কোনও যাদু অ্যালগরিদম থাকে যা এটি করতে পারে তবে আমি একটি ফাংশন তৈরি করতে পারি, যা পূর্ণসংখ্য y এর বর্গাকার করবে ( ওঁ হ্যাঁ, আমি গণিতকে ভালবাসি: পি ):SQUARE(y)y
1.:2.:3.:4.:5.:6.:7.:8.:9.:10.:11.:12.:13.:Algorithm 1 Squaringprocedure SQUARE(y):a⃗ ←()i←0while y≠0 doif y & 1 thena⃗ ←a⃗ iend ifi←i+1y←y≫1end whileP2(x)←F(a⃗ )return P2(2)end procedure▹ a⃗ starts as empty polynomial sequence▹ break y down into a polynomial of base 2▹ if lsb of y is set▹ append i to a⃗ (appending xi)▹ shift y right by one▹ obtain the squared polynomial via F(a⃗ )▹ simply sum up the polynomial
পাইথন ( কোডপ্যাড দিয়ে পরীক্ষা ):
#/cs//q/11418/2755
def F(a):
n = len(a)
for i in range(n):
assert a[i] >= 0
# (r) => coefficient
# coefficient \cdot x^{r}
S = {}
for ai in a:
for aj in a:
r = ai + aj
if r not in S:
S[r] = 0
S[r] += 1
return list(S.items())
def SQUARE(x):
x = int(x)
a = []
i = 0
while x != 0:
if x & 1 == 1:
a += [i]
x >>= 1
i += 1
print 'a:',a
P2 = F(a)
print 'P^2:',P2
s = 0
for e,c in P2:
s += (1 << e)*c
return s
৩. সুতরাং, স্কোয়ারিং এ সমস্যাটি যতটা শক্ত।
4. সুতরাং, পূর্ণসংখ্যা স্কোয়ারিং এই সমস্যার সমতুল্য। (তারা ( 2 , 3 , 1 ) এর কারণে একে অপরের তুলনায় সবচেয়ে কঠোর )
O(nlogn)O(nlognloglogn)O(nlogn2O(log∗n))Ω(nlogn)
O(nlogn)
৫. এখন, আপনার সমস্যাটি হুবহু গুণ নয়, এটি স্কোয়ারিং। সুতরাং স্কোয়ারিং সহজ? ঠিক আছে, এটি একটি উন্মুক্ত সমস্যা (এখনকার জন্য নয় ) : স্কোয়ারিংয়ের গুণণের চেয়ে দ্রুত অ্যালগরিদম আছে বলে জানা যায় না। আপনি যদি গুণটির ব্যবহারের চেয়ে আপনার সমস্যার জন্য আরও ভাল অ্যালগরিদম খুঁজে পেতে পারেন; তাহলে এটি সম্ভবত একটি যুগান্তকারী হবে।
এখন হিসাবে আপনার উভয় প্রশ্নের উত্তর হ'ল: না , এখন পর্যন্ত সমস্ত ~ও (এনলগ)এন )গুণের অ্যালগোরিদমগুলি এফএফটি ব্যবহার করে; এবং এখন স্কোয়ারিং গুণফল হিসাবে শক্ত। এবং না , যদি না স্কোয়ারিংয়ের জন্য একটি দ্রুত অ্যালগরিদম না পাওয়া যায়, বা গুণনটি ব্রেক হয়ও (এনলগ)এন ) বাধা, আপনার সমস্যাটির চেয়ে দ্রুত সমাধান করা যায় না ও (এনলগ)এন ); আসলে, এটি বর্তমানে সমাধান করা যায় নাও (এনলগ)এন ) উভয়ই, সেরা গুণিত অ্যালগরিদম হিসাবে কেবল সেই জটিলতার দিকেই যায়।