[Powered by Google Translate] [Walkthrough - সমস্যা সেট করুন 5]
[Zamyla Chan - হার্ভার্ড বিশ্ববিদ্যালয়]
[এটি CS50. - CS50.TV]
>> ঠিক আছে. হ্যালো, প্রত্যেককে, Walkthrough 5 যাও এবং স্বাগত জানাই.
>> Pset5 হয় বানান ভুল, যা আমরা একটি বানান পরীক্ষক তৈরি করা হবে.
-বানান চেকারস হল অত্যন্ত গুরুত্বপূর্ণ.
এই করেনি কখনও আপনি কি?
আপনি খুব কাজ, খুব একটা কাগজে সংঘর্ষ জন্য সম্পদ্
এবং তবু শেষ পর্যন্ত একজন D অথবা একজন D = মত একটি খুব ভাস rade পেয়ে
এবং সব কারণ আপনি তিমি ব্যাপক শব্দ liverwurst ভক্ষক.
হ্যাঁ, আপনার peppers প্রূফ্সংশোধন হয় একটি বিষয়, চরম দুর্বলতা.
এটি একটি সমস্যা যে পুরুষালী, পুরুষালী ছাত্র প্রভাবিত করে.
আমি আমার গ্রেড sith যন্ত্রণাদাতা দ্বারা একবার বলা হয়েছিল যে আমি একটি ভাল সহকর্মী মধ্যে পেতে হবে না.
এবং যে সব আমি কখনও চেয়েছিল, যে সমস্ত কোনো ছাগলছানা আমার বয়সে চায়,
শুধু একটা ভাল সহকর্মী মধ্যে পেতে.
এবং. কেবল কোনো সহকর্মী না নং আমি একটি আইভরি আইনি সহকর্মী যেতে চেয়েছিলেন.
সুতরাং যদি আমি উন্নতি না চলে যাচ্ছে হার্ভার্ডে আমার স্বপ্ন হবে,
Jale, বা প্রিসন - আপনি কি জানেন, এ প্রিসন, নিউ জার্সি.
তাই আমি একটি বানান পরীক্ষক নিজেকে.
এটা আমার প্রিয় একটি উচ্চারিত শব্দ শিল্পী, টেলর মালি এক থেকে সামান্য উদ্ধৃতাংশ.
যাই হোক, হিসাবে তিনি বলেছেন, একটি বানান পরীক্ষক থাকার গুরুত্ব খুবই গুরুত্বপূর্ণ.
>> Walkthrough 5, তাই যা আমরা স্বাগত জানাই pset5 সম্পর্কে কথা বলা হবে: বানান ভুল,
যা আমরা আমাদের নিজস্ব বানান পরীক্ষক তৈরি করা হবে.
এই সপ্তাহের জন্য টুলবাক্স, বন্টন কোড গুরুত্বপূর্ণ তাকান করা যাচ্ছে না
শুধুমাত্র বিভিন্ন ফাংশন যে আপনার অভিধানে আছে যাচ্ছে বুঝতে.
আমরা আসলে করছি যাচ্ছে একাধিক. গ ফাইল একসাথে আমাদের pset করা হচ্ছে.
এবং তাই বিভিন্ন দিক মাধ্যমে খুঁজছেন, যদিও আসলে আমরা সম্পাদনা করছেন না
এক ফাইল, speller.c, বুদ্ধিমান কিভাবে এটি dictionary.c সম্পর্ক সঙ্গে কাজ করে,
আমরা যা লেখা হবে, যাও অত্যন্ত গুরুত্বপূর্ণ হবে.
pset বৈশিষ্ট প্রয়োজনীয় তথ্যও অনেক রয়েছে
এ পদ জিনিস যে আপনি অনুমান করতে পারেন, এবং নিয়ম মত জিনিষ,
তাই pset বৈশিষ্ট পড়া সাবধানে টিপসের জন্য নিশ্চিত করা.
এবং যখন একটি ভালো যে নিয়ম বা কিছু সন্দেহ তারপর, pset বৈশিষ্ট সর্বদা পড়ুন
বা আলোচনা.
এই pset যাও প্রচন্ডভাবে পয়েন্টার নির্ভর করা যাচ্ছে না,
তাই আমরা নিশ্চিত যে আমরা যোগ বড় মধ্যে পার্থক্য বুঝতে পারা করতে চাই
মধ্যে পয়েন্টার এর নাম এবং ampersands, কিভাবে তাদের মুক্ত, ইত্যাদি সামনে
তাই হচ্ছে পয়েন্টার ওস্তাদ এই সমস্যা সেটে খুব সহায়ক হবে.
আমরা সংযুক্ত তালিকার মধ্যে একটি বিট আরো চেয়ে চলুন,
যেখানে আমরা উপাদান আছে যা আমরা নোড যে উভয় একটি মান হিসাবে একটি পয়েন্টার আছে কল
পরবর্তী নোডের, তাই মূলত লিঙ্ক এবং অন্যান্য পর এক বিভিন্ন উপাদান.
কয়েক আপনার প্রকৃত অভিধান রূপায়ণকারী বিভিন্ন অপশন আছে.
আমরা দুটি প্রধান পদ্ধতি আছে, যা হ্যাশ টেবিল এবং পরে চেষ্টা করে দেখব যাও চলুন.
যারা উভয় ইন, তারা একটি লিঙ্ক তালিকা ধারণা কিছু জড়িত করা
যেখানে আপনি উপাদান একে অপরের লিঙ্ক করেছেন.
এবং আমরা উপেক্ষা করা কিভাবে আপনি লিঙ্ক তালিকা কাছাকাছি কাজ করতে সক্ষম হতে পারেন চলুন,
উদাহরণস্বরূপ তাদের, কিভাবে তৈরি শর্তাদির মধ্যে নেভিগেট,, এটি একটি নোডের মধ্যে সন্নিবেশ
বিনামূল্যে বা নোড হিসাবে ভাল সকল.
Freeing নোড নিরিখে যে খুব গুরুত্বপূর্ণ
যে যখনই আমরা malloc মেমরি পরে, আমরা এটি মুক্ত.
তাই আমরা নিশ্চিত যে কোন পয়েন্টার যায় unfreed করতে চাই, যে আমরা কোন তথ্য ফাঁসের মেমরি নেই.
আমরা একটি হাতিয়ার নামক Valgrind যে আপনার প্রোগ্রাম রান পরিচয় করিয়ে দিতে যাচ্ছেন
এবং তারপর আপনি যে সব মেমরি বরাদ্দ কিনা চেক নিষ্কৃত হয়.
তোমার pset কেবলমাত্র যখন এটি কাজ সম্পন্ন এবং এটি সম্পূর্ণ কার্যকারিতা আছে,
কিন্তু, Valgrind বলে যে আপনি যে কোনো মেমরির তথ্য ফাঁসের খোঁজ পাই নি.
এই pset জন্য পরিশেষে, আমি সত্যিই চাপ সৃষ্টি করতে চান -
আমি বলতে চাচ্ছি, স্বাভাবিক হিসাবে, আমি স্পষ্টভাবে am আপনার সমস্যা সেটের জন্য কলম এবং কাগজ ব্যবহার করে একটি সমর্থক,
কিন্তু এই এক জন্য, আমি মনে করি যে কলম এবং কাগজ, বিশেষ করে গুরুত্বপূর্ণ হতে চলেছে
যখন আপনি চান জিনিষ তীরচিহ্ন অঙ্কন করা হবে এবং মতের মিল না কিভাবে যে কাজ.
তাই নিশ্চিতভাবে কলম এবং কাগজ জিনিষ বহিষ্কার করা আগে আপনাকে কোডিং করতে ব্যবহার করার চেষ্টা করুন
কারণ এটি একটি বিট অগোছালো পেতে পারেন.
>> প্রথম, যাক সংযুক্ত তালিকার মধ্যে এর একটি বিট যান.
লিঙ্ক তালিকা নোড, যেখানে প্রতিটি নোডের মধ্যে একটি মান এর সাথে জড়িত আছে গঠিত,
সেইসাথে এটি পরে পরবর্তী নোডের একটি পয়েন্টার.
জিনিসের লিঙ্ক তালিকা সঙ্গে গুরুত্বপূর্ণ একটি দম্পতি হয় যে আমরা মনে রাখতে প্রয়োজন
যেখানে আমাদের প্রথম নোডের হয়, এবং তারপর একবার আমরা যেখানে প্রথম নোডের হয় জানি,
যে ভাবে আমরা নোড অ্যাক্সেস করতে পারেন যে প্রথম যাও নোড পয়েন্ট
এবং তারপর যা পরে এক এবং যে পরে এক.
এবং তারপর আপনার লিঙ্ক তালিকা শেষ উপাদান হল নোড এর পয়েন্টার
সবসময় যাও যাও নাল নির্দেশ যাচ্ছে.
যখন একটি নোড পয়েন্ট নাল হয়ে থাকে তাহলে, আপনি কি জানেন যে আপনি তালিকার শেষে পৌঁছেছেন,
যে যে নোড শেষ এক, যে পরে কিছুই নেই.
এখানে এই পরিকল্পিত, আপনি দেখতে যে তীর আছে পয়েন্টার,
এবং নীল অধ্যায় যেখানে মান সংরক্ষিত হয় না,
এবং তারপর এটি যাও পয়েন্টারের সাথে লাল বক্স করা হয় নোড এর পয়েন্টার
প্রতি নির্দেশ দেওয়ার পর এটি পরবর্তী নোডের যাও.
এবং যাতে আপনি এখানে দেখতে, ডি নোড যাও নাল কারণ এটি তালিকা শেষ উপাদান নির্দেশ করবে.
>> চলুন আমরা কিভাবে একটি নোডের জন্য একটি struct সংজ্ঞায়িত হতে পারে তাকান.
এবং যেহেতু আমরা একাধিক নোড আছে চাই,
এই একটি typedef struct হয়ে যাচ্ছে
যা আমরা একাধিক নোড বিভিন্ন দৃষ্টান্ত আছে চলুন.
এবং তাই আমরা একটি নতুন তথ্য টাইপ হিসাবে এটি সংজ্ঞায়িত.
এখানে, আমরা একটি typedef struct নোড আছে.
এই উদাহরণে, আমরা পূর্ণসংখ্যা নোড সঙ্গে লেনদেন করছেন,
তাই আমরা একটি পূর্ণসংখ্যা মান নামে আছে এবং তারপর আমরা অন্য পয়েন্টার আছে,
এবং এই ক্ষেত্রে, এটা একটি নোডের একটি পয়েন্টার, তাই আমরা একটি নোড struct * নামক পরের আছে.
এবং তারপর আমরা এই গোটা ব্যাপারটাই নোড আহ্বান করছি.
নিশ্চিত করুন যে আপনি এই বাক্য গঠন অনুসরণ করুন.
উল্লেখ্য, নোড প্রকৃতপক্ষে উপরে উল্লেখিত আপ হিসাবে ভাল হিসাবে নীচের কোঁকড়া ধনুর্বন্ধনী.
তারপর ট্র্যাকের মধ্যে যেখানে আমার প্রথম নোডের এই তালিকায় সংযুক্ত হয় রাখা,
তারপর আমি একটি নোড পয়েন্টার নামক মাথা আছে, এবং আমি একটি নোড মাপ malloc জন্য পর্যাপ্ত স্থান.
নোটিশ যাইহোক, যে প্রধান আসলে একটি নোড পয়েন্টার একটি প্রকৃত নোড হিসাবে নিজেকে বিরোধিতা.
তাই আসলে মাথা কোনো মান উপস্থিত করা হয় না,
এটি শুধুমাত্র যেটা আমার লিঙ্ক তালিকায় প্রথম নোডের হয় স্থানটিকে.
>> যাও একটি লিঙ্ক তালিকার ভালো অর্থে, পেতে কারণ এটা খুব গুরুত্বপূর্ণ
যাও, এমনটা নিশ্চিত করা যে আপনি শৃঙ্খল বজায় ট্র্যাক রাখতে,
আমি তা মনে করি না হিসাবে একটি লাইন ব্যক্তিদের হাতে ধারণ,
যেখানে প্রতিটি ব্যক্তি পরের এক সঙ্গে হাত অধিষ্ঠিত হয়.
আপনি এই আঁকার মধ্যে দেখতে পারেন না, কিন্তু মূলত তারা পরবর্তী ব্যক্তির প্রতি নির্দেশ করছেন
যে তাদের চেন হয়.
তাই আপনি যদি একটি তালিকা সংযুক্ত যেখানে এইসব মানুষ, তর্ক করতে চান -
যাদের সব কল্পনা তাদের মানের সাথে আছে
এবং লাইন পরবর্তী ব্যক্তির নির্দেশ -
উদাহরণস্বরূপ, যদি আপনি সংযুক্ত তালিকা তর্ক করতে চান, তাহলে হয়, মান সম্পাদনা করুন
একটি ভালো যে মান বা কিছুর জন্য বা অনুসন্ধান,
তাহলে আপনি নির্দিষ্ট ব্যক্তি একটি পয়েন্টার আছে চাইবেন.
তাই আমরা তথ্য টাইপ নোড পয়েন্টার আছে চলুন.
এই উদাহরণস্বরূপ, যাক এর কল এটি কার্সার.
আরেকটি প্রচলিত উপায় হল এই নাম iterator বা যে ভালো কিছু হবে
কারণ এটি উপর iterating এবং প্রকৃতপক্ষে চলন্ত যা নোড তা এর প্রতি নির্দেশ করে.
এখানে আমাদের কার্সার হবে.
আমাদের কার্সার প্রথম আমাদের তালিকায় প্রথম উপাদান নির্দেশ করা.
তাই কি আমরা করতে হয় মূলত আমরা করা হবে কার্সার অব্যাহত,
থেকে প্রান্তের দিকে এটি পরিবর্তনশীল.
এই ক্ষেত্রে, আমরা তালিকায় পরবর্তী উপাদান তা স্থানান্তর করতে চান.
অ্যারে দিয়ে, আমরা কি কি হয় আমরা ঠিক বলতে আমরা 1 দ্বারা সূচক বৃদ্ধি করবে.
এই ক্ষেত্রে, আসলে আমরা কি করতে হবে যা বর্তমান ব্যক্তি এই ব্যক্তির প্রতি নির্দেশ খুঁজে পাওয়া হয়,
এবং যে পরবর্তী মান হতে যাচ্ছে.
তাই আপনি যদি কার্সার শুধুমাত্র একটি নোড পয়েন্টার, তাহলে কি আমরা যেতে চাই
হয় আমরা মান যে কার্সার প্রতি নির্দেশ না পেতে চান.
আমরা যে নোড যাও এবং পেতে তারপর, একবার আমরা যে নোড করেন, যেখানে এটি এর প্রতি নির্দেশ খুঁজে পেতে চান.
প্রকৃত নোড যে কার্সার প্রতি নির্দেশ না পেতে,
সাধারণত আমরা (* কার্সার) দ্বারা এটি ইঙ্গিত দেয়.
যে প্রকৃত নোড যে কার্সার প্রতি নির্দেশ না আপনাকে দিতে হবে.
যে পরে এবং তারপর, আমরা কি করতে হয় আমরা অ্যাক্সেস করতে চান
যাই হোক না কেন যে নোড এর পরবর্তী মানটি.
যাও যে, এর ভিতরে struct মান অ্যাক্সেস করবেন, আমরা বিন্দু অপারেটর আছে.
আমি তখন এটি (* কার্সার). হতে পরবর্তী পারে.
কিন্তু এই * কার্সার বন্ধনী কাছাকাছি থাকার পদ হয় একটু মলিন,
এবং তাই আমরা কার্সার> সঙ্গে এই পুরো বিবৃতি প্রতিস্থাপন করুন.
এটি একটি ড্যাশ এবং তারপর একটি চেয়ে সাইন, তাই একটি তীর তৈরীর.
কার্সার> পরের.
আসলে পেতে নোড হবে যে কার্সর পয়েন্ট. যে মান পরের হয়.
সুতরাং পরিবর্তে তারকা এবং বিন্দু হচ্ছে, আপনি একটি তীর যে প্রতিস্থাপন করছেন.
খুব নিশ্চিত যে আপনি এই বাক্য গঠন ব্যবহার করার চেষ্টা করতে সতর্কতা অবলম্বন করা আবশ্যক.
>> এখন যে আমরা আমাদের কার্সার আছে, যদি আমরা মান অ্যাক্সেস করতে চান,
পূর্বে, আমরা ছিল কার্সার> পরের,
কিন্তু নোড এ মান যে কার্সার প্রতি নির্দেশ অ্যাক্সেস করা হয়, আমরা সহজভাবে বলতে
নোড> মান.
সেখান থেকে, এটি তথ্য ধরনের যাই হোক না কেন আমরা এর মান এবং নোড হতে সংজ্ঞায়িত করেছি.
যদি এটি কোন int নোড তারপর, কার্সার> মান শুধুমাত্র পূর্ণসংখ্যা হতে যাচ্ছে.
সুতরাং আমরা যে ক্রিয়াকলাপগুলি করতে পারেন, equalities, চেক এটি বিভিন্ন মান, ইত্যাদি দায়িত্ব অর্পণ করা
তখন আপনি কি করতে চান, যদি আপনি পরবর্তী ব্যক্তির আপনার কার্সার স্থানান্তর করতে চান,
আপনি আসলে কার্সার মান পরিবর্তন.
যেহেতু কার্সারটি একটি নোড পয়েন্টার, পয়েন্টার আপনি প্রকৃত ঠিকানা পরিবর্তন
আপনার তালিকায় পরবর্তী নোডের ঠিকানা.
এই মাত্র কিছু কোড যেখানে আপনি পুনরুক্তি করা হতে পারে.
যেখানে আমি কিছু মন্তব্য করবেন,
যে যেখানে সম্ভবত আপনি মান অ্যাক্সেস করছি যাচ্ছে
অথবা যে নির্দিষ্ট নোডের সাথে কিছু একটা করুন.
এটি চলতে শুরু, আমি যে আমার কার্সার প্রাথমিকভাবে
লিঙ্ক তালিকায় প্রথম উপাদান নির্দেশ যাচ্ছে.
এবং তাই আপ এগিয়ে, আমি নোড প্রধান হিসাবে এটি সংজ্ঞায়িত.
>> হিসাবে আমি আগে উল্লেখ করেছে, freeing সত্যিই গুরুত্বপূর্ণ.
আপনি কি নিশ্চিত যে আপনি তালিকা প্রতিটি উপাদান মুক্ত একবার আপনি এটি দিয়ে সমাপ্ত করেছি করতে চাই.
আপনি যখন আর যারা পয়েন্টার কোনো উল্লেখ করার প্রয়োজন হবে না,
আপনি কি নিশ্চিত যে আপনি ঐ সমস্ত পয়েন্টার মুক্ত করতে চাই.
কিন্তু আপনি খুব সতর্কভাবে এখানে হতে চান যে আপনি কোন মেমরি তথ্য ফাঁসের এড়াতে চান.
আপনি যদি বিনামূল্যে এক ব্যক্তি অকালে তারপর, পয়েন্টার যে সমস্ত নোড পয়েন্ট
করা হারিয়ে যাচ্ছে.
ব্যক্তির উদাহরণ আলোচনার এটি একটি বিট আরো উচ্চ পুরস্কার না,
এর দিন আছে এই ক্ষেত্রে তারা একটা দৈত্য সঙ্গে একটি হ্রদের উপর ঝুলে আছে এই ব্যক্তিদের ব্যতীত,.
আমরা নিশ্চিত যে যখনই আমরা মুক্ত, আমরা হইনি হারান না করতে চাই
এবং যাক কোনো নোডের মধ্যে যেতে আগে আসলে আমরা তাদের মুক্ত করেছেন.
উদাহরণস্বরূপ, যদি আপনি কেবল এই লোক এখানে বিনামূল্যে কল ছিল,
তারপর তিনি মুক্ত হবে, কিন্তু তারা আবার এই সব করা হবে না হারিয়ে
এবং তারা বন্ধ এবং প্রপাত নিচে ফেলা হয়.
তাই আমরা নিশ্চিত যে পরিবর্তে, আমরা বিশ্রাম একটি লিঙ্ক বজায় রাখতে চান করতে চাই.
আমাদের মাথা পয়েন্টার, তালিকার প্রথম উপাদান যে স্থানটিকে চিহ্নিত করে.
এটি একটি দড়ি প্রথম ব্যক্তি নোঙ্গরকরণ মত ধরনের.
আপনি কি যখন আপনি মুক্ত করতে পারেন একটি তালিকা আছে না -
আপনি যদি প্রথম প্রথম উপাদান মুক্ত করতে চান, তাহলে আপনাকে একটি অস্থায়ী পয়েন্টার হতে পারে
যে পয়েন্ট যাই হোক না কেন প্রথম উপাদান হয়.
সুতরাং আপনি আপনার অস্থায়ী পয়েন্টার এখানে প্রতি নির্দেশ আছে.
এই ভাবে, আমরা প্রথম নোডের একটি খাকা.
এবং তারপর থেকে, আমরা জানি যে, প্রথম নোডের মুক্ত করা যাচ্ছে,
তারপর আমরা এই দড়ি, এই নোঙ্গর, আমাদের মাথা অগ্রসর না হতে পারেন,
প্রকৃতপক্ষে যাই হোক না কেন প্রথম এক ইশারা নির্দেশ করা হয়.
তাই এই মাথা আসলে দ্বিতীয় উপাদান স্থানটিকে এখন.
এখন আমরা যাহা temp মধ্যে সংরক্ষিত হয় মুক্ত করতে অনুমতি দেওয়া হয়,
এবং যাতে আমরা এটিকে আমাদের তালিকায় অন্যান্য নোডের মধ্যে সমস্ত বিপদ ডেকে আনছে ছাড়া যে নিশ্চিহ্ন করতে পারেন.
আরেকটি উপায় হল যে আপনি এই যেত না হতে পারে
প্রত্যেক সময় আপনি শুধু তালিকা শেষ উপাদান মুক্ত
কারণ তারা নিশ্চিত করছি কিছু যাও যাও হইনি তীক্ষ্ন.
সুতরাং আপনি শুধুমাত্র এই এক, তারপর বিনামূল্যে এই এক তারপর, বিনামূল্যে এই এক মুক্ত করতে পারে.
যে স্পষ্টভাবে কাজ কিন্তু কারণ দ্বারা সংযুক্ত তালিকার প্রকৃতি, একটি বিট মন্থর
আমরা কেবল অবিলম্বে গত এক যাও না তিড়িং লাফ পারেন.
আমরা লিঙ্ক তালিকার প্রতিটি উপাদান, তর্ক আছে
এবং যে কিনা এক নাল প্রতি নির্দেশ চেক করা হয়, প্রতি সময় চেক,
এবং একবার তারপর আমরা শেষ, পৌঁছানোর পরে বিনামূল্যে যে.
যদি আপনি এই প্রক্রিয়া ছিল না, আসলে এখানে আপনি চেক করা হবে,
চেক এখানে, তারপর এখানে চেক করে, এটি freeing,
তারপর ফিরে যাব, চেক করে এখানে, এখানে চেক, এটি freeing,
চেক এখানে, এবং তারপর এটি freeing.
যে কিছুটা সময় লাগে. হাঁ.
>> [ছাত্রদের] এটি করা সম্ভব একটি লিঙ্ক তালিকা যে শেষে একটি করে প্রস্থান পয়েন্টার সঞ্চয় করতে চান?
যে স্পষ্টভাবে করা সম্ভব হবে.
যাও প্রশ্নটি পুনরাবৃত্তি, এটা একটি লিঙ্ক তালিকা আছে গঠন সম্ভব
যেমন যে আপনি একটি পয়েন্টার নির্দেশকারী লিঙ্ক তালিকা শেষ আছে?
আমি যে সম্ভব, এবং প্রত্যেক সময় যে আপনি আপনার লিঙ্ক তালিকায় কিছু সন্নিবেশ চাই
আপনি যে মত পয়েন্টার এবং জিনিষ আপডেট করতে হবে.
উদাহরণস্বরূপ একটি নোড * লেঙ্গুড় আছে, হবে.
কিন্তু আপনি যখন এই বৈশিষ্ট্য রূপায়ণকারী করছি, আপনি বিনিময় প্রথা মনে আছে,
কতবার চাই আমি যাচ্ছি এই উপর iterating করা হবে,
কত কঠিন তা না কর লেঙ্গুড় ট্র্যাক হিসেবে মাথায় রাখতে হবে
সেইসাথে আমার iterator, এবং যে ভালো জিনিস.
কিন্তু যে -? >> [ছাত্রদের] হ্যাঁ.
এটা সম্ভব, কিন্তু নকশা সিদ্ধান্ত পদ, আপনি অপশন তৌল করা আছে.
>> এখানে কোড একটি কঙ্কাল যে আপনি একটি লিঙ্ক তালিকায় প্রতিটি উপাদান মুক্ত করা সম্ভব হবে.
আবার, যেহেতু আমি একটি তালিকা সংযুক্ত উপর iterating করছি, আমি কার্সার কোন না কোন রকমের চান চলেছি
অথবা iterator.
আমরা পর্যন্ত কার্সার হয় শূন্য iterating হয়.
আপনি যখন আপনার কার্সার হয় শূন্য পুনরুক্তি না চান
কারণ তার মানে হল তালিকায় কিছু না.
তাই এখানে আমি একটি অস্থায়ী করা নোডের *
প্রতি নির্দেশ কি আমি বিবেচনা করছি আমার তালিকার প্রথম,
এবং তারপর আমি আমার কার্সার এগিয়ে 1 এবং তারপর বিনামূল্যে যাই হোক না কেন আমি অস্থায়ী সংগ্রহস্থলের মধ্যে ছিল সরাতে.
>> এখন আমরা সংযুক্ত তালিকার মধ্যে ঢোকাতে আসা.
আমি আমার সংযুক্ত তালিকার তিন নোড আছে, এবং সহজ ক্ষেত্রে এর সঙ্গে যেতে দেওয়া
যেখানে আমরা আমাদের লিঙ্ক তালিকা শেষে অন্য নোড সন্নিবেশ করতে চান.
যাও না যে, আমরা সব কি হয় আমরা তর্ক করা হবে
যেখানে লিঙ্ক তালিকা বর্তমান শেষ হয় খুঁজে, যেটা নোড যাও নাল প্রতি নির্দেশ করা হয় -
এই যে এক -
এবং তারপর, বলতে আসলে, এই এক নোড শেষ হবে না;
আমরা আসলে করছি অন্য কেউ থাকে না.
সুতরাং আমরা এই বর্তমান এক বিন্দু যাই হোক না কেন আমরা করছি সন্নিবেশ করতে হবে.
তাই এখন এখানে এই লাল ব্যক্তি হয়ে লিঙ্ক তালিকা শেষ নোড.
তাই লিঙ্ক তালিকা নোডের মধ্যে সর্বশেষ বৈশিষ্ট্য হলো এটা নাল স্থানটিকে চিহ্নিত করে.
তখন আমরা কি কি করতে হবে এই লাল লোক এর পয়েন্টার যাও নাল সেট হয়. এখন পর্যন্ত.
>> যদি তা কিন্তু আমরা মধ্যে দ্বিতীয় এবং তৃতীয় এক একটি নোড সন্নিবেশ চেয়েছিলেন?
যে একটি কারণ হল, আমরা নিশ্চিত করতে চাই বেশ সহজ না
যে আমরা আমাদের লিঙ্ক তালিকায় কোনো নোডের মধ্যে যেতে না দেওয়া.
আমরা কি করতে হবে নিশ্চিত যে আমরা প্রতিটি নিজেদের অ্যাঙ্করে করা হয়.
উদাহরণস্বরূপ, এর এই দ্বিতীয় এক কল দিন.
আপনি যদি বলেন, দ্বিতীয় এখন এই এক নতুন এক স্থানটিকে
এবং আপনি কোন পয়েন্টার তৈরি আছে, তারপর যে এই লোক হারিয়ে হচ্ছে দেবে
কারণ তাকে কোনো লিঙ্ক নেই.
পরিবর্তে - এই আমি আবার আঁকা হবে. আমার শৈল্পিক ক্ষমতা মাফ করবেন.
আমরা জানি যে আমরা সরাসরি নতুন এক হইনি 2 লিঙ্ক করতে পারেন.
আমরা নিশ্চিত যে আমরা গত এক রাখা হয়েছে.
আমরা কি কি করতে পারেন একটি অস্থায়ী পয়েন্টার আছে
যাও উপাদান যে উপর যোগ করা যাচ্ছে.
তখন আমরা সেখানে একটি অস্থায়ী পয়েন্টার আছে.
যেহেতু আমরা জানি যে এই তৃতীয় একটি হচ্ছে ট্র্যাক রাখা,
2 এখন আমাদের নতুন একটি লিঙ্ক করতে পারেন.
এবং যদি এই নতুন লাল পলায়ন মধ্যে 2 এবং 3 এর মধ্যে হতে হবে,
তারপর কি যে লোক এর পয়েন্টার নির্দেশ যাচ্ছে? >> [ছাত্রদের] তাপমাত্রা.
তাপমাত্রা. হাঁ.
আমি তখন এই লাল লোক এর পরের মান temp হবে.
যখন আপনি সংযুক্ত তালিকার মধ্যে ঢোকাতে হয়, আমরা দেখেছি যে আমরা পারা
সহজে শেষে একটি অস্থায়ী অ্যারে তৈরি করে কিছু যোগ করুন,
অথবা যদি আমরা আমাদের অ্যারের মধ্যম মধ্যে কিছু যোগ করতে চেয়েছিলাম,
তারপর এটি একটি বিট নিতে আরো কাছাকাছি shuffling হবে.
উদাহরণস্বরূপ, যদি আপনি চান,, একটি সাজানো তালিকা সংযুক্ত আছে,
তারপর আপনাকে ধরনের যে ব্যয় ও সুবিধার তৌল
কারণ যদি আপনি একটি সাজানো অ্যারের করাতে চাই, যে প্রতিটি সময় যে আপনি এটি মধ্যে সন্নিবেশ মানে,
এটি কিছুটা সময় নিতে হচ্ছে.
যাইহোক, যদি আপনি চান পরে, আমরা খুঁজে পাবেন হিসাবে আমরা করতে চান,
একটি লিঙ্ক তালিকা মাধ্যমে অনুসন্ধান তারপর, এটা সহজ যদি আপনি কি জানেন যে অনুক্রমে সব হতে পারে.
সুতরাং আপনি যে ব্যয় ও সুবিধার তৌল করতে চাইতে পারেন.
>> আরেকটি উপায় একটি লিঙ্ক তালিকা মধ্যে সন্নিবেশ একটি তালিকা খুব প্রারম্ভে মধ্যে সন্নিবেশ করা হয়.
যদি আমরা এখানে আমাদের নোঙ্গর আঁকা - এই হল আমাদের মাথা -
এবং তারপর এই ব্যক্তিদের এটি যাও লিঙ্ক,
এবং তারপর আমরা একটি নতুন প্রারম্ভ ঢোকানো করা নোড আছে,
তাহলে কি আমরা করতে চাইবেন?
কি বলছে ঠিক আমি নীল লাল লিঙ্ক করতে চান তাদের সাথে ভুল করে,
কারণ যে প্রথম এক?
এখানে কি ঘটতে পারে?
এই তিনটি সব হারিয়ে যাবে না.
তাই আমরা তা করতে না চান.
আবার, আমরা যে আমরা অস্থায়ী পয়েন্টার কিছু শেখা প্রয়োজন আছে করেছি.
এর একটা লোক এই অস্থায়ী বিন্দু আছে চয়ন করা যাক.
তারপর আমরা নীল এক বিন্দু অস্থায়ী থাকতে পারেন
এবং তারপর নীল লাল বিন্দু.
কারণ আমি মানুষ এখানে ব্যবহার করছি কারণ আমরা সত্যিই ঠাহর করা চাই
মানুষ আয়ত্ত এবং এমনটা নিশ্চিত করা যে আমরা তাদের একটি লিংক আছে
আগে আমরা কি অন্য যে মত হাত বা কিছু যান.
>> এখন যে আমরা লিঙ্ক তালিকা একটা ধারনা আছে - কীভাবে আমরা যুক্ত তালিকা তৈরি করতে পারেন
এবং টাইপ সংজ্ঞা যে একটি নোডের জন্য গঠিত জন্য কাঠামো তৈরি
এবং তারপর এমনটা নিশ্চিত করা যে আমরা যে লিঙ্ক তালিকা মাথার একটি পয়েন্টার আছে -
একবার আমরা যে আছে এবং আমরা জানতে পারি কিভাবে একটি অ্যারের মাধ্যমে তর্ক যাও,
বিভিন্ন উপাদানের অ্যাক্সেস, আমরা জানি কিভাবে সন্নিবেশ এবং আমরা জানতে পারি কিভাবে তাদের মুক্ত করতে,
তারপর আমরা বানান ভুল করে পেতে পারেন.
স্বাভাবিক হিসাবে, আমরা প্রশ্নগুলির একটি অধ্যায় যে অপারেটিং আপনাকে পেতে হবে সংযুক্ত তালিকার সঙ্গে ব্যবহৃত আছে
এবং যেমন queues এবং stacks হিসাবে ভিন্ন কাঠামোর.
তারপর আমরা ভুল বানান সরাতে পারেন.
>> ডিস্ট্রিবিউশনের মধ্যে বানান ভুল কোড গুরুত্বপূর্ণ ফাইলের একটি দম্পতি আছে.
আমাদের প্রথম লক্ষ্য করা যে আমরা এই এখানে Makefile আছে,
যা সত্যিই আমরা আগে সম্মুখীন হইনি.
আপনি যদি pset5 ফোল্ডার ভিতরে লাগছিল, আপনি যে আপনি একটি. জ ফাইল আছে বিজ্ঞপ্তি চাই,
তারপর আপনি দুই. গ ফাইল আছে.
কি এই Makefile আছে আগে হয়, আমরা শুধু টাইপ করতে হবে এবং তারপর প্রোগ্রামের নাম
এবং তারপর আমরা সব এই আর্গুমেন্ট এবং পতাকার কম্পাইলার সালে পাশ দেখতে চাই.
কি Makefile আছে আমাদের একযোগে একাধিক ফাইল কম্পাইল করতে পারবেন
যে পতাকা আমরা চাই মধ্যে পাস করে.
এখানে আমরা দেখতে এখানে আছে একটি হেডার ফাইলটি.
তারপর আসলে আমরা দুটি সোর্স ফাইল আছে.
আমাদের সাথে আছে speller.c এবং dictionary.c.
আপনি যদি চান Makefile সম্পাদনা স্বাগত হয়.
এখানে উল্লেখ্য যে যদি টাইপ করতে পরিষ্কার, তারপর এটি কী জন্য আসলে কিছু সরিয়ে
যা কোর.
আপনি যদি একটি সেগমেন্টেশন ফল্ট না, মূলত আপনাকে একটি কোর ডাম্প পেতে.
তাই এই অরুপ সামান্য ফাইলটি আপনার নির্দেশিকা নামক কোর মধ্যে প্রদর্শিত হবে.
আপনি যে একে পরিষ্কার করতে সরাতে চাইবেন.
এটা কোনো exe ফাইল মুছে ফেলা হয় ও. ণ ফাইল.
>> যাক এর মধ্যে dictionary.h কটাক্ষপাত.
এই বলে যে এটি একটি অভিধান এর কার্যকারিতা ঘোষণা করে.
আমরা একটি অভিধানে কোন শব্দ জন্য সর্বাধিক দৈর্ঘ্য আছে.
আমরা যে এই শব্দ দীর্ঘতম সম্ভব হবে. এটা দ্বারা 45 এর মধ্যে.
তাই আমরা কোনো শব্দ যে দৈর্ঘ্য অতিক্রম আছে চলুন না.
এখানে আমরা ফাংশন এগুলির নমুনা আছে.
কারণ আমরা যে কি আমরা এই pset জন্য হবে করছেন নেই প্রকৃত বাস্তবায়ন না.
কিন্তু কি আছে এই হল যেহেতু আমরা এখানে বৃহত্তর ফাইল সঙ্গে লেনদেন করছেন
এবং একটি বড় স্কেলে কার্যকারিতা, এটি একটি. জ ফাইল আছে দরকারী
যাতে অন্য কেউ আপনার পড়া বা কোড ব্যবহার করে কি করছেন বুঝতে পারেন.
এবং হয়তো তারা প্রয়োগ করতে চান চেষ্টা করে যদি আপনি হ্যাশ টেবিল বা তদ্বিপরীত করেছিল.
তারপর তারা আমার চাহিদার ফাংশন বলা যায়,
প্রকৃত বাস্তবায়ন যাও পৃথক যাচ্ছে তবে এই প্রোটোটাইপ পরিবর্তন করবে না.
এখানে আমরা, চেক আছে যা ফেরৎ সত্য যদি একটি শব্দ অভিধান দেওয়া হয়.
তারপর আমরা লোড, যা মূলত একটি অভিধান ফাইলে প্রদর্শিত আছে
এবং তারপর কিছু ডাটা স্ট্রাকচার তা লোড করা.
আমরা আকার আছে, যা, যখন বলা হয়, আপনার অভিধানের আকার ফেরৎ,
কতগুলি শব্দ এটি মধ্যে সংরক্ষিত হয়,
এবং তারপর, আন যা মুক্ত সমস্ত মেমরি আপ যে আপনি নেওয়া হতে পারে
যখন আপনার অভিধান তৈরি.
>> চলুন dictionary.c কটাক্ষপাত করা.
আমরা দেখতে যে এটা দেখায় এখন শুধু তা এই TODOs সব ছাড়া আছে dictionary.h অনুরূপ,.
এবং যাতে আপনার পেশা. অবশেষে, আপনি ভরাট এই কোড সব হবে speller.c আউট.
Dictionary.c, যখন চালানো, কিছু করতে চাচ্ছ না হয়,
আমরা বানান পরীক্ষক প্রকৃত বাস্তবায়ন দেখতে speller.c দিকে তাকান.
যদিও আপনার এই কোড কোন সম্পাদনা করা চলুন না,
এটা যাও, পড়তে যখন চাহিদার বলা হয় তা বুঝতে পারার দরকার, যখন আমি চেক কলিং,
ঠিক, এটা বুঝতে ছকা, ফাংশন কিভাবে কাজ করে দেখুন.
আমরা দেখতে যে এটা সঠিক ব্যবহারের জন্য চেক করা হয়.
মূলত, যখন কেউ speller রান, এটি ইঙ্গিত করে যে এটা ঐচ্ছিক
তাদের জন্য একটি অভিধান ফাইলে কারণ যাচ্ছে একটি ডিফল্ট অভিধান ফাইল আছে এর পাস করার জন্য.
এবং তারপর তারা টেক্সট যাও বানান পরীক্ষা পাস করা আছে.
সময়ের সঙ্গে সঙ্গে rusage পুলিশ এই pset একটি অংশ কারণ যা আমরা পরে চুক্তি হবে
না কেবল পাবার একটি কার্যকরী বানান পরীক্ষক কাজ
কিন্তু আসলে তা দ্রুত করা পেয়ে.
এবং অতএব যে যেখানে rusage ইন আসা যাচ্ছে
এখানে, আমরা আমাদের dictionary.c ফাইলের মধ্যে একটিতে প্রথম কল দেখতে, যা চাহিদার.
লোড ফেরৎ সত্য বা মিথ্যা - সাফল্যের উপর সত্য, ব্যর্থতা উপর মিথ্যা.
তাই আপনি যদি সঠিকভাবে অভিধান লোড হয় না, তারপরে speller.c 1 ফিরে যান এবং অব্যাহতিপ্রাপ্ত হবে.
কিন্তু যদি এটি সঠিকভাবে লোড আছে, তাহলে এটি অবিরত যাচ্ছে.
আমরা অবিরত, এবং আমরা কিছু ফাইল ইনপুট / আউটপুট এখানে দেখতে,
যেখানে এটি টেক্সট ফাইল খোলার সাথে ডিল করা যাচ্ছে.
এখানে, এই কি আছে প্রত্যেক টেক্সট একক শব্দ বানান পরীক্ষা করা হবে.
তাই speller.c অধিকার এখানে করছে টেক্সট ফাইলে iterating প্রতিটি শব্দের উপর হয়
এবং তারপর অভিধানে চেক.
এখানে, আমরা একটি বুলিয়ান misspelled যে যদি চেক ফেরৎ সত্য বা না দেখতে হবে আছে.
যদি শব্দ অভিধানে আসলে তারপর, চেক সত্য ফিরে আসবে.
তার মানে যে শব্দ misspelled না.
সুতরাং misspelled মিথ্যা হতে পারে, এবং সে জন্যই আমরা ঠুং ঠুং শব্দ আছে, ইঙ্গিত করে.
আমরা যাওয়া রাখা, এবং তারপর এটি কতগুলি শব্দ misspelled ট্র্যাক রাখে
ফাইলের মধ্যে আছে.
এটা চলতে এবং ফাইল প্রচেষ্টা.
তারপর এখানে, এটি রিপোর্ট কতগুলি misspelled শব্দগুলি আপনি চান ছিল.
এটি হিসাব কত সময় এটি অভিধান লোড নেন,
কত সময় এটা চেক গ্রহণ করেন,
কত সময় তা নিরূপণ আকার গ্রহণ করে,
যা, হিসাবে আমরা যেতে হবে, খুব ছোট করা উচিত,
এবং তারপর কত সময় অভিধান আন এটা গ্রহণ করেন.
এখানে আপ উপরে আমরা এখানে আন কল দেখুন.
যদি আকার জন্য এখানে আমরা চেক,
তারপর আমরা দেখতে যে এখানে মাপ কল যেখানে এটি অভিধান মাপ নির্ধারণ করে.
জট্টিল.
>> এই pset জন্য আমাদের টাস্ক চাপ, যা অভিধান লোড হবে বাস্তবায়ন হয়
ডাটা স্ট্রাকচার - যেটা আপনি পছন্দ করেন, এটি একটি হ্যাশ টেবিল বা একটি চেষ্টা করে দেখুন -
সঙ্গে অভিধান ফাইল থেকে শব্দ.
এর পরে আকার, যা অভিধানে শব্দের সংখ্যা প্রত্যাবর্তন করা আছে.
এবং যদি আপনি একটি স্মার্ট ভাবে লোড বাস্তবায়ন তারপর, আকার প্রশংসনীয় সহজ হওয়া উচিত.
এর পরে, পরীক্ষা আছে যা যদি কোনো নির্দিষ্ট শব্দ অভিধান হয় পরীক্ষা করবে.
সুতরাং speller.c একটি স্ট্রিং পাস, এবং তারপরে আপনি যে কিনা চেক স্ট্রিং আছে
আপনার অভিধান মধ্যে অন্তর্ভুক্ত করা হয়.
যে সাধারণভাবে আমরা মান অভিধান আছে লক্ষ্য করুন,
কিন্তু এই pset মধ্যে, মূলত কোনো অভিধান কোন ভাষায় গৃহীত.
সুতরাং আমরা যে শব্দ হয় ভিতরে অনুমান করতে পারে না.
শব্দ FOOBAR একটি নির্দিষ্ট অভিধান যে আমরা পাস ইন সংজ্ঞায়িত করা যায়নি
এবং তারপর আমরা, আন আছে যা মেমরি অভিধান থেকে মুক্ত করে.
>> প্রথমত, আমি হ্যাশ টেবিল পদ্ধতি উপর যেতে চাই
সম্পর্কে কিভাবে আমরা যারা চার র সমস্ত কর্ম ব্যবহার বাস্তবায়ন হতে পারে,
এবং তারপর আমি উপর পদ্ধতি চেষ্টা করে যান, যাব, আমরা যারা চার ফাংশন বাস্তবায়ন,
এবং কিছু সাধারণ টিপস সম্পর্কে আলাপ শেষ এ যখন আপনি pset তৈরি করছি
এবং দেয়া আছে যে কিভাবে আপনি ব্যবহার করতে সক্ষম হতে পারেন মেমরি তথ্য ফাঁসের জন্য চেক Valgrind.
>> যাক এর হ্যাশ টেবিল পদ্ধতি ঢোকা.
একটি হ্যাশ টেবিল buckets একটি তালিকা উপস্থিত করা হয়.
প্রতিটি মান, প্রতিটি শব্দ এই buckets এক ঢোকা যাও, যাচ্ছে.
একটি হ্যাশ টেবিল আদর্শভাবে সমানভাবে এই মান সব বিতরণ যে আপনি পার করছি
এবং তারপর যেমন যে বালতি মধ্যে মান পূরণ করা তাদের প্রতি বাকেট
একটি মান সমান এটি সংখ্যা সম্পর্কে আছে.
একটি হ্যাশ টেবিল জন্য গঠন, আমরা লিঙ্ক তালিকার একটি অ্যারে আছে.
আমরা কি করব তা হল যখন আমরা একটি মান মধ্যে পাস, আমরা যেখানে যে মান অন্তর্গত উচিত চেক,
যা বালতি এটি জন্যে, এবং তারপর যুক্ত তালিকা যে বালতি সাথে যুক্ত করে রাখুন.
এখানে, আমি কি আছে একটি হ্যাশ ফাংশন.
এটা কোন int হ্যাশ টেবিল.
সুতরাং প্রথম জন্য বালতি, 10 নীচের কোনো পূর্ণসংখ্যা প্রথম বালতি ঢোকা.
10 উপরোক্ত কোন পূর্ণসংখ্যার নীচের কিন্তু দ্বিতীয় মধ্যে 20 যেতে,
এবং তারপর তাই এবং তাই ঘোষণা.
আমার জন্য, প্রতিটি বালতি এই সংখ্যার প্রতিনিধিত্বমূলক হয়.
যাইহোক, বলে আমি 50 উদাহরণস্বরূপ যাও পাস, ছিল.
এটি প্রদর্শিত হিসাবে যদি প্রথম তিনটি দশ সংখ্যার একটি পরিসীমা থাকে.
কিন্তু আমি আমার হ্যাশ টেবিল পূর্ণসংখ্যার কোনো সাজানোর নিয়ে মঞ্জুরি দিতে চান,
অতএব আমি শেষ বালতি মধ্যে ফিল্টার 30 সর্বোপরি সংখ্যা আউট হবে.
এবং তারপর যাতে অসম হ্যাশ টেবিল এক ধরনের দেবে.
যাও পুনরাবৃত্তি করা, একটি হ্যাশ টেবিল শুধুমাত্র buckets একটি শ্রেণীবিন্যাস
যেখানে প্রতি বালতি একটি যুক্ত তালিকা.
তাই যেখানে প্রতি যায় মান নির্ধারণ, যা বালতি তা যায়,
আপনি কি একটা হ্যাশ ফাংশন বলা হয় এর চান চলুন
যে একটি মান নেয় এবং তারপর বলে এই মান একটি নির্দিষ্ট বালতি অনুরূপ.
এই উদাহরণে, সুতরাং আপ উপরে, আমার হ্যাশ ফাংশন প্রতিটি মান গ্রহণ করে.
এটি চেক কিনা এটি ছিল 10 এর কম.
যদি এটি ছিল, এটি প্রথম বালতি মধ্যে রাখা হবে.
সেটি পরীক্ষা করে কিনা এটা কম 20, দ্বিতীয় মধ্যে রাখে এটা যদি সত্যি হয় তবে,
চেক করে যদি 30 তুলনায় কম, এবং তারপর তৃতীয় বালতি মধ্যে এটা বন্ধ রাখে,
এবং তারপর অন্য সব ঠিক চতুর্থ বালতি যাও পড়ে.
তাই যখনই আপনি একটি মান আছে, আপনার হ্যাশ ফাংশন
উপযুক্ত বালতি মধ্যে যে মান স্থাপন করবে.
হ্যাশ ফাংশন মূলত কতজন buckets আপনার জানা প্রয়োজন.
তোমার হ্যাশ টেবিল আকার, আপনি buckets সংখ্যা,
যে একটি নির্দিষ্ট নম্বর যে আপনার উপরে, এর জন্য আপনি কি ঠিক হতে যাচ্ছে,
কিন্তু এটি একটি নির্দিষ্ট সংখ্যা হতে যাচ্ছে.
সুতরাং আপনার যে হ্যাশ ফাংশন নির্ধারণ যা বালতি প্রতি কী করা যায় নির্ভর করা
যেমন যে সমানভাবে এটি বিতরণ করা হচ্ছে.
অনুরূপ লিঙ্ক তালিকা আমাদের বাস্তবায়ন এখন, হ্যাশ টেবিল প্রত্যেক নোডের যাও
না আসলে একটি টাইপ গৃহস্থালির কাজ আছে না.
সুতরাং আমরা একটি গৃহস্থালি অ্যারে বলা শব্দ এবং তারপর পরবর্তী নোডের অন্য পয়েন্টার আছে,
যা ইন্দ্রিয় তোলে না কারণ এটি একটি লিঙ্ক তালিকা হতে যাচ্ছে.
যখন আমরা তালিকা লিঙ্ক করে মনে রাখবেন, আমি একটি নোড * নামক মাথা তৈরি
যে লিঙ্ক তালিকায় প্রথম নোডের যাও প্রতি নির্দেশ ছিল.
কিন্তু আমাদের জন্য হ্যাশ টেবিল, কারণ আমরা একাধিক লিঙ্ক তালিকা আছে,
আমরা কি করতে চান আমরা আমাদের হ্যাশ টেবিল মত হতে চাই "কি একটি বালতি?"
একটি বালতি শুধুমাত্র নোড পয়েন্টার একটি তালিকা,
এবং তাই বালতি প্রতিটি উপাদান আসলে তার অনুরূপ লিঙ্ক তালিকায় প্রতি নির্দেশ করা হয়.
এই পরিকল্পিত ফিরে যেতে, আপনি দেখতে যে buckets নিজেরা তীর,
নোড আসল না.
এক হ্যাশ ফাংশান অপরিহার্য সম্পত্তি যে তারা নিয়ন্ত্রণবাদী.
তার মানে যে যখনই আপনি হ্যাশ সংখ্যা 2,
সবসময় একই বালতি করে ফেরত পাঠাবেন.
প্রতিটি একক মান হ্যাশ ফাংশন মধ্যে যে যায়, যদি পুনরাবৃত্তি,
একই সূচক পেতে হয়েছে.
সুতরাং আপনার হ্যাশ ফাংশন অ্যারের সূচক ফেরত্
যেখানে যে মান জন্যে.
হিসাবে আমি আগে উল্লেখ করেছে, buckets সংখ্যা সংশোধন করা হয়েছে,
এবং তাই আপনার সূচক যে আপনি ফিরে যাও buckets সংখ্যার চেয়ে কম হতে হয়েছে
কিন্তু 0 চেয়ে বেশী.
কারণ আমরা পরিবর্তে শুধুমাত্র একটি লিঙ্ক তালিকা হ্যাশ ফাংশান আছে
অথবা একটি অ্যারের হয় যে আমরা একটি নির্দিষ্ট বিভাগে ঝাঁপ সক্ষম হবে সবচেয়ে সহজে করতে চান
যদি আমরা একটি মান বৈশিষ্ট্যগত জানা -
পরিবর্তে সমগ্র সমগ্র অভিধান মাধ্যমে অনুসন্ধান হচ্ছে,
এটি হচ্ছে একটি নির্দিষ্ট বিভাগে ঝাঁপ পারবেন.
আপনার একাউন্টে যে হ্যাশ ফাংশন আদর্শভাবে নিতে হবে,
প্রতিটি বালতি আছে কি প্রায় একই সংখ্যক.
যেহেতু হ্যাশ টেবিল লিঙ্ক তালিকা একটি সিরিজ,
তারপর লিঙ্ক তালিকা নিজেদের একাধিক নোড আছে যাচ্ছি.
পূর্ববর্তী উদাহরণে, দুটি ভিন্ন সংখ্যা, যদিও তারা সমান ছিল না,
যখন কুচি - কুচি করিয়া কাটা বস্তু, একই সূচক আবার ফিরে আসবে.
সুতরাং যখন আপনি শব্দের সাথে ডিল করা হয় একটি শব্দ, যখন কুচি - কুচি করিয়া কাটা বস্তু
একই অন্য শব্দ হিসাবে হ্যাশ মান হবে.
আমরা একটি কল টাল, যখন আমরা একটি নোড যে, যখন কুচি - কুচি করিয়া কাটা বস্তু আছে,
যে বালতি লিঙ্ক তালিকা ফাঁকা করা হবে না.
প্রযুক্তি যা আমরা কল আছে অনুসন্ধান রৈখিক,
যেখানে লিঙ্ক তালিকায় আপনি এবং যেখানে গিয়ে আপনি যা চান তাই খুঁজে নোড সন্নিবেশ
কারণ আপনি একটি সংঘর্ষের আছে.
আপনি যে একটি ট্রেড এখানে আছে, ডান হতে পারে দেখতে পারেন?
যদি আপনি একটি খুব ছোট হ্যাশ টেবিল, একটি buckets খুব আছে,
তারপর আপনি collisions অনেক আছে চলুন.
কিন্তু আপনি যদি একটি খুব বড় হ্যাশ টেবিল করতে,
আপনি সম্ভবত সেটি collisions হ্রাস করা যাচ্ছে,
কিন্তু এটি একটি খুব বড় তথ্য গঠন হতে যাচ্ছে.
যাচ্ছে যে সঙ্গে বিনিময় প্রথা আছে এর.
সুতরাং যখন আপনি আপনার pset তৈরি করছি, চারপাশের খেলার চেষ্টা
মধ্যে হয়তো আরো ছোট হ্যাশ টেবিল তৈরীর
কিন্তু তারপর বুদ্ধিমান যে এটি একটি বিট আর বিভিন্ন উপাদান, তর্ক নিতে যাচ্ছে
যারা সংযুক্ত তালিকা.
>> কি বোঝা যাচ্ছে না হয় অভিধান প্রতিটি শব্দের উপর বারবার.
এটা অভিধান একটি ফাইল পয়েন্টার পাস.
তাই আপনার ফাইলের সুবিধা ইনপুট / আউটপুট কর্ম যে আপনি pset4 মধ্যে আয়ত্ত নিতে যাচ্ছেন
অভিধান এবং প্রতিটি শব্দ বারবার উপর.
আপনি অভিধান সালে একটি নতুন নোডের হত্তয়া প্রতি শব্দ করতে চান,
এবং আপনি আপনার অভিধান ডাটা স্ট্রাকচার ভিতর যারা নোড প্রতি এক লিখুন চলুন.
যখনই আপনি কোনো নতুন শব্দ পেতে, আপনি জানেন যে এটি একটি নোড হয়ে যাচ্ছে.
তাই কম বয়সী আপনি যান এবং একটি নতুন শব্দ যে প্রত্যেক নোডের জন্য আপনাকে আছে পয়েন্টার malloc পারেন.
এখানে আমি আমার নোড পয়েন্টার new_node আহ্বান করছি এবং আমি কি করছি mallocing? একটি নোডের মধ্যে মাপ.
তারপর একটি ফাইল থেকে প্রকৃত পংক্তি পড়তে, কারণ আসলে অভিধান সংরক্ষিত হয়
দ্বারা একটি শব্দ এবং তারপর একটি নতুন লাইন, আমরা কি সুবিধা গ্রহণ করতে পারেন
হয় ফাংশন fscanf,
তদ্দ্বারা ফাইলটি অভিধান ফাইলটি যে আমরা পাস করছি,
তাই এটি একটি স্ট্রিং জন্য ফাইল স্ক্যান করা এবং শেষ যুক্তি মধ্যে জায়গা স্ট্রিং.
আপনি যদি একটি বক্তৃতা, যখন আমরা উপর গিয়েছিলাম ফিরে প্রত্যাহার
এবং ধরনের peeled CS50 গ্রন্থাগারের ফিরে স্তর
আমরা fscanf একটি বাস্তবায়ন সেখানে দেখেছি.
যাও fscanf ফিরে যান, আমরা যে ফাইল থেকে আমরা পড়ি আছে,
আমরা যে ফাইলের মধ্যে একটি স্ট্রিং জন্য, খুঁজছেন এবং তারপর আমরা এটা করছি স্থাপন করছি
এখানে আমি new_node> শব্দ আছে কারণ new_node একটি নোড পয়েন্টার,
প্রকৃত নোডের একটি হইনি.
আমি তখন new_node বলছে করছি, আমি নোড যাও যে এটি এর প্রতি নির্দেশ যেতে চান
এবং তারপর শব্দ এই মান নির্ধারণ করুন.
আমরা তারপর যে শব্দ নিয়ে হ্যাশ টেবিল মধ্যে সন্নিবেশ করতে চান.
বুঝতে পারি যে আমরা একটি নোড পয়েন্টার new_node তৈরি
কারণ আমরা যে কি নোড এর ঠিকানা হল জানতে চান চলুন
যখন আমরা সন্নিবেশ কারণ নোড নিজেদের struct গঠন, এ
হয় যে তারা একটি নতুন নোডের একটি ইশারা আছে.
তখন কি যে নোড নির্দেশ না করে ঠিকানা?
যে ঠিকানা যাও new_node হবে.
কি যে জানার জন্য, আমরা কেন একটি নোড * একটি নোডের থেকে ভিন্ন new_node তৈরি করছেন?
ঠিক আছে.
আমরা একটি শব্দ আছে. যে মান new_node> শব্দ.
যে অভিধান থেকে শব্দ যে আমরা ইনপুট করতে চান রয়েছে.
তাই আমরা যা করে যেতে চাই হয় আমরা স্ট্রিং আমাদের হ্যাশ ফাংশন কল করতে চান
কারণ আমাদের হ্যাশ ফাংশন একটি পংক্তিতে প্রদর্শিত হয় এবং পরে ফেরৎ একটি পূর্ণসংখ্যা আমাদের,
যেখানে যে পূর্ণসংখ্যা হয় সূচক যেখানে যে সূচিতে hashtable যে বালতি প্রতিনিধিত্ব করে.
আমরা যে সূচক নিতে চান এবং তারপর হ্যাশ টেবিল সূচকের যান
এবং তারপর যে লিঙ্ক তালিকা new_node এ নোডের ব্যবহার সন্নিবেশ.
তবে মনে রাখবেন যে আপনি আপনার নোড সন্নিবেশ করার সিদ্ধান্ত নেন,
তা মধ্যম আছে যদি আপনি তা বাছাই করতে চান
বা প্রারম্ভে বা শেষে, শুধুমাত্র নিশ্চিত যে আপনার সর্বশেষ নোড সর্বদা নাল স্থানটিকে করা
কারণ যে একমাত্র উপায় যে আমরা জানি যেখানে আমাদের লিঙ্ক তালিকা সর্বশেষ উপাদান হয়.
>> যদি আকার হল একটি পূর্ণসংখ্যা যে শব্দের অভিধান সংখ্যা উপস্থাপন করে,
তারপর এক উপায় এই কাজের জন্য যে যখনই আকার বলা হয়
প্রত্যেক উপাদান মাধ্যমে আমরা আমাদের হ্যাশ টেবিল যান
এবং তারপর প্রতি হ্যাশ টেবিলের মধ্যে উপস্থিত লিঙ্ক তালিকা মাধ্যমে পুনরুক্তি করা
এবং তারপর যে দৈর্ঘ্য, 1 নিরূপণ দ্বারা আমাদের পাল্টা 1 বৃদ্ধি.
কিন্তু প্রত্যেক বার যে আকার বলা হয়, যে একটি দীর্ঘ সময় নিতে যাচ্ছে
কারণ আমরা linearly হতে প্রতি একক লিঙ্ক তালিকা অনুসন্ধান চলুন.
পরিবর্তে, এটা অনেক সহজ হবে যদি আপনি ট্র্যাক রাখতে মধ্যে কতগুলি শব্দ ইন পাস হয় এর
তাই আপনি যদি আপনার চাহিদার ফাংশন মধ্যে একটি পাল্টা অন্তর্ভুক্ত
প্রয়োজনীয় হিসাবে আপডেট তারপর, পাল্টা, যদি আপনি একটি বিশ্বব্যাপী পরিবর্তনশীল এটি সেট,
মাপ দ্বারা ব্যবহার করা সক্ষম হবে.
তাই সহজভাবে আকার যেত না এক লাইন থাকে, শুধু কাউন্টারের মান সর্বাধিক মান ফিরে,
অভিধান মাপ, যা আপনি ইতিমধ্যে চাহিদার সঙ্গে মোকাবিলা.
এটা কি আমি বোঝানো যখন আমি তাকে বললাম যদি আপনি একটি সহায়ক উপায় মধ্যে লোড বাস্তবায়ন,
তারপর মাপ প্রশংসনীয় সহজ করা হচ্ছে.
>> তাই এখন আমরা চেক পেতে.
এখন আমরা শব্দ ইনপুট টেক্সট ফাইল থেকে আচরণ করছেন,
এবং তাই, আমরা এই ইনপুট শব্দের কিনা সব চেক করা চলুন
অভিধানে বা না আসলে.
অনুরূপ একত্র, আমরা কেস insensitivity জন্য অনুমতি চান.
আপনি নিশ্চিত হন যে সব শব্দের মধ্যে পাস করতে চাই, যদিও তারা মিশ্র কেস,
স্ট্রিং তুলনা সঙ্গে যখন বলা হয়, হয় সমতুল্য.
অভিধান টেক্সট ফাইল শব্দ আসলে সব ছোট হাতের.
আরেকটি ব্যাপার হল আপনি যে সমস্ত শব্দ, প্রতিটি স্ট্রিং পাস ধারনা করতে পারি,
হয় বর্ণানুক্রমিক অথবা apostrophes থাকতে হবে.
Apostrophes আমাদের অভিধানে শব্দ বৈধ হতে যাচ্ছে.
তাই আপনি যদি ঊর্ধকমা S সঙ্গে একটি শব্দ আছে, যা একটি প্রকৃত আপনার অভিধান বৈধ শব্দ
যে আপনার হ্যাশ টেবিল বিভিন্ন নোডের মধ্যে একটি হচ্ছে.
যদি শব্দ বিদ্যমান সঙ্গে কাজ করে পরীক্ষা করুন, তারপর আমাদের হ্যাশ টেবিল করা আছে এর.
যদি শব্দ অভিধান হয়, তাহলে অভিধান সব শব্দের হ্যাশ টেবিল আছে,
তাই আসুন হ্যাশ টেবিল এই শব্দ জন্য চেহারা.
আমরা জানি যে, যেহেতু আমরা আমাদের হ্যাশ ফাংশন বাস্তবায়িত
যেমন যে প্রত্যেক শব্দ অনন্য সবসময় একই মান হয় কুচি - কুচি করিয়া কাটা বস্তু,
তারপর আমরা জানি যে আমাদের সমগ্র পরিবর্তে সম্পূর্ণ হ্যাশ টেবিল অনুসন্ধানের মাধ্যমে,
আমরা আসলে সংযুক্ত তালিকার যে শব্দ যাও অন্তর্গত উচিত খুঁজে পেতে পারেন.
যদি এটা অভিধান ছিল, তারপর যে বালতি হবে.
আমরা কি, যদি শব্দটি হল আমাদের স্ট্রিং পাস মধ্যে নাম করতে পারি,
আমরা ঠিক করতে পারেন যে হ্যাশ লিঙ্ক তালিকা শব্দ এবং চেহারা
এ hashtable মান [হ্যাশ (শব্দ)].
সেখান থেকে, আমরা কি করব তা করা যেতে পারে, আমরা একটি নোড এই শব্দ অনুসন্ধান করার জন্য ছোট উপসেট আছে,
এবং তাই আমরা যুক্ত তালিকা তর্ক, walkthrough আগে থেকে একটি উদাহরণ ব্যবহার করতে পারেন,
এবং তারপর কল পালনে স্ট্রিং যেখানেই কার্সার প্রতি নির্দেশ তুলনা করা হয়,
যে শব্দ, এবং কিনা সেই তুলনা.
উপর নির্ভর করে পথ যে আপনি আপনার হ্যাশ ফাংশন সংগঠিত করা,
যদি এটি সাজানো এর, আপনি মিথ্যা একটু আগে প্রত্যাবর্তন করতে সক্ষম হতে পারেন,
কিন্তু যদি এটা আকাঁড়া, তাহলে আপনার লিঙ্ক তালিকা মাধ্যমে ঢোঁড়ন অবিরত করতে চান
যতক্ষন না আপনি তালিকার সর্বশেষ উপাদান খুঁজে পেতে.
এবং যদি এখনও আপনার শব্দ পাওয়া সময় আপনি লিঙ্ক তালিকার শেষে পৌঁছেছেন দ্বারা হইনি,
তার মানে আপনার শব্দ অভিধান মধ্যে বিদ্যমান নয়,
এবং যাতে শব্দ অবৈধ,
এবং চেক মিথ্যা ফেরত পাঠাবেন.
>> এখন আমরা আন আসে, যেখানে আমরা নোড যে আমরা malloc'd আছে সব মুক্ত করতে চাই,
তাই আমাদের বিনামূল্যে হ্যাশ টেবিল নোডের ভিতর সব.
আমরা লিঙ্ক তালিকা এবং বিনামূল্যে যে বিভিন্ন নোডের মধ্যে সমস্ত সমস্ত পুনরুক্তি উপর চান চলুন.
যদি আপনি উপরোক্ত walkthrough চেহারা উদাহরণ যেখানে আমরা একটি তালিকা সংযুক্ত মুক্ত,
তারপর আপনি হ্যাশ টেবিল প্রতিটি উপাদান জন্য যে প্রক্রিয়ার পুনরাবৃত্তি করতে চাইবেন.
এবং আমি এই বিষয়ে walkthrough শেষ দিকে যাবেন,
কিন্তু Valgrind একটি হাতিয়ার যেখানে আপনি যদি আপনি সঠিকভাবে মুক্ত আছে দেখতে পারেন
প্রতিটি নোডের মধ্যে যে আপনি বা malloc'd অন্য যে আপনি malloc'd করেছি, অন্য কোনো পয়েন্টার করেছি.
সুতরাং যে হ্যাশ টেবিল, যেখানে আমরা একটি buckets সসীম এর নম্বর আছে
এবং একটি হ্যাশ ফাংশন যে কোনো মান গ্রহণ করা এবং তারপর একটি নির্দিষ্ট বালতি যে মান নির্ধারণ করতে হবে.
>> এখন আমরা চেষ্টা করে আসা.
ভালো বর্ণন ধরনের চেষ্টা করে, এবং আমি এও আঁকা একটি উদাহরণ আউট করব.
মূলত, আপনি একটি সম্ভাব্য অক্ষর সমগ্র অ্যারে আছে,
এবং তারপর যখনই আপনি একটি শব্দ গঠন করছেন,
যে চিঠি একটি সম্ভাবনার বিস্তৃত একটি অভিধান ব্যবহার করা যেতে পারে লিঙ্ক.
কিছু শব্দ সি দিয়ে শুরু কিন্তু একটি দিয়ে তারপরে অবিরত,
কিন্তু অন্যদের হে অগ্রসর উদাহরণস্বরূপ,.
একটি trie ঐ শব্দের সম্ভাব্য সমাহার সব visualizing একটি উপায়.
একটি trie চিঠি যে শব্দের গঠন করা ক্রম ট্র্যাক রাখতে হবে,
শাখাবিন্যাস বন্ধ যখন প্রয়োজন, তখন এক চিঠি বর্ণের একাধিক দ্বারা পারেন অনুসরণ করা,
এবং প্রতিটি বিন্দুতে শেষে ইঙ্গিত কিনা যে শব্দ বা বৈধ হয় না
কারণ যদি আপনি শব্দ Mat বানান করছেন, এম আমি না মনে হয় একটি বৈধ শব্দ, কিন্তু Mat হয়.
আপনার trie যাতে এবং, এটা যে যে Mat পরে আসলে এর একটি বৈধ শব্দ নির্দেশ করে.
আমাদের trie প্রতিটি নোডের প্রকৃতপক্ষে যাও নোড পয়েন্টার একটি অ্যারের থাকতে হচ্ছে,
এবং আমরা, বিশেষ করে যারা আছে নোড পয়েন্টার 27, চলুন,
বর্ণমালার প্রতিটি অক্ষর হিসেবে ঊর্ধকমা অক্ষরের জন্য একটি করে.
যে অ্যারের মধ্যে প্রতিটি উপাদান নিজেই অন্য নোড দিকে নির্দেশ করে যাচ্ছে.
তাই যদি হয় যে নোড শূন্য, যে পরে যদি কিছুই আছে,
তারপর আমরা জানি যে কোন যে শব্দ ক্রম আরও অক্ষর আছে.
কিন্তু যদি যে নোড শূন্য না হয়, তার মানে যে চিঠি ক্রমানুসারে আরো অক্ষর আছে.
এবং তদ্ব্যতীত, তাহলে প্রত্যেক নোডের ইঙ্গিত করে কিনা তা একটি শব্দ বা না শেষ অক্ষর.
>> চলুন একটি trie একটি উদাহরণ ঢোকা.
প্রথম আমি এই অ্যারের মধ্যে 27 নোডের জন্য কোন রুম আছে.
যদি আমি শব্দ বার আছে -
যদি আমি শব্দ বার আছে এবং আমি যে সন্নিবেশ করতে চান,
প্রথম চিঠি বি, তাই যদি আমার trie হয় খালি,
বি হয় বর্ণমালার দ্বিতীয় অক্ষর, তাই আমি এই ঠেলা এখানে এই সূচিতে চয়ন যাচ্ছি.
আমি এখানে বি আছে যাচ্ছি.
বি একটি নোডের মধ্যে সমস্ত সম্ভব অক্ষরের অন্য অ্যারের যে স্থানটিকে হবে
যে চিঠি বি পরে অনুসরণ করতে পারেন
এই ক্ষেত্রে, আমি শব্দ দিয়ে BAR, আচরণ, তাই এখানে একটি যেতে হবে না.
একটি পরে, আমি চিঠি আর, অতএব একটি নিজস্ব সমন্বয় যাও এখন পয়েন্ট আছে,
এবং তারপর এখানে আর হবে.
BAR একটি সম্পূর্ণ শব্দ, তাই আমি অন্য একটি নোড যাও আর পয়েন্ট আছে চলেছি
যে যে শব্দ হয় বৈধ.
যে নোড হয় যাও নোডের একটি শ্রেণীবিন্যাস আছে যাচ্ছে,
কিন্তু যারা শূন্য হতে পারে.
কিন্তু মূলত, এটি যে ভালো অবিরত করতে পারেন.
যে একটি বিট আরো পরিষ্কার যখন আমরা একটি পৃথক উদাহরণে যেতে হবে,
সে আমার সাথে আছে বহন করে.
এখন আমরা আমাদের অভিধান অভ্যন্তরে বার আছে.
এখন আমরা বলতে শব্দ baz আছে.
আমরা বি দিয়ে শুরু, এবং আমরা ইতিমধ্যে চিঠি আমাদের অভিধানে যে এক হিসাবে বি আছে.
যে এ অনুসরণ এর জন্য আমরা ইতিমধ্যে একটি আছে.
কিন্তু পরিবর্তে, তাহলে আমরা Z নিম্নলিখিত আছে.
আমি তখন আমাদের অ্যারের মধ্যে একটি উপাদান Z হবে,
এবং তাই ঐ এক অন্য শব্দ বৈধ শেষ দিকে নির্দেশ করে যাচ্ছে.
সুতরাং আমরা দেখতে যে, যখন আমরা বি মাধ্যমে অবিরত এবং তারপর একটি,
দুই বর্তমানে আমাদের অভিধানে বিভিন্ন বিকল্প শব্দ B এবং এ সঙ্গে যে শুরু আছে
বলুন, আমরা শব্দ FOOBAR সন্নিবেশ চেয়েছিলেন.
তারপর আমরা এফ এ একটি এন্ট্রি করতে হবে
ফল হয় একটি নোড সম্পূর্ণ অ্যারের যে স্থানটিকে চিহ্নিত করে.
আমরা খুঁজে হে, হে যেতে চাই, হে তারপর একটি সম্পূর্ণ তালিকা সংযোগ করে.
আমরা বি আছে এবং তারপরে অবিরত চাই, আমরা চাই একটি এবং তারপর আর
আমি তখন FOOBAR ঘোরে পর্যন্ত FOOBAR নিচে উপায় হল একটি সঠিক শব্দ.
এবং তারপর, তাই এই একটি বৈধ শব্দ হবে.
এখন বলতে আমাদের অভিধানে পরবর্তী শব্দ আসলে শব্দ foo.
আমরা কি এফ ফল অনুসরণ করে বলা যায়?
আমি আসলে ইতিমধ্যে হে জন্য একটি জায়গা আছে, তাই আমি অবিরত যাচ্ছি.
আমি একটি নতুন করা হবে না. চালিয়ে.
এই অভিধান foo একটি বৈধ শব্দ, অতএব আমি নির্দেশ দিতে যাচ্ছি
যে এটি কোন বৈধ.
যদি আমি সেখানে আমার ক্রম থামাতে, যে সঠিক হবে.
কিন্তু আমরা যদি foo থেকে আমাদের ক্রম অব্যাহত নিচে বি যাও
এবং শুধুমাত্র FOOB ছিল, FOOB হয়, এবং একটি শব্দ না যে এক একটি বৈধ হিসাবে চিহ্নিত হয় না.
একটি trie ইন, আপনি প্রত্যেক নোডের ইঙ্গিত আছে কিনা তা একটি বৈধ শব্দ বা না,
এবং তারপর তিনি প্রত্যেক নোডের 27 নোড পয়েন্টার একটি অ্যারে আছে
যে নোড নিজেদের তারপর বিন্দু.
>> এখানে কিভাবে আপনি এই সংজ্ঞায়িত করতে পারেন একটি উপায়.
যাইহোক, হ্যাশ টেবিল যেমন ঠিক, চান যেখানে আমরা একটি নোড * মাথা ছিল
আমাদের সাথে লিঙ্ক তালিকা শুরুতে ইঙ্গিত, আমরা চান সেটি চালু
বুদ্ধিমান যেখানে আমাদের trie শুরুতে হয় কিছু উপায়.
কিছু মানুষ এই কল গাছ চেষ্টা করে, এবং যে যেখানে থেকে root পরিচয়ে আসে.
সুতরাং আমরা আমাদের ট্রি রুট নিশ্চিত যে আমরা থাকতে ভিত্তির উপরে প্রতিষ্ঠিত করতে চান
যেখানেই যাও আমাদের trie হয়.
আমরা ইতিমধ্যে ধরনের গিয়েছিলাম উপর
আপনি যেভাবে অভিধান মধ্যে প্রতিটি শব্দ আমার মনে হয় লোড করতে পারে নি.
প্রত্যেক শব্দ জন্য মূলত, আপনার trie মাধ্যমে পুনরুক্তি করতে চান চলুন
এবং বুদ্ধিমান যে শিশুদের প্রতি উপাদান - আমরা এটা বলা এই ক্ষেত্রে শিশুরা -
অনুরূপ একটি পৃথক চিঠি যাও, আপনি কি ওই মান পরীক্ষা করতে যাচ্ছেন
এ যে বিশেষ অক্ষর সূচক যে অনুরূপ.
তাই চিন্তা সমস্ত পথ ফিরে সিজার এবং Vigenere যাও,
বুদ্ধিমান যে প্রতি চিঠি আপনি একটি বর্ণানুক্রমিক সূচী ধরনের ফিরে মানচিত্রের করতে পারেন,
Z মাধ্যমে স্পষ্টভাবে একটি চমত্কার একটি বর্ণানুক্রমিক চিঠি ম্যাপ সহজ করা হয়,
কিন্তু দুর্ভাগ্যক্রমে, apostrophes এছাড়াও একটি শব্দের মধ্যে গৃহীত চরিত্র.
আমি এমনকি কি ASCII মান নয়,
তাই জন্য যে আপনি যদি যাও যাও কিনা তা আপনি হয় প্রথম এক হতে চান সিদ্ধান্ত একটি সূচক খুঁজতে চান
অথবা গত এক, তাহলে আপনি হার্ড কোডেড যে জন্য চেক করা হবে
এবং তারপর যে করা মধ্যে সূচক 26, উদাহরণস্বরূপ জন্য.
আমি তখন কি শিশুদের এ মান যাচাই করছি [i]
যেখানে [i] অনুরূপ যাও চিঠি যাই হোক না কেন আপনি এ.
যদি যে শূন্য, তার মানে বর্তমানে কোন অক্ষর সম্ভব না
যে আগের ক্রম থেকে করায়, তাই আপনি malloc চান চলুন
এবং একটি নতুন নোডের জন্য যে শিশুদের [i] এটি যাও বিন্দু আছে
তাই আপনার তৈরি করা - যখন আমরা আয়তক্ষেত্র মধ্যে একটি চিঠি ঢোকানো -
ফলে যে নতুন নোডের মধ্যে শিশুদের অ শূন্য এবং বিন্দু.
কিন্তু যদি যে শূন্য হয় না foo আমাদের ইনস্ট্যান্সের মধ্যে, পছন্দ
যখন আমরা ইতিমধ্যে FOOBAR ছিল, আমরা অবিরত,
এবং আমরা একটি নতুন নোড তৈরীর কখনও হয় না কিন্তু বরং সত্য যাও is_word সেটিং
যে শব্দের শেষে.
>> আমি তখন হিসাবে আগে, কারণ এখানে আপনি প্রতি চিঠি সঙ্গে একটি সময়ে আচরণ করছেন,
এটি আকার এর জন্য আপনার জন্য সহজ হবে, বদলে যাও গণনা করা হচ্ছে
পুরো ট্রি মাধ্যমে এবং যান না কতটা সন্তান আমি নেই নিরূপণ
এবং তারপর শাখাবিন্যাস বন্ধ, মনে বাম এবং ডান পাশ কত হয়
এবং যে ভালো জিনিস, এটা আপনার জন্য অনেক সহজ হতে যাচ্ছে
আপনি যদি শুধুমাত্র কতগুলি শব্দ আপনাকে যোগ করছি ট্র্যাক রাখতে
যখন আপনি চাহিদার সঙ্গে লেনদেন করছেন.
এবং তারপর যাতে উপায় আকার একটি আকার বিশ্ব পরিবর্তনশীল শুধু ফিরে আসতে পারেন.
>> এখন আমরা চেক আসে.
আগে একই মান হিসাবে, যেখানে আমরা কেস insensitivity জন্য অনুমতি চান.
পাশাপাশি, আমরা ধরে নিই যে পংক্তিগুলি শুধুমাত্র বর্ণানুক্রমিক অক্ষর বা apostrophes
কারণ শিশুদের হয় 27 দীর্ঘ একটি শ্রেণীবিন্যাস,
তাই বর্ণমালার প্লাস ঊর্ধকমা চিঠি সব.
জন্য আপনি কি করতে চাইবেন চেক আপনাকে root-এ শুরু করতে চাইবেন
কারণ রুট একটি অ্যারের ধারণকারী নির্দেশ করা
সম্ভাব্য একটি শব্দের শুরু অক্ষর সব.
আপনাকে সেখানে শুরু চলুন,
এবং তারপরে আপনি চেক চলুন এই মান NULL বা না,
কারণ যদি মানটি শূন্য, তার মানে অভিধান কোনো মান নেই
যে যে বিশেষ ক্রম যে চিঠি থাকে.
যদি এর শূন্য তারপর, তার মানে শব্দ সরাসরি misspelled হয়.
কিন্তু যদি শূন্য না থাকে, তাহলে আপনি চালিয়ে যেতে পারেন,
যে প্রথম চিঠি সম্ভব একটি শব্দ প্রথম চিঠি বলে,
তাই এখন আমি যদি দ্বিতীয় চিঠি, যে ক্রম, আমার অভিধান মধ্যে চেক করতে চান.
সুতরাং আপনি প্রথম নোডের শিশুদের সূচী যেতে চলুন
এবং চেক কিনা যে দ্বিতীয় চিঠি বিদ্যমান.
তারপর আপনি যে কিনা ক্রম বৈধ বা পরীক্ষা করা হবে না যে প্রক্রিয়ার পুনরাবৃত্তি
এর মধ্যে আপনার trie.
যখনই যে সূচক বিন্দুতে নোড শিশুদের নাল যাও,
আপনি কি জানেন যে যে ক্রম বিদ্যমান নয়,
কিন্তু যদি আপনি যে শব্দ ইনপুট করেছি শেষে পৌঁছানোর,
তাহলে আপনি এখন চেক যে আমি এই প্রক্রিয়াটি সম্পন্ন করেছি চান
এবং আমার trie মধ্যে এটি পাওয়া যায় নি, যে শব্দ বা বৈধ না?
এবং তারপর, তাই আপনার আর যে চেক করতে চান, এবং যে যখন আপনি যদি ক্রম পেয়েছি যে,
তারপরে আপনি যে শব্দ হয় কিনা বৈধ বা না চেক করতে চান
কারণ আবার আগের ক্ষেত্রে মনে রাখবেন, যে আমি সৃষ্টি যেখানে আমরা FOOB ছিল,
যে ছিল একটি বৈধ ক্রম যে আমরা পাওয়া কিন্তু সত্যিই একটি বৈধ শব্দ নিজেই ছিল না.
>> একইভাবে, আপনি আপনার জন্য চেষ্টা trie বিভিন্ন নোডের মধ্যে সমস্ত আন চান মধ্যে আন.
দুঃখিত. অনুরূপ হ্যাশ টেবিল যেখানে মধ্যে আন আমরা সমস্ত নোড মুক্ত যাও,
এ চেষ্টা আমরা এছাড়াও নোডের মধ্যে সমস্ত মুক্ত করতে চান.
নিচ থেকে উপরে আসলে আন সহজে কাজ করা
কারণ এই তালিকা মূলত লিঙ্ক.
তাই আমরা যাও মান সমস্ত নিশ্চিত যে আমরা রাখা করতে চাই
এবং বিনামূল্যে সব স্পষ্টভাবে তাদের.
যাও যাও করতে আপনি কি করতে যাচ্ছে যদি আপনি একটি trie সঙ্গে কাজ করছি করছি
নীচে বিনামূল্যে এবং সর্বনিম্ন সম্ভব নোডের প্রথম ভ্রমণ হয়
এবং তারপর যারা শিশুদের সমস্ত পর্যন্ত যান এবং তারপর যারা বিনামূল্যে সব,
আপ যান এবং তারপর বিনামূল্যে, ইত্যাদি
Trie প্রথম নীচে স্তর সাথে ডিল ভালো ধরনের
এবং তারপর যাচ্ছে উপরে একবার আপনি সবকিছু মুক্ত করেছি.
এটি একটি যেখানে recursive ফাংশন উপকারে আসতে পারে ভাল দৃষ্টান্ত.
আপনি একবার আপনার trie নীচে স্তর মুক্ত করেছেন,
তারপর আপনি এটি বাকি উপর আন কল,
এমনটা নিশ্চিত করা যে আপনার প্রতি মিনি মুক্ত -
আপনি ধরনের মনশ্চক্ষুতে এটি হিসাবে মিনি চেষ্টা করতে পারেন.
সুতরাং আপনি এখানে আপনার রুট আছে.
আমি শুধু এটা সহজ, তাই আমি তাদের 26 আঁকা না.
সুতরাং আপনি এই আছে, এবং তারপর এইসব শব্দের ক্রম প্রতিনিধিত্ব
যেখানে এই সামান্য চেনাশোনা সব চিঠি যা অক্ষর সিকোয়েন্স বৈধ.
চলুন শুধুমাত্র একটি বিট আরো অবিরত.
কি আপনি কাজ করতে চান সেটি চালু বিনামূল্যে নীচে এবং তারপর এখানে বিনামূল্যে এই এক
এবং তারপর বিনামূল্যে নীচে এই এক আগে উপরে একটি মুক্ত করতে এখানে
কারণ যদি আপনি এখানে দ্বিতীয় পর্যায়ে বিনামূল্যে কিছু,
তারপর আসলে আপনি এই মান হারাতে চাই এখানে.
তাই এটি একটি trie নিশ্চিত করুন যে আপনি নীচে প্রথম মুক্ত জন্য আন মধ্যে গুরুত্বপূর্ণ.
প্রতিটি নোডের জন্য হয় বলে কি আপনি করতে পারেন
আমি শিশুদের সব আন চান.
>> এখন যে আমরা হ্যাশ টেবিল হিসাবে ভাল পদ্ধতি হিসাবে trie পদ্ধতি জন্য আন উপর চলে গেছে করেছি,
আমরা Valgrind তাকান চান চলুন.
Valgrind আপনি নিম্নলিখিত কমান্ডের সাহায্যে চালানো.
আপনি valgrind-v আছে.
আপনি সব তথ্য ফাঁসের জন্য যখন আপনি এই নির্দিষ্ট টেক্সট দেওয়া speller চালানো চেক করছি
কারণ speller একটি টেক্সট ফাইল গ্রহণ করা প্রয়োজন.
সুতরাং Valgrind চালানো আপনার প্রোগ্রাম, আপনি কত বাইট বরাদ্দ আপনি বলুন, হবে
কত বাইট আপনি মুক্ত, এবং এটা আপনাকে বলতে আপনি ঠিক কিনা যথেষ্ট মুক্ত করা
অথবা আপনি যথেষ্ট কিনা কি, বিনামূল্যে না
অথবা কখনও কখনও আপনাকে এমনকি ওভার বিনামূল্যে বিনামূল্যে একটি নোড মত, যে এর ইতিমধ্যে পারেন মুক্ত করা হয়েছে
এবং তাই ত্রুটি প্রত্যাবর্তন করতে হবে.
আপনি যদি ব্যবহার Valgrind, এটি কয়েকটি বার্তা দিতে হবে
ইঙ্গিত কিনা নিষ্কৃত হয় আপনি যথেষ্ট কম, যথেষ্ট করেছি মাত্র,
যথেষ্ট সময় বা আরো বেশী.
>> এই pset একটি অংশ, এটা বিগ বোর্ড চ্যালেঞ্জ ঐচ্ছিক.
কিন্তু যখন আমরা ডাটা স্ট্রাকচার সঙ্গে লেনদেন করছেন
এটা মজার যে ধরণের কত দ্রুত এবং কার্যকর কিভাবে আপনার ডাটা স্ট্রাকচার দেখতে হতে পারে.
কিন্তু আপনার হ্যাশ collisions অনেক ফাংশানের ফলাফল?
অথবা আপনার তথ্য আকার বড়?
এটা যাও তর্ক করা অনেক সময় লাগবে?
Speller র লগের মধ্যে, এটা আউটপুট কত সময় আপনি লোড ব্যবহার,
যাও, যাও চেক আকার আচার - ব্যবহার, এবং আন,
এবং তাই ঐ বিগ বোর্ড পোস্ট করা হয়,
যেখানে আপনি আপনার সহপাঠীদের বিরুদ্ধে প্রতিদ্বন্দ্বিতা করা যাবে
এবং কিছু কর্মী সদস্যদের যারা দ্রুততম বানান পরীক্ষক আছে দেখতে যাও.
তবে একটি বিষয় যে আমি হ্যাশ টেবিল সম্পর্কে নোট চাই
যে কিছু প্রশংসনীয় সহজ হ্যাশ ফাংশান যে আমরা মনে করতে পারি নি আছে.
উদাহরণস্বরূপ, আপনি 26 buckets আছে, এবং তাই প্রতি বাকেট
অনুরূপ একটি শব্দ প্রথম অক্ষরটি,
কিন্তু যে একটি চমত্কার অসম হ্যাশ টেবিল সৃষ্টি হচ্ছে
কারণ অনেক কম শব্দ এক্স সঙ্গে যে শুরু এম সঙ্গে শুরু তুলনায় উদাহরণস্বরূপ, আছে.
ওয়ান ওয়ে speller সম্পর্কে যেতে হয় যদি আপনি অন্যান্য কার্যকারিতা সব নামা করতে চান,
তারপর শুধুমাত্র একটি সহজ হ্যাশ ফাংশন আপনার কোড চালনাকারী পেতে ব্যবহার
এবং তারপর ফিরে যান এবং আপনার হ্যাশ টেবিল এবং সংজ্ঞা মাপ পরিবর্তন করা.
সম্পদের একটি হ্যাশ ফাংশান জন্য অনেক ইন্টারনেট আছে,
এই pset জন্য এবং যাতে আপনি ইন্টারনেট হ্যাশ ফাংশান গবেষণা অনুমতি দেওয়া হয়
জন্য কিছু ইঙ্গিত হিসাবে দীর্ঘ এবং অনুপ্রেরণা হিসাবে আপনি যেখানে আপনি এটা পেয়েছেন থেকে cite নিশ্চিত.
আপনি এবং চেহারা কিছু হ্যাশ ফাংশন যে আপনার ইন্টারনেট অনুসন্ধান ব্যাখ্যা স্বাগত.
পিছনে যে, আপনাকে যদি কেউ একটি trie ব্যবহৃত দেখতে পাবে
কিনা তাদের প্রয়োগ আপনার হ্যাশ টেবিল বা না তুলনায় দ্রুততর.
আপনি বিগ বোর্ড একাধিক বার জমা দিতে পারেন.
এটা আপনার সবচেয়ে সাম্প্রতিক ভুক্তি রেকর্ড করব.
তাই হয়তো আপনি আপনার হ্যাশ ফাংশন এবং তারপর পরিবর্তন যে এটা আসলে একটা অনেক দ্রুত বুঝতে
অথবা অনেক আগের চেয়ে অনেক মন্থর.
এটা একটা মজার উপায় একটি বিট.
সর্বদা 1 বা 2 কর্মী সদস্যদের যারা ধীরতম সম্ভব অভিধান চেষ্টা করা আছে,
যাতে সর্বদাই তাকান মজা.
>> pset জন্য ব্যবহার হয় আপনি একটি ঐচ্ছিক অভিধান সঙ্গে speller চালানোর
এবং তারপরে একটা টেক্সট ফাইল বাধ্যতামূলক.
ডিফল্টরূপে যখন আপনি শুধুমাত্র একটি টেক্সট ফাইল সঙ্গে speller চালানো এবং একটি অভিধান উল্লেখ না,
এটি অভিধান টেক্সট ফাইল, বৃহৎ ব্যবহার করছেন
মধ্যে cs50/pset5/dictionaries ফোল্ডার.
যে এক ওভার 100,000 শব্দ আছে.
তারা একটি ছোট অভিধান যা অনেক কম শব্দ আছে
যে CS50 আপনার জন্য তৈরি করেনি.
যাইহোক, আপনি খুব সহজেই আপনার নিজস্ব অভিধান করতে পারেন
যদি আপনি চান ছোট উদাহরণ কাজ করা -
উদাহরণস্বরূপ, যদি আপনার সময় gdb ব্যবহার করতে চান এবং আপনি নির্দিষ্ট মান জানা
আপনি যে আপনার হ্যাশ টেবিল যাও যাও ছকা চান.
সুতরাং আপনি ঠিক BAR, baz, foo, এবং FOOBAR সঙ্গে আপনার নিজস্ব টেক্সট ফাইল ঠিক করতে পারেন,
একটি টেক্সট ফাইলে যে, 1 টি লাইন, যাদের প্রতিটি পৃথক,
এবং তারপর আপনার নিজস্ব টেক্সট ফাইলটি যে কেবল আক্ষরিক হয়তো 1 বা 2 শব্দ আছে না
তাই আপনি কি জানেন যে ঠিক কি আউটপুট হওয়া উচিত.
কিছু নমুনা টেক্সট ফাইলের যে বিগ বোর্ড যখন আপনি চ্যালেঞ্জ চালানোর পরীক্ষা করা
হয় যুদ্ধ ও শান্তি এবং একটি অসটেন উপন্যাস বা যে ভালো কিছু.
সুতরাং যখন আপনি আউট শুরু করছেন, এটা অনেক সহজ আপনার নিজস্ব টেক্সট ফাইল করা
যে কেবল শব্দের একটি দম্পতি বা হয়ত 10 থাকে
যাতে আপনি ফলাফল কি হওয়া উচিত তার পূর্বাভাস দিতে পারি
এবং তারপর যে বিরুদ্ধে এটি, চেক নিয়ন্ত্রিত একটি উদাহরণ যাতে আরও বেশি.
তাই যেহেতু আমরা পূর্বাভাসের এবং আশেপাশে জিনিস অঙ্কন সঙ্গে লেনদেন করছেন,
আবার আমি আপনি কলম এবং কাগজ ব্যবহার উত্সাহিত করতে চান
কারণ এটি এক সাথে আপনাকে সাহায্য করতে যাচ্ছে -
তীরচিহ্ন আঁকা, কিভাবে হ্যাশ টেবিল বা কিভাবে আপনার trie দেখায়,
যখন আপনি কিছু করতে যাচ্ছি যেখানে তীরচিহ্ন freeing করছি,
হয় আপনি যথেষ্ট উপর অধিষ্ঠিত, আপনি কোন লিংক কি লোপ
রসাতল অবাঞ্ছিতভাবে মেমরির মধ্যে এবং পতনশীল.
তাই দয়া করে, জিনিষ বহিষ্কার এমনকি আগে আপনি নিচে লেখা কোড পেতে চেষ্টা করুন.
সেটা যাতে আঁকুন তা বুঝতে কিভাবে যে কাজ করতে যাচ্ছি
কারণ তখন আমি গ্যারান্টি আছে কম পয়েন্টার গন্ডগোল পাকিয়ে ফেলে পাতিত করব.
>> ঠিক আছে.
আমি আপনাকে খুব ভাগ্য এই pset ভাল চান চান.
এটা সম্ভবত hardest এক.
সুতরাং প্রথম দিকে শুরু করার চেষ্টা, সেটা আঁকা, সেটা আঁকা, এবং শুভকামনা.
এই ছিল Walkthrough 5.
>> [CS50.TV]