সংঘর্ষ সনাক্তকরণ কি সর্বদা হে (এন ^ 2) হয়?


14

পদার্থবিজ্ঞানের ইঞ্জিন কি সেই জটিলতা হ্রাস করতে সক্ষম হয়, উদাহরণস্বরূপ, একে অপরের কাছাকাছি থাকা অবজেক্টগুলিকে গ্রুপ করে এবং সমস্ত গ্রুপের পরিবর্তে এই গ্রুপের ভিতরে সংঘর্ষের জন্য পরীক্ষা করে? (উদাহরণস্বরূপ, কোনও গ্রুপের গতিবেগ এবং অন্যান্য বস্তুর থেকে দূরত্ব দেখে দূরবর্তী অবজেক্টগুলি অপসারণ করা যেতে পারে)।

যদি তা না হয় তবে তা কি গোলকের (3 ডি) বা ডিস্কের (2 ডি তে) সংঘর্ষকে তুচ্ছ করে তোলে? আমি কি একটি ডাবল লুপ তৈরি করব, বা পরিবর্তে জোড়াগুলির একটি অ্যারে তৈরি করব?

সম্পাদনা: বুলেট এবং বক্স 2 ডি এর মতো পদার্থবিজ্ঞানের ইঞ্জিনের জন্য কি সংঘর্ষ সনাক্তকরণ এখনও ও (এন (2)?


12
দুটি শব্দ: স্থানিক বিভাজন
মাইকেলহাউস


1
আপনি বাজি ধরুন। আমি বিশ্বাস করি উভয়েরই এসএপি ( সুইপ এবং ছাঁটাই ) এর প্রয়োগ রয়েছে ( অন্যদের মধ্যে) যা একটি হে (এন লগ (এন)) অ্যালগরিদম। আরও জানতে "ব্রড ফেজের সংঘর্ষ সনাক্তকরণ" অনুসন্ধান করুন।
মাইকেলহাউস

2
@ বাইট 56 সুইপ এবং প্রুনে জটিলতা হে (এন লগ (এন)) রয়েছে কেবলমাত্র যদি আপনার পরীক্ষা করে প্রতিবার সাজানোর প্রয়োজন হয়। আপনি অবজেক্টের একটি বাছাই করা তালিকা রাখতে চান এবং প্রতিবার আপনি একটি যুক্ত করুন, কেবল এটি সঠিক জায়গায় হে (লগ (এন)) বাছাই করুন সুতরাং আপনি ও (লগ (এন) + এন) = ও (এন) পাবেন get যদিও বস্তুগুলি চলন্ত শুরু করলে এটি খুব জটিল হয়ে যায়!
মার্টিনটী ভার্গা

1
@ এসএম 4, যদি চলাচলগুলি সীমাবদ্ধ থাকে তবে বুদ্বুদ সাজানোর কয়েকটি পাস তার যত্ন নিতে পারে (সরিয়ে নেওয়া অবধি কেবল সরানো বস্তু চিহ্নিত করুন এবং এ্যারে সামনের দিকে বা পিছনে সরিয়ে দিন। কেবল অন্য সরানো অবজেক্টের জন্য নজর রাখুন
রাচেট ফ্রিক

উত্তর:


14

স্থানিক বিভাগ সর্বদাই সবচেয়ে খারাপ ক্ষেত্রে O (N ^ 2) হয় এবং তথ্য সূচিতে জটিলতার বিষয়টি এটিই।

তবে এমন অ্যালগরিদম রয়েছে যা লিনিয়ার সময় কাজ করে O (N) । এগুলির সবগুলি কোনও একরকম সুইপ লাইনের উপর ভিত্তি করে।

মূলত আপনার নিজের বস্তুগুলিকে একটি স্থানাঙ্ক অনুসারে বাছাই করা দরকার। X বলে নেওয়া যাক আপনি যদি সংঘর্ষ শনাক্ত করার আগে প্রতিবার বাছাই করেন তবে জটিলতাটি O (N * লগএন) হবে be কৌশলটি কেবল তখনই সাজানো হয় যখন আপনি দৃশ্যে কোনও অবজেক্ট যুক্ত করেন এবং পরে যখন দৃশ্যের কোনও পরিবর্তন ঘটে। আন্দোলনের পরে বাছাই করা তুচ্ছ নয়। একটি অ্যালগরিদমের জন্য নীচের লিঙ্কযুক্ত কাগজটি দেখুন যা আন্দোলনে চলে এবং এখনও লিনিয়ার সময়ে কাজ করে।

তারপরে আপনি বাম থেকে ডানে ঝাপটান। আপনার সুইপ লাইনটি যখনই কোনও জিনিসের শুরুটি অতিক্রম করে, আপনি এটিকে একটি অস্থায়ী তালিকার ভিতরে রাখেন। প্রতিবার আপনার সুইপ লাইনটি যখন বস্তুটি থেকে বেরিয়ে আসে, আপনি এটিকে তালিকা থেকে বাইরে নিয়ে যান। আপনি কেবল এই অস্থায়ী তালিকার মধ্যে সংঘর্ষগুলি বিবেচনা করুন।

নিষ্পাপ সুইপ লাইনটি খুব খারাপ ক্ষেত্রে ও (N objects 2) হয় (আপনি সমস্ত বস্তুকে বাম থেকে ডানদিকে পুরো মানচিত্রটি তৈরি করেন) তবে আপনি এটি আরও চৌকস করে ও (এন) তৈরি করতে পারেন (নীচের লিঙ্কটি দেখুন)। একটি সত্যই ভাল অ্যালগরিদম বেশ জটিল হবে।

এটি সুইপ লাইনটি কীভাবে কাজ করে তা সাধারণ চিত্র:

সুইপ লাইন অ্যালগরিদম

বাম থেকে ডানে লাইনটি ঝাপটায়। অবজেক্টগুলি এক্স স্থানাঙ্ক অনুসারে বাছাই করা হয়।

  • কেস এক: প্রথম দুটি বস্তু চেক করা হয়। অন্য কিছু নয়।
  • কেস দ্বিতীয়: প্রথম অবজেক্টটি চেক করা হয়েছিল এবং তালিকা থেকে চলে গেছে। দুই এবং তিনটি চেক করা হয়।
  • তৃতীয় কেস: এমনকি যদি সেই বস্তুটি আইএসের সাথে সংঘর্ষ হয় তবে আমরা চেক করি না।
  • মামলা চার: কারণ আমরা এই ক্ষেত্রে চেক!

এর মতো অ্যালগরিদমে জটিলতা O (C * N) = O (N) থাকে।

উত্স: গণনা জ্যামিতি কোর্স দুই বছর।

সংঘর্ষ সনাক্তকরণে এটিকে সাধারণত সুইপ এবং ছাঁটাই বলা হয় ছাঁটাই বলা হয় তবে অ্যালগোরিদমের সুইপ লাইন পরিবার অন্যান্য অনেক ক্ষেত্রে কার্যকর is

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


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


বক্স 2 ডি / বুলেট এটি ব্যবহার করে?
জোকুন

3
"সুইপ এবং ছাঁটাই" এটিকে সাধারণত পদার্থবিজ্ঞানের জন্য বলা হয়। সুন্দর জিনিস সিমুলেশন উন্নত হিসাবে আপনি বাছাই আপডেট রাখতে পারেন। এছাড়াও, আপনার গ্রাফিকের সুইপ লাইনটি প্রয়োগের ক্ষেত্রে কিছুটা বন্ধ (যদিও তত্ত্বের পক্ষে ভাল) - আপনি কেবল বাক্সটির শুরু / শেষের দিকে পুনরাবৃত্তি করবেন, যাতে আপনি কেবল প্রকৃত সম্ভাব্য সংঘর্ষগুলি পরীক্ষা করে দেখবেন। সরাসরি ব্যবহারের পরিবর্তে আরও সক্ষম স্থানিক পার্টিশন গাছগুলি উত্পন্ন করার জন্য ব্যবহৃত এই পদ্ধতিটি দেখুন।
শান মিডলডিচ

3
যেহেতু টেকনিক্যালি সেখানে আসলে হে (ঢ ^ 2) pairwise দুর্ঘটনায় হতে পারে, তাই না সম্পূর্ণরূপে সত্য বলতে চাই যে মিষ্টির-এবং-খেজুর সবসময় হে (ঢ) হয়। বরং, অ্যালগরিদমের মূল জটিলতা হ'ল ও (এন + সি), যেখানে সি অ্যালগরিদমের দ্বারা সংঘর্ষের সংখ্যা - এটি আউটপুট-সংবেদনশীল , অনেকগুলি উত্তল হলের অ্যালগোরিদম হিসাবে। (রেফারেন্স: en.wikipedia.org/wiki/Output-sensitive_algorithm )
স্টিভেন Stadnicki

1
আপনার কিছু দাবি বা প্রকাশনা বা কমপক্ষে অ্যালগরিদমের নাম দিয়ে আপনার দাবিগুলি ফিরিয়ে নেওয়া উচিত।
সাম হোচেভার

1
@ সামোহেশ্বর আমি সত্যিই উন্নত সুইপ এবং প্রুন অ্যালগরিদমের সাথে একটি লিঙ্ক যুক্ত করেছি যা স্থিরদের বিশদ ভাঙ্গার সাথে রৈখিক সময়ে কাজ করে। যে অ্যালগরিদমগুলি "সুইপ এবং ছাঁটাই" বলা হয় তা আমার পক্ষে নতুন ছিল, যেহেতু আমি এর সাথে কখনই কাজ করি নি। আমি এই অ্যালগরিদমগুলি মানচিত্রের নির্বাচনের ক্ষেত্রে ব্যবহার করেছি (যা অন্য সামগ্রীর সাথে 1 পয়েন্টের সংঘর্ষের মতো), তাই আমি কেবল জ্ঞানটি প্রয়োগ করেছি।
মার্টিনটাইভার্গা

8

সংঘর্ষ সনাক্তকরণ সর্বদা ও (এন ^ 2) নয় is

উদাহরণস্বরূপ, বলুন যে আমাদের কাছে 10x10 আকারের অবজেক্ট সহ 100x100 স্পেস রয়েছে। আমরা এই স্থানটি একটি গ্রিডের সাথে 10x10 এর কক্ষে ভাগ করতে পারি।

প্রতিটি বস্তু 4 টি গ্রিড কোষে থাকতে পারে (এটি কোনও ব্লকের সাথে সঠিকভাবে ফিট হতে পারে বা "এর মধ্যে" ঘর হতে পারে)। আমরা প্রতিটি কক্ষে বস্তুর একটি তালিকা রাখতে পারি could

আমাদের কেবল সেই কোষগুলিতে সংঘর্ষের জন্য পরীক্ষা করা দরকার। যদি গ্রিড ঘরে প্রতি সর্বাধিক সংখ্যক অবজেক্ট থাকে (বলুন, একই ব্লকের মধ্যে 4 টিরও বেশি বস্তু কখনই থাকে না), তবে প্রতিটি বস্তুর জন্য সংঘর্ষ সনাক্তকরণ হ'ল হে (1) এবং সমস্ত বস্তুর জন্য সংঘর্ষ সনাক্তকরণ হ'ল ও (এন)।

ও (এন ^ 2) জটিলতা এড়ানোর একমাত্র উপায় এটি নয়। অন্যান্য পদ্ধতি রয়েছে, অন্যান্য ব্যবহারের ক্ষেত্রে আরও পর্যাপ্ত - প্রায়শই গাছ ভিত্তিক ডেটা স্ট্রাকচার ব্যবহার করে।

আমি বর্ণিত অ্যালগরিদম এক ধরণের স্পেস পার্টিশন , তবে অন্যান্য স্পেস পার্টিশনকারী অ্যালগরিদম রয়েছে। আরও কিছু অ্যালগরিদমের জন্য স্পেস পার্টিশন সম্পর্কিত ডেটা স্ট্রাকচারের প্রকারগুলি দেখুন যা ও (এন ^ 2) সাময়িক জটিলতা এড়ায়।

বক্স 2 ডি এবং বুলেট উভয়ই পরীক্ষিত জোড়গুলির সংখ্যা হ্রাস করতে সহায়তা করে।

ম্যানুয়াল থেকে , বিভাগ 4.15:

পদার্থবিজ্ঞানের পদক্ষেপে সংঘর্ষ প্রক্রিয়াজাতকরণকে সরু-পর্যায়ে এবং ব্রড-ফেজে ভাগ করা যায়। সংকীর্ণ পর্যায়ে আমরা আকারের জোড়াগুলির মধ্যে যোগাযোগ পয়েন্টগুলি গণনা করি। আমাদের এন আকার আছে কল্পনা করুন। নিষ্ঠুর শক্তি ব্যবহার করে, আমাদের N * N / 2 জোড়ার সংকীর্ণ-পর্যায় সম্পাদন করা প্রয়োজন।

বি 2 ব্রডফেজ শ্রেণি জুড়ি পরিচালনার জন্য গতিশীল ট্রি ব্যবহার করে এই বোঝা হ্রাস করে। এটি সরু-পর্যায়ে কলগুলির সংখ্যা হ্রাস করে greatly

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

থেকে বুলেট উইকি :

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

গতিশীল এএবিবি গাছ

বুলেট বিটিডিবিভিটিড্রোডফেস এটি বাস্তবায়ন করেছে।

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

সুইপ এবং ছাঁটাই (এসএপি)

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

নিম্নলিখিত লিঙ্কটি ব্রডফেজের একটি সাধারণ ভূমিকা এবং সুইপ এবং প্রুন অ্যালগরিদমের বিবরণ (যদিও এটি এটিকে "বাছাই করুন এবং স্যুইপ" বলেছেন):

http://www.ziggyware.com/readarticle.php?article_id=128

এছাড়াও, উইকিপিডিয়া পৃষ্ঠাটি একবার দেখুন:

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


অনুরূপ প্রশ্ন এবং বাইরের সংস্থাগুলির কিছু লিঙ্ক এটিকে দুর্দান্ত উত্তর দেবে।
মাইকেলহাউস

3
এটা ভুল. আপনি এখনও ও (এন ^ 2) পাচ্ছেন। এটি অনেক দ্রুত হবে, N ^ 2/100 এর মতো কিছু, তবে এখনও N ^ 2। একটি প্রমাণ হিসাবে, কেবল বিবেচনা করুন যে সমস্ত বস্তু একটি ঘরে রয়েছে।
মার্টিনটাইভার্গা

4
@ স্ম4 এটি সবচেয়ে খারাপ ক্ষেত্রে ও (এন ^ 2), যা প্রকৃতপক্ষে যা ঘটে যদি সমস্ত বস্তু একটি ঘরে থাকে। যাইহোক, একটি পদার্থবিদ্যা ইঞ্জিন, বস্তু সাধারণত হবে না এক কক্ষে হও। আমার উদাহরণ হিসাবে, কোনও বস্তু 3 টিরও বেশি অবজেক্টের সাথে একই সেলটি ভাগ করে নিতে পারে না। "সাধারণ" অবজেক্টগুলির জন্য কোনও পদার্থবিজ্ঞানের ইঞ্জিনে এটি ঘটবে (এবং "সাধারণ" মানে "কেবলমাত্র একটি সেন্সর নয়")।
লুস্কুবাল

আমি মনে করি আপনার অ্যালগরিদমের জন্য কেবলমাত্র 4 টি ঘর নয়, আশপাশের 8 টি কোষে পরীক্ষা করা দরকার।
জোকুন

6
@ ফ্লুশাবল জটিলতা সর্বদা "সবচেয়ে খারাপ পরিস্থিতি"। তত্ত্বের মধ্যে আপনি "গ্যারান্টিযুক্ত" জটিলতা খুঁজছেন। এটি কুইকোর্টের সাথে একই, এটি ও (এন ^ 2) এবং একত্রীকরণ, যা হে (এন * লগএন)। কুইকসোর্ট রিয়েল ডেটাতে আরও ভাল পারফর্ম করে এবং এর স্থানিক প্রয়োজন কম। তবে সংযুক্তি আরও জটিলতার গ্যারান্টি দিয়েছে। আপনার যদি কিছু প্রমাণ করার প্রয়োজন হয় তবে মার্জর্ট ব্যবহার করুন। আপনার যদি কিছু সাজানোর দরকার হয় তবে কুইকোর্ট ব্যবহার করুন।
মার্টিনটাইভার্গা

2

ও (এন ^ 2) এটিকে বোঝায় যে আপনার কাছে যদি এন বস্তু রয়েছে তবে কীসের সাথে সংঘর্ষ হচ্ছে তা নির্ধারণ করে, সবচেয়ে খারাপ পরিস্থিতি , এন ^ 2 সংঘর্ষের গণনা। বলুন আপনার কাছে 3 টি অবজেক্ট রয়েছে। "কারা আঘাত করছে" সন্ধান করতে আপনাকে খুঁজে পেতে হবে:

o1 hitting o2?  o1 hitting o3?
o2 hitting o1?  o2 hitting o3?
o3 hitting o1?  o3 hitting o2?

এটি সংঘর্ষের জন্য 6 টি চেক বা এন * (এন -1) চেক। অ্যাসিম্পোটিক বিশ্লেষণে আমরা বহুপদী এবং ও (আনুমানিক 2) হিসাবে আনুমানিক প্রসারিত করব। আপনার যদি 100 টি অবজেক্ট থাকে তবে তা 100 * 99 হবে যা 100 * 100 এর কাছাকাছি।

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

সুতরাং, ও (পুরোপুরি পয়েন্ট) (এন ^ 2) প্রতিটি দেহের প্রকৃতির কারণে দৃশ্যের প্রতিটি অন্যান্য শরীর চেক করছে। এটি কেবল গণনার প্রকৃতি। যদিও এই সস্তা করাতে অনেক কিছুই সাহায্য করতে পারে। এমনকি একটি দৃশ্য গ্রাফ ( কেবল একই ঘরে বস্তুর মধ্যে সনাক্তকরণ বলুন ) উল্লেখযোগ্যভাবে করা সংঘর্ষের গণনা কমিয়ে দেবে, তবে এটি ও (এম ^ 2) (এম যেখানে রুমে অবজেক্টের সংখ্যা বিরুদ্ধে সংঘর্ষ সনাক্ত করা)। গোলাকৃতির বাউন্ডিং ভলিউম প্রাথমিক চেকটি খুব দ্রুত করে তোলে ( if( distance( myCenter, hisCenter ) > (myRadius+hisRadius) ) then MISS), সুতরাং সংঘর্ষ সনাক্তকরণ ও (এন ^ 2) হওয়া সত্ত্বেও, সীমাবদ্ধ গোলক গণনাগুলি খুব দ্রুত ঘটবে বলে সম্ভাবনা রয়েছে।


রেফারেন্স হিসাবে নিষ্ঠুর বলের পরীক্ষা নেওয়ার দরকার নেই: চতুর অ্যালগরিদম নির্বিশেষে এন বস্তুগুলি অন্য সমস্ত বস্তুর সাথে সংঘর্ষে পড়তে পারে, O (N ^ 2) সংঘর্ষের জন্য O (N ^ 2) কাজ প্রক্রিয়া করার প্রয়োজন হয়। যখন কম সংঘর্ষ হয় তখন ভাল অ্যালগরিদম কেবল আরও ভাল করতে পারে।
লরেঞ্জো গাট্টি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.