Parity nima ?

Parity nima ?

Bismillah. Demak bugungi darsimiz Parity nima va u ishtirokidagi algoritm qanday yechilishi haqida bo'ladi. Ushbu darsni men o'zim topgan blogni tarjima qilib tushuntirib o'taman, mualliflik huquqini buzmagan holda ushbu ishni qilishga InshaAllah harakat qilaman. Demak Kompyuterlarda parity (lotincha paritas so'zidan, teng yoki ekvivalent degan ma'noni anglatadi) ma'lumotlar saqlanadigan joydan boshqasiga ko'chirilganda yoki kompyuterlar o'rtasida uzatilganda ma'lumotlar yo'qolganligini yoki yozilganligini tekshiradigan usuldir.

Parity Qanday ishlaydi ?

Ma'lumotlarni uzatish butunlay xatosiz jarayon bo'lmaganligi sababli, ma'lumotlar har doim ham xuddi uzatilgan tarzda qabul qilinmaydi. Parity biti maqsadli qurilmaga ma'lumotlarning to'g'ri qabul qilinganligini aniqlashga imkon beradigan, ma'lumotlarga checksum qo'shadigan usuldir.

Birgalikda harakatlanadigan bitlar guruhiga qo'shimcha ikkilik raqam, parity bit qo'shiladi. Ba'zan check bit deb ataladigan bu bit faqat ko'chirilgan bitlarning muvaffaqiyatli kelganligini aniqlash uchun ishlatiladi.

Juft va Toq Parity bitlar

Parity bit da ikkita usul mavjud ular:

  • Juftlik tengligida, bitta qiymatdagi bitlar soni hisoblanadi. Agar bu raqam toq bo'lsa, parity bit qiymati to'plamdagi raqamlarning umumiy sonini (shu jumladan, parity bitini) juft songa aylantirish uchun biriga o'rnatiladi. Agar bitning qiymati juftga teng bo'lsa, parity bit qiymati nolga o'rnatiladi, shuning uchun to'plamdagi bitt-ning umumiy soni (parity biti bilan birga) juft son bo'lib qoladi.
  • Toq parityda, agar bittasi qiymati bo'lgan bitlar soni juft son bo'lsa, to'plamdagi birliklarning umumiy sonini (parity bitini ham qo'shganda) toq songa aylantirish uchun, parity bit qiymati bittaga o'rnatiladi ya'ni joylanadi (ushbu misolni algoritm yechayotganda ko'rib chiqamiz). Agar qiymatdagi bit-ning raqamlarining biri toq bo'lsa, Parity qiymati nolga tenglashtiriladi, shuning uchun to'plamdagi bit-ning umumiy soni (parity biti bilan birga) toq son bo'lib qoladi.

image.png

Endi esa o'zimizni qiynamasdan algoritm yechishga o'tamiz va yaxshilab tushunib olamiz.

Algoritmning linki

A Massivi berilgan va uning qiymatlari manfiy emas, A Massividagi barcha juft sonlarni qaytaring, Toq sonlar bilan birga.
Ushbu satrga mos holatda Massivni qaytaring.
Mos holat:
  1 <= A.length <= 5000
  0 <= A[i] <= 5000
Misol:
  [3,1,2,4] => [2,4,3,1]
Natijalar [4,2,3,1], [2,4,1,3], va [4,2,1,3] ushbu holatlarda bo'lsa ham to'g'ri bo'ladi.
Bizga atigi bittagina misol berilgan, men esa ko'proq misollarni keltirmoqchiman:
  [0, 1] => [0, 1]
  [0, 1, 2] => [0, 2, 1]
  [3, 2, 0, 5, 4, 1] => [0, 2, 4, 3, 5, 1]
  [1, 4, 2, 0, 1, 5, 3, 4, 3, 7] => [0, 2, 4, 4, 1, 1, 5, 3, 3, 7]

Tuzilish

Men ushbu muammoni to'g'ridan-to'g'ri tushuntirishga ega deb topdim, chunki bu maqsadlarning hech birini buzishga urinmaydi. Lekin har doimgidek Algoritmni tuzilishini ko'rib chiqishimiz kerak, shunda uning qanday ishlashini kengroq tushunamiz:

A Massivi berilgan va uning qiymatlari manfiy emas

Ushbu savol bizga uchta alohida ma'lumot bermoqda va qayerdan boshlash kerakligiga g'oya bermoqda. Biz yozadigan Funksiya A massivini qabul qiladi va Biz bemalol raqamlar bilan ishlashimiz bildirilmoqda, hech qanday Primitiv turlarsiz. Oxirgi ma'lumot esa barcha sonlar manfiy emasligidir.

A Massividagi barcha juft sonlarni qaytaring, Toq sonlar bilan birga.

Bu yerda esa biz funksiyamiz qatorni qaytarishi kerakligini bilib olamiz va qaytarish qatoridagi elementlarning qanday tashkil qilinishi kerakligini aniqlaymiz (Juft va Toq ekanligi). Avval hamma A massividagi juft elementlar qaytarilishi kerak, undan so'ng esa Toq elementlar. Tushuntirishga juda ham oson Algoritm.

Ushbu satrga mos holatda Massivni qaytaring

Ushbu holat meni qiziqtirdi. Qaytarilayotgan massivimizda A elementlarining barcha juft sonlari massivga oldin qo'yilishi va undan so'ng esa toq sonlari qo'yilishi bizga, hech qanday to'xtash ya'ni break qo'ymasligimiz kerak ekanligini aytmoqda.

##Cheklovlar

Bizga ikkita oddiy cheklovlar berilgan, Ammo avval bittama-bitta tekshirib chiqishimiz zarur:

1 <= A.length <= 5000

Birinchi berilgan cheklov bizga eng kichik va eng katta kirish (input) elementlari nechaga teng bo'lishi kerak ekanligini tushuntirmoqda. Eng kichik kirish (input) nuqtasi bu 1 <= A.length teng, biz bu haqida qayg'urmasak ham bo'ladi, chunki array hech qachon bo'sh holatda kiritilmaydi. Eng katta kirish (input) A.length <= 5000 unchalik muhim emas, ammo biz funksiyamizda maksimal operatsiyalarni hisoblamoqchi bo'lsak chegara qo'yishimiz zarur.

0 <= A[i] <= 5000

Ikkinchi cheklov esa ham bizga eng kichik va eng katta elementlarni beradi, ammo bu raqamlar kiritilayotgan massivni kutishlari lozim (A). Yuqorida aytib o'tilganidek, bu holat uchun eng kichik chegara kabi muhim ahamiyatga ega emas, chunki biz (A) kirish massividagi elementning toq yoki juft ekanligini aniqlashimiz kerak, ammo bu yo'qligini tasdiqlaydigan kirish qatoridagi (`A) raqam manfiy bo'ladi va potentsial chekka holatlarni chiqarib tashlashga imkon beradi.

##Kelinglar Kodlashni boshlaymiz

Birinchi bo'lib sortArrayByParity deb nomlangan funksiya yaratib olaylik. Unga qiymat beraylik, kirish qismi uchun Amassivini beraylik. Endi esa qaytaradigan ikkita Array larimizni o'zgaruvchilarga olib olaylik va ularni qaytaraylik:

const sortArrayByParity = function(A){
// Endi esa qaytaradigan ikkita Array larimizni o'zgaruvchilarga olib olaylik
let even = [], odd = [];
// va ularni qaytaraylik
return [...even, ...odd];
}

Endi esa keling while loop yaratamiz:

const sortArrayByParity = function(A){
// Endi esa qaytaradigan ikkita Array larimizni o'zgaruvchilarga olib olaylik
let even = [], odd = [];
// While loop yaratamiz
while(A.length > 0){
}
// va ularni qaytaraylik
return [...even, ...odd];
}

Nihoyat oxirgi bosqich, massivdan kelayotgan ma'lumotlarni juft yoki toq ekanligini tekshiruvchi if statement yaratamiz:

const sortArrayByParity = function(A){
// Endi esa qaytaradigan ikkita Array larimizni o'zgaruvchilarga olib olaylik
let even = [], odd = [];
// While loop yaratamiz
while(A.length > 0){
// Kirishdan kelayotgan ma'lumotlarni juft yoki toq ekanligini aniqlovchi if statement
if(A[0] % 2 === 0){

}
// Unday bo'lmasa
else{

}

}
// va ularni qaytaraylik
return [...even, ...odd];
}

Endi esa Juftga juftni olib qaytaradigan va toqqa toqni qaytaradigan holatda push metodidan foydalanib ifoda yaratib olamiz:

const sortArrayByParity = function(A){
// Endi esa qaytaradigan ikkita Array larimizni o'zgaruvchilarga olib olaylik
let even = [], odd = [];
// While loop yaratamiz
while(A.length > 0){
// Kirishdan kelayotgan ma'lumotlarni juft yoki toq ekanligini aniqlovchi if statement
if(A[0] % 2 === 0){
even.push(A.shift());
}
// Unday bo'lmasa
else{
odd.push(A.shift())
}

}
// va ularni qaytaraylik
return [...even, ...odd];
}

Ana endi yechgan masalamizni tekshirib olsak:

image.png

Volya do'stlar biz Algoritmni bexato yechdik, va yechgan algoritmlarimizga yana birini qo'shib oldik.

Mana bugungi blogim ham tugadi !

Foydalanilgan manbalar:

Birinchi manba

ikkinchi manba