সংখ্যার অ্যালগোরিদমে সংখ্যার অবিচ্ছিন্ন উপস্থাপনা কেন নেওয়া হবে না?


15

সিউডো-পলিনোমিয়াল টাইম অ্যালগরিদম হল এমন একটি অ্যালগরিদম যা ইনপুট মান (বিশালতা) এ বহুপদী চলমান সময় থাকে তবে ইনপুট আকারে বিট সংখ্যা চলমান (বিটের সংখ্যা)।

উদাহরণস্বরূপ, কোনও সংখ্যা প্রাইম কিনা তা পরীক্ষার জন্য 2 থেকে n - 1 পর্যন্ত সংখ্যার মধ্য দিয়ে একটি লুপ প্রয়োজন এবং এন মোড আমি শূন্য কিনা তা পরীক্ষা করে দেখুন । তাহলে গেলিক ভাষার হে (1) সময় লাগে সামগ্রিক সময় জটিলতা হে (ঢ) হতে হবে।nn1n i

তবে আমরা যদি কে ইনপুট লিখতে প্রয়োজনীয় বিটের সংখ্যা হতে দিই তবে x = লগ এন (বাইনারি) সুতরাং এন = 2 এক্স এবং সমস্যাটির চলমান সময়টি হ'ল ( 2 x ) হবে যা তাত্পর্যপূর্ণ।xx=lognn=2x2x

আমার প্রশ্নটি হ'ল, আমরা যদি ইনপুট এর অবিচ্ছিন্ন উপস্থাপনা বিবেচনা করি তবে সর্বদা x = n এবং তারপরে সিউডো-বহুবর্ষের সময়টি বহুপদী সময় জটিলতার সমান হবে। তাহলে আমরা কখনই কেন এটি করি না?nx=n

আরও কিছু পরে যেহেতু ন্যাপস্যাকের জন্য সিউডো-পলিনোমিয়াল টাইম অ্যালগোরিদম রয়েছে, গ্রহণের ফলে ন্যাপস্যাকটি বহুবর্ষীয় হবে ফলস্বরূপ পি = এনপিx=n


3
আসলে, আমরা এটি প্রায়শই না প্রায়ই করি। একই কারণে আমরা সাধারণত অখণ্ড ভাষা নিয়ে ডিল করি না, তবে এই প্রাণীদের সাথে সম্পর্কিত অনেক আকর্ষণীয় ফলাফল রয়েছে। আপনি কি এটি দেখেছেন?
আন্দ্রে সৌজা লেমোস

2
হ্যাঁ, আপনি যদি আকার এবং প্রস্থের মধ্যে পার্থক্যটি সরিয়ে ফেলেন তবে আপনি সেই পার্থক্যটি পূর্বাভাসিত সমস্ত ধারণা হারিয়ে ফেলবেন।
আন্দ্রে সৌজা লেমোস

7
কারণ এটি অসুরটিকে একটি সুন্দর পোশাকে ফেলেছে। এটি দ্রুত কোনও কিছু করে না, এটি কেবল "চলমান সময়ের জটিলতা" অর্থহীন করে তোলে।
রাফেল

4
@ দ্রুপালিস্ট আনরি ন্যাপস্যাক সমস্যাটি আসলে এনপি-সম্পূর্ণ হিসাবে পরিচিত নয় কারণ ন্যাপস্যাক সমস্যার স্বাভাবিক হ্রাস অনুমান করে যে সংখ্যাগুলি বাইনারিতে লিখিত আছে। যদি আপনি স্ট্যান্ডার্ড হ্রাস করার চেষ্টা করেন তবে অ্যানারিতে সংখ্যাগুলি লেখেন তবে হ্রাসটি বহুবারের মধ্যে গণনা করা যাবে না। ফলস্বরূপ, অ্যানারি ন্যাপস্যাক সমস্যা বহুবর্ষের সময়ে সমাধানযোগ্য হওয়ার অর্থ এই নয় যে পি = এনপি।
টেম্পলেটটিফাইফ

2
আপনি অন্য উত্তর চেক করতে পারেন বাঁধা সিউডো-বহুপদী বিশেষ করে এই এক
রাফেল

উত্তর:


17

এর অর্থ হ'ল আনরি ন্যাপস্যাক পি-তে রয়েছে It এর অর্থ এই নয় যে ন্যাপস্যাক (বাইনারি-এনকোডড নম্বর সহ) পি আছে P

ন্যাপস্যাক এনপি-সম্পূর্ণ হিসাবে পরিচিত। যদি আপনি দেখান যে ন্যাপস্যাক পি-তে রয়েছে, তবে এটি পি = এনপি দেখায়।

তবে আপনি দেখান নি যে ন্যাপস্যাকটি পি-তে রয়েছে You )। অতএব, পি তে আনরি ন্যাপস্যাক লাগানো বোঝায় না যে পি = এনপি।


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


ন্যাপস্যাক সমস্যার জন্য ডায়নামিক প্রোগ্রামিং অ্যালগরিদম সম্পর্কে ফলোআপ প্রশ্নের উত্তর দিতে:

হ্যাঁ, একই গতিশীল প্রোগ্রামিং অ্যালগরিদম উভয় ন্যাপস্যাক এবং ইউনারি ন্যাপস্যাকের জন্য প্রয়োগ করা যেতে পারে। এটির চলমান সময়টি সংখ্যার মাত্রায় বহুবর্ষীয়, তবে বাইনারিতে এনকোড করা অবস্থায় সংখ্যার দৈর্ঘ্যে সূচকীয় (বহুমাত্রিক নয়)। সুতরাং, চলমান সময়টি ইনপুটটির দৈর্ঘ্যের ক্ষেত্রে বহুপদী হয় যখন ইনপুটটি আনারিতে এনকোড করা থাকে তবে ইনপুটটি বাইনারিতে এনকোড করা হয় তবে ইনপুটটির দৈর্ঘ্যে বহুপদী থাকে না । কেন আমরা যে না বিবেচনা এই গতিশীল প্রোগ্রামিং আলগোরিদিম ইউনারী ঝোলা একটি বহুপদী সময় এলগরিদম হতে, কিন্তু না তার জন্য (বাইনারি এনকোডেড) ঝোলা একটি বহুপদী টাইম অ্যালগরিদম মনে হয়েছে।

মনে রাখবেন যে আমরা বলি একটি অ্যালগরিদম বহুবর্ষের সময় চলতে থাকে যদি তার চলমান সময়টি ইনপুটটির দৈর্ঘ্যের সর্বাধিক কিছু বিট হয়


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

@ দ্রুপালিস্ট, আমি এই প্রশ্নের উত্তর দেওয়ার জন্য আমার উত্তরটি সম্পাদনা করেছি শেষে দুটি অনুচ্ছেদ যুক্ত করতে।
ডিডাব্লু

x=n

x=n

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

6

আমি DW এর উত্তরে একটি ছোট জিনিস যুক্ত করব:

আমি এমন লোকদের দেখেছি যারা মনে করে যে অ্যানারি ন্যাপস্যাক পি-তে রয়েছে তাই আমরা এটি ন্যাপস্যাকের জায়গায় ব্যবহার করতে পারি যা সেরা বর্তমান অ্যালগরিদমগুলিতে ব্যয়যুক্ত সময় রয়েছে।

W={w1,,wn}kO(nk)

O(nk)

যদি আপনি বিচ্ছিন্নতার কোনও সমস্যা সম্পর্কে চিন্তা করেন তবে আপনি এটি করতে পারেন। আসলে অ্যালগরিদমের লোকেরা প্রায়শই এটি করেন। গ্রাফ অ্যালগরিদমের জটিলতা প্রায়শই সংখ্যা শীর্ষ এবং প্রান্তের সংখ্যার ভিত্তিতে প্রকাশ পায়, তাদের কোডিংয়ের স্ট্রিংয়ের আকার নয়।

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

k100100k21001kk21001

nnp(n)kp(n)k2p(n)1kk

nk


আপনাকে আরও অনেক ধন্যবাদ, আরও একটি প্রশ্ন, ইনপুটটিকে তার অদ্বিতীয় উপস্থাপনে রূপান্তর করে একটি সংখ্যা প্রধান কিনা তা নির্ধারণ করতে সমস্যা হবে কি? এই সমস্যাটি ইনপুট প্রস্থের উপর ভিত্তি করে বহুত্বগত তবে ইনপুট বিটের উপর ভিত্তি করে ঘনঘটিত (যেমন আমি প্রশ্নটিতে উল্লেখ করেছি), এই রূপান্তরটি কি আরও ভাল কিছু করতে পারে?
এম আমা ডি

nO(n)nb=210241210241210241
কাভেহ

চমৎকার স্পষ্টতা, তবে এই পোস্টের সাথে সম্পর্কিত যা ডব্লিউ এর উত্তর অনুযায়ী আমার মন্তব্য দেখুন
নিকোস এম।

2

সংক্ষেপে এবং সাধারণভাবে, আমি আপনাকে দেখাবো কেন।

Tally

x = input integer

factors = [];

for i in range(1, x + 1):
    if x % i == 0:
     factors.append(i)

 print(factors)

xxO(2n)

Tally/UnaryO(n)x

x = input tallies

factors = [];

for i in range(1, x + 1):
    if x % i == 0:
     factors.append(i)

 print(factors)

ইনপুট প্রতিনিধিত্ব কোডটি দ্রুত চালায় না। যদিও ২ য় অ্যালগরিদম সত্যিকার অর্থে পলিটাইম। এটি আরএসএর কারণগুলি সন্ধান করতে খুব ব্যবহারিক নয়।


দুর্দান্ত উদাহরণ, ধন্যবাদ
এম এমা D
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.