মধ্যে গুণ


10

আমি এখানে সন্ধান করছিলাম এবং আমি লক্ষ্য করেছি যে দুটি বিট সংখ্যার গুণনের জন্য সেরা রানটাইম হ'ল , তবে আমি সহজেই একটি লক্ষ্য করতে পারি সঞ্চালিত অ্যালগরিদম ।nO(nlogn2O(logn)O(nlogn)

সব পরে, আমরা জানতে পারি কিভাবে সংখ্যাবৃদ্ধি ডিগ্রী থেকে দুই polynomials করার মধ্যে রানটাইম। বহুভুজের বহুগুণকে দুটি বিট সংখ্যাকে গুণ করা সমান । সুতরাং দুটি বিট সংখ্যাকে গুণিত করার জন্য আমাদের কাছে একটি অ্যালগরিদম রয়েছে । এখন কেবলমাত্র সমস্যাটি দেখা দিতে পারে তবেই হ'ল ক্যারি, তবে প্রতিটি পর্যায়ে আমরা সময়ে এটি ঠিক করতে পারি , কেবলমাত্র শেষতম বিন্দুতে এবং এর বাম-প্রতিবেশীর উপরে চলে। অর্থাৎ, আমাদের রানটাইম ।nO(nlogn)nnO(nlogn)O(n)O(nlogn)

তাহলে আমি কী নতুন (এবং বেশ স্পষ্ট) আবিষ্কার করেছি? নাকি উইকিপিডিয়া পৃষ্ঠাটি পুরানো? নাকি আমার কিছু ভুল আছে?


পথ যে "আমরা জানি" "সংখ্যাবৃদ্ধি দুই ডিগ্রী থেকে polynomials কী মধ্যে রানটাইম"? nO(nlogn)

উত্তর:


8

@ ডেভিডরিচারি যেমন ইতিমধ্যে উল্লেখ করেছেন, বিভ্রান্তি দেখা দিয়েছে কারণ বিভিন্ন জটিলতার ব্যবস্থা মেশানো হচ্ছে। তবে আমাকে কিছুটা বিস্তারিত জানাতে দিন।

সাধারণত, স্বেচ্ছাসেবী রিংগুলির উপরে বহুভুজ গুণনের জন্য অ্যালগরিদমগুলি অধ্যয়ন করার সময়, কোনও একটি অ্যালগরিদম ব্যবহার করে সেই রিংটিতে অঙ্কের গাণিতিক ক্রিয়াকলাপগুলির বিষয়ে আগ্রহী। বিশেষত, কিছু (চলমান, একক) রিং , এবং দুটি [বহুবর্ষীয় এর চেয়ে কম ডিগ্রি , স্নেহেজ-স্ট্র্যাসেন অ্যালগরিদমের প্রয়োজন multiplications এবং সংযোজন গনা অনুক্রমে দ্বারা, প্রায়, সংলগ্ন করতে ঐক্যের -th আদিম শিকড় কিছু বড় রিং পেতে এবং তারপর, ফাস্ট ব্যবহার ফুরিয়ার ট্রান্সফর্ম ওভারRf,gR[X]nO(nlognloglogn)RfgR[X]nRDRD, পণ্যটির কম্পিউটিং করা ।D

যদি আপনার রিংটিতে unityক্যের একটি তম মূল থাকে, তবে এটি সরাসরি উপর দ্রুত ফুয়ুরি ট্রান্সফর্ম ব্যবহার করে ক্রিয়াকলাপ পর্যন্ত বাড়ানো যায় । আরও সুনির্দিষ্টভাবে, over এর ওপরে , আপনি রিং অপারেশন ব্যবহার করে এটি করতে পারেন জটিল সংখ্যার তুলনায় সঠিক গাণিতিক প্রয়োজন হবে এই বিষয়টি উপেক্ষা করে)।nO(nlogn)RRZCO(nlogn)

অন্যান্য ব্যবস্থা যা বিবেচনায় নেওয়া যেতে পারে তা হ'ল একটি অপারেশনের সামান্য জটিলতা। আর এই কি আমরা যখন বিট দৈর্ঘ্য দুটি পূর্ণসংখ্যার গুন আগ্রহী হয় । এখানে, আদিম ক্রিয়াকলাপগুলি দুটি সংখ্যা (বহন সহ) যোগ করে দিচ্ছে। সুতরাং, যখন over এর উপর দুটি বহুভুজকে গুণিত করা হয়, তখন আপনাকে প্রকৃতপক্ষে এই বিষয়টি বিবেচনায় নিতে হবে যে গণনার সময় উত্থাপিত সংখ্যাগুলি স্থির সংখ্যক আদিম ক্রিয়াকলাপগুলি ব্যবহার করে গুণ করা যায় না। এটি এবং সত্য যে> জন্য unity ক্যের কোনও তম আদিম মূল নেই আপনাকে অ্যালগরিদম প্রয়োগ করতে বাধা দেয় । আপনি বিবেচনা করে এটি কাটিয়ে উঠতে পারেনnZZnn>2O(nlogn)f,gরিং from থেকে সহগের সাথে, যেহেতু পণ্য বহুবর্ষের গুণফলগুলি এই সীমাটি অতিক্রম করবে না। সেখানে (যখন , আপনি (এর সঙ্গতি বর্গ) দুই একটি শক্তি) একটি হিসাবে ঐক্যের -th রুট, এবং যাও recursively সহগ multiplications জন্য অ্যালগরিদম কল করে, আপনি একটি মোট অর্জন করতে পারেন আদিম (অর্থাত্, বিট) ক্রিয়াকলাপ। এটি তখন পূর্ণসংখ্যার গুণকে বহন করে।Z/2n+1n2nO(nlognloglogn)

উদাহরণস্বরূপ যে রিং অপারেশন এবং আদিম ক্রিয়াকলাপগুলির মধ্যে পার্থক্যের গুরুত্বকে সুন্দরভাবে তুলে ধরে, বহুপদী মূল্যায়নের জন্য দুটি পদ্ধতি বিবেচনা করুন: হর্নার পদ্ধতি এবং এস্ট্রিনের পদ্ধতি। শিঙা বাদক এর পদ্ধতি মূল্যায়ন একটি বহুপদী কিছু পরিচয় শোষণ দ্বারা যখন এস্ট্রিনের পদ্ধতিটি কে দুটি ভাগে ভাগ করে এবং অর্থাৎ, ডিগ্রির শর্তাদি এবং ডিগ্রির শর্তাদিf=i=0nfiXixZ

f(x)=((fnx+fn1)x++)+f0
f
H=i=1n/2fn/2+iXi
L=i=0n/2fiXi
H>n/2Ln/2(ধরুন সরলতার জন্য দু'জনের একটি শক্তি)।n

এর পরে, আমরা নিরূপণ করতে পারেন ব্যবহার এবং যাও recursively অ্যালগরিদম প্রয়োগের।f(x)

f(x)=H(x)xn/2+L(x)

প্রাক্তন, সংযোজন এবং গুণগুলি ব্যবহার করে, সংযোজন এবং গুণাগুলির সংখ্যা (যা রিং অপারেশন) হিসাবে সর্বোত্তম কব্জি হিসাবে প্রমাণিত হয়, পরেরটির আরও বেশি প্রয়োজন (কমপক্ষে )।nn+logn

কিন্তু, বিট অপারেশন স্তরের উপর, এক (বেশ সহজে) দেখাতে পারি যে, সবচেয়ে খারাপ ক্ষেত্রে, Horner এর পদ্ধতি সঞ্চালিত অন্তত আকারের সংখ্যার multiplications , এর নেতৃস্থানীয় অনেক বিট ক্রিয়াকলাপ (এটি ধরে রাখে এমনকি যদি আমরা ধরে নিই যে দুটি বিট সংখ্যা ) তে গুণিত হতে পারে , তবে এস্ট্রিনের স্কিমটি কিছু জন্য ক্রিয়াকলাপ ব্যবহার করে , যা এখন পর্যন্ত অ্যাসেম্পোটোটিকভাবে দ্রুত।n/2n/2Ω(n2)nO(n)O(nlogcn)=O~(n)c>0


9

সময়কে আপনি ডিগ্রি এর দুটি বহুত্ববৃত্তিকে গুণ করতে পারবেন বলে বোঝানো হয়েছে যে, বিশেষত, আপনি অবিচ্ছিন্ন সময়ে ডিগ্রি-শূন্য বহুবচনগুলি, অর্থাৎ ধ্রুবকগুলিকে গুণ করতে পারেন। স্পষ্টতই, সুতরাং, দাবিগুলি " বিট সংখ্যাকে গুণনের সময় নেবে " এবং "বহুগুণ ডিগ্রি- বহুবচনগুলি সময় নেয় " আপেক্ষিক গণনা বিভিন্ন মডেল তাই সরাসরি তুলনাযোগ্য নয়।nO(nlogn)nO(2lognnlogn)nO(nlogn)


5
আমি মনে করি না এই সমস্যা। যদি আমরা সংখ্যাগুলি বহুবচন হিসাবে বিবেচনা করি যার "x" বেস, উদাহরণস্বরূপ 2, তবে সাধারণত আমরা অবিচ্ছিন্ন সময়ে ডিগ্রি-জিরো বহুভুজ (বেসের চেয়ে ছোট সংখ্যা) গুণ করতে পারি । আমি অনুমান করতে পারি যে সমস্যাটি হ'ল ও (এন * লগ এন) এলগরিদম এফএফটি ব্যবহার করে এবং এফএফটি অ্যালগরিদমের অভ্যন্তরে asympototically বৃহত্তর সংখ্যা বেরিয়ে আসতে পারে।
jkff
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.