ফ্লয়েডের চক্র সনাক্তকরণ অ্যালগরিদম | চক্রের প্রারম্ভিক অবস্থান নির্ধারণ করা


32

আমি ফ্লয়েডের চক্র সনাক্তকরণ অ্যালগরিদম বোঝার জন্য সাহায্য চাইছি। আমি উইকিপিডিয়াতে ব্যাখ্যাটি পেরিয়েছি ( http://en.wikedia.org/wiki/Cycle_detection#tortoise_and_hare )

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

আশা করি যে কেউ উইকিপিডিয়া থেকে অন্যের চেয়ে আলাদাভাবে কোনও ব্যাখ্যা দিয়ে সাহায্য করতে পারেন, কারণ আমি এটি বুঝতে / দেখতে সক্ষম নই?


3
আমি উত্তরটি স্ট্যাকওভারফ্লোতে পেয়েছি। কেউ যদি আমার জন্য এটি সন্ধান করে তবে ধন্যবাদ। এবং যারা আমার পছন্দ মত ব্যাখ্যা চান তাদের জন্য দয়া করে দেখুন: stackoverflow.com/questions/3952805/… প্রশ্নের নির্বাচিত উত্তর, এটি ব্যাখ্যা করে!
অনুরাগ কাপুর

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

আপনি কি জানেন যে কেন fastচলক, বা "খরগোশ" কে কেবলমাত্র এক সামনের চেয়ে কচ্ছপের হিসাবে দ্বিগুণ গতিতে চলতে হবে?
devDPper87

প্রোগ্রামটির সাথে সুন্দরভাবে ব্যাখ্যা করা হয়েছে: javabypatel.blogspot.in/2015/12/detect-loop-in-linked-list.html
জয়েশ

উত্তর:


47

আপনি "একক লিঙ্কযুক্ত তালিকায় একটি লুপ শনাক্তকরণ শনাক্তকরণ" উল্লেখ করতে পারেন , এখানে একটি অংশ উদ্ধৃত করুন:

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

slowPointer সাক্ষাতের আগে দূরত্ব ভ্রমণ করেছে =x+y

fastPointer = x + 2y + z মিলনের আগে দূরত্ব ভ্রমণ করেছে=(x+y+z)+y

যেহেতু দ্বিগুণ গতিতে fastPointerভ্রমণ করে এবং সভা পয়েন্টে পৌঁছালে সময় উভয়ের পক্ষে স্থির থাকে। সুতরাং সাধারণ গতি, সময় এবং দূরত্বের সম্পর্ক ব্যবহার করে ( অর্ধেক দূরত্বের ভ্রমণ করেছেন):slowPointerslowPointer

2dist(slowPointer)=dist(fastPointer)2(x+y)=x+2y+z2x+2y=x+2y+zx=z

অত: পর সরিয়ে slowPointerযুক্ত তালিকা শুরুতে, এবং উভয় উপার্জন slowPointerএবং fastPointerএকটি সময়ে এক নোড সরাতে, তারা উভয় কভার একই দূরত্ব আছে

লিংকটি লিঙ্কযুক্ত তালিকায় শুরু হয় সেখানে পৌঁছে যাবে।


2
এখানে আপনি একটি ধারণা তৈরি করেছেন যে তারা একটি ঘোরার পরে দেখা করবে। কিছু ক্ষেত্রে (যেখানে চক্রটি ছোট) সেখানে তারা নির্দিষ্ট নম্বর-এর পরে দেখা করতে পারে। ঘূর্ণন।
নবজোট ওয়ারাইচ

1
@ জোতওয়ারাইচ চিত্রটি সমস্ত ক্ষেত্রে প্রতিনিধি নয়; যুক্তিটি এখনও ধরে আছে
অস্বীকার করুন is

3
পুরো ইন্টারনেটের এই অ্যালগরিদম সম্পর্কে এটি সর্বাধিক সোজা সামনের উত্তর
মার্শাল এক্স

7

আমি গ্রহণযোগ্য উত্তরটি অন্য কোথাও প্রমাণ হিসাবে দেখেছি। তবে, কুঁচকানো সহজ, এটি ভুল while যা প্রমাণ করে তা হ'ল

x=z (যা স্পষ্টতই ভুল এবং ডায়াগ্রামটি এটি স্কেচ করার পদ্ধতিটির কারণে একে কল্পনাযোগ্য বলে মনে করে)।

আপনি যা সত্যই প্রমাণ করতে চান তা হ'ল (উপরের স্বীকৃত উত্তরে ডায়াগ্রামে বর্ণিত একই ভেরিয়েবলগুলি ব্যবহার করে):

z=x mod (y+z)

এল(y+z) হ'ল লুপ দৈর্ঘ্য,L

সুতরাং, আমরা যা প্রমাণ করতে চাই তা হ'ল:

z=x mod L

বা যে জেডটি এক্স (মডুলো এল) এর সাথে একমত

প্রমাণ অনুসরণ করা আমার আরও অর্থবোধ করে:

মিটিং পয়েন্ট,M=x+y

কে এক্স + ওয়াই এল2(x+y)=M+kL , যেখানে কিছু ধ্রুবক। মূলত, দ্রুত পয়েন্টারে ভ্রমণ করা দূরত্বটি প্লাস, লুপের দৈর্ঘ্যের একাধিক,kx+yL

x+y=kL

x=kLy

উপরের সমীকরণটি প্রমাণ করে যে লুপ দৈর্ঘ্যের কয়েকটি একাধিক সমান, মাইনাস । সুতরাং, যদি দ্রুত পয়েন্টারটি মিটিং পয়েন্ট, বা , তবে এটি লুপের শুরুতে শেষ হবে।L y M x + yxLyMx+y


0

আমি উত্তরটি স্ট্যাকওভারফ্লোতে পেয়েছি। কেউ যদি আমার জন্য এটি সন্ধান করে তবে ধন্যবাদ। : আর যারা আমার মত একটি ব্যাখ্যা চেয়েছিলেন জন্য, দয়া করে পড়ুন https://stackoverflow.com/questions/3952805/proof-of-detecting-the-start-of-cycle-in-linked-list করার জন্য চয়ন উত্তর প্রশ্ন, ব্যাখ্যা!

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