Thursday 6 July 2017

เรียกใช้ ระยะเวลาใน การบีบอัด ไบนารี ตัวเลือก


ฉันมีแบบฟอร์มเว็บสำหรับเนื้อหาที่ฉันต้องการสร้างการแสดงสั้น ๆ ใน Base64 รูปแบบเหนือสิ่งอื่นใดมีรายการของค่าไบนารี 264 ซึ่งส่วนใหญ่จะเป็น 0 ในเวลาเดียว (แสดงพื้นที่บนแผนที่ทางภูมิศาสตร์) แม้แต่ใน Base64 จำนวน 264 บิตนี้จะสร้างสตริงที่ยาวและน่ากลัว ฉันต้องการใช้การเข้ารหัสแบบยาวที่มีประสิทธิภาพที่สุดเท่าที่จะเป็นไปได้ คุณสามารถช่วยฉันด้วย Ive gole นี้ได้หรือไม่? แต่ไม่พบว่ามีอะไรใช้งานได้ Ive พยายามนี้ไกลทำงาน RLE ในสตริงไบนารีโดยใช้นับทศนิยมและ A เป็นตัวคั่น denoting การเปลี่ยนแปลงระหว่าง 0 และ 1 แล้วแปลงผลจากฐาน 11 ถึงฐาน 64 ตัวอย่างเช่นซึ่งจะเป็นของดี แต่ ฉันยังไม่สามารถช่วย แต่สงสัยว่าถ้าทำอะไรผิดพลาด - ใช้ตัวเลข A เป็นตัวคั่นเป็นวิธีที่ดีที่สุดในการทำเช่นนี้ขอขอบคุณ comestorm ฉันได้ย่อสตริงบีบอัดบางเพิ่มเติม ตามที่ได้พูดถึงในความคิดเห็นกรณีการใช้งานจริงมักทำให้เกิดสตริงที่สั้นกว่า ตั้งแต่บิตการเข้ารหัสของ youre คุณอาจต้องใช้ RLE ที่ใช้บิตแทนที่จะเป็นไบต์ที่ใช้ ในบริบทนี้คุณควรใช้ Elias gamma coding (หรือตัวแปรบางอย่าง) เพื่อเข้ารหัสความยาวของการทำงานของคุณได้อย่างมีประสิทธิภาพ รูปแบบการเข้ารหัสของคุณอาจเป็น: บิตแรกเท่ากับบิตแรกของสายอักขระที่ไม่มีการบีบอัด (เพื่อตั้งค่าขั้วเริ่มต้น) บิตที่เหลือ: อีเลียสมีการเข้ารหัสความยาวของบิตต่อเนื่อง (สลับ 1 และ 0) เนื่องจากคุณทราบจำนวนบิต อยู่ในสตริงที่ไม่มีการบีบอัดของคุณคุณไม่จำเป็นต้องมีรหัสบอกเลิกคุณสามารถเพิ่มช่องว่างฐานสองที่จำเป็นเป็นบิตตามอำเภอใจได้ โปรดทราบว่าการบีบอัดข้อมูลมีความยาวได้เสมอเพื่อขยายสตริงบิตหากคุณกังวลเกี่ยวกับเรื่องนี้คุณสามารถเพิ่มบิตเริ่มต้นอื่นเพื่อระบุว่าข้อมูลของคุณอยู่ในรูปแบบบีบอัดหรือไม่มีการบีบอัดการบีบอัดข้อมูลค่าแรงของคุณเป็น 1 บิตสมมติว่า เราได้รับไฟล์หรือข้อความต้นฉบับที่มีอักขระซ้ำซ้อนมากเกินไป ตัวอย่างเช่นไฟล์ MS Word เฉลี่ยมีอักขระไบต์ 255 และ NULL มากเกินไป เป็นไปได้ที่จะแสดงไบต์ติดต่อกันเหล่านี้หรือทำงานในรูปแบบกะทัดรัดมากขึ้นเทคนิคการบีบอัดได้รับการออกแบบมาเพื่อแก้ปัญหานี้โดยเฉพาะ เรียกว่าการเข้ารหัสระยะเวลา (Run-Length Encoding) หรือ RLE ชื่อของมันถูกต้องเพื่ออธิบายกระบวนการเพราะ encodes การทำงานของไบต์ไปแบบ 2 ไบต์ต่อไปนี้: ความยาวที่มีความยาวแทนจำนวนของการทำงานของไบต์เดียวและซึ่งหมายความว่าเราสามารถเข้ารหัสได้มากถึง 255 วิ่งติดต่อกัน เทคนิคนี้ใช้เทคนิคการเข้ารหัสแบบ run-length ที่ง่ายที่สุด ตัวอย่างเช่นพิจารณาแหล่งข้อมูลต่อไปนี้หรือสตริง 24 ตัวอักษร: Input String abbbbbbbbbbefffgggghhijk เมื่อต้องการเข้ารหัสสตริงข้างต้นผลลัพธ์จะเป็น,,,,,,, และ. รูปแบบบีบอัดทั้งหมดสำหรับแหล่งข้อมูลนี้มีเพียง 18 ไบต์เท่านั้น นี่ช่วยประหยัดเราได้ 6 ไบต์โดยมีอัตราส่วนการบีบอัดเป็น 25 เทคนิคในทางเทคนิคไบต์ที่มีความยาวดีกว่าอาจหมายถึงจำนวนที่มากขึ้นต่อไปนี้เพื่อให้เราสามารถบันทึกได้มากที่สุด 256 ไบต์ ได้แก่ ค่าสถานะไบต์บวก 255 ที่เป็นไปได้ ดังนั้นตัวอักษร a จะถูกเข้ารหัสเป็นแทน ข้อเสียเปรียบของ RLE ชนิดนี้คือถ้ามีเพียงไบต์เดี่ยวที่เข้ารหัสคุณต้องเพิ่มไบต์พิเศษสำหรับไบต์ที่มีความยาวเช่นเดียวกับตัวอย่างก่อนหน้านี้เมื่อเราเข้ารหัสตัวอักษร a และ e เป็นการดีที่จะสมมติว่ามีเพียงบางส่วนของแหล่งข้อมูลที่มีการทำงานเหล่านี้เท่านั้น แม้ว่าเราจะสามารถเข้ารหัสไบต์เดี่ยวได้เพียง 256 ครั้งไบต์ติดต่อกันมากกว่า 256 ครั้งอาจไม่เกิดขึ้นในไฟล์ส่วนใหญ่ที่ทำงานได้ดีสำหรับไฟล์ที่มีอักขระหรือไบต์ที่ซ้ำซ้อนมาก เราสามารถปรับปรุงเทคนิคนี้ได้โดยการ จำกัด รหัสความยาวให้เหลือเพียง 4 บิต ด้วยการจัดเรียงนี้เราสามารถเข้ารหัสได้สูงสุด 16 byte ซึ่งเพียงพอสำหรับการบีบอัดแบบง่ายเนื่องจากไฟล์จริงมักไม่มีจำนวนไบต์ที่ซ้ำซ้อนเกินไป ไฟล์ข้อความ วิธีหนึ่งในการปรับปรุงวิธีการไบต์ยาวอยู่ในพื้นที่ของการบีบอัดไฟล์ข้อความ กำหนดลักษณะของไฟล์ข้อความ (ASCII) ซึ่งแต่ละไบต์สามารถเข้ารหัสได้เพียง 7 บิต (เช่นบิต 7 หรือบิตที่ 8 ของไบต์ทั้งหมดในไฟล์ข้อความเป็น 0) เราสามารถใช้บิต - 7 เป็นสัญญาณเพื่อถอดรหัสถ้าไบต์ซ้ำหรือไม่ หากมีการเรียกใช้ไบต์เราจะตั้งไบต์บิต -7 เป็น 1 ดังนั้นหากตัวถอดรหัสเห็นไบต์ซึ่งมากกว่า 127 แสดงว่ามีการเรียกใช้ไบต์และตัวถอดรหัสจะเขียนทันที จำนวนไบต์เหล่านี้ ไฟล์ไบนารี อีกหนึ่งรูปแบบที่ชาญฉลาดในการเข้ารหัสแบบ run-length คือการเข้ารหัสเฉพาะเมื่อมีการเรียกใช้เท่านั้น กล่าวคือไม่เข้ารหัสไบต์เพิ่มเติมสำหรับไบต์ที่ไม่ซ้ำซ้อนเพียงตัวเดียว: เข้ารหัสเฉพาะไบต์ซ้ำซ้อนเท่านั้น นี้จะกระทำโดยการเข้ารหัสไบต์สองครั้งและจากนั้นเข้ารหัสไบต์ยาว: ความยาว ด้วยวิธีนี้เราจะไม่ใช้ไบต์ยาวสำหรับไบต์เหล่านี้ซึ่งเกิดขึ้นได้เฉพาะในสตรีมข้อมูลเท่านั้น ดังนั้นในช่วงการบีบอัดการมีแฝดไบต์แจ้งเตือนเราว่ามีการเรียกใช้ไบต์ ดังนั้นหมายความว่ามี 10 byte b. จากนั้นเราควรเขียนไบต์แปดถัดไปหลังจากทั้งสอง ตัวอย่างก่อนหน้านี้จะได้รับการเข้ารหัสเช่นนี้การเข้ารหัสนี้ต้องการเพียง 17 ไบต์สำหรับเอาต์พุต สังเกตว่าตัวอักษร a และ e ถูกเข้ารหัสตามที่เป็นอยู่โดยมีไบต์เดี่ยว สำหรับไฟล์ที่มีขนาดใหญ่มากเทคนิคนี้มีประสิทธิภาพมากกว่าเทคนิคไบต์ยาว วิธีนี้สามารถบันทึกได้สูงสุด 257 ไบต์ติดต่อกัน (2 (0..255)) ข้อเสียเปรียบที่เราต้องเกิดขึ้นจากเทคนิคใหม่นี้คือสัญลักษณ์เพิ่มเติมที่เข้ารหัส ถ้ามีเพียงสองสัญลักษณ์ของสัญลักษณ์เราจะต้องมีไบต์เพิ่มเติมซึ่งเข้ารหัสการทำงานด้วยไบต์สามแทนการใช้ไบต์เพียง 2 ไบต์ โดยทั่วไปแล้วจะมีประสิทธิภาพมากขึ้นเมื่อเราดูข้อมูลเป็นไฟล์ขนาดใหญ่เดียวซึ่งโดยธรรมชาติอาจมีชุดของไบต์ที่เหมือนกัน RLE. ZIP - ประกอบด้วยการติดตั้ง C ของการเข้ารหัสระยะยาวสำหรับข้อความและไฟล์ไบนารี YES CHAR ระบุว่าข้อสังเกตในชุดข้อมูล SAS output ที่สร้างขึ้นใหม่จะถูกบีบอัด (ระเบียนที่มีความยาวเป็นตัวแปร) SAS ใช้ RLE (Run Length Encoding) เพื่อบีบอัดข้อสังเกต อัลกอริทึมการบีบอัดนี้ดีกว่าสำหรับข้อมูลอักขระ ไม่ระบุว่าข้อสังเกตในชุดข้อมูล SAS ที่สร้างขึ้นใหม่จะไม่มีการบีบอัด (ระเบียนที่มีความยาวคงที่) ไบนารีระบุว่าข้อสังเกตในชุดข้อมูลขาออก SAS ที่สร้างขึ้นใหม่จะถูกบีบอัด SAS ใช้ RDC (Ross Data Compression) สำหรับการตั้งค่านี้ วิธีนี้มีประสิทธิภาพสูงสำหรับการบีบอัดข้อมูลไบนารีขนาดกลางถึงใหญ่ (หลายแสนไบต์หรือใหญ่กว่า) (นั่นคือตัวแปรตัวเลข) เนื่องจากฟังก์ชันการบีบอัดทำงานบนระเบียนเดียวในแต่ละครั้งความยาวของระเบียนต้องเป็นหลายร้อยไบต์หรือใหญ่กว่าสำหรับการบีบอัดที่มีประสิทธิภาพ ระบุ COMPRESS เฉพาะชุดข้อมูลขาออกนั่นคือชุดข้อมูลที่ระบุไว้ในคำแถลงข้อมูลของขั้นตอน DATA หรือในตัวเลือก OUT ของขั้นตอน SAS ประเภทระเบียนจะกลายเป็นแอตทริบิวต์ถาวรของชุดข้อมูล ในการยกเลิกการสังเกตการสังเกตให้ใช้ขั้นตอน DATA เพื่อคัดลอกชุดข้อมูลและใช้ COMPRESSNO สำหรับชุดข้อมูลใหม่ เมื่อ COMPRESSYESCHAR SAS บีบขนาดของชุดข้อมูลที่มีการเข้ารหัสแบบรันยาว การเข้ารหัสระยะเวลาจะบีบอัดชุดข้อมูลโดยการลดอักขระที่ต่อเนื่องซ้ำกันเป็นตัวแทนสองหรือสามไบต์ เมื่อ COMPRESSBINARY การบีบอัด SAS จะรวมการเข้ารหัสแบบเรียกใช้งานและการบีบอัดหน้าต่างแบบเลื่อนเพื่อบีบอัดชุดข้อมูล ใช้ SASToolkit เพื่อระบุวิธีการบีบอัดของคุณเอง หมายเหตุ: การบีบอัดข้อสังเกตไม่ได้รับการสนับสนุนโดยเครื่องยนต์ทั้งหมด ในเวอร์ชัน 8 ชุดข้อมูลที่สร้างขึ้นพร้อมกับเครื่องยนต์ที่มีอยู่ใน SAS เวอร์ชันก่อนหน้าเช่นเครื่องยนต์ TAPE และ XPORT จะถูกเข้าถึงโดยเครื่องยนต์เหล่านี้ ดังนั้นถ้าการบีบอัดไม่พร้อมใช้งานสำหรับเครื่องมือเหล่านั้นจะไม่มีให้ใช้งานเมื่อคุณเข้าถึงชุดข้อมูลเหล่านี้ในเวอร์ชัน 8 ข้อดีที่ได้จากการใช้ชุดตัวเลือกชุดข้อมูล COMPRESS ได้แก่ ความต้องการในการจัดเก็บข้อมูลที่ลดลงสำหรับชุดข้อมูลน้อยลง อ่านหรือเขียนข้อมูลในระหว่างการประมวลผล ข้อเสียของการใช้ตัวเลือกชุดข้อมูล COMPRESS ได้แก่ : อาจไม่บีบอัดเลย (อาจทำให้ไฟล์มีขนาดใหญ่ขึ้น) แต่ข้อความที่ระบุจำนวนการบีบอัดจะต้องมีทรัพยากร CPU เพิ่มเติม โดยค่าเริ่มต้นการสังเกตใหม่จะถูกผนวกเข้ากับชุดข้อมูลที่บีบอัดที่มีอยู่ หากคุณต้องการติดตามและนำพื้นที่ว่างกลับมาใช้ใหม่ให้ใช้ตัวเลือกชุดข้อมูล REUSE เมื่อคุณสร้างชุดข้อมูล SAS แบบบีบอัด REUSEYES บอก SAS เขียนข้อสังเกตใหม่ ๆ ในพื้นที่ที่ว่างเมื่อคุณลบข้อสังเกตอื่น ๆ ตัวเลือกชุดข้อมูล COMPRESS จะแทนที่ตัวเลือกระบบ COMPRESS ประสิทธิภาพการทำงานหมายเหตุ: การใช้ตัวเลือกนี้จะเพิ่มเวลาในการอ่านชุดข้อมูลเนื่องจากค่าใช้จ่ายในการบีบอัดข้อมูล นอกจากนี้เครื่องยนต์บางตัวยังไม่สนับสนุนการบีบอัดข้อสังเกต เมื่อใช้การตั้งค่าตัวเลือก COMPRESSYES และ REUSEYES คุณจะไม่สามารถสังเกตข้อสังเกตได้จากหมายเลขสังเกตการณ์ โปรดทราบว่า REUSEYES มีความสำคัญมากกว่า POINTOBSYES ตัวอย่างเช่นผลลัพธ์ในชุดข้อมูลที่มี POINTOBSNO เนื่องจาก POINTOBSYES เป็นค่าดีฟอลต์เมื่อคุณใช้การบีบอัด REUSEYES ทำให้ POINTOBS เปลี่ยนเป็น NO

No comments:

Post a Comment