ধরুন একটি সাধারণ সংক্ষেপণ অ্যালগরিদম যাa
করে রানের প্রতিনিধিত্ব করে , অর্থাৎ কিছু স্থির শিরোনাম, স্ট্রিং এবং পুনরাবৃত্তির সংখ্যা । এটি একটি রান-দৈর্ঘ্যের এনকোডিং । তারপরে সংক্ষিপ্ত পাঠের দৈর্ঘ্য কিছু ধ্রুবক জন্য বিটের কাছাকাছি হবে । সংশ্লিষ্ট কম্প্রেশন অনুপাত হবে । আপনি যদি স্থানীয় উত্থান-পতনকে অবহেলা করেন তবে এটি প্রায় দূর থেকে দেখা বাঁকির আকার হিসাবে প্রায়। অসম্পূর্ণভাবে, সংকোচনের অনুপাত ratio সাথেএন একটি + + এলজি এন একটি একটি + + এলজি ( এন )( শিরোনাম , "ক" , এন )a
এনa + lgএনএকটি Θ(এলজি(এন)পি/এন)পি≥1a + lg( এন )এনΘ ( এলজি)( এন )পি/ এন)পি ≥ 1(আমি এটি কার্যকর করি নি তবে আমার সন্দেহ হয় যে খেলতে অন্যান্য কারণ রয়েছে যা ইনপুট স্ট্রিংয়ের দৈর্ঘ্যে আউটপুটকে সুপারলাইনারের আকার দেয়))
n a n a + 1 a + 2 aএলজিএন বিটগুলি বিটগুলির পূর্ণসংখ্যার সংখ্যা নয়, বাইটগুলি ছেড়ে দিন: এর আকার ন্যূনতম হতে হবে এবং একটি পূর্ণসংখ্যা সংখ্যা বাইট পর্যন্ত হয়। এই প্রথম প্রান্তিক মানের প্রভাব ব্যাখ্যা করেছেন: এই সহজ কম্প্রেশন অ্যালগরিদম, আপনি পালন করবে আউটপুট দৈর্ঘ্য হল যখন , যথেষ্ট তাহলে , তারপর , ইত্যাদি কম্প্রেশন অনুপাত তাই নয় মসৃণ বক্ররেখা but থেকে পরে লাফ দেয় , তারপরে ইত্যাদি etc. জাম্পের পরে এই প্রভাবটি সবেমাত্র দৃশ্যমান হয় ( তবে খেলতে অন্যান্য প্রভাব রয়েছে যা জাম্পগুলি আলাদা করে তোলে)।এনএকটিএনa + 1a + 2 a+1একটিএন a+2a + 1এনa + 2এন
যেহেতু সংক্ষিপ্তসার অনুপাত ভিজ্যুয়াল পর্যবেক্ষণের জন্য দৈর্ঘ্যের বিপরীত অনুপাতের খুব কাছাকাছি, তাই এখানে আমার প্রয়োগকরণের ক্ষেত্রে ছোট দৈর্ঘ্যের ডেটা রয়েছে (এটি bzip2 গ্রন্থাগারের সংস্করণের উপর নির্ভরশীল হতে পারে, কারণ কিছু ইনপুট সংকোচন করার একাধিক উপায় রয়েছে )। প্রথম কলামটি এর সংখ্যা নির্দেশ করে a
, দ্বিতীয় কলামটি সংকুচিত আউটপুটটির দৈর্ঘ্য।
1–3 37
4–99 39
100–115 37
116–258 39
259–354 45
355 43
356 40
357–370 41
371–498 43
499–513 41
514–609 45
610 43
611 41
613–625 42
626–753 44
754–764 42
765 40
766–767 41
768 42
769–864 45
…
Bzip2 অনেক বেশি জটিল যে সরল রান-দৈর্ঘ্যের এনকোডিং। এটি কয়েকটি ধাপে কাজ করে এবং প্রথম ধাপটি একটি রান-দৈর্ঘ্যের এনকোডিং পদক্ষেপ , তবে একটি নির্দিষ্ট আকারের সীমা। প্রথম পদক্ষেপটি নিম্নরূপে কাজ করে: যদি কোনও বাইট কমপক্ষে 4 বার পুনরাবৃত্তি হয়, তবে 4 টির পরে বাইটগুলি মুছে ফেলা বাইটগুলির পুনরাবৃত্ত গণনা নির্দেশ করে একটি বাইট দ্বারা প্রতিস্থাপন করুন। উদাহরণস্বরূপ, aaaaaaa
রূপান্তরিত হয় aaaa\d{3}
( \d{003}
বাইট মান 3 সহ অক্ষরটি কোথায় ); aaaa
রূপান্তরিত হয় aaaa\d{0}
, ইত্যাদি। যেহেতু কেবলমাত্র 256 টি পৃথক বাইট মান রয়েছে, কেবল সিকোয়েন্সগুলি যেখানে 259 বার পর্যন্ত বাইট পুনরাবৃত্তি করা হয় সেভাবেই এ ভাবে এনকোড করা যায়; যদি আরও কিছু থাকে তবে একটি নতুন সিকোয়েন্স শুরু হয়। তদ্ব্যতীত, রেফারেন্স বাস্তবায়ন 252 এর পুনরাবৃত্ত গণনাতে থামে, যা 256 বাইটের একটি স্ট্রিং এনকোড করে।
এই পদক্ষেপটি প্রথম প্রান্তিকতা এবং প্রান্তিকের 258 এ ব্যাখ্যা করে: জন্য 37 বাইট এবং জন্য 39 বাইট পর্যন্ত সংকোচিত করে । পুনরাবৃত্ত গণনার প্রবর্তন পরবর্তী পরবর্তী পদক্ষেপগুলির আউটপুটে আরও 2 বাইটের ফলাফল দেয় এবং সেই অতিরিক্ত বাইট 258 পর্যন্ত সমস্ত পুনরাবৃত্ত গণনা উপস্থাপন করতে সক্ষম 25 258 বাইটের পরে, দ্বিতীয় আরএলই স্ট্রিং থাকে। এখানে তৃতীয়টি ৫১৪ বাইটে, চতুর্থটি bytes৯ বাইটে এবং অন্যরকম রয়েছে। দ্বিতীয়টির পরে অতিরিক্ত আরএলই স্ট্রিংগুলি ব্যয় করতে মোটেও বেশি খরচ হয় না কারণ সেই সিকোয়েন্সটি (ধরে নেওয়া যে এটি পুনরাবৃত্তি গণনা, আমি পরীক্ষা করে দেখিনি) নিজেই পুনরাবৃত্তি হয়েছে এবং তাই পরবর্তী পদক্ষেপগুলি দ্বারা সংকুচিত হয়েছে। 1≤n≤34≤n≤258একটিএন1 ≤ n ≤ 34 ≤ n ≤ 258aaaa\d{252}
\d{252}
কেন 258, 516, 769, (1024-এ কোনও নয়), 1279-র দ্বিগুণগুলি 256 এর সঠিক গুণকের চেয়ে? আমার সন্দেহ হয় কারণ বুড়ো-হুইলারের রূপান্তর অনুসরণের পরে একটি পদক্ষেপে-সামনের দিকেaaaa\374aa
( জন্য ধাপ 1 এর আউটপুট ) একসাথে সরানোর মাধ্যমে এমন কিছু রূপান্তর করতে পারে যাতে তারা একসাথে এনকোড করা যায়, তবে আমি পাইনি চেক ইন করেছেন।n = 258a
এ দৈর্ঘ্যের হ্রাস আকর্ষণীয়। জন্য , প্রথম আরএলই পদক্ষেপ উত্পাদন করে - তবে এর বাইট মান 97 হয়, সুতরাং এটি পরবর্তী পদক্ষেপগুলি দ্বারা সংক্ষেপণের জন্য আরও ভাল সম্ভাবনা রয়েছে। আমি সন্দেহ করি যে সংকুচিত প্রভাব কেবল জন্য নয় তবে আশেপাশের মানগুলির জন্য ডেল্টা এনকোডিং পদক্ষেপের কারণে যা নিকটতম মানগুলির সাথে বাইটগুলি সংরক্ষণ করা সহজ করে। আপনি পরিবর্তন করেন তাহলে থেকে (65), আপনি দেখতে পাবেন যে খাটো আউটপুট ঘটে ।এন = 100একটি101aaaa\d{97}
a
aaaaa
এন = 101a
A
68 ≤ n ≤ 83
এই উদাহরণ সম্পর্কে আমার বিশ্লেষণ সম্পূর্ণরূপে দূরে। অন্যান্য প্রভাবগুলি বোঝার জন্য, আপনাকে রূপান্তরের অন্যান্য পদক্ষেপগুলি অধ্যয়ন করতে হবে: আমি বেশিরভাগ 9. এর প্রথম ধাপের পরে থামিয়ে দিয়েছি I আপনি যদি সত্যই প্রতিটি বিবরণ বের করতে চান তবে আমি একটি বিদ্যমান বাস্তবায়ন গ্রহণ এবং এটি একটি ডিবাগার দিয়ে পর্যবেক্ষণ করার পরামর্শ দিচ্ছি।
বেশিরভাগ ক্ষেত্রে, সংক্ষেপণ অ্যালগরিদম ডিজাইন করার সময় এই জাতীয় মিনিটের প্রকরণগুলি মূল ফোকাস হয় না: সাধারণ-উদ্দেশ্য বা মিডিয়া সংক্ষেপণ অ্যালগরিদমের মতো অনেক সাধারণ পরিস্থিতিতে, কিছু বাইটের পার্থক্য অপ্রাসঙ্গিক। সংকোচনের চেষ্টা স্থানীয় স্তরে প্রতিটি বিট চেপে ধরার চেষ্টা করে এবং চেইন ট্রান্সফর্মেশনগুলিকে এমনভাবে চেষ্টা করে যাতে প্রায়শই লাভ হয় যখন খুব কমই হেরে যায় এবং তারপরে খুব বেশি কিছু হয় না। তবুও এমন পরিস্থিতি রয়েছে যেমন লো-ব্যান্ডউইথ যোগাযোগের জন্য ডিজাইন করা বিশেষ-উদ্দেশ্যে যোগাযোগ প্রোটোকলগুলি যেখানে প্রতিটি বিট গুরুত্বপূর্ণ। সংক্ষিপ্ত পাঠটি এনক্রিপ্ট করা হলে সঠিক আউটপুট দৈর্ঘ্যের বিষয়টি হ'ল: যখন কোনও বিরোধী পাঠ্যটির অংশটি সংকুচিত ও এনক্রিপ্ট করার জন্য জমা দিতে পারে, তখন সাইফারেক্সটটির দৈর্ঘ্যের প্রকরণটি সংকুচিত-এবং-এনক্রিপ্ট করা পাঠ্যের অংশটি এতে প্রকাশ করতে পারে প্রতিপক্ষ;অপরাধ কাজে লাগান উপর HTTPS দ্বারা ।