পূর্ণসংখ্যার ক্রম অনুসন্ধান করা হচ্ছে


14

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

পূর্ণসংখ্যার A এর ক্রম নিন, উদাহরণস্বরূপ (1 2 3 4)

পূর্ণসংখ্যার বিভিন্ন ক্রম নিন এবং তাদের মধ্যে কোনওর সাথে এ জাতীয় কোনও মিল রয়েছে কিনা তা পরীক্ষা করুন।

  1. এ পরীক্ষিত ক্রমের সমস্ত পূর্ণসংখ্যার সমন্বয় করে
  2. পরীক্ষিত অনুক্রমের পূর্ণসংখ্যার ক্রম A এ একই
  3. আমরা এ-তে এমন কোনও পূর্ণসংখ্যার বিষয়ে যত্ন নিই যা পরীক্ষার ক্রমিকায় নেই
  4. আমরা কেবল প্রথমটি নয়, সমস্ত ম্যাচের পরীক্ষার ক্রম চাই।

একটি উদাহরণ

A = (1 2 3 4)
B = (1 3)
C = (1 3 4)
D = (3 1)
E = (1 2 5)

বি মিলছে এ

সি মিলছে এ

ক্রমটি ভিন্ন হওয়ায় ডি এর সাথে মেলে না

E এর সাথে মেলে না কারণ এটিতে পূর্ণসংখ্যার A নেই

আমি আশা করি এই ব্যাখ্যা যথেষ্ট পরিষ্কার। সবচেয়ে ভাল যেটা আমি পরিচালনা করেছিলাম তা হল পরীক্ষার ক্রমগুলির একটি গাছকে কন্ট্রাক্ট করা এবং এ এর ​​সাথে পুনরাবৃত্তি করা inte পূর্ণসংখ্যাকে এড়িয়ে যেতে সক্ষম হওয়ার কারণে অনুসন্ধানের অনেকগুলি ব্যর্থ পথ দেখা যায়।

ধন্যবাদ

কিছু প্রস্তাবনা পড়ে আমার মনে হয় যে আমি দু'টি বিষয় পরিষ্কার করতে হবে যা আমি খুব অস্পষ্ট রেখেছি।

  1. বারবার সংখ্যা অনুমোদিত, বাস্তবে এটি বেশ গুরুত্বপূর্ণ কারণ এটি একক পরীক্ষার ক্রমটিকে A এর সাথে মেলে এমন একাধিক উপায়ে অনুমতি দেয়

    এ = (1234356), বি = (236), ম্যাচগুলি -23 --- 6 বা -2--3-6 হতে পারে

  2. আমি আশা করি পরীক্ষার সিকোয়েন্সগুলির একটি খুব বড় সংখ্যক হবে, হাজারে কমপক্ষে এবং সিকোয়েন্স এ এর ​​সর্বাধিক দৈর্ঘ্য 20 এর প্রবণতা থাকবে Thus এইভাবে কেবল প্রতিটি পরীক্ষার ক্রমকে একের পর এক পুনরাবৃত্তি করে মেলাতে চেষ্টা করা অত্যন্ত অদক্ষ হয়ে যায়।

এটি পরিষ্কার না হলে দুঃখিত।


4
আপনি এমন শোনেন যেন আপনি কেবল উপসর্গগুলি সনাক্ত করতে চান ( en.wikedia.org/wiki/Subsequence )। এইটাই কি সেইটা? তারপরে "উপসর্গ অ্যালগরিদম" অনুসন্ধান করার চেষ্টা করুন।
কিলিয়ান ফট

সত্যি বলতে, সর্বাধিক দৈর্ঘ্যের <= 20 সহ কয়েক হাজার সিকোয়েন্স আমার কাছে বড় সংখ্যার শোনায় না। একটি সাধারণ ব্রুট ফোর্স পদ্ধতির কৌশলটি করা উচিত। বা আপনার কি হাজারো সিকোয়েন্সস "এ" রয়েছে, প্রত্যেকটিই কয়েক হাজার সম্ভাব্য উপসর্গের বিপরীতে পরীক্ষা করার জন্য?
ডক ব্রাউন

এ সিকোয়েন্সগুলির ধারাবাহিক ধারা রয়েছে তবে তারা একে অপরের থেকে সম্পূর্ণ স্বাধীন। তবে একের প্রক্রিয়াকরণে বিলম্ব হলে অন্য সমস্ত সরাসরি বিলম্বিত হয়, সুতরাং গতি গুরুত্বপূর্ণ।
ডেভিড গিবসন

1
আপনার বর্ণমালা কত বড়? আপনার কি সত্যিই নির্বিচারে পূর্ণসংখ্যা রয়েছে, বা এর মূল্যবোধের সীমাবদ্ধ কিছু আছে যা আমরা কিছু প্রাকটিক্যালকুলেশন করতে পারি?
ফ্র্যাঙ্ক

পূর্ণসংখ্যার সম্ভাব্য পরিসীমাটি 100,000s এ রয়েছে
ডেভিড গিবসন

উত্তর:


18

হুম, আমি দুটি সম্ভাব্য আলগোরিদিম মনে করতে পারেন: একটি রৈখিক মাধ্যমে স্ক্যান একজন ক্রম, অথবা সূচকের ধ্রুবক সময় লুকআপ সঙ্গে একটি অভিধান বিল্ডিং।

আপনি যদি একক বৃহত্তর সিকোয়েন্স A এর বিপরীতে অনেকগুলি সম্ভাব্য উপসর্গ B পরীক্ষা করে থাকেন তবে আমি আপনাকে পরামর্শ দিচ্ছি অভিধানের সাথে বৈকল্পিকটি ব্যবহার করুন।

লিনিয়ার স্ক্যান

বিবরণ

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

এটি সর্বদা ও (সিক.সাইজ) এ চলে

সুডোকোড

আবশ্যক শৈলী:

def subsequence? seq, subseq:
  i = 0
  for item in subseq:
    i++ while i < seq.size and item != seq[i]
    return false if i == seq.size
  return true

কার্যকরী শৈলী:

let rec subsequence? = function
| _ [] -> true
| [] _ -> false
| cursor::seq item::subseq ->
  if   cursor = item
  then subsequence? seq subseq
  else subsequence? seq item::subseq

উদাহরণ বাস্তবায়ন (পার্ল):

use strict; use warnings; use signatures; use Test::More;

sub is_subsequence_i ($seq, $subseq) {
  my $i = 0;
  for my $item (@$subseq) {
    $i++ while $i < @$seq and $item != $seq->[$i];
    return 0 if $i == @$seq;
  }
  return 1;
}

sub is_subsequence_f ($seq, $subseq) {
  return 1 if @$subseq == 0;
  return 0 if @$seq == 0;
  my ($cursor, @seq) = @$seq;
  my ($item, @subseq) = @$subseq;
  return is_subsequence_f(\@seq, $cursor == $item ? \@subseq : $subseq);
}

my $A = [1, 2, 3, 4];
my $B = [1, 3];
my $C = [1, 3, 4];
my $D = [3, 1];
my $E = [1, 2, 5];

for my $is_subsequence (\&is_subsequence_i, \&is_subsequence_f) {
  ok $is_subsequence->($A, $B), 'B in A';
  ok $is_subsequence->($A, $C), 'C in A';
  ok ! $is_subsequence->($A, $D), 'D not in A';
  ok ! $is_subsequence->($A, $E), 'E not in A';
  ok $is_subsequence->([1, 2, 3, 4, 3, 5, 6], [2, 3, 6]), 'multiple nums';
}

done_testing;

অভিধান অনুসন্ধান

বিবরণ

আমরা ক্রম A এর আইটেমগুলি তাদের সূচকগুলিতে ম্যাপ করি । তারপরে আমরা বি এর প্রতিটি আইটেমের জন্য উপযুক্ত সূচকগুলি সন্ধান করি , সেই সূচকগুলি যেগুলি ছোট। যখন কোনও সূচকগুলি পাওয়া যায় না, তখন বি কোনও উপসর্গ নয়।

ও (সাবক্লিক.সাইজ · কে) এর মতো কোনও কিছুর মধ্যে চলে , যেখানে কে কতগুলি সদৃশ সংখ্যা রয়েছে তা বর্ণনা করে seq। প্লাস একটি ও (seq.size) ওভারহেড

এই সমাধানটির সুবিধাটি হ'ল একবার আপনি অনুসন্ধানের টেবিলটি তৈরির ওভারহেড প্রদান করার পরে একটি নেতিবাচক সিদ্ধান্তটি খুব দ্রুত (ধ্রুবক সময় পর্যন্ত) পৌঁছানো যায়।

সুডোকোড:

আবশ্যক শৈলী:

# preparing the lookup table
dict = {}
for i, x in seq:
  if exists dict[x]:
    dict[x].append(i)
  else:
    dict[x] = [i]

def subsequence? subseq:
  min_index = -1
  for x in subseq:
    if indices = dict[x]:
      suitable_indices = indices.filter(_ > min_index)
      return false if suitable_indices.empty?
      min_index = suitable_indices[0]
    else:
      return false
  return true

কার্যকরী শৈলী:

let subsequence? subseq =
  let rec subseq-loop = function
  | [] _ -> true
  | x::subseq min-index ->
    match (map (filter (_ > min-index)) data[x])
    | None -> false
    | Some([]) -> false
    | Some(new-min::_) -> subseq-loop subseq new-min
  in
    subseq-loop subseq -1

উদাহরণ বাস্তবায়ন (পার্ল):

use strict; use warnings; use signatures; use Test::More;

sub build_dict ($seq) {
  my %dict;
  while (my ($i, $x) = each @$seq) {
    push @{ $dict{$x} }, $i;
  }
  return \%dict;
}

sub is_subsequence_i ($seq, $subseq) {
  my $min_index = -1;
  my $dict = build_dict($seq);
  for my $x (@$subseq) {
    my $indices = $dict->{$x} or return 0;
    ($min_index) = grep { $_ > $min_index } @$indices or return 0;
  }
  return 1;
}

sub is_subsequence_f ($seq, $subseq) {
  my $dict = build_dict($seq);
  use feature 'current_sub';
  return sub ($subseq, $min_index) {
    return 1 if @$subseq == 0;
    my ($x, @subseq) = @$subseq;
    my ($new_min) = grep { $_ > $min_index } @{ $dict->{$x} // [] } or return 0;
    __SUB__->(\@subseq, $new_min);
  }->($subseq, -1);
}

my $A = [1, 2, 3, 4];
my $B = [1, 3];
my $C = [1, 3, 4];
my $D = [3, 1];
my $E = [1, 2, 5];

for my $is_subsequence (\&is_subsequence_i, \&is_subsequence_f) {
  ok $is_subsequence->($A, $B), 'B in A';
  ok $is_subsequence->($A, $C), 'C in A';
  ok ! $is_subsequence->($A, $D), 'D not in A';
  ok ! $is_subsequence->($A, $E), 'E not in A';
  ok $is_subsequence->([1, 2, 3, 4, 3, 5, 6], [2, 3, 6]), 'multiple nums';
}

done_testing;

অভিধান চেহারা বৈকল্পিক: একটি সসীম স্টেট মেশিন হিসাবে এনকোডিং

বিবরণ

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

দেখার সময় আমরা একটি কার্সার বজায় রাখি যা প্রাথমিকভাবে গাছের প্রথম নোড। এরপরে আমরা সাবলিস্ট বিতে প্রতিটি উপাদানগুলির জন্য প্রান্তটি হাঁটাচ্ছি । যদি এ জাতীয় প্রান্তটি বিদ্যমান না থাকে, তবে বি কোনও সাবলিস্ট নয়। যদি সমস্ত উপাদানগুলির পরে কার্সারে একটি বৈধ নোড থাকে, তবে বি একটি সাবলিস্ট।

সুডোকোড

আবশ্যক শৈলী:

# preparing the graph
graph = {}
for x in seq.reverse:
  next_graph = graph.clone
  next_graph[x] = graph
  graph = next_graph

def subseq? subseq:
  cursor = graph
  for x in subseq:
    cursor = graph[x]
    return false if graph == null
  return true

কার্যকরী শৈলী:

let subseq? subseq =
  let rec subseq-loop = function
  | [] _ -> true
  | x::subseq graph -> match (graph[x])
    | None -> false
    | Some(next-graph) -> subseq-loop subseq next-graph
  in
    subseq-loop subseq graph

উদাহরণ বাস্তবায়ন (পার্ল):

use strict; use warnings; use signatures; use Test::More;

sub build_graph ($seq) {
  my $graph = {};
  for (reverse @$seq) {
    $graph = { %$graph, $_ => $graph };
  }
  return $graph;
}

sub is_subsequence_i ($seq, $subseq) {
  my $cursor = build_graph($seq);
  for my $x (@$subseq) {
    $cursor = $cursor->{$x} or return 0;
  }
  return 1;
}

sub is_subsequence_f ($seq, $subseq) {
  my $graph = build_graph($seq);
  use feature 'current_sub';
  return sub ($subseq, $graph) {
    return 1 if @$subseq == 0;
    my ($x, @subseq) = @$subseq;
    my $next_graph = $graph->{$x} or return 0;
    __SUB__->(\@subseq, $next_graph);
  }->($subseq, $graph);
}

my $A = [1, 2, 3, 4];
my $B = [1, 3];
my $C = [1, 3, 4];
my $D = [3, 1];
my $E = [1, 2, 5];

for my $is_subsequence (\&is_subsequence_i, \&is_subsequence_f) {
  ok $is_subsequence->($A, $B), 'B in A';
  ok $is_subsequence->($A, $C), 'C in A';
  ok ! $is_subsequence->($A, $D), 'D not in A';
  ok ! $is_subsequence->($A, $E), 'E not in A';
  ok $is_subsequence->([1, 2, 3, 4, 3, 5, 6], [2, 3, 6]), 'multiple nums';
}

done_testing;

একদিকে যেমন, আপনি কীভাবে studyকাজ করেছেন এবং কীভাবে এটি কাজ করে এবং যদি এটি প্রয়োগ হয় সেই অ্যালগরিদমগুলিতে এখানে কিছু ব্যবহারিক প্রয়োগ থাকতে পারে কি?

1
@ মিশেলটি আমি নিশ্চিত যে আমি বুঝতে পেরেছি না ... আমি একজন আন্ডারগ্র্যাড, তবে কীভাবে আসলে অধ্যয়ন করতে হবে তা আমি এখনও আবিষ্কার করতে পারি নি </ জোক>>। আপনি যদি পার্ল বিল্টিন ফাংশনটির বিষয়ে কথা বলছেন: এটি আজকাল কোনও অ-নির্বাচন। বর্তমান বাস্তবায়ন পিছনের সামঞ্জস্যের মাত্র এক ডজন লাইন। রেজেক্স ইঞ্জিন সরাসরি যেমন হিউরিস্টিকস নিয়োগ করে যেমন ভেরিয়েবল-আকারের নিদর্শনগুলির সাথে মেলে তার আগে ধ্রুব স্ট্রগুলি অনুসন্ধান করা। studyএর আগে আমার দ্বিতীয় সমাধানের বিপরীতে নয়, চরিত্র থেকে অবস্থানের জন্য সারণী তৈরি করা হয়েছিল।
আমন

আরও ভাল আলগোরিদিম সঙ্গে আপডেট
আমন

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

@ মিশেলটি আপনি সঠিক যে আমরা এইভাবে একটি সনাক্তকারী তৈরি করতে পারি । তবে আমরা ইতিমধ্যে O · O (B) + O (f (A)) এ প্রারম্ভিককরণের ব্যয়টি নেমে এসেছি । সমস্ত বিএসের ত্রি-জাতীয় কাঠামো তৈরি করা ও (এ) এর সাথে মিলের সাথে ও (এন · বি) এর মতো কিছু নেবে । এটি তাত্ত্বিকভাবে কম ব্যয় করার আসল সুযোগ রয়েছে (তৃতীয় দ্রষ্ট্রে গ্রাফ তৈরি করা ব্যয়বহুল হতে পারে, তবে এটি কেবলমাত্র এক সময়ের মূল্য)। আমি মনে করি একটি ট্রাই A ≫ n · B এর জন্য আরও উপযুক্ত । আমি সম্ভবত উত্তর 6h এ আপডেট করব।
আমন

6

এখানে একটি ব্যবহারিক পদ্ধতি যা আপনার নিজস্ব অ্যালগরিদম বাস্তবায়নের "কঠোর পরিশ্রম" এড়ায় এবং "চাকা পুনরায় উদ্ভাবন" করতে এড়িয়ে যায়: সমস্যার জন্য নিয়মিত এক্সপ্রেশন ইঞ্জিন ব্যবহার করুন।

কেবলমাত্র A এর সমস্ত সংখ্যা একটি স্ট্রিংয়ে রেখে দিন এবং খ এর সমস্ত সংখ্যাকে নিয়মিত প্রকাশ দ্বারা পৃথক করে স্ট্রিংয়ে রেখে দিন (.*)^শুরুতে এবং $শেষে একটি অক্ষর যুক্ত করুন । তারপরে আপনার পছন্দের নিয়মিত অভিব্যক্তি ইঞ্জিনটি সমস্ত মিলের জন্য অনুসন্ধান করতে দিন। উদাহরণস্বরূপ, যখন

এ = (1234356), বি = (236)

বি এর মতো একটি রেগ এক্সপ্রেস তৈরি করুন ^(.*)2(.*)3(.*)6(.*)$। এখন একটি গ্লোবাল রেজিপ্স্প অনুসন্ধান চালান। আপনার উপসর্গটিতে কোন পদের সাথে মিলছে তা জানতে, প্রথম 3 টি সাবম্যাচগুলির দৈর্ঘ্য পরীক্ষা করুন।

যদি আপনার পূর্ণসংখ্যার পরিসীমা 0 থেকে 9 অবধি ছেড়ে যায়, আপনি এই কাজটি করার জন্য প্রথমে তাদের একক অক্ষর দ্বারা এনকোড করার কথা ভাবতে পারেন, বা আপনাকে কোনও পৃথকীকরণের অক্ষর ব্যবহার করে ধারণাটি মানিয়ে নিতে হবে।

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


একটি রেজেক্স এবং এর ইঞ্জিন চালনার জন্য সমস্ত পথে যেতে হবে না। এটি চালানোর জন্য একটি সাধারণ ডিস্ট্রিমেন্টিক সসীম অটোমেটা ব্যবহার করা সম্ভব হবে। এটি একটি 'সরলরেখা' রুট দিয়ে।

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

আপনার জেনেরিক লাইব্রেরি লাগবে না। আপনার যা দরকার তা হ'ল 'প্যাটার্ন' এর অ্যারে এবং অ্যারেতে সূচকের পয়েন্টার। সূচকটি পরবর্তী "সন্ধানী" মানটির দিকে নির্দেশ করে এবং আপনি উত্স থেকে পড়লে সূচকটি বৃদ্ধি করে। আপনি অ্যারের শেষে আঘাত করলে, আপনি এটি মেলে। আপনি যদি শেষের দিকে না পৌঁছে উত্সের শেষটি পড়েন তবে আপনি এটি মেলে নি।

@ মিশেলটি: তাহলে কেন আপনি উত্তর হিসাবে সেই অ্যালগরিদমের স্কেচ পোস্ট করবেন না?
ডক ব্রাউন

বেশিরভাগ কারণ এর ইতিমধ্যে ইতিমধ্যে উত্তম জবাব দেওয়া হয়েছে - "আমরা ধারাবাহিক এ এর ​​জন্য একটি কার্সার বজায় রাখি Then তারপরে আমরা উপসৌক বিতে সমস্ত আইটেমের মাধ্যমে পুনরাবৃত্তি করব প্রতিটি আইটেমের জন্য, আমরা কোনও মিলের আইটেম না পাওয়া পর্যন্ত কার্সারটিকে A এ এগিয়ে নিয়েছি। যদি না মিলে যাওয়া আইটেমটি পাওয়া গেল, তবে বি কোনও অনুচ্ছেদে নয় "

0

দৈর্ঘ্য পাওয়া এবং ক্রম পুনরাবৃত্তি দক্ষ হলে এই অ্যালগরিদমটি বেশ দক্ষ হওয়া উচিত।

  1. উভয় অনুক্রমের দৈর্ঘ্যের তুলনা করুন are দীর্ঘতর sequenceএবং আরও খাটো সংরক্ষণ করুনsubsequence
  2. উভয় ক্রমের শুরুতে শুরু করুন এবং শেষ পর্যন্ত লুপ করুন sequence
    1. বর্তমান পজিশনে সংখ্যার sequenceসমান বর্তমান অবস্থানে সংখ্যাটি কি?subsequence
    2. যদি হ্যাঁ, উভয় অবস্থানকে আরও এগিয়ে যান
    3. যদি তা না হয় তবে কেবল sequenceএকটির অবস্থানে যান
  3. subsequenceএর শেষে অবস্থানে রয়েছেsequence
  4. হ্যাঁ, দুটি সিকোয়েন্স মেলে
  5. যদি না হয় তবে দুটি সিকোয়েন্স মেলে না
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.