নির্বিচারে নির্ভুলতা পূর্ণসংখ্যার বর্গমূলের অ্যালগরিদম?


9

nকিছুটা পূর্ণসংখ্যার বর্গমূলের তল গণনা করার জন্য কি কোনও পরিচিত সাবক্যাড্র্যাটিক অ্যালগরিদম রয়েছে ?

নিষ্পাপ অ্যালগরিদম এমন কিছু হবে

def sqrt(x):
    r = 0
    i = x.bit_length() // 2
    while i >= 0:
        inc = (r << (i+1)) + (1 << (i*2))
        if inc <= x:
            x -= inc
            r += 1 << i
        i -= 1
    return r

এটি O(n)পুনরাবৃত্তি গ্রহণ করে , প্রত্যেকে O(n)সময় যুক্ত হওয়া সংযোজনগুলির সাথে যুক্ত হয় , সুতরাং এটি O(n^2)সামগ্রিকভাবে সময়। দ্রুত কিছু আছে? আমি জানি যে সংখ্যাবৃদ্ধির ক্ষেত্রে এমন বিশেষ অ্যালগরিদম রয়েছে যা চতুর্ভুজ সময়ের চেয়ে ভাল করে তবে আমি বর্গমূলের জন্য কিছুই খুঁজে পাচ্ছি না।


সম্পর্কিত কিছুতে আমার উত্তর হয়ত cs.stackexchange.com/a/37338/12052 এ সহায়তা করতে পারে । কেবল সমস্যাটি হ'ল প্রয়োজনীয় সমীকরণের একটি অংশ যা আপনার যথাযথতাটি তাত্ক্ষণিকভাবে অনুভব করতে হবে find
ফ্রান্সেস্কো গ্র্যামানো

@ ফ্রেঞ্চসকো গ্র্যামানো: দুঃখিত, আমি মনে করি না যে এটি সাহায্য করে।
আর্যভাত

বিটিডব্লিউ, এই উপ-চতুষ্কোণ প্রয়োজনীয়তা একটি বড় সমস্যার অংশ? কারণ সাধারণ চতুষ্কোণ এবং জটিল সাব-কোয়াড্র্যাটিকের মধ্যে পার্থক্যটি বাস্তবে এত বড় নাও হতে পারে। নাকি এটি কেবল তাত্ত্বিক আগ্রহ?
আর্যভাটা

@ আর্যভট্ট দুঃখিত আমি আপনার মন্তব্যটি আগে দেখিনি। না এটি কোনও বড় সমস্যার অংশ নয়, কেবল কৌতূহল।
এন্টিমোনি

উত্তর:


5

বহুবর্ষের শিকড়গুলির সান্নিধ্য পেতে আপনি নিউটনের পদ্ধতি বা অন্যান্য যে কোনও পদ্ধতি ব্যবহার করতে পারেনp(x)=x2c

নিউটনের পদ্ধতির জন্য কনভার্জেন্সের হারটি চতুর্ভুজ হবে, যার অর্থ প্রতিটি বিবর্তনে সঠিক বিটগুলির সংখ্যা দ্বিগুণ double এর অর্থO(lgn) নিউটনের পদ্ধতির পুনরাবৃত্তি যথেষ্ট।

নিউটনের পদ্ধতির গণনাগুলির প্রতিটি পুনরাবৃত্তি

xj+1=xj(xj2c)/(2xj)=0.5xj+c2xj.

গুণনের বিট জটিলতা O (blgb), দুই গুণ করতে bবিট পূর্ণসংখ্যা (উপেক্ষা করা) lglgbকারণের)। বিভাগের জন্য বিট জটিলতা (থেকে)bযথার্থ বিট) একই। সুতরাং, প্রতিটি পুনরাবৃত্তি মধ্যে গণনা করা যেতে পারেO (nlgn)অপারেশন। দ্বারা গুণাO(lgn) পুনরাবৃত্তি, আমরা দেখতে পাই যে সামগ্রিক চলমান সময়টি বর্গমূলকে গণনা করতে n যথার্থ বিট হয় O (n(lgn)2)। এটি উপ-চতুষ্কোণ।

আমি মনে করি আরও সতর্ক বিশ্লেষণ দেখায় যে এটি উন্নত হতে পারে O (nlgn) চলমান সময় (আমরা কেবল প্রত্যেকটি জানা দরকার তা বিবেচনা করে) xj প্রায় মধ্যে j যথার্থ বিট, বরং nনির্ভুলতা বিট)। যাইহোক, এমনকি আরও বেসিক বিশ্লেষণ ইতিমধ্যে একটি চলমান সময় দেখায় যা স্পষ্টত subquadratic।


বাইনারি একটি পরিচয় ব্যবহার করে একটি দুর্দান্ত প্রাথমিক অনুমান আছে x1/2=21/2log2x। লগটি গণনা করার পরিবর্তে, প্রায় অনুমান করা যায়log2x সংখ্যা সংখ্যা হিসাবে x। যেমন,log21010116
নিক অ্যালগার

@ ডিডাব্লু: তবে আমরা কি কোনও পূর্ণসংখ্যার বর্গমূল খুঁজছি না? আপনি যদি কেবলমাত্র পূর্ণসংখ্যার গাণিতিক ব্যবহার করে নিউটনের পদ্ধতির পুনরাবৃত্তিটি করেন তবে আমাদের জন্য আরও কিছু যুক্তিযুক্ত হওয়া প্রয়োজনO(logn)দাবি, আমরা না? অন্যথায়, আমরা ইতিমধ্যে পর্যাপ্ত পরিমাণে নির্ভুলতা ধরে নিচ্ছি ... দুঃখিত যদি আমি স্পষ্ট কিছু মিস করছি।
আর্যভাটা

@ ডিডাব্লু: "নিউটনের পদ্ধতির জন্য কনভার্জেন্সের হার" যদি চতুর্ভুজ হবে না c=0, এবং আমি জানি না যে এর মানগুলির জন্য কী ঘটে c এটি অ-নেতিবাচক বাস্তব নয়। গুণনের বিট জটিলতার জন্য আপনার অনুমানটি আপনার নীচের মন্তব্যগুলির পরামর্শের চেয়ে আরও শক্ত এছাড়াও, আমাদের "প্রত্যেকটি জানা দরকার xj প্রায় "মধ্যে 2j "যথাযথ বিট"।

@ আর্যভাটা: আমরা পুরোপুরি "একটি পূর্ণসংখ্যার বর্গমূলের সন্ধান করছি না"; আমরা "বর্গমূলের মেঝে" খুঁজছি। পূর্ণসংখ্যার গাণিতিক সমস্যা সম্পর্কে আপনি ঠিক বলেছেন, যদিও একই বিট জটিলতাগুলি ভাসমান-পয়েন্ট অপারেশনের জন্য ধারণ করে।

1
@ রিকিডিমার, হ্যাঁ, c=0 একটি বিশেষ ক্ষেত্রে, কারণ তারপরে মূল p(x) বহুগুণ আছে 2, কিন্তু যখন c>0তাই নিউটনের পদ্ধতি, রুট সংখ্যাধিক্য 1 গেছে নেই দ্বিঘাত অভিসৃতি আছে। আমি ধরে নিয়েছি যে এর স্কোয়ার রুট গণনা করার জন্য নিউটনের পদ্ধতিটি কেউ ব্যবহার করবে নাc=0(কারণ শূন্যের বর্গমূল স্পষ্টতই শূন্য)। তাই কি আপনি বলতে চেষ্টা করছেন? আপনার মন্তব্যটি কি এমন একটি তুচ্ছ মন্তব্য যা আমার উত্তরে এমন কিছু যুক্ত করে সম্বোধন করা হয়েছে যা "শূন্যের বর্গমূল" স্পেশাল-কেস বলে, বা এখানে আরও গভীর কিছু রয়েছে যা আমি অনুপস্থিত?
ডিডাব্লু

7

নিউটনের পদ্ধতির অন্যতম সমস্যা হ'ল এটির প্রতিটি পুনরাবৃত্তিতে একটি বিভাগ অপারেশন প্রয়োজন যা ধীরতম বেসিক সংখ্যার অপারেশন।

পারস্পরিক বর্গমূলের জন্য নিউটনের পদ্ধতিটি অবশ্য তা নয়। যদিx আপনি যে নম্বরটি খুঁজতে চান তা হ'ল 1x, পুনরাবৃত্তি:

ri+1=12ri(3xri2)

এটি প্রায়শই প্রকাশ করা হয়:

wi=ri2
di=1wix
ri+1=ri+ridi2

এটি তিনটি গুণনের কাজ। দুটি দ্বারা বিভাজনটি শিফট-রাইট হিসাবে প্রয়োগ করা যেতে পারে।

এখন সমস্যা হচ্ছে rকোনও পূর্ণসংখ্যা নয়। যাইহোক, আপনি এটিকে হ'ল ফ্লোটিং-পয়েন্টটি ম্যানুয়ালি প্রয়োগ করে এবং যখন উপযুক্ত হবে তখন ক্ষতিপূরণ দেওয়ার জন্য একগুচ্ছ শিফট অপারেশন করে এটি পরিচালনা করতে পারেন।

প্রথমে, পুনরুদ্ধার করা যাক x:

x=22ex

যেখানে আমরা চাই x থেকে বড় হতে হবে, কিন্তু কাছাকাছি, 1। যদি আমরা উপরের অ্যালগরিদমটি চালিয়ে যাইx পরিবর্তে x, আমরা খুঁজি r=1x। তারপর,x=2erx

এখন বিভক্ত করা যাক r একটি ম্যান্টিসা এবং সূচক:

ri=2eiri

কোথায় riএকটি পূর্ণসংখ্যা intuitively,ei উত্তরের যথার্থতা উপস্থাপন করুন।

আমরা জানি যে নিউটনের পদ্ধতিটি সঠিক তাৎপর্যপূর্ণ অঙ্কের সংখ্যা দ্বিগুণ করে। সুতরাং আমরা চয়ন করতে পারেন:

ei+1=2ei

একটু হেরফের দিয়ে আমরা পাই:

ei+1=2ei
wi=ri2
xi=x22eei+1
di=2ei+1wixi2ei+1
ri+1=2eiriridi2ei+1

প্রতিটি পুনরাবৃত্তিতে:

xrix2e+ei

উদাহরণ হিসাবে, আসুন এর বর্গমূল গণনা করার চেষ্টা করি x=263। আমরা উত্তরটি জানতে পারি যে2312। পারস্পরিক বর্গমূল হয়12231, তাই আমরা সেট করব e=31 (এটি সমস্যার স্কেল) এবং আমাদের প্রাথমিক অনুমানের জন্য আমরা বাছাই করব r0=3 এবং e0=2। (এটি, আমরা বাছাই34 আমাদের প্রাথমিক অনুমানের জন্য 12।)

তারপর:

e1=4,r1=11
e2=8,r2=180
e3=16,r3=46338
e4=32,r4=3037000481

তুলনা করে পুনরাবৃত্তি থামাতে কখন আমরা কাজ করতে পারি ei প্রতি e; যদি আমি সঠিকভাবে গণনা করি,ei>2eযথেষ্ট ভাল হওয়া উচিত। যদিও আমরা এখানে থামব এবং খুঁজে পাব:

2633037000481×263231+32=3037000481

সঠিক পূর্ণসংখ্যার বর্গমূল হল 3037000499, তাই আমরা খুব কাছাকাছি। আমরা অন্য পুনরাবৃত্তি করতে পারি, বা একটি অনুকূলিত চূড়ান্ত পুনরাবৃত্তি করতে পারি যা দ্বিগুণ হয় নাei। বিশদটি অনুশীলন হিসাবে রেখে গেছে।

এই পদ্ধতির জটিলতা বিশ্লেষণ করতে, নোট করুন যে দুটি গুণ করে bবিট পূর্ণসংখ্যার লাগে O(blogb)অপারেশন। যাইহোক, আমরা জিনিস যাতে সাজানো হয়েছেri<2ei। সুতরাং গণনা করার গুণwi দুই গুণ eiবিট সংখ্যা একটি উত্পাদন ei+1-বিট সংখ্যা এবং অন্যান্য দুটি গুণ দুটিকে গুণ করে ei+1বিট সংখ্যা একটি উত্পাদন 2ei+1বিট নম্বর।

প্রতিটি ক্ষেত্রে, পুনরাবৃত্তির জন্য অপারেশনগুলির সংখ্যা O(eilogei), এবং সেখানে O(loge)পুনরাবৃত্তি প্রয়োজন। এর চূড়ান্ত গুণটি orderO(2elog2e)অপারেশন। সামগ্রিক জটিলতা হয়O(elog2e) ক্রিয়াকলাপ, যা বিটের সংখ্যায় উপ-চতুর্ভুজ x। যা সব বাক্সে টিক দেয়।

যাইহোক, এই বিশ্লেষণটি একটি গুরুত্বপূর্ণ নীতিটি গোপন করে যা বৃহত পূর্ণসংখ্যার সাথে কাজ করে প্রত্যেকের মনে রাখা উচিত: যেহেতু গুণগুলি বিটের সংখ্যায় সুপারলাইনার হয়, যে কোনও গুণগুলি কেবলমাত্র পূর্ণসংখ্যার উপরই সঞ্চালিত হওয়া উচিত যার বর্তমান সর্বাধিক পরিমাণের দৈর্ঘ্য প্রায় (এবং , আমি যুক্ত করতে পারি, আপনার সংখ্যাগুলি একসাথে গুন করার চেষ্টা করা উচিত যার আকারের সাথে একই ক্রম রয়েছে)। এর চেয়ে বড় পূর্ণসংখ্যা ব্যবহার করা হ'ল প্রচেষ্টার অপচয়। ধ্রুবক ফ্যাক্টরগুলি গুরুত্বপূর্ণ এবং বৃহত্তর পূর্ণসংখ্যার জন্য এগুলি অনেক গুরুত্বপূর্ণ।

চূড়ান্ত পর্যবেক্ষণ হিসাবে, গুণগুলির মধ্যে দুটি ফর্মের ab2c। স্পষ্টতই এটির সমস্ত বিট গণনা করা অপব্যয়ab শুধু নিক্ষেপ করা cতাদের মধ্যে একটি ডান শিফট সঙ্গে দূরে। একটি স্মার্ট গুণ গুণ পদ্ধতি যা এটি বিবেচনায় নিয়েছে তা প্রয়োগ করাও অনুশীলন হিসাবে বাকী রয়েছে।


এটি দুর্দান্ত জিনিস। যদিও একটি মন্তব্য: বিভাজনের বিট-জটিলতা প্রায় গুণফলের বিট-জটিলতার মতো নয়? সুতরাং আপনি এমন কিছু সম্পর্কে কথা বলছেন যা একটি ধ্রুবক ফ্যাক্টর উন্নতি করে, একটি অ্যাসিম্পোটিক উন্নতি করে না, তাই না? এটি আপনার উত্তর থেকে সম্পূর্ণ পরিষ্কার ছিল না।
DW

আপনি বলছেন যে দুটি গুণ bবিট পূর্ণসংখ্যার লাগে O(blgb)বিট অপারেশন। আমি মনে করি সঠিক উত্তরটি এরকম কিছুO(blgb(lglgb)O(1))(ডান?)। আপনি পলি-লগ-লগ উপাদানগুলি (যেমন, আপনার বড় হে, বা কোনও কিছুর উপরে টিল্ড লাগিয়ে) উপেক্ষা করছেন তা নির্দেশ করতে চাইতে পারেন।
ডিডাব্লিউ

1
@ ডিডাব্লু: না, তিনি বলেছেন যে "দু'গুণ বাড়ছে bবিট পূর্ণসংখ্যার লাগে O(blogb) অপারেশন। " "বিট" শব্দটি কেবল এতে একবার উপস্থিত হয়; অন্যথায় আমি ইতিমধ্যে এটি নির্দেশ করতাম।

হ্যাঁ, এটি ধ্রুবক বিষয়গুলির বিষয়। সেরা বড় পূর্ণসংখ্যা বিভাগের অ্যালগরিদমগুলি সম্পূর্ণ অ্যালগরিদমের সাথে অনুরূপ একটি প্রযুক্তি ব্যবহার করে যেমন নিউটন-রাফসন পুনরাবৃত্তি এবং প্রতিটি পুনরাবৃত্তির কার্যকর নির্ভুলতা দ্বিগুণ করে। ধ্রুবক কারণগুলির উপর একটি নিউটন-রাফসন লুপের পাইলগুলির মধ্যে একটি নিউটন-রাফসন লুপ! রিকি ডেমার সঠিক; আমি র‌্যাম মডেল শব্দটিতে ভাবছিলাম। আমার সম্ভবত এটি উল্লেখ করা উচিত ছিল।
ছদ্মনাম
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.