এন কুইনস, এক্স বাই ওয়াই বোর্ডের সিদ্ধান্ত সমস্যার সাক্ষাত্কারের প্রশ্ন


10

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

ওয়াই এবং এন কুইন দ্বারা X মাত্রাযুক্ত একটি দাবা বোর্ড দেওয়া, বোর্ডে এই রানীগুলি এমনভাবে সাজানো সম্ভব যে তারা একে অপরকে আক্রমণ করতে পারে না তা নির্ধারণ করুন।

2 কুইন সহ 2 এক্স 3 বোর্ডের একটি সমাধান রয়েছে যাতে অ্যালগরিদম সত্য ফিরে আসবে:

Q . .
. . Q

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



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

1
সাক্ষাত্কারটি ন্যায্য বলেছিলেন যে এটি কেবল একটি অতিরিক্ত creditণের ধরণের জিনিস ছিল। সাক্ষাত্কারের বাকি অংশটি ছিল বেশিরভাগ বৈধ আইএমও। আমি শুধু কৌতুহলী ছিলাম.
ইন্টারভিউবি

সম্ভবত এটি একটি পরীক্ষা ছিল যদি তিনি ব্যাকট্র্যাকিংয়ের সাথে একটি সিমুলেশন তৈরি করেন বা (উত্তরণের বিষয়ে চিন্তাভাবনা করুন) ও (1) তার উত্তরে কালেব দ্বারা বর্ণিত তথ্যগুলি ব্যবহার করে সমাধানটি তৈরি করেন। সাধারণ জিনিসগুলিকে প্রোগ্রাম করার দক্ষতা কাজের প্রত্যেকটির প্রয়োজন হয় না।
সোপেল

হোমওয়ার্ক অ্যাসাইনমেন্টগুলি এখানে স্পষ্টভাবে সুযোগের বাইরে রয়েছে।
11:53 এ jwenting

উত্তর:


16

প্রোগ্রামিং দৃষ্টিকোণ থেকে এটি (আইএমও) খুব আকর্ষণীয় সমস্যা নয়। আপনি একটি পুনরাবৃত্ত আলগোরিদিম নিয়ে আসতে পারেন যা প্রতিটি ব্যবস্থা চেষ্টা করে, এরকম কিছু:

bool try_queens(Board board, int n)
{
    if (n == 0) {
        // no queens left to place, so we're done
        return true
    }
    // try each open position until we find one that works
    for each position on the board {
        if (is_empty(board, position) and not is_attacked(board, position)) {
            place_queen(board, position)
            if (try_queens(board, n-1)) {
                return true
            }
            remove_queen(board, position)
        }
    }
    // if we get this far, there's no available position
    return false
}

main()
{
    initialize board(X,Y)
    return try_queens(board, N)
}

আপনি যদি সমস্যাটি সম্পর্কে কিছুটা ভাবেন, তবে আপনি বুঝতে পারবেন যে কোনও বোর্ডে N <কুইন ফিট করার কোনও উপায় নেই যেখানে এক্স <এন বা ওয়াই <এন রয়েছে কারণ এটির জন্য কমপক্ষে দুটি রানী একই র‌্যাঙ্ক বা ফাইলে সমাপ্ত হতে হবে, এবং তারা একে অপরকে আক্রমণ করবে। আপনি যদি এন-কুইন সমস্যা সম্পর্কে পড়ে থাকেন তবে আপনি দ্রুত শিখবেন যে এন> 3 এর জন্য একটি এনএক্সএন বোর্ডে এন কুইন্স স্থাপন করা সর্বদা সম্ভব Now এখন আমরা জানি যে উত্তরটি (এক্স <এন বা ওয়াই <এন) এর জন্য কোনও হয় না এবং হ্যাঁ (এক্স> = এন এবং ওয়াই> = এন, এন> 3) এর জন্য। যা কিছু বাকি রয়েছে তা বিশেষ কেস:

  • এন = 1 (হ্যাঁ)
  • এন = 2 (এক্স> = 2 এবং Y> 2 বা বিপরীতে ইয়েস)
  • এন = 3 (এক্স> = 3 এবং ওয়াই> 3 বা বিপরীতে ইয়েস)

সুতরাং এখন আমাদের সুন্দর পুনরাবৃত্তি ফাংশন একটি সাধারণ ফাংশন হয়ে যায় যা কেবল N এবং X এবং Y এর সাথে তুলনা করে এবং একটি ক্যানড ফল দেয়। পারফরম্যান্স দৃষ্টিকোণ থেকে এটি দুর্দান্ত, যেহেতু আপনি অবিচ্ছিন্ন সময়ে উত্তর পেতে পারেন। প্রোগ্রামিং দৃষ্টিকোণ থেকে এটি এত দুর্দান্ত নয় কারণ আপনি উপলব্ধি করেছেন যে এই মুহুর্তে, প্রশ্নটি আপনার ধাঁধাটি যে কতটা ভাল সমাধান করতে পারে সে সম্পর্কে এটি আপনার পুনরাবৃত্তির ফাংশন লেখার ক্ষমতার তুলনায় আরও সত্য well

(এবং ছেলে ওহ ছেলে, আমি সত্যিই আশা করি যে আমি আমার স্মার্ট প্যান্টের জবাবটিতে কোনও বোবা ভুল করি নি। ;-)


That's great from a performance point of view, since you can get an answer in constant time. It's not so great from a programming point of view because you realize, at this point, that the question is really more about how well you can solve puzzles than it is about your ability to write a recursive function.আমি আসলে মনে করি সাক্ষাত্কারকারীর সেই ও (1) সমাধানের জন্য অপেক্ষা করছিল কারণ এটি চূড়ান্তভাবে ভাল এবং অনেকের পক্ষে সুস্পষ্ট নয়। এনএক্সএন কুইন সমস্যা সমস্ত প্রোগ্রামিং কোর্সে পুনরাবৃত্তির সংক্ষিপ্তসার হিসাবে রয়েছে - অনেকে আবার সমস্যাটি দেখলে আরও গভীর চিন্তা করবেন না।
সোপেল

4

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

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

http://en.wikipedia.org/wiki/Eight_queens_puzzle

এছাড়াও কোডটি এখানে পাওয়া যাবে: http://www.codeproject.com/KB/java/EightQueen.aspx

এটিকে খারাপ মনে করবেন না, যেমনটি আমি বলেছিলাম, এটি সহজ কিছু নয়।


0

এটি সত্যিই একটি মন্তব্য বেশি, কিন্তু এটি সেখানে ফিট করে না ...

একটি দাবা বোর্ডের 8x8 স্কোয়ার রয়েছে, আর কম নয় (এই প্রশ্নগুলি আমাকে সর্বদা পছন্দসই দাবা বোর্ডের পদ্ধতির সাথে বিরক্ত করে))

তবে যাইহোক, আপনার যদি একটি এক্স * ওয়াই দাবা বোর্ড থাকে, এবং এন রানী থাকে এবং গ্রহণ করে যে রানী এই ক্ষেত্রগুলি "গ্রহণ" করে

এখানে চিত্র বর্ণনা লিখুন

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

এটি অবশ্যই খুব সরলীকরণের পদ্ধতি, যেহেতু যদি খারাপ পদ্ধতিতে অবস্থান করা হয় তবে আমি সর্বাধিক সংখ্যক রাণীকে আলাদা করতে পারি।

হুম, ঠিক এটিও পেয়েছি - 8 রানীর সমস্যা।


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

@ ইন্টারভিভিউ - হ্যাঁ, আমি জানি। এটি আমার মাথার উপরের দিক থেকে সবেমাত্র এমন কিছু মনে হয়েছিল। যেমনটি বলা হয়েছে, এটি একটি আকর্ষণীয় সমস্যা এবং সম্ভবত উন্নতি হতে পারে, তবে সকাল 4 টায় (এখানে) আমি ভাবতে খুব অলস। বিটিডব্লিউ, সাক্ষাত্কারটি কেমন গেল?
রুক

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

আমি পছন্দ করি যে আপনার অবতারটি দাবা টুকরা :)
ওয়ারেন

0

মূলত, ব্যাকট্র্যাক অ্যালগরিদম এইভাবে কাজ করে:

  1. ওয়াই অ্যারে দ্বারা একটি এক্স তৈরি করুন। সমস্ত স্কোয়ার খালি রাখুন।

  2. রানির গণনা শূন্যে সেট করুন।

  3. আপনার বর্তমান অবস্থানটি সেট করুন (1,1)

  4. আপনি বর্তমান অবস্থানে একটি রানী স্থাপন করতে পারেন কিনা দেখুন।

  5. যদি আপনি পারেন, রানিকে অ্যারে (এক্স, ওয়াই) সেট করুন, রানির সংখ্যা বাড়ান। আপনি যদি সমস্ত রানিকে স্থাপন করেন তবে থামুন , আপনার কাছে একটি সমাধান রয়েছে।

  6. যদি বর্তমান অবস্থানটি (এক্স, ওয়াই) না হয় তবে বর্তমান অবস্থানটি বৃদ্ধি করুন এবং 4 ধাপে যান।

  7. শেষ অবস্থানে রানীটি সন্ধান করুন (আপনার বর্ধিত অবস্থানে ক্রমে সর্বশেষ যে আসবেন)। বর্তমান অবস্থানটিকে een রানীর অবস্থান নির্ধারণ করুন, এটিকে সরিয়ে ফেলুন এবং রানির গণনা হ্রাস করুন।

  8. রানির গণনা শূন্য হলে থামুন , কোনও সমাধান নেই।

  9. বর্তমান অবস্থান বৃদ্ধি।

  10. পদক্ষেপ 4 এ যান।


এই বিবরণে অ্যালগরিদম সঠিকভাবে ব্যাকট্র্যাক করে না: এটি কেবল সর্বশেষ স্থানযোগ্য রানিকে সরিয়ে দেয়; আপনি অন্য পজিশনে আগের রানীদের চেষ্টা না করার ঝুঁকি নিয়ে যান।
ক্যাস্পার ভ্যান ডেন বার্গ

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

0

অন্যান্য উত্তরে যুক্ত করা: দ্বি-মাত্রিক অ্যারে তৈরি করা কেবল কোডকে জটিল করে তোলে।

নিয়মিত দাবা বোর্ডের জন্য আপনার কেবল 8 মাপের ভেক্টর দরকার। অথবা 8 + 1 এর মতো সি 1 ম পজিশন 0 হয়, কেবল কোড সরল করতে এবং 1-8 দিয়ে 0-7 নয় not

আপনি যদি অ্যারেতে আপনার অবস্থান এবং x এর অবস্থানের বিষয়বস্তু হওয়া সম্পর্কে ভাবেন। উদাহরণস্বরূপ বোর্ড [1] = 8 এর অর্থ প্রথম রানী [1,8] এ।

এইভাবে, আপনাকে কেবল কলামগুলির বৈধতা পরীক্ষা করতে হবে।

অনুষদকালে, আমি একটি খুব পুরানো বই (60s?) জুড়ে এসেছিলাম, ডার্টমাউথ বেসিক এ প্রয়োগ করা অ্যালগরিদম সম্পর্কে, যা সম্ভব কম স্মৃতি ব্যবহার করে 8 রানীর সমস্যাটিকে বাস্তবায়িত করেছিল (সেই পুরানো হওয়ায় এটি বোধ হয়)।

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

দুঃখের বিষয়, আমি সেই বইটির ট্র্যাক হারিয়েছি ...

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


0

এই জাতীয় ব্যবস্থা বিদ্যমান কিনা তা নির্ধারণ করতে যদি আপনাকে কেবল একটি অ্যালগরিদম লিখতে হয় তবে বিদ্যমান গবেষণাটি দেখুন:
উইকিপিডিয়ায় আটটি কুইন ধাঁধা

এন> মিনিট (এক্স, ওয়াই) হলে আপনি তুচ্ছভাবে মিথ্যা ফিরে আসতে পারেন।
এই পৃষ্ঠাটি পড়ার পরে, আপনি এন <= মিনিট (এক্স, ওয়াই) এবং 2, 3! = মিনিট (এক্স, ওয়াই) হলে সত্যটি ফিরে আসতে জানেন true

যা 2, 3 == মিনিট (এক্স, ওয়াই) এবং এন <= মিনিট (এক্স, ওয়াই) ছেড়ে যায়।

ঠিক আছে, যদি এন <মিনিট (এক্স, ওয়াই) হয় তবে সমাধান সন্ধান করা তুচ্ছ।
যদি এন == মিনিট (এক্স, ওয়াই) হয় তবে সর্বাধিক (এক্স, ওয়াই)> এন থাকলেই এর সমাধান পাওয়া যায় N

f(X, Y, N)
    if X < Y => f(Y, X, N)
    if Y > N => false
    => (Y < N) or (Y != 2 and Y != 3) or (X > N)

0

এন> মিনিট (এক্স, ওয়াই) হলে অবশ্যই কোনও সমাধান নেই। অন্যথায়, আপনি সহজেই দেখতে পারবেন যে এন = এক্স = ওয়াই = 2, এন = এক্স = ওয়াই = 3 এর কোনও সমাধান নেই other এন বাড়ার সাথে সাথে সমাধানগুলির সংখ্যা বাড়তে দেখা যাচ্ছে।

ব্যাকট্র্যাকিংয়ের মাধ্যমে আপনি বিস্তৃত অনুসন্ধানের মাধ্যমে সমাধানটি সন্ধান করতে পারেন: প্রথম সারিতে একটি কুইন রাখুন, কলাম 1। দ্বিতীয় সারিতে একটি রানিকে রাখুন, প্রথম কলামে 1 সারি রানি পৌঁছাতে পারে না। দ্বিতীয় সারিতে একটি রানী ইত্যাদি রাখুন a

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