Avatar
0
hungw7 Beginner
hungw7 Beginner
Zigzag encoding
The values for INT and LONG fields are represented using zig-zag encoding, so that smaller absolute values require fewer bits, document của Netflix Hollow có 1 dòng như thế này, google thì cũng không có nhiều về topic này và khá sơ sài, vậy zig-zag enconding là gì mà có thể optimise được việc truyền và xử lí dữ liệu, mong nhận được giải đáp.
  • Answer
Remain: 5
1 Answer
Avatar
tvd12 Beginner
tvd12 Beginner
Đây là một chủ đề thú vị. Nhìn chung nguyên lý cơ bản của việc optimize đường truyền đó là phải được tối đa dung lượng của gói tin, nghĩa là dùng ít số byte nhất nhưng vẫn có thể biểu diễn được dữ liệu. Trong trường hợp này zig-zag cố găng sử dụng it byte bit nhất để có thể mô tả được số nguyên âm dưới dạng số nguyên dương, bởi vì số nguyên âm sẽ phải mất 1 bit cho dấu, chính vì vậy mà ngay cả với một số rất nhỏ như -5 cũng có thể tốn rất nhiều byte, ví dụ với 64 bit có thể là ...111111111111111111111111011, như vậy phải mất 8 byte để mô tả số -5.

Cách encode của nó sẽ là: (n << 1) ^ (n >> k - 1)

Ví dụ với -5 sẽ là: (-5 << 1) ^ (-5 >> 64 -1) = 9 = ...000001001

Như vậy chỉ mất 1 byte là có thể mô tả số -5 rồi, vì các byte có giả trị bằng 0 ở đầu có thể bỏ qua.

  • 0
  • Reply
Sau 2 ngày đọc google thì có vẻ em đã hiểu cách nó giảm số bit truyền đi.

Em vẫn còn một thắc mắc là nếu dùng zigzag encoding thì mình có thể encode 2^64 hoặc-2^6 được không nhỉ (vì -2^32 encode => 2^64 rồi)

 –  hungw7 1701244848000
  • 2^32 sẽ là 4294967296 là một số nguyên dương, vậy không có ý nghĩa gì em ạ, zig-zag chỉ có ý nghĩa với số nguyên âm thôi em.
 –  tvd12 1701440146000