প্রোগ্রামমেটিক্যালি একটি অ্যালগোরিদমের ল্যান্ডাউ স্বরলিপি (বিগ ও বা থেটা স্বরলিপি) সন্ধান করছেন?


11

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

আমি কোডিলিটির (কোডিং / আলগো ব্যায়াম) কিছুটা সময় ব্যয় করেছি এবং লক্ষ্য করেছি যে তারা আপনাকে জমা দেওয়া সমাধানের জন্য ল্যান্ডাউ স্বীকৃতি দেবে (সময় এবং স্মরণে উভয় ক্ষেত্রে)।

আমি ভাবছিলাম তারা কীভাবে এটি করে ... আপনি এটি কীভাবে করবেন?

লেক্সিকাল অ্যানালাইসিস বা কোডটি বিশ্লেষণ করা ছাড়াও কি অন্য কোনও উপায় আছে?

এই প্রশ্নটি মূলত পিএইচপি এবং জাভাস্ক্রিপ্ট সম্পর্কিত, তবে আমি যে কোনও ভাষা এবং তত্ত্বের জন্য উন্মুক্ত opened


4
এই উত্তরটি এসও থেকে পরীক্ষা করুন Check আপনি যা খুঁজছেন তা মনে হচ্ছে।
ডেকো

2
আপনি যদি এমন একটি প্রোগ্রাম তৈরি করতে পারেন যা প্রতিটি অ্যালগরিদমের জন্য এই সমস্যা সমাধান করে, আপনি "টিউরিংকে অস্বীকার করেছেন" হিসাবে বিখ্যাত হয়ে উঠবেন।
ব্যবহারকারী 281377

1
প্রমানের জন্য যে চলমান সময়গুলি নির্ধারণ করা সাধারণভাবে অসম্ভব, এখানে এবং এখানে দেখুন - সেখানে উত্তরগুলি আপনি যা চেয়েছিলেন তার চেয়েও বেশি প্রমাণ করে।
অ্যালেক্স দশ ব্রিংক

উত্তর:


13

আমি ভাবছিলাম তারা কীভাবে এটি করে ... আপনি এটি কীভাবে করবেন?

আমি কল্পনা করি যে তারা প্রকৃতপক্ষে বিগ হে পদক্ষেপগুলি ... বিভিন্ন সমস্যা আকারের জন্য প্রোগ্রাম চালিয়ে, সময় এবং স্থানের ব্যবহার পরিমাপ করে এবং ফলাফলের জন্য উপযুক্ত কার্ভগুলি অনুমান করে।

এই পদ্ধতির সাথে সমস্যাটি হ'ল এন বড় হওয়ার সাথে সাথে ব্যয়ের ক্রিয়াগুলি আকার পরিবর্তন করলে এটি ভুল হতে পারে ; যেমন 1000 N + N^1.5

লেক্সিকাল অ্যানালাইসিস বা কোডটি বিশ্লেষণ করা ছাড়াও কি অন্য কোনও উপায় আছে?

লেক্সিকাল বিশ্লেষণ এবং পার্সিং যথেষ্ট নয়। অ্যালগরিদমের আচরণ সম্পর্কে আপনার কিছু যুক্তিও করতে হবে। এবং পূর্বে অজানা অ্যালগরিদমের জন্য স্বয়ংক্রিয়ভাবে এটি করা শক্ত।


6
"পূর্বে অজানা অ্যালগরিদমের জন্য স্বয়ংক্রিয়ভাবে এটি করা শক্ত" - আরও স্পষ্টভাবে: এটি হ্যালটিং সমস্যা সমাধানের সমতুল্য।
Jörg ডব্লু মিট্টাগ

এরম ... ঠিক না হ্যালটিং সমস্যা সমাধান করা পূর্ববর্তী সমস্ত অজানা অ্যালগরিদমের জন্য এটি সক্ষম হবার সমতুল্য ।
স্টিফেন সি

2
হ্যাঁ দুঃখিত. এটি একটি অ্যালগরিদমের জন্য করা সমাপ্তি প্রমাণের (বা বরং বোঝানো) সমান।
জার্গ ডব্লু মিট্টাগ

1
এর কার্যকারিতা হ'ল 1) কিছু অ্যালগরিদমের জন্য সমাপ্তি প্রমাণ বা প্রমাণ করা অসম্ভব তবে 2) বেশিরভাগ অ্যালগরিদমে এই তাত্ত্বিক প্রতিবন্ধকতা থাকে না, তবে 3) তাত্ত্বিক প্রমাণে শিল্পের অবস্থা এতটা উন্নত নয় তুলনামূলক সহজ ক্ষেত্রে ব্যতীত ... যাইহোক এটি করতে সক্ষম হোন। সুতরাং আমার বক্তব্য যে আমি কল্পনা করেছি তারা এটিকে অন্যভাবে করছে। তবে স্পষ্টতই, আমরা নিশ্চিত হতে পারি না যে তারা তাদের কোডটি না দেখে কীভাবে সত্যিই এটি করছে।
স্টিফেন সি

3

কোড বিশ্লেষণ করা ছাড়া তারা পারবেন না।

জটিলতার কৃত্রিম "মুদ্রাস্ফীতি / অপসারণ" এর সাথে নীচে উদাহরণগুলি প্রমাণ করে যে বিগ-ও নির্ভরযোগ্যভাবে অনুমান করার জন্য প্রোগ্রামের রানটাইম পরিমাপ করা যথেষ্ট নয়

void lets_trick_runtime(int n) {
   if (n == 10 || n == 25 || n == 118) {
      // unfair speed-up
      do_precalculated_solution_in_constant_time(n);
      return;
   }
   if (n == 11 || n == 26 || n == 119) {
      // unfair slow-down
      do_some_fake_processing_in_n_cube_time(n);
      return;
   }
   // fair solution
   do_general_solution_in_quadratic_time(n);
}

উপরের রানটাইম অনুমানটি জাল প্রাক্কলন দেওয়ার ক্ষেত্রে গ্রহণযোগ্য হবে - nযেখানে প্রাক-গণনাযুক্ত সমাধান রয়েছে তার মানগুলির জন্য ধ্রুবক সময় এবং মানগুলি যেখানে ঘৃণিত হয় সেখানে unfair slow-down"সুষ্ঠু" চতুর্ভুজ সময়ের পরিবর্তে।


যাইহোক, যদি তারা "অন্যায্য" কেসগুলি পরীক্ষা করে থাকে তবে তারা এখনও ধরে নিতে পারে যে সবচেয়ে খারাপ পরিস্থিতি প্রকৃতপক্ষে বিগ-ও জটিলতার অনুমান করে।
ইয়াম মার্কোভিচ

1

আমি মনে করি এটি সম্ভব নয়।

আপনি যদি নির্দিষ্ট ইনপুট আকারের একটি নির্দিষ্ট সংখ্যক দিয়ে কিছু পরীক্ষা চালান, আপনি খুব সহজেই একটি বহুবচন গণনা করতে পারেন, এটি আপনি খুব ভাল পরিমাপ করেছেন রানটাইমের আনুমানিক will সুতরাং আপনি প্রতিটি সম্ভাব্য প্রোগ্রামের একটি বহুপদী সাথে শেষ করবেন, যার অর্থ হবে P = NP(হ্যাঁ!))।

আপনি যদি প্রতীকী ম্যানিপুলেশন দিয়ে এটি করার চেষ্টা করেন, আপনি শেষ পর্যন্ত এসেছেন halting problem। যেহেতু আপনি সিদ্ধান্ত নিতে পারবেন না যে আপনার প্রোগ্রামটি কখন থামবে, আপনি এটি সিদ্ধান্ত নিতে পারবেন না যে এটির রানটাইমের জটিলতা কী হবে।

তবে খুব বিশেষ ক্ষেত্রে হতে পারে, যেখানে পরবর্তী পদ্ধতিটি সম্ভব। তবে এই ক্ষেত্রেগুলি সম্ভবত এটি খুব ছোট, যদি প্রচেষ্টা কখনও অর্থ প্রদান করে তবে তা প্রশ্নবিদ্ধ।


1
+1, যদিও আমি মনে করি যে থামানো সমস্যাটিকে বিরলতা হিসাবে বিবেচনা করা যেতে পারে।
ইয়াম মার্কোভিচ

0

আমি এটা কিভাবে করব? যেভাবে আমি প্রায় কোনও সমস্যার সমাধান করি আমি বসে বসে সমাধান করতে চাই না । আমি অনুকরণ করি

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

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

এই পদ্ধতির সাথে আমার মনের মধ্যে সবচেয়ে বড় দুর্বলতা হ'ল যদি আপনার অ্যালগরিদমটি সত্যই খারাপভাবে স্কেল করে তবে প্রাথমিকভাবে "একে পুরো সময় চালান" পদক্ষেপটি কুৎসিত হতে চলেছে। তবে প্রকৃতপক্ষে, বিষয়টি কেটে যায়, একা এমন একটি সূচক হওয়া উচিত যা আপনি পিছিয়ে যেতে এবং বিষয়গুলিতে পুনর্বিবেচনা করতে চাইতে পারেন।


0

আমার স্বজ্ঞাত হ'ল এই সমস্যাটির একটি সাধারণ সমাধান অসম্ভব; জোর দেওয়া, যেমন এটি করে, অ্যালগরিদমগুলি রান না করে রানটাইম সম্পর্কে একটি প্রাথমিক বিষয়গুলি (আপনি লেক্সিকাল বিশ্লেষণকে প্রমাণ করেছেন)। এটি বলেছিল, অ্যালগরিদমের একটি (সম্ভবত বৃহত) শ্রেণির জন্য কিছু হিউরিস্টিক অ্যালগরিদমের পক্ষে এটি সম্ভব (যেহেতু আমরা এটি সমস্ত সময় করি) তবে এটি করার জন্য একটি সাধারণ অ্যালগরিদম এন্টেসিডেংস্প্রোব্লম সমাধানের সমতুল্য, যা এটি সুপরিচিত নয় known সম্ভব (সিএফ। চার্চ, টুরিং, ইত্যাদি)) আমি এখন of৯.৯% এর বিষয়ে নিশ্চিত যে আমি এটি সম্পর্কে চিন্তা করি ...

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