একটি উদাহরণ যেখানে ছোটতম ল্যাম্বডা শব্দটি সবচেয়ে দ্রুত নয়


12

যাক এর -terms অনুসরণ হিসাবে সংজ্ঞায়িত করা:গুলিআমিz- রλ

  • গুলিআমিz- র(এক্স)=1 ,
  • গুলিআমিz- র(λএক্সটি)=গুলিআমিz- র(টি)+ +1 ,
  • গুলিআমিz- র(টিগুলি)=গুলিআমিz- র(টি)+ +গুলিআমিz- র(গুলি)+ +1

একটি mb λ ট্রার্ম টি এর জটিলতাটিকে tx থেকে এর সাধারণ আকারে টিসমান্তরাল বিটা হ্রাসের সংখ্যার হিসাবে সংজ্ঞায়িত করা যাক (লেভির অর্থে অনুকূল মূল্যায়নকারী ব্যবহার করে)।টিএক্স

আমি একই ফাংশনের জন্য দুটি সাধারণ λ স্টার্মসের উদাহরণ খুঁজছি যেখানে বৃহত্তর শব্দটির কম জটিলতা রয়েছে।

...

স্বচ্ছতার জন্য সম্পাদনা করুন

যেহেতু মনে হচ্ছে আমি যা বলছি তা স্পষ্ট নয়, তাই আমি একটি দৃ example় উদাহরণ দেওয়ার চেষ্টা করব। একটি বিশ্বাস রয়েছে যে কোনও ক্রিয়াকলাপের "নিষ্পাপ" / "সাদামাটা" সংজ্ঞাটি ধীর এবং অনুকূল নয়। উন্নত কর্মক্ষমতা, মেয়াদ জটিলতা বৃদ্ধি যেহেতু জুড়েছে ডেটা-কাঠামো, সূত্র, ইত্যাদি একটি বড় উদাহরণ প্রয়োজন fibonacci, যা "naively" হিসেবে সংজ্ঞায়িত করা যেতে পারে:

-- The fixed fibonacci definition
fib_rec fib n =
    if (is_zero x) 
        then 1 
        else fib (n - 1) + f (n - 2)

-- Using church numbers instead of the λ-combinator to get a normal form
fib n = n fib_rec 0 n 

এটি প্রায়শই fib এর "সর্বাধিক" সংজ্ঞা হিসাবে বিবেচিত হয় এবং এটি খুব ধীর (ক্ষয়যুক্ত) হয়। যদি আমরা fib( গির্জার সংখ্যা সংখ্যার পূর্ববর্তী সংজ্ঞা , পূর্ব, ইস_জারো) এর নির্ভরতাগুলি প্রসারিত করি এবং এটি স্বাভাবিক করি তবে আমরা এই শব্দটি পাই:

fib = (λa.(a(λbc.(c(λdef.f)(λde.d)(λde.(de))
      (λde.(b(λfg.(c(λhi.(i(hf)))(λh.g)(λh.h)))
      d(b(λfg.(c(λhi.(i(h(λjk.(k(jf))))))(λhi.g)
      (λh.h)(λh.h)))de)))))(λbc.c)a))

স্মৃতিচারণের টেবিলের মতো উন্নতিগুলি এই শব্দটিকে আরও বড় করে তুলবে। তবুও, এখানে একটি আলাদা শব্দ রয়েছে যা অনেক ছোট ...

fib = (λa.(a(λb.(b(λcde.(e(λfg.(cf(dfg)))c))))
      (λb.(b(λcd.(cd))(λcd.d)))(λbc.b)))

এবং, অদ্ভুতভাবে, এছাড়াও এসিম্পটোটিকভাবে উচ্চতর সাদাসিধা এক, চলমান O(N)। আমি যে সমস্ত সংজ্ঞাটি অবগত তা সম্পর্কে, এটি উভয়ই দ্রুত এবং সহজতম । একই প্রভাব বাছাই সঙ্গে ঘটে। "নিষ্পাপ" সংজ্ঞা যেমন বুদ্বুদ সাজানোর এবং সন্নিবেশ সারণি প্রায়শই বিশাল পরিসরে (20+ লাইন দীর্ঘ) প্রসারিত হয়, তবে একটি ছোট সংজ্ঞা বিদ্যমান :

-- sorts a church list (represented as the fold) of church numbers
sort = λabc.a(λdefg.f(d(λhij.j(λkl.k(λmn.mhi)l)(h(λkl.l)i))
       (λhi.i(λjk.bd(jhk))(bd(h(λjk.j(λlm.m)k)c))))e)(λde.e)
       (λde.d(λfg.g)e)c

যা আমি জানি প্রত্যেকটি সংজ্ঞার চেয়ে দ্রুত, অ্যাসেম্পোটোটিকভাবে ঘটায়। এই পর্যবেক্ষণটি আমাকে বিশ্বাস করতে পরিচালিত করে, সাধারণ বিশ্বাসের বিপরীতে, সবচেয়ে সহজতম শব্দটি, সবচেয়ে ছোট কোলমোগোরভ জটিলতায়, সাধারণত দ্রুত হয়। আমার প্রশ্নটি মূলত এর বিপরীতে কোনও প্রমাণ রয়েছে, যদিও এটির আনুষ্ঠানিককরণে আমার খুব কষ্ট হত।


3
কোন এর স্কয়ারটি (এন) জটিলতা রয়েছে। এন!=এনএন-1 .... 2.1
টি ....

2
আমি একেবারে নিশ্চিত যে আপনি একেএস অ্যালগরিদমের চেয়ে সংক্ষিপ্ত -terেম দ্বারা ট্রায়াল বিভাগ কোড করতে পারবেন । λ
এমিল জেবেক

2
আমি @ EmilJeřábek সম্মত হন এবং, আসলে, আমি দেখতে পাই না কিভাবে একটি উদাহরণ, বাছাই আলগোরিদিম দিকে তাকিয়ে দ্বারা প্রাপ্ত করা হয় না হিসাবে আপনি ইতিমধ্যে যা করেছে: নয় চেয়ে সাজানোর খাটো -term বাস্তবায়ন বুদ্বুদ -term implmenting , বলুন, গাদা সাজান? বা, আমি জানি না, একটি কার্যকর শক্তি অনুসন্ধান, বাস্তবায়নের জন্য খুব কম তবে ক্ষণস্থায়ী সময়, বনাম। একটি চৌকস পলটাইম অ্যালগরিদমকে আরও বেশি লাইন কোডের প্রয়োজন ...? আমি অবশ্যই কিছু মিস করছি, আমি ভয় করি আমি সত্যিই প্রশ্নটি বুঝতে পারি না। λλ
দামিয়ানো মাজাজা

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

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

উত্তর:


10

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

এটি বলে যে কোনও যুক্তিসঙ্গত জটিলতা পরিমাপ (উদাহরণস্বরূপ, প্রশ্ন হিসাবে কমানোর অনুকূল সংখ্যা) এবং একটি পুনরাবৃত্তি ফাংশন (উদাহরণস্বরূপ, ) দেওয়া, আমরা একটি পুনরাবৃত্ত প্রেরিকেট খুঁজে পেতে পারি যেমন:এম(এক্স,Y)2Yপি(এক্স)

প্রত্যেক অ্যালগরিদম (অর্থাত, জন্য এখানে স্বাভাবিক আকারে -term) কম্পিউটিং , আরেকটা আলগোরিদিম জন্য আছে যে -speedup উপর : λপিপি

(এক্স,এম(,এক্স))এম(,এক্স) সমস্ত বড় যথেষ্ট ইনপুট জন্য এক্স,

যেখানে পরিমাপ অনুসারে ইনপুট তে এর গণনার জটিলতা বোঝায় ।এম(,এক্স)এক্সএম

অতএব:

  • পিপ্রদত্ত পরিমাপের ক্ষেত্রে এর কোনও অসম্পূর্ণভাবে অনুকূল অ্যালগরিদম নেই

  • বিশেষত, জন্য সংক্ষিপ্ততম অ্যালগরিদম অসম্পূর্ণভাবে অনুকূল নয়পি

  • জন্য যে কোনও অ্যালগোরিদমের জন্য একটি অ্যাসেম্পোটোটিক্যালি গতিযুক্ত অ্যালগরিদম রয়েছে যার স্বাভাবিক ফর্মটি দীর্ঘতর (কারণ ভেরিয়েবলগুলির নাম পরিবর্তন পর্যন্ত, নির্দিষ্ট দৈর্ঘ্যের চূড়ান্তভাবে অনেকগুলি সাধারণ পদ আছে)পি

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