দীর্ঘতম পুনরাবৃত্তি অনুচ্ছেদটি সন্ধান করা


9

একটি স্ট্রিং দেওয়া হয়েছে s, আমি দীর্ঘতম পুনরাবৃত্তি (কমপক্ষে দুবার) উপসর্গটি খুঁজতে চাই। অর্থাৎ, আমি একটি স্ট্রিং সন্ধান করতে চাইw যা একটি অনুচ্ছেদে (একটি সংঘবদ্ধ হতে হবে না) s যেমন যে w=ww। এটাই,wএমন একটি স্ট্রিং যার অর্ধেকটি পরপর দু'বার প্রদর্শিত হয়। মনে রাখবেন যেw এর একটি অনুচ্ছেদে s, তবে অগত্যা একটি স্ট্রস্ট্রিং নয়।

উদাহরণ:

'Ababccabdc' এর জন্য এটি হবে 'abcabc', কারণ 'abc' = 'abc' এবং 'abc' প্রদর্শিত হবে (কমপক্ষে) 'ababccabdc' এ দু'বার।

'অ্যাডব্যাকড্যাবসিডি'র জন্য একটি বিকল্প হ'ল' ডিডিডিডি 'কারণ' ডিডি 'দু'বার উপস্থিত হয় (আমি একই অক্ষরটি বেশ কয়েকবার ব্যবহার করতে পারি না, তবে এখানে আমার 4 d এর ঠিক আছে) তবে এর দৈর্ঘ্য 4 আমি আরও একটি ভাল খুঁজে পেতে পারি দৈর্ঘ্যের 8: 'abcdabcd', কারণ 'abcd' হ'ল 'অ্যাডব্যাকড্যাবসিডি' এর একটি স্ট্রিং যা দু'বার প্রদর্শিত হয়।

আমি দীর্ঘতম পুনরাবৃত্তি অনুচ্ছেদটি সন্ধান করতে আগ্রহী। এটিকে "দীর্ঘতম / বৃহত্তম বর্গক্ষেত্র সন্ধান করা" নামেও অভিহিত করা হয় তবে আমি অনেকগুলি নিবন্ধ পড়েছি যার মধ্যে একটি বর্গ একটি সাবস্ট্রিংয়ের জন্য সংজ্ঞায়িত করা হয়, অনুবর্তনের জন্য নয়।

আমি সহজেই একটি নিখুঁত বলের অ্যালগরিদম ব্যবহার করতে পারি যা লাগবে O(n3) স্ট্রিংয়ের ব্রেকআপপয়েন্টের জন্য সমস্ত বিকল্পের পুনরাবৃত্তি করে এবং তারপরে আমার কাছে দুটি স্ট্রিং থাকবে যার মধ্যে আমি বৃহত্তম / দীর্ঘতম সাধারণ অনুচ্ছেদ খুঁজছি, তবে প্রতিটি চেক গ্রহণ করা হবে O(n2) একটি গতিশীল প্রোগ্রামিং কৌশল ব্যবহার করে, তাই পুরো সময়টি হবে O(n3)। আমি সবচেয়ে দীর্ঘ সাধারণ সাবকোয়েন্সের জন্য আরও কার্যকর অ্যালগরিদম পেয়েছিO(n2logn) , তাই চলমান সময় হবে O(n3logn)

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

আমি অনেক জার্নাল এবং পূর্ববর্তী প্রশ্নগুলিতে অনুসন্ধান করেছি এবং আমি যে ফলাফলগুলি পেয়েছি তার বেশিরভাগটি একটি স্ট্রিংয়ের বিষয়ে ছিল, অনুবর্তন সম্পর্কে নয়।

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

আমি এমন একটি সমাধান খুঁজছি যা সময়মতো চলে O(n2)। যদি সময় মত একটি থাকেO(nlogn) এটি আরও ভাল হবে (আমি নিশ্চিত না যে এর উপস্থিত রয়েছে কিনা)।


4
প্রত্যয় গাছ বা প্রত্যয় অ্যারেগুলি দেখুন।
ছদ্মনাম

1
এটা খুব সম্ভব না যে একটি o(n2)এই সমস্যার জন্য সময়কালীন অ্যালগরিদম উপস্থিত রয়েছে, যেহেতু এটি করা হয়, আপনি দুটি দৈর্ঘ্যের এলসিএস সন্ধানের জন্য সেরা পরিচিত অ্যালগরিদমকে বীট করতে ব্যবহার করতে পারেন-n স্ট্রিং u এবং v নীচে হিসাবে: স্ট্রিং ফর্ম xuxv, কোথায় x হয় n+1একটি চরিত্রের অনুলিপি যা $উপস্থিত হয় নাu অথবা v, এবং তারপরে আপনার চালান o(n2)এটিতে সময়কালীন অ্যালগরিদম। দীর্ঘতম পুনরাবৃত্ত উপসর্গ উভয় "অর্ধেক" অগত্যা শুরু হবেx, সুতরাং প্রতিটি থেকে একটি অর্ধেক আসে u এবং v, এলসিএস সমস্যা সমাধান করা।
j_random_hacker

@ j_random_hacker LCS এর মধ্যে সমাধান হতে পারে O(n+m) প্রত্যয় গাছ ব্যবহার করে বা এর মধ্যে O(nlogn)ঘূর্ণায়মান hashes ব্যবহার।
দুষ্ট

@ এভিল: আমি এখনও দেখছি না, কীভাবে আপনি আরও কিছুটা বিস্তারিত জানাতে পারেন? (আপনি কি নিশ্চিত যে আপনি দীর্ঘতম কমন সাব স্ট্রিংয়ের কথা ভাবছেন না , যা সেই সময়ের জটিলতায় সমাধান করা যেতে পারে?)
j_random_hacker

@ j_random_hacker আমি ভেবেছিলাম আপনি লক্ষ্য করে তুলনা করছেন o(n2)এলসিএসের সাথে (একটানা), তবে এখানে যেমন আপনি উল্লেখ করেছেন, হ্যাঁ, আমি দীর্ঘতম কমন সাবসেক্সেন্সের জন্য n ^ 2 এও কাজ করার সমাধান দেখতে পাইনি (অনেকগুলি পৃষ্ঠায় প্রচারিত একটি গতিশীল প্রোগ্রামিং কোড পেয়েছি, যা ত্রুটিযুক্ত, অনুরূপ tovvated উত্তর)। সুতরাং আমি আপনার মন্তব্যটি ভুল বুঝেছি, দুঃখিত।
খারাপ

উত্তর:


-1

এখানে একটি গতিশীল প্রোগ্রামিং সমাধান রয়েছে।

ধরুন ইনপুট স্ট্রিংটি x1xn। একটি টেবিল তৈরি করুনT যার সারি এবং কলামগুলি সূচিযুক্ত 0,,n (কোথায় n নিয়মের সাহায্যে স্ট্রিংয়ের দৈর্ঘ্য)

T[i,j]={0if i=0 or j=0,T[i1,j1]+1if xi=xj and ij,max(T[i1,j],T[i,j1])otherwise.
উত্তরটা হচ্ছে T[n,n]

ধরা যাক আমরা কিছুটা আছে i,j সঙ্গে i=j+1, এবং আপনার ifবিবৃতিতে শর্তটি সত্য। তারপরে dp[i][j] = dp[i - 1][j - 1] + 1ইঙ্গিত দেয় যে অবস্থানের চরিত্রটিi1=jউভয় অনুচ্ছেদের অংশ।
j_random_hacker

3
কম্পিউটার বিজ্ঞানে স্বাগতম! দয়া করে উত্স কোড থেকে মুক্তি পান এবং এটিকে আইডিয়া, সিউডো কোড এবং সঠিকতার যুক্তি দিয়ে প্রতিস্থাপন করুন। সম্পর্কিত মেটা আলোচনার জন্য এখানে এবং এখানে দেখুন ।
রাফেল

@ রাফেল একটি পুনরাবৃত্ত সূত্রটি উত্স কোড হিসাবে গণনা করে না।
945

1
@ ব্রেকিংবেঞ্জিন আপনার পছন্দের ভাষার উপর নির্ভর করে আপনি প্রদত্ত পুনরাবৃত্তিটি কমবেশি আক্ষরিকভাবে লিখতে পারেন। মুল বক্তব্যটি এখানে কোনও ব্যাখ্যা নেই।
রাফেল
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.