āĻā§āĻ°ā§āĻ¸ āĻļā§āĻ°ā§āĻ° āĻāĻā§
āĻšāĻžāĻĢāĻŽā§āĻ¯āĻžāĻ¨ āĻā§āĻĄāĻŋāĻ āĻšāĻ˛ āĻāĻāĻāĻŋ āĻĄā§āĻāĻž āĻāĻŽā§āĻĒā§āĻ°ā§āĻļāĻ¨ āĻ ā§āĻ¯āĻžāĻ˛āĻāĻ°āĻŋāĻĻāĻŽ āĻ¯āĻž āĻĢāĻžāĻāĻ˛ āĻāĻŽā§āĻĒā§āĻ°ā§āĻļāĻ¨ā§āĻ° āĻĒā§āĻ°āĻžāĻĨāĻŽāĻŋāĻ āĻ§āĻžāĻ°āĻŖāĻž āĻ¤ā§āĻ°āĻŋ āĻāĻ°ā§āĨ¤ āĻāĻ āĻ¨āĻŋāĻŦāĻ¨ā§āĻ§ā§, āĻāĻŽāĻ°āĻž āĻ¸ā§āĻĨāĻŋāĻ° āĻāĻŦāĻ āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻ¨āĻļā§āĻ˛ āĻĻā§āĻ°ā§āĻā§āĻ¯ā§āĻ° āĻāĻ¨āĻā§āĻĄāĻŋāĻ, āĻ āĻ¨āĻ¨ā§āĻ¯āĻāĻžāĻŦā§ āĻĄāĻŋāĻā§āĻĄā§āĻŦāĻ˛ āĻā§āĻĄ, āĻāĻĒāĻ¸āĻ°ā§āĻā§āĻ° āĻ¨āĻŋāĻ¯āĻŧāĻŽ āĻāĻŦāĻ āĻāĻāĻāĻŋ āĻšāĻžāĻĢāĻŽā§āĻ¯āĻžāĻ¨ āĻā§āĻ°āĻŋ āĻ¤ā§āĻ°āĻŋāĻ° āĻŦāĻŋāĻˇāĻ¯āĻŧā§ āĻāĻĨāĻž āĻŦāĻ˛āĻŦāĨ¤
āĻāĻŽāĻ°āĻž āĻāĻžāĻ¨āĻŋ āĻ¯ā§ āĻĒā§āĻ°āĻ¤āĻŋāĻāĻŋ āĻ
āĻā§āĻˇāĻ° 0 āĻāĻŦāĻ 1 āĻāĻ° āĻā§āĻ°āĻŽ āĻšāĻŋāĻ¸āĻžāĻŦā§ āĻ¸āĻāĻ°āĻā§āĻˇāĻŖ āĻāĻ°āĻž āĻšāĻ¯āĻŧ āĻāĻŦāĻ 8 āĻŦāĻŋāĻ āĻ¨ā§āĻ¯āĻŧāĨ¤ āĻāĻā§ āĻ¨āĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āĻ āĻĻā§āĻ°ā§āĻā§āĻ¯ā§āĻ° āĻāĻ¨āĻā§āĻĄāĻŋāĻ āĻŦāĻ˛āĻž āĻšāĻ¯āĻŧ āĻāĻžāĻ°āĻŖ āĻĒā§āĻ°āĻ¤āĻŋāĻāĻŋ āĻ
āĻā§āĻˇāĻ° āĻ¸āĻāĻ°āĻā§āĻˇāĻŖā§āĻ° āĻāĻ¨ā§āĻ¯ āĻāĻāĻ āĻ¨āĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āĻ āĻ¸āĻāĻā§āĻ¯āĻ āĻŦāĻŋāĻ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°ā§āĨ¤
āĻ§āĻ°āĻž āĻ¯āĻžāĻ āĻāĻŽāĻ°āĻž āĻā§āĻā§āĻ¸āĻ āĻĻā§āĻāĻ¯āĻŧāĻž āĻāĻ°āĻāĻŋ. āĻāĻŋāĻāĻžāĻŦā§ āĻāĻŽāĻ°āĻž āĻāĻāĻāĻŋ āĻāĻāĻ āĻ āĻā§āĻˇāĻ° āĻ¸āĻāĻ°āĻā§āĻˇāĻŖ āĻāĻ°āĻžāĻ° āĻāĻ¨ā§āĻ¯ āĻĒā§āĻ°āĻ¯āĻŧā§āĻāĻ¨ā§āĻ¯āĻŧ āĻ¸ā§āĻĨāĻžāĻ¨ā§āĻ° āĻĒāĻ°āĻŋāĻŽāĻžāĻŖ āĻāĻŽāĻžāĻ¤ā§ āĻĒāĻžāĻ°āĻŋ?
āĻĒā§āĻ°āĻ§āĻžāĻ¨ āĻ§āĻžāĻ°āĻŖāĻž āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻ¨āĻļā§āĻ˛ āĻĻā§āĻ°ā§āĻā§āĻ¯ āĻāĻ¨āĻā§āĻĄāĻŋāĻ āĻšāĻ¯āĻŧ. āĻāĻŽāĻ°āĻž āĻāĻ āĻ¸āĻ¤ā§āĻ¯āĻāĻŋ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°āĻ¤ā§ āĻĒāĻžāĻ°āĻŋ āĻ¯ā§ āĻĒāĻžāĻ ā§āĻ¯ā§āĻ° āĻāĻŋāĻā§ āĻ
āĻā§āĻˇāĻ° āĻ
āĻ¨ā§āĻ¯āĻĻā§āĻ° āĻā§āĻ¯āĻŧā§ āĻŦā§āĻļāĻŋ āĻāĻ¨ āĻāĻ¨ āĻāĻā§ (
āĻāĻŋāĻāĻžāĻŦā§, āĻŦāĻŋāĻ āĻā§āĻ°āĻŽ āĻŦā§āĻĻā§āĻ§āĻŋāĻŽāĻžāĻ¨, āĻāĻāĻž āĻĻā§āĻŦā§āĻ¯āĻ°ā§āĻĨāĻšā§āĻ¨āĻāĻžāĻŦā§ āĻĄāĻŋāĻā§āĻĄ?
āĻ˛āĻžāĻāĻ¨āĻāĻŋ āĻŦāĻŋāĻŦā§āĻāĻ¨āĻž āĻāĻ°ā§āĻ¨ "abacdab". āĻāĻāĻŋāĻ¤ā§ 8āĻāĻŋ āĻ āĻā§āĻˇāĻ° āĻ°āĻ¯āĻŧā§āĻā§ āĻāĻŦāĻ āĻāĻāĻāĻŋ āĻ¨āĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āĻ āĻĻā§āĻ°ā§āĻā§āĻ¯ āĻāĻ¨āĻā§āĻĄ āĻāĻ°āĻžāĻ° āĻ¸āĻŽāĻ¯āĻŧ āĻāĻāĻŋ āĻ¸āĻāĻ°āĻā§āĻˇāĻŖ āĻāĻ°āĻ¤ā§ 64 āĻŦāĻŋāĻ āĻĒā§āĻ°āĻ¯āĻŧā§āĻāĻ¨ āĻšāĻŦā§āĨ¤ āĻ˛āĻā§āĻˇāĻŖā§āĻ¯āĻŧ āĻĢā§āĻ°āĻŋāĻā§āĻ¯āĻŧā§āĻ¨ā§āĻ¸āĻŋ āĻ˛āĻā§āĻˇā§āĻ¯ āĻāĻ°ā§āĻ¨ "a", "b", "c" и "āĻĄāĻŋ" āĻ¯āĻĨāĻžāĻā§āĻ°āĻŽā§ 4, 2, 1, 1 āĻ¸āĻŽāĻžāĻ¨āĨ¤ āĻāĻ° āĻāĻ˛ā§āĻĒāĻ¨āĻž āĻāĻ°āĻžāĻ° āĻā§āĻˇā§āĻāĻž āĻāĻ°āĻž āĻ¯āĻžāĻ "abacdab" āĻāĻŽ āĻŦāĻŋāĻ, āĻ¯ā§ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°ā§ "āĻĒā§āĻ°āĻ¤āĻŋ" āĻ¤ā§āĻ˛āĻ¨āĻžāĻ¯āĻŧ āĻāĻ°ā§ āĻāĻ¨ āĻāĻ¨ āĻāĻā§ "āĻ"āĻāĻŦāĻ "āĻ" āĻ¤ā§āĻ˛āĻ¨āĻžāĻ¯āĻŧ āĻāĻ°ā§ āĻāĻ¨ āĻāĻ¨ āĻāĻā§ "āĻ" и "āĻĄāĻŋ". āĻā§āĻĄāĻŋāĻ āĻĻāĻŋāĻ¯āĻŧā§ āĻļā§āĻ°ā§ āĻāĻ°āĻž āĻ¯āĻžāĻ "āĻĒā§āĻ°āĻ¤āĻŋ" 0 āĻāĻ° āĻ¸āĻŽāĻžāĻ¨ āĻāĻ āĻŦāĻŋāĻ āĻ¸āĻš, "āĻ" āĻāĻŽāĻ°āĻž āĻāĻāĻāĻŋ āĻĻā§āĻ-āĻŦāĻŋāĻ āĻā§āĻĄ 11 āĻŦāĻ°āĻžāĻĻā§āĻĻ āĻāĻ°āĻŦ, āĻāĻŦāĻ āĻ¤āĻŋāĻ¨āĻāĻŋ āĻŦāĻŋāĻ 100 āĻāĻŦāĻ 011 āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°ā§ āĻāĻŽāĻ°āĻž āĻāĻ¨āĻā§āĻĄ āĻāĻ°āĻŦ "āĻ" и "āĻĄāĻŋ".
āĻĢāĻ˛āĻ¸ā§āĻŦāĻ°ā§āĻĒ, āĻāĻŽāĻ°āĻž āĻĒāĻžāĻŦ:
a
0
b
11
c
100
d
011
āĻ¤āĻžāĻ āĻ˛āĻžāĻāĻ¨ "abacdab" āĻāĻŽāĻ°āĻž āĻšāĻŋāĻ¸āĻžāĻŦā§ āĻāĻ¨āĻā§āĻĄ āĻāĻ°āĻŦ 00110100011011 (0|0|11|0|100|011|0|11)āĻāĻĒāĻ°ā§āĻ° āĻā§āĻĄāĻā§āĻ˛āĻŋ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°ā§āĨ¤ āĻ¤āĻŦā§ āĻŽā§āĻ˛ āĻ¸āĻŽāĻ¸ā§āĻ¯āĻž āĻšāĻŦā§ āĻĄāĻŋāĻā§āĻĄāĻŋāĻāĻ¯āĻŧā§āĨ¤ āĻ¯āĻāĻ¨ āĻāĻŽāĻ°āĻž āĻ¸ā§āĻā§āĻ°āĻŋāĻ āĻĄāĻŋāĻā§āĻĄ āĻāĻ°āĻžāĻ° āĻā§āĻˇā§āĻāĻž āĻāĻ°āĻŋ 00110100011011, āĻāĻŽāĻ°āĻž āĻāĻāĻāĻŋ āĻ āĻ¸ā§āĻĒāĻˇā§āĻ āĻĢāĻ˛āĻžāĻĢāĻ˛ āĻĒāĻžāĻ, āĻ¯ā§āĻšā§āĻ¤ā§ āĻāĻāĻŋāĻā§ āĻāĻĒāĻ¸ā§āĻĨāĻžāĻĒāĻ¨ āĻāĻ°āĻž āĻ¯ā§āĻ¤ā§ āĻĒāĻžāĻ°ā§:
0|011|0|100|011|0|11 adacdab
0|0|11|0|100|0|11|011 aabacabd
0|011|0|100|0|11|0|11 adacabab
...
āĻāĻŦāĻ āĻ¤āĻžāĻ āĻ
āĻ¨
āĻāĻ āĻ āĻ¸ā§āĻĒāĻˇā§āĻāĻ¤āĻž āĻāĻĄāĻŧāĻžāĻ¤ā§, āĻāĻŽāĻžāĻĻā§āĻ° āĻ āĻŦāĻļā§āĻ¯āĻ āĻ¨āĻŋāĻļā§āĻāĻŋāĻ¤ āĻāĻ°āĻ¤ā§ āĻšāĻŦā§ āĻ¯ā§ āĻāĻŽāĻžāĻĻā§āĻ° āĻāĻ¨āĻā§āĻĄāĻŋāĻ āĻ¯ā§āĻŽāĻ¨ āĻāĻāĻāĻŋ āĻ§āĻžāĻ°āĻŖāĻžāĻā§ āĻ¸āĻ¨ā§āĻ¤ā§āĻˇā§āĻ āĻāĻ°ā§ āĻāĻĒāĻ¸āĻ°ā§āĻ āĻ¨āĻŋāĻ¯āĻŧāĻŽ, āĻ¯āĻžāĻ° āĻĢāĻ˛āĻ¸ā§āĻŦāĻ°ā§āĻĒ āĻŦā§āĻāĻžāĻ¯āĻŧ āĻ¯ā§ āĻā§āĻĄāĻā§āĻ˛āĻŋ āĻļā§āĻ§ā§āĻŽāĻžāĻ¤ā§āĻ° āĻāĻāĻāĻŋ āĻ āĻ¨āĻ¨ā§āĻ¯ āĻāĻĒāĻžāĻ¯āĻŧā§ āĻĄāĻŋāĻā§āĻĄ āĻāĻ°āĻž āĻ¯ā§āĻ¤ā§ āĻĒāĻžāĻ°ā§āĨ¤ āĻāĻĒāĻ¸āĻ°ā§āĻ āĻ¨āĻŋāĻ¯āĻŧāĻŽ āĻ¨āĻŋāĻļā§āĻāĻŋāĻ¤ āĻāĻ°ā§ āĻ¯ā§ āĻā§āĻ¨ āĻā§āĻĄ āĻ āĻ¨ā§āĻ¯ā§āĻ° āĻāĻĒāĻ¸āĻ°ā§āĻ āĻ¨āĻ¯āĻŧāĨ¤ āĻā§āĻĄ āĻĻā§āĻŦāĻžāĻ°āĻž, āĻāĻŽāĻ°āĻž āĻāĻāĻāĻŋ āĻ¨āĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āĻ āĻ āĻā§āĻˇāĻ° āĻĒā§āĻ°āĻ¤āĻŋāĻ¨āĻŋāĻ§āĻŋāĻ¤ā§āĻŦ āĻāĻ°āĻ¤ā§ āĻŦā§āĻ¯āĻŦāĻšā§āĻ¤ āĻŦāĻŋāĻ āĻŽāĻžāĻ¨ā§. āĻāĻĒāĻ°ā§āĻ° āĻāĻĻāĻžāĻšāĻ°āĻŖā§ 0 āĻāĻāĻāĻŋ āĻāĻĒāĻ¸āĻ°ā§āĻ 011, āĻ¯āĻž āĻāĻĒāĻ¸āĻ°ā§āĻ āĻ¨āĻŋāĻ¯āĻŧāĻŽ āĻ˛āĻā§āĻāĻ¨ āĻāĻ°ā§āĨ¤ āĻ¸ā§āĻ¤āĻ°āĻžāĻ, āĻ¯āĻĻāĻŋ āĻāĻŽāĻžāĻĻā§āĻ° āĻā§āĻĄāĻā§āĻ˛āĻŋ āĻāĻĒāĻ¸āĻ°ā§āĻā§āĻ° āĻ¨āĻŋāĻ¯āĻŧāĻŽāĻā§ āĻ¸āĻ¨ā§āĻ¤ā§āĻˇā§āĻ āĻāĻ°ā§, āĻ¤āĻžāĻšāĻ˛ā§ āĻāĻŽāĻ°āĻž āĻ āĻ¨āĻ¨ā§āĻ¯āĻāĻžāĻŦā§ āĻĄāĻŋāĻā§āĻĄ āĻāĻ°āĻ¤ā§ āĻĒāĻžāĻ°āĻŋ (āĻāĻŦāĻ āĻ¤āĻĻā§āĻŦāĻŋāĻĒāĻ°ā§āĻ¤)āĨ¤
āĻāĻ¸ā§āĻ¨ āĻāĻĒāĻ°ā§āĻ° āĻāĻĻāĻžāĻšāĻ°āĻŖāĻāĻŋ āĻāĻŦāĻžāĻ° āĻĻā§āĻā§āĻ¨āĨ¤ āĻāĻāĻŦāĻžāĻ° āĻāĻŽāĻ°āĻž āĻĒā§āĻ°āĻ¤ā§āĻ āĻŦāĻ°āĻžāĻĻā§āĻĻ āĻāĻ°āĻŦ "a", "b", "c" и "āĻĄāĻŋ" āĻā§āĻĄ āĻ¯ā§ āĻāĻĒāĻ¸āĻ°ā§āĻ āĻ¨āĻŋāĻ¯āĻŧāĻŽ āĻ¸āĻ¨ā§āĻ¤ā§āĻˇā§āĻ.
a
0
b
10
c
110
d
111
āĻāĻ āĻāĻ¨āĻā§āĻĄāĻŋāĻ, āĻ¸ā§āĻā§āĻ°āĻŋāĻ āĻ¸āĻā§āĻā§ "abacdab" āĻšāĻŋāĻ¸āĻžāĻŦā§ āĻāĻ¨āĻā§āĻĄ āĻāĻ°āĻž āĻšāĻŦā§ 00100100011010 (0|0|10|0|100|011|0|10)āĨ¤ āĻāĻŦāĻ āĻāĻāĻžāĻ¨ā§ 00100100011010 āĻāĻŽāĻ°āĻž āĻāĻ¤āĻŋāĻŽāĻ§ā§āĻ¯ā§āĻ āĻĻā§āĻŦā§āĻ¯āĻ°ā§āĻĨāĻšā§āĻ¨āĻāĻžāĻŦā§ āĻĄāĻŋāĻā§āĻĄ āĻāĻ°āĻ¤ā§ āĻāĻŦāĻ āĻāĻŽāĻžāĻĻā§āĻ° āĻāĻ¸āĻ˛ āĻ¸ā§āĻā§āĻ°āĻŋāĻāĻ¯āĻŧā§ āĻĢāĻŋāĻ°ā§ āĻ¯ā§āĻ¤ā§ āĻ¸āĻā§āĻˇāĻŽ āĻšāĻŦ "abacdab".
āĻšāĻžāĻĢāĻŽā§āĻ¯āĻžāĻ¨ āĻā§āĻĄāĻŋāĻ
āĻāĻāĻ¨ āĻ¯ā§āĻšā§āĻ¤ā§ āĻāĻŽāĻ°āĻž āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻ¨āĻļā§āĻ˛ āĻĻā§āĻ°ā§āĻā§āĻ¯ āĻāĻ¨āĻā§āĻĄāĻŋāĻ āĻāĻŦāĻ āĻĒā§āĻ°āĻŋāĻĢāĻŋāĻā§āĻ¸ āĻ¨āĻŋāĻ¯āĻŧāĻŽ āĻ¨āĻŋāĻ¯āĻŧā§ āĻāĻžāĻ āĻāĻ°ā§āĻāĻŋ, āĻāĻ¸ā§āĻ¨ āĻšāĻžāĻĢāĻŽā§āĻ¯āĻžāĻ¨ āĻāĻ¨āĻā§āĻĄāĻŋāĻ āĻ¸āĻŽā§āĻĒāĻ°ā§āĻā§ āĻāĻĨāĻž āĻŦāĻ˛āĻŋāĨ¤
āĻĒāĻĻā§āĻ§āĻ¤āĻŋāĻāĻŋ āĻŦāĻžāĻāĻ¨āĻžāĻ°āĻŋ āĻāĻžāĻ āĻ¤ā§āĻ°āĻŋāĻ° āĻāĻĒāĻ° āĻāĻŋāĻ¤ā§āĻ¤āĻŋ āĻāĻ°ā§āĨ¤ āĻāĻāĻŋāĻ¤ā§, āĻ¨ā§āĻĄ āĻā§āĻĄāĻŧāĻžāĻ¨ā§āĻ¤ āĻŦāĻž āĻ āĻā§āĻ¯āĻ¨ā§āĻ¤āĻ°ā§āĻŖ āĻšāĻ¤ā§ āĻĒāĻžāĻ°ā§āĨ¤ āĻĒā§āĻ°āĻžāĻĨāĻŽāĻŋāĻāĻāĻžāĻŦā§, āĻ¸āĻŽāĻ¸ā§āĻ¤ āĻ¨ā§āĻĄāĻā§ āĻĒāĻžāĻ¤āĻž (āĻāĻžāĻ°ā§āĻŽāĻŋāĻ¨āĻžāĻ˛) āĻšāĻŋāĻ¸āĻžāĻŦā§ āĻŦāĻŋāĻŦā§āĻāĻ¨āĻž āĻāĻ°āĻž āĻšāĻ¯āĻŧ, āĻ¯āĻž āĻĒā§āĻ°āĻ¤ā§āĻ āĻ¨āĻŋāĻā§āĻ āĻāĻŦāĻ āĻāĻ° āĻāĻāĻ¨ (āĻ āĻ°ā§āĻĨāĻžā§, āĻ¸āĻāĻāĻāĻ¨ā§āĻ° āĻĢā§āĻ°āĻŋāĻā§āĻ¯āĻŧā§āĻ¨ā§āĻ¸āĻŋ) āĻĒā§āĻ°āĻ¤āĻŋāĻ¨āĻŋāĻ§āĻŋāĻ¤ā§āĻŦ āĻāĻ°ā§āĨ¤ āĻ āĻā§āĻ¯āĻ¨ā§āĻ¤āĻ°ā§āĻŖ āĻ¨ā§āĻĄāĻā§āĻ˛āĻŋ āĻāĻ°āĻŋāĻ¤ā§āĻ°ā§āĻ° āĻāĻāĻ¨ āĻ§āĻžāĻ°āĻŖ āĻāĻ°ā§ āĻāĻŦāĻ āĻĻā§āĻāĻŋ āĻŦāĻāĻļāĻ§āĻ° āĻ¨ā§āĻĄāĻā§ āĻāĻ˛ā§āĻ˛ā§āĻ āĻāĻ°ā§āĨ¤ āĻ¸āĻžāĻ§āĻžāĻ°āĻŖ āĻā§āĻā§āĻ¤āĻŋ āĻĻā§āĻŦāĻžāĻ°āĻž, āĻŦāĻŋāĻ "0" āĻŦāĻžāĻŽ āĻļāĻžāĻāĻž āĻ āĻ¨ā§āĻ¸āĻ°āĻŖ āĻāĻ°ā§ āĻĒā§āĻ°āĻ¤āĻŋāĻ¨āĻŋāĻ§āĻŋāĻ¤ā§āĻŦ āĻāĻ°ā§, āĻāĻŦāĻ "1" - āĻĄāĻžāĻ¨āĻĻāĻŋāĻā§. āĻ¸āĻŽā§āĻĒā§āĻ°ā§āĻŖ āĻāĻžāĻā§ N āĻĒāĻžāĻ¤āĻž āĻāĻŦāĻ āĻāĻ¨-1 āĻ āĻā§āĻ¯āĻ¨ā§āĻ¤āĻ°ā§āĻŖ āĻ¨ā§āĻĄāĨ¤ āĻāĻāĻŋ āĻ¸ā§āĻĒāĻžāĻ°āĻŋāĻļ āĻāĻ°āĻž āĻšāĻ¯āĻŧ āĻ¯ā§ āĻāĻāĻāĻŋ āĻšāĻžāĻĢāĻŽā§āĻ¯āĻžāĻ¨ āĻāĻžāĻ āĻ¤ā§āĻ°āĻŋ āĻāĻ°āĻžāĻ° āĻ¸āĻŽāĻ¯āĻŧ, āĻ¸āĻ°ā§āĻŦā§āĻ¤ā§āĻ¤āĻŽ āĻĻā§āĻ°ā§āĻā§āĻ¯ā§āĻ° āĻā§āĻĄāĻā§āĻ˛āĻŋ āĻĒā§āĻ¤ā§ āĻ āĻŦā§āĻ¯āĻŦāĻšā§āĻ¤ āĻāĻŋāĻšā§āĻ¨āĻā§āĻ˛āĻŋ āĻŦāĻžāĻ¤āĻŋāĻ˛ āĻāĻ°āĻž āĻšāĻŦā§ā§ˇ
āĻāĻŽāĻ°āĻž āĻāĻāĻāĻŋ āĻšāĻžāĻĢāĻŽā§āĻ¯āĻžāĻ¨ āĻā§āĻ°āĻŋ āĻ¤ā§āĻ°āĻŋ āĻāĻ°āĻ¤ā§ āĻāĻāĻāĻŋ āĻ āĻā§āĻ°āĻžāĻ§āĻŋāĻāĻžāĻ° āĻ¸āĻžāĻ°āĻŋ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°āĻŦ, āĻ¯ā§āĻāĻžāĻ¨ā§ āĻ¸āĻ°ā§āĻŦāĻ¨āĻŋāĻŽā§āĻ¨ āĻĢā§āĻ°āĻŋāĻā§āĻ¯āĻŧā§āĻ¨ā§āĻ¸āĻŋ āĻ¸āĻš āĻ¨ā§āĻĄāĻā§ āĻ¸āĻ°ā§āĻŦā§āĻā§āĻ āĻ āĻā§āĻ°āĻžāĻ§āĻŋāĻāĻžāĻ° āĻĻā§āĻāĻ¯āĻŧāĻž āĻšāĻŦā§āĨ¤ āĻ¨āĻŋāĻ°ā§āĻŽāĻžāĻŖā§āĻ° āĻ§āĻžāĻĒāĻā§āĻ˛āĻŋ āĻ¨ā§āĻā§ āĻŦāĻ°ā§āĻŖāĻ¨āĻž āĻāĻ°āĻž āĻšāĻ¯āĻŧā§āĻā§:
- āĻĒā§āĻ°āĻ¤āĻŋāĻāĻŋ āĻ āĻā§āĻˇāĻ°ā§āĻ° āĻāĻ¨ā§āĻ¯ āĻāĻāĻāĻŋ āĻ˛āĻŋāĻĢ āĻ¨ā§āĻĄ āĻ¤ā§āĻ°āĻŋ āĻāĻ°ā§āĻ¨ āĻāĻŦāĻ āĻ¤āĻžāĻĻā§āĻ° āĻ āĻā§āĻ°āĻžāĻ§āĻŋāĻāĻžāĻ° āĻ¸āĻžāĻ°āĻŋāĻ¤ā§ āĻ¯ā§āĻā§āĻ¤ āĻāĻ°ā§āĻ¨āĨ¤
- āĻ¸āĻžāĻ°āĻŋāĻ¤ā§ āĻāĻāĻžāĻ§āĻŋāĻ āĻļā§āĻ āĻĨāĻžāĻāĻžāĻāĻžāĻ˛ā§āĻ¨, āĻ¨āĻŋāĻŽā§āĻ¨āĻ˛āĻŋāĻāĻŋāĻ¤āĻā§āĻ˛āĻŋ āĻāĻ°ā§āĻ¨:
- āĻ¸āĻžāĻ°āĻŋ āĻĨā§āĻā§ āĻ¸āĻ°ā§āĻŦā§āĻā§āĻ āĻ āĻā§āĻ°āĻžāĻ§āĻŋāĻāĻžāĻ° (āĻ¸āĻ°ā§āĻŦāĻ¨āĻŋāĻŽā§āĻ¨ āĻĢā§āĻ°āĻŋāĻā§āĻ¯āĻŧā§āĻ¨ā§āĻ¸āĻŋ) āĻ¸āĻš āĻĻā§āĻāĻŋ āĻ¨ā§āĻĄ āĻ¸āĻ°āĻžāĻ¨;
- āĻāĻāĻāĻŋ āĻ¨āĻ¤ā§āĻ¨ āĻ āĻā§āĻ¯āĻ¨ā§āĻ¤āĻ°ā§āĻŖ āĻ¨ā§āĻĄ āĻ¤ā§āĻ°āĻŋ āĻāĻ°ā§āĻ¨, āĻ¯ā§āĻāĻžāĻ¨ā§ āĻāĻ āĻĻā§āĻāĻŋ āĻ¨ā§āĻĄ āĻļāĻŋāĻļā§ āĻšāĻŦā§ āĻāĻŦāĻ āĻ¸āĻāĻāĻāĻ¨ā§āĻ° āĻĢā§āĻ°āĻŋāĻā§āĻ¯āĻŧā§āĻ¨ā§āĻ¸āĻŋ āĻāĻ āĻĻā§āĻāĻŋ āĻ¨ā§āĻĄā§āĻ° āĻĢā§āĻ°āĻŋāĻā§āĻ¯āĻŧā§āĻ¨ā§āĻ¸āĻŋāĻ° āĻ¯ā§āĻāĻĢāĻ˛ā§āĻ° āĻ¸āĻŽāĻžāĻ¨ āĻšāĻŦā§āĨ¤
- āĻ āĻā§āĻ°āĻžāĻ§āĻŋāĻāĻžāĻ° āĻ¸āĻžāĻ°āĻŋāĻ¤ā§ āĻāĻāĻāĻŋ āĻ¨āĻ¤ā§āĻ¨ āĻ¨ā§āĻĄ āĻ¯ā§āĻ āĻāĻ°ā§āĻ¨āĨ¤
- āĻāĻāĻŽāĻžāĻ¤ā§āĻ° āĻ āĻŦāĻļāĻŋāĻˇā§āĻ āĻ¨ā§āĻĄāĻāĻŋ āĻŽā§āĻ˛ āĻšāĻŦā§ āĻāĻŦāĻ āĻāĻāĻŋ āĻāĻžāĻā§āĻ° āĻ¨āĻŋāĻ°ā§āĻŽāĻžāĻŖ āĻ¸āĻŽā§āĻĒā§āĻ°ā§āĻŖ āĻāĻ°āĻŦā§āĨ¤
āĻāĻ˛ā§āĻĒāĻ¨āĻž āĻāĻ°ā§āĻ¨ āĻ¯ā§ āĻāĻŽāĻžāĻĻā§āĻ° āĻāĻŽāĻ¨ āĻāĻŋāĻā§ āĻĒāĻžāĻ ā§āĻ¯ āĻ°āĻ¯āĻŧā§āĻā§ āĻ¯āĻž āĻļā§āĻ§ā§āĻŽāĻžāĻ¤ā§āĻ° āĻ āĻā§āĻˇāĻ° āĻ¨āĻŋāĻ¯āĻŧā§ āĻāĻ āĻŋāĻ¤ "āĻ āĻŦāĻŋ āĻ¸āĻŋ āĻĄāĻŋ" и "āĻāĻŦāĻ", āĻāĻŦāĻ āĻ¤āĻžāĻĻā§āĻ° āĻ¸āĻāĻāĻāĻ¨ āĻĢā§āĻ°āĻŋāĻā§āĻ¯āĻŧā§āĻ¨ā§āĻ¸āĻŋ āĻ¯āĻĨāĻžāĻā§āĻ°āĻŽā§ 15, 7, 6, 6 āĻāĻŦāĻ 5āĨ¤ āĻ¨ā§āĻā§āĻ° āĻāĻŋāĻ¤ā§āĻ°āĻā§āĻ˛āĻŋ āĻ ā§āĻ¯āĻžāĻ˛āĻāĻ°āĻŋāĻĻāĻŽā§āĻ° āĻ§āĻžāĻĒāĻā§āĻ˛āĻŋāĻā§ āĻĒā§āĻ°āĻ¤āĻŋāĻĢāĻ˛āĻŋāĻ¤ āĻāĻ°ā§ā§ˇ
āĻ°ā§āĻ āĻĨā§āĻā§ āĻ¯ā§āĻā§āĻ¨ āĻāĻ¨ā§āĻĄ āĻ¨ā§āĻĄ āĻĒāĻ°ā§āĻ¯āĻ¨ā§āĻ¤ āĻāĻāĻāĻŋ āĻĒāĻžāĻĨ āĻ¸ā§āĻ āĻļā§āĻˇ āĻ¨ā§āĻĄā§āĻ° āĻ¸āĻžāĻĨā§ āĻ¯ā§āĻā§āĻ¤ āĻ
āĻā§āĻˇāĻ°ā§āĻ° āĻ¸āĻžāĻĨā§ āĻ¸āĻŽā§āĻĒāĻ°ā§āĻāĻŋāĻ¤ āĻ¸āĻ°ā§āĻŦā§āĻ¤ā§āĻ¤āĻŽ āĻāĻĒāĻ¸āĻ°ā§āĻ āĻā§āĻĄ (āĻšāĻžāĻĢāĻŽā§āĻ¯āĻžāĻ¨ āĻā§āĻĄ āĻ¨āĻžāĻŽā§āĻ āĻĒāĻ°āĻŋāĻāĻŋāĻ¤) āĻ¸āĻāĻ°āĻā§āĻˇāĻŖ āĻāĻ°āĻŦā§āĨ¤
āĻšāĻžāĻĢāĻŽā§āĻ¯āĻžāĻ¨ āĻāĻžāĻ
āĻ¨ā§āĻā§ āĻāĻĒāĻ¨āĻŋ C++ āĻāĻŦāĻ āĻāĻžāĻāĻžāĻ¤ā§ āĻšāĻžāĻĢāĻŽā§āĻ¯āĻžāĻ¨ āĻāĻŽā§āĻĒā§āĻ°ā§āĻļāĻ¨ āĻ ā§āĻ¯āĻžāĻ˛āĻāĻ°āĻŋāĻĻāĻŽā§āĻ° āĻŦāĻžāĻ¸ā§āĻ¤āĻŦāĻžāĻ¯āĻŧāĻ¨ āĻĒāĻžāĻŦā§āĻ¨:
#include <iostream>
#include <string>
#include <queue>
#include <unordered_map>
using namespace std;
// A Tree node
struct Node
{
char ch;
int freq;
Node *left, *right;
};
// Function to allocate a new tree node
Node* getNode(char ch, int freq, Node* left, Node* right)
{
Node* node = new Node();
node->ch = ch;
node->freq = freq;
node->left = left;
node->right = right;
return node;
}
// Comparison object to be used to order the heap
struct comp
{
bool operator()(Node* l, Node* r)
{
// highest priority item has lowest frequency
return l->freq > r->freq;
}
};
// traverse the Huffman Tree and store Huffman Codes
// in a map.
void encode(Node* root, string str,
unordered_map<char, string> &huffmanCode)
{
if (root == nullptr)
return;
// found a leaf node
if (!root->left && !root->right) {
huffmanCode[root->ch] = str;
}
encode(root->left, str + "0", huffmanCode);
encode(root->right, str + "1", huffmanCode);
}
// traverse the Huffman Tree and decode the encoded string
void decode(Node* root, int &index, string str)
{
if (root == nullptr) {
return;
}
// found a leaf node
if (!root->left && !root->right)
{
cout << root->ch;
return;
}
index++;
if (str[index] =='0')
decode(root->left, index, str);
else
decode(root->right, index, str);
}
// Builds Huffman Tree and decode given input text
void buildHuffmanTree(string text)
{
// count frequency of appearance of each character
// and store it in a map
unordered_map<char, int> freq;
for (char ch: text) {
freq[ch]++;
}
// Create a priority queue to store live nodes of
// Huffman tree;
priority_queue<Node*, vector<Node*>, comp> pq;
// Create a leaf node for each character and add it
// to the priority queue.
for (auto pair: freq) {
pq.push(getNode(pair.first, pair.second, nullptr, nullptr));
}
// do till there is more than one node in the queue
while (pq.size() != 1)
{
// Remove the two nodes of highest priority
// (lowest frequency) from the queue
Node *left = pq.top(); pq.pop();
Node *right = pq.top(); pq.pop();
// Create a new internal node with these two nodes
// as children and with frequency equal to the sum
// of the two nodes' frequencies. Add the new node
// to the priority queue.
int sum = left->freq + right->freq;
pq.push(getNode('', sum, left, right));
}
// root stores pointer to root of Huffman Tree
Node* root = pq.top();
// traverse the Huffman Tree and store Huffman Codes
// in a map. Also prints them
unordered_map<char, string> huffmanCode;
encode(root, "", huffmanCode);
cout << "Huffman Codes are :n" << 'n';
for (auto pair: huffmanCode) {
cout << pair.first << " " << pair.second << 'n';
}
cout << "nOriginal string was :n" << text << 'n';
// print encoded string
string str = "";
for (char ch: text) {
str += huffmanCode[ch];
}
cout << "nEncoded string is :n" << str << 'n';
// traverse the Huffman Tree again and this time
// decode the encoded string
int index = -1;
cout << "nDecoded string is: n";
while (index < (int)str.size() - 2) {
decode(root, index, str);
}
}
// Huffman coding algorithm
int main()
{
string text = "Huffman coding is a data compression algorithm.";
buildHuffmanTree(text);
return 0;
}
import java.util.HashMap;
import java.util.Map;
import java.util.PriorityQueue;
// A Tree node
class Node
{
char ch;
int freq;
Node left = null, right = null;
Node(char ch, int freq)
{
this.ch = ch;
this.freq = freq;
}
public Node(char ch, int freq, Node left, Node right) {
this.ch = ch;
this.freq = freq;
this.left = left;
this.right = right;
}
};
class Huffman
{
// traverse the Huffman Tree and store Huffman Codes
// in a map.
public static void encode(Node root, String str,
Map<Character, String> huffmanCode)
{
if (root == null)
return;
// found a leaf node
if (root.left == null && root.right == null) {
huffmanCode.put(root.ch, str);
}
encode(root.left, str + "0", huffmanCode);
encode(root.right, str + "1", huffmanCode);
}
// traverse the Huffman Tree and decode the encoded string
public static int decode(Node root, int index, StringBuilder sb)
{
if (root == null)
return index;
// found a leaf node
if (root.left == null && root.right == null)
{
System.out.print(root.ch);
return index;
}
index++;
if (sb.charAt(index) == '0')
index = decode(root.left, index, sb);
else
index = decode(root.right, index, sb);
return index;
}
// Builds Huffman Tree and huffmanCode and decode given input text
public static void buildHuffmanTree(String text)
{
// count frequency of appearance of each character
// and store it in a map
Map<Character, Integer> freq = new HashMap<>();
for (int i = 0 ; i < text.length(); i++) {
if (!freq.containsKey(text.charAt(i))) {
freq.put(text.charAt(i), 0);
}
freq.put(text.charAt(i), freq.get(text.charAt(i)) + 1);
}
// Create a priority queue to store live nodes of Huffman tree
// Notice that highest priority item has lowest frequency
PriorityQueue<Node> pq = new PriorityQueue<>(
(l, r) -> l.freq - r.freq);
// Create a leaf node for each character and add it
// to the priority queue.
for (Map.Entry<Character, Integer> entry : freq.entrySet()) {
pq.add(new Node(entry.getKey(), entry.getValue()));
}
// do till there is more than one node in the queue
while (pq.size() != 1)
{
// Remove the two nodes of highest priority
// (lowest frequency) from the queue
Node left = pq.poll();
Node right = pq.poll();
// Create a new internal node with these two nodes as children
// and with frequency equal to the sum of the two nodes
// frequencies. Add the new node to the priority queue.
int sum = left.freq + right.freq;
pq.add(new Node('', sum, left, right));
}
// root stores pointer to root of Huffman Tree
Node root = pq.peek();
// traverse the Huffman tree and store the Huffman codes in a map
Map<Character, String> huffmanCode = new HashMap<>();
encode(root, "", huffmanCode);
// print the Huffman codes
System.out.println("Huffman Codes are :n");
for (Map.Entry<Character, String> entry : huffmanCode.entrySet()) {
System.out.println(entry.getKey() + " " + entry.getValue());
}
System.out.println("nOriginal string was :n" + text);
// print encoded string
StringBuilder sb = new StringBuilder();
for (int i = 0 ; i < text.length(); i++) {
sb.append(huffmanCode.get(text.charAt(i)));
}
System.out.println("nEncoded string is :n" + sb);
// traverse the Huffman Tree again and this time
// decode the encoded string
int index = -1;
System.out.println("nDecoded string is: n");
while (index < sb.length() - 2) {
index = decode(root, index, sb);
}
}
public static void main(String[] args)
{
String text = "Huffman coding is a data compression algorithm.";
buildHuffmanTree(text);
}
}
āĻĻā§āĻ°āĻˇā§āĻāĻŦā§āĻ¯: āĻāĻ¨āĻĒā§āĻ āĻ¸ā§āĻā§āĻ°āĻŋāĻ āĻĻā§āĻŦāĻžāĻ°āĻž āĻŦā§āĻ¯āĻŦāĻšā§āĻ¤ āĻŽā§āĻŽāĻ°āĻŋ āĻšāĻ˛ 47*8 = 376 āĻŦāĻŋāĻ āĻāĻŦāĻ āĻāĻ¨āĻā§āĻĄ āĻāĻ°āĻž āĻ¸ā§āĻā§āĻ°āĻŋāĻ āĻšāĻ˛ āĻŽāĻžāĻ¤ā§āĻ° 194 āĻŦāĻŋāĻ āĻ āĻ°ā§āĻĨāĻžā§ āĻ¤āĻĨā§āĻ¯ āĻĒā§āĻ°āĻžāĻ¯āĻŧ 48% āĻĻā§āĻŦāĻžāĻ°āĻž āĻ¸āĻāĻā§āĻāĻŋāĻ¤ āĻšāĻ¯āĻŧāĨ¤ āĻāĻĒāĻ°ā§āĻ° C++ āĻĒā§āĻ°ā§āĻā§āĻ°āĻžāĻŽā§, āĻāĻŽāĻ°āĻž āĻĒā§āĻ°ā§āĻā§āĻ°āĻžāĻŽāĻāĻŋāĻā§ āĻĒāĻžāĻ āĻ¯ā§āĻā§āĻ¯ āĻāĻ°āĻžāĻ° āĻāĻ¨ā§āĻ¯ āĻāĻ¨āĻā§āĻĄ āĻāĻ°āĻž āĻ¸ā§āĻā§āĻ°āĻŋāĻ āĻ¸āĻāĻ°āĻā§āĻˇāĻŖ āĻāĻ°āĻ¤ā§ āĻ¸ā§āĻā§āĻ°āĻŋāĻ āĻā§āĻ˛āĻžāĻ¸ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°āĻŋāĨ¤
āĻāĻžāĻ°āĻŖ āĻĻāĻā§āĻˇ āĻ āĻā§āĻ°āĻžāĻ§āĻŋāĻāĻžāĻ° āĻ¸āĻžāĻ°āĻŋ āĻĄā§āĻāĻž āĻ¸ā§āĻā§āĻ°āĻžāĻāĻāĻžāĻ°ā§āĻ° āĻāĻ¨ā§āĻ¯ āĻĒā§āĻ°āĻ¤āĻŋ āĻ¸āĻ¨ā§āĻ¨āĻŋāĻŦā§āĻļ āĻĒā§āĻ°āĻ¯āĻŧā§āĻāĻ¨ O(āĻ˛āĻ(N)) āĻ¸āĻŽāĻ¯āĻŧ, āĻāĻŋāĻ¨ā§āĻ¤ā§ āĻ¸āĻā§āĻā§ āĻāĻāĻāĻŋ āĻ¸āĻŽā§āĻĒā§āĻ°ā§āĻŖ āĻŦāĻžāĻāĻ¨āĻžāĻ°āĻŋ āĻāĻžāĻ N āĻĒāĻžāĻ¤āĻž āĻāĻĒāĻ¸ā§āĻĨāĻŋāĻ¤ 2N-1 āĻ¨ā§āĻĄ, āĻāĻŦāĻ āĻšāĻžāĻĢāĻŽā§āĻ¯āĻžāĻ¨ āĻā§āĻ°āĻŋ āĻāĻāĻāĻŋ āĻ¸āĻŽā§āĻĒā§āĻ°ā§āĻŖ āĻŦāĻžāĻāĻ¨āĻžāĻ°āĻŋ āĻā§āĻ°āĻŋ, āĻ¤āĻžāĻ°āĻĒāĻ° āĻ ā§āĻ¯āĻžāĻ˛āĻāĻ°āĻŋāĻĻāĻŽ āĻāĻ˛ā§ O(Nlog(N)) āĻ¸āĻŽāĻ¯āĻŧ, āĻā§āĻĨāĻžāĻ¯āĻŧ N - āĻāĻ°āĻŋāĻ¤ā§āĻ°.
āĻāĻ¤ā§āĻ¸:
āĻāĻ¤ā§āĻ¸: www.habr.com