рдмрд┐рдЯ рдХрд╛рдЙрдВрдЯрд┐рдВрдЧ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ, рдХреЛрдЯрд▓рд┐рди рдореЗрдВ рдЕрд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд рдкреНрд░рдХрд╛рд░ рдФрд░ рдЙрди рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╣рд╛рдВ рдореИрдЪреЛрдВ рдХреЛ рд╕рд╣реЗрдЬрдирд╛ рдЙрдЪрд┐рдд рд╣реИ


рдпрд╣ рдЯрд┐рдкреНрдкрдгреА рд▓реЗрдЦ рдХреЗ рд▓реЗрдЦрди рд╕реЗ рдкреНрд░реЗрд░рд┐рдд рдереАред рдЗрд╕рд╕реЗ рднреА рд╕рдЯреАрдХ, рдПрдХ рд╡рд╛рдХреНрдпрд╛рдВрд╢ред
... рдЕрд░рдмреЛрдВ рдбреЙрд▓рд░ рдореЗрдВ рд╡рд╕реНрддреБрдУрдВ рдкрд░ рдореЗрдореЛрд░реА рдпрд╛ рдкреНрд░реЛрд╕реЗрд╕рд░ рдЪрдХреНрд░ рдЦрд░реНрдЪ рдХрд░рдирд╛ рдЕрдЪреНрдЫрд╛ рдирд╣реАрдВ рд╣реИ ...
рдРрд╕рд╛ рд╣реБрдЖ рдХрд┐ рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдореБрдЭреЗ рдРрд╕рд╛ рдХрд░рдирд╛ рдкрдбрд╝рд╛ред рдФрд░, рд╣рд╛рд▓рд╛рдВрдХрд┐, рд▓реЗрдЦ рдореЗрдВ рдореИрдВ рдЬрд┐рд╕ рдорд╛рдорд▓реЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реВрдВрдЧрд╛, рд╡рд╣ рд╡рд┐рд╢реЗрд╖ рд╣реИ - рдирд┐рд╖реНрдХрд░реНрд╖ рдФрд░ рд▓рд╛рдЧреВ рдХрд┐рдП рдЧрдП рд╕рдорд╛рдзрд╛рди рдХрд┐рд╕реА рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред

рдереЛрдбрд╝рд╛ рд╕рд╛ рд╕рдВрджрд░реНрдн


IFunny рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЧреНрд░рд╛рдлрд┐рдХ рдФрд░ рд╡реАрдбрд┐рдпреЛ рд╕рд╛рдордЧреНрд░реА рдХреА рдПрдХ рдмрдбрд╝реА рдорд╛рддреНрд░рд╛ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИ, рдФрд░ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдХреЗ рд▓рд┐рдП рдлрд╝рдЬрд╝реА рдЦреЛрдЬ рдмрд╣реБрдд рдорд╣рддреНрд╡рдкреВрд░реНрдг рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИред рдпрд╣ рдЕрдкрдиреЗ рдЖрдк рдореЗрдВ рдПрдХ рдмрдбрд╝рд╛ рд╡рд┐рд╖рдп рд╣реИ рдЬреЛ рдПрдХ рдЕрд▓рдЧ рд▓реЗрдЦ рдХреЗ рдпреЛрдЧреНрдп рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдЬ рдореИрдВ рдЗрд╕ рдЦреЛрдЬ рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреА рдмрд╣реБрдд рдмрдбрд╝реА рд╕рд░рдгрд┐рдпреЛрдВ рдХреА рдЧрдгрдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рджреГрд╖реНрдЯрд┐рдХреЛрдгреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░реВрдВрдЧрд╛ред рдмреЗрд╢рдХ, рд╕рднреА рдХреЛ "рдмрд╣реБрдд рдмрдбрд╝реЗ рд╕рд░рдгрд┐рдпреЛрдВ" рдХреА рдПрдХ рдЕрд▓рдЧ рд╕рдордЭ рд╣реИ, рдФрд░ рд╣реИрдбреНрд░реЙрди рдХреЛрд▓рд╛рдЗрдбрд░ рдХреЗ рд╕рд╛рде рдкреНрд░рддрд┐рд╕реНрдкрд░реНрдзрд╛ рдХрд░рдирд╛ рдореВрд░реНрдЦрддрд╛рдкреВрд░реНрдг рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдлрд┐рд░ рднреАред :)

рдпрджрд┐ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдмрд╣реБрдд рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рд╣реИ, рддреЛ рдкреНрд░рддреНрдпреЗрдХ рдЫрд╡рд┐ рдХреЗ рд▓рд┐рдП 968 рдкреВрд░реНрдгрд╛рдВрдХ рд╕реЗ рдЗрд╕рдХрд╛ рдбрд┐рдЬрд┐рдЯрд▓ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ (рд╣рд╕реНрддрд╛рдХреНрд╖рд░) рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рддреБрд▓рдирд╛ рджреЛ рд╣рд╕реНрддрд╛рдХреНрд╖рд░реЛрдВ рдХреЗ рдмреАрдЪ "рджреВрд░реА" рдХреЛ рдЦреЛрдЬрдиреЗ рдХреЗ рджреНрд╡рд╛рд░рд╛ рдХреА рдЬрд╛рддреА рд╣реИред рдпрд╣ рджреЗрдЦрддреЗ рд╣реБрдП рдХрд┐ рдкрд┐рдЫрд▓реЗ рджреЛ рдорд╣реАрдиреЛрдВ рдореЗрдВ рд╕рд╛рдордЧреНрд░реА рдХреА рдорд╛рддреНрд░рд╛ рдЕрдХреЗрд▓реЗ рд▓рдЧрднрдЧ 10 рдорд┐рд▓рд┐рдпрди рдЫрд╡рд┐рдпреЛрдВ рдХреА рд╣реИ, рдлрд┐рд░ рдПрдХ рдЪреМрдХрд╕ рдкрд╛рдардХ рдЖрд╕рд╛рдиреА рд╕реЗ рдЕрдкрдиреЗ рджрд┐рдорд╛рдЧ рдореЗрдВ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдПрдЧрд╛ - рдпреЗ рдмрд┐рд▓рдХреБрд▓ "рдЕрд░рдмреЛрдВ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдореЗрдВ рддрддреНрд╡" рд╣реИрдВред рдХреМрди рдкрд░рд╡рд╛рд╣ рдХрд░рддрд╛ рд╣реИ - рдмрд┐рд▓реНрд▓реА рдореЗрдВ рдЖрдкрдХрд╛ рд╕реНрд╡рд╛рдЧрдд рд╣реИред

рд╢реБрд░реБрдЖрдд рдореЗрдВ рд╕рдордп рдФрд░ рд╕реНрдореГрддрд┐ рдХреЛ рдмрдЪрд╛рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рдЙрдмрд╛рдК рдХрд╣рд╛рдиреА рд╣реЛрдЧреА, рдФрд░ рдЕрдВрдд рдореЗрдВ рдЗрд╕ рддрдереНрдп рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рдЫреЛрдЯреА рд╢рд┐рдХреНрд╖рд╛рдкреНрд░рдж рдХрд╣рд╛рдиреА рд╣реЛрдЧреА рдХрд┐ рдХрднреА-рдХрднреА рд╕реНрд░реЛрдд рдХреЛ рджреЗрдЦрдирд╛ рдмрд╣реБрдд рдЙрдкрдпреЛрдЧреА рд╣реЛрддрд╛ рд╣реИред рдзреНрдпрд╛рди рдЖрдХрд░реНрд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рддрд╕реНрд╡реАрд░ рд╕реАрдзреЗ рдЗрд╕ рд╢рд┐рдХреНрд╖рд╛рдкреНрд░рдж рдХрд╣рд╛рдиреА рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИред

рдореБрдЭреЗ рдорд╛рдирдирд╛ тАЛтАЛрд╣реЛрдЧрд╛ рдХрд┐ рдореИрдВ рдереЛрдбрд╝рд╛ рдЪрд╛рд▓рд╛рдХ рдерд╛ред рдПрд▓реНрдЧреЛрд░рд┐рдердо рдХреЗ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдореЗрдВ, 968 рд╕реЗ 420 рддрдХ рдкреНрд░рддреНрдпреЗрдХ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдореЗрдВ рдореВрд▓реНрдпреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдХрдо рдХрд░рдирд╛ рд╕рдВрднрд╡ рдерд╛ред рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рджреЛ рдмрд╛рд░ рдЕрдЪреНрдЫрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдкрд░рд┐рдорд╛рдг рдХрд╛ рдХреНрд░рдо рд╕рдорд╛рди рд░рд╣рддрд╛ рд╣реИред

рдпрджреНрдпрдкрд┐, рдпрджрд┐ рдЖрдк рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдЗрддрдирд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдореИрдВ рдзреЛрдЦрд╛ рджреЗ рд░рд╣рд╛ рдерд╛, рдФрд░ рдпрд╣ рдкрд╣рд▓рд╛ рдирд┐рд╖реНрдХрд░реНрд╖ рд╣реЛрдЧрд╛: рдХрд╛рд░реНрдп рдХреЗ рд╕рд╛рде рдЖрдЧреЗ рдмрдврд╝рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдпрд╣ рд╕реЛрдЪрдиреЗ рдпреЛрдЧреНрдп рд╣реИ - рдХреНрдпрд╛ рдХрд┐рд╕реА рддрд░рд╣ рдЕрдЧреНрд░рд┐рдо рдореЗрдВ рдЗрд╕реЗ рд╕рд░рд▓ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ?

рддреБрд▓рдирд╛ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХрд╛рдлреА рд╕рд░рд▓ рд╣реИ: рджреЛ рд╣рд╕реНрддрд╛рдХреНрд╖рд░реЛрдВ рдХреЗ рдЕрдВрддрд░ рдХреЗ рд╡рд░реНрдЧреЛрдВ рдХреЗ рдпреЛрдЧ рдХреА рдЬрдбрд╝ рдХреА рдЧрдгрдирд╛, рдкрд╣рд▓реЗ рд╕реЗ рдЧрдгрдирд╛ рдХрд┐рдП рдЧрдП рдорд╛рдиреЛрдВ рдХреЗ рдпреЛрдЧ рд╕реЗ рд╡рд┐рднрд╛рдЬрд┐рдд рдХреА рдЬрд╛рддреА рд╣реИ (рдпрд╛рдиреА, рдкреНрд░рддреНрдпреЗрдХ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдореЗрдВ рдпреЛрдЧ рдЕрднреА рднреА рд╣реЛрдЧрд╛ рдФрд░ рд╕рднреА рдкрд░ рдПрдХ рд╕реНрдерд┐рд░ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╛рд╣рд░ рдирд╣реАрдВ рдирд┐рдХрд╛рд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ) рдФрд░ рджрд╣рд▓реАрдЬ рдореВрд▓реНрдп рдХреЗ рд╕рд╛рде рддреБрд▓рдирд╛ рдХреА рдЬрд╛рддреА рд╣реИред рдпрд╣ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рддрддреНрд╡ -2 рд╕реЗ +2 рддрдХ рдореВрд▓реНрдпреЛрдВ рддрдХ рд╕реАрдорд┐рдд рд╣реИрдВ, рдФрд░, рддрджрдиреБрд╕рд╛рд░, рдЕрдВрддрд░ рдХрд╛ рдкреВрд░реНрдг рдорд╛рди 0 рд╕реЗ 4 рддрдХ рдХреЗ рдореВрд▓реНрдпреЛрдВ рддрдХ рд╕реАрдорд┐рдд рд╣реИред


рдХреБрдЫ рднреА рдЬрдЯрд┐рд▓ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдорд╛рддреНрд░рд╛ рддрдп рдХрд░рддреА рд╣реИред

рдкрд╣рд▓рд╛ рджреГрд╖реНрдЯрд┐рдХреЛрдг, рднреЛрд▓рд╛


//  const val d = 0.3 // 10.000.000 . //      , //        val collection: MutableList<Signature> = mutableListOf() // signature тАФ   420   Byte class Signature(val signature: Array<Byte>, val norma: Double) fun getSimilar(signature: Signature) = collection .filter { calculateDistance(it, signature) < d } fun calculateDistance(first: Signature, second: Signature): Double = Math.sqrt(first.signature.mapIndexed { index, value -> Math.pow((value - second.signature[index]).toDouble(), 2.0) }.sum()) / (first.norma + second.norma) 

рдЖрдЗрдП рдЧрдгрдирд╛ рдХрд░реЗрдВ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдСрдкрд░реЗрд╢рди рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЗ рд╕рд╛рде рдпрд╣рд╛рдВ рдХреНрдпрд╛ рд╣реИ:

10M рд╕реНрдХреНрд╡рд╛рдпрд░ рд░реВрдЯреНрд╕ Math.sqrt
10M рдкрд░рд┐рд╡рд░реНрдзрди рдФрд░ рд╡рд┐рднрд╛рдЬрди / (first.norma + second.norma)
4.200M рдШрдЯрд╛ рдФрд░ Math.pow((value - second.signature[index]).toDouble(), 2.0)
4.200M рдкрд░рд┐рд╡рд░реНрдзрди .sum()

рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХреНрдпрд╛ рд╡рд┐рдХрд▓реНрдк рд╣реИрдВ:

  1. рдЗрд╕ рддрд░рд╣ рдХреЗ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЗ рд╕рд╛рде, рдкреВрд░реЗ Byte рдЦрд░реНрдЪ рдХрд░рдирд╛ (рдпрд╛, рднрдЧрд╡рд╛рди рдирд╛ рдХрд░реЗ, рдХрд┐рд╕реА рдиреЗ Int рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рдпрд╛ рд╣реЛрдЧрд╛) рддреАрди рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд┐рдЯреНрд╕ рдХреЛ рд╕реНрдЯреЛрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдХреНрд╖рдореНрдп рдмреЗрдХрд╛рд░ рд╣реИред
  2. рд╢рд╛рдпрдж, рдЧрдгрд┐рдд рдХреА рдорд╛рддреНрд░рд╛ рдХреИрд╕реЗ рдХрдо рдХрд░реЗрдВ?
  3. рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рдХреБрдЫ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдлрд╝рд┐рд▓реНрдЯрд░рд┐рдВрдЧ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ, рдЬреЛ рдЗрддрдирд╛ рдХрдореНрдкреНрдпреВрдЯреЗрд╢рдирд▓ рд░реВрдк рд╕реЗ рдорд╣рдВрдЧрд╛ рдирд╣реАрдВ рд╣реИ?

рджреВрд╕рд░рд╛ рддрд░реАрдХрд╛, рд╣рдо рдкреИрдХ рдХрд░рддреЗ рд╣реИрдВ


рд╡реИрд╕реЗ, рдЕрдЧрд░ рдХреЛрдИ рд╕реБрдЭрд╛рд╡ рджреЗрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдЗрд╕ рддрд░рд╣ рдХреА рдкреИрдХреЗрдЬрд┐рдВрдЧ рдХреЗ рд╕рд╛рде рдЧрдгрдирд╛ рдХреЛ рдХреИрд╕реЗ рд╕рд░рд▓ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдХрд░реНрдо рдореЗрдВ рдПрдХ рдмрдбрд╝рд╛ рдзрдиреНрдпрд╡рд╛рдж рдФрд░ рдкреНрд▓рд╕ рдорд┐рд▓реЗрдЧрд╛ред рд╣рд╛рд▓рд╛рдВрдХрд┐ рдПрдХ, рд▓реЗрдХрд┐рди рдореЗрд░реЗ рдкреВрд░реЗ рджрд┐рд▓ рд╕реЗ :)

рдПрдХ Long 64 рдмрд┐рдЯреНрд╕ рд╣реИ, рдЬреЛ рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдореЗрдВ рдЗрд╕рдореЗрдВ 21 рдорд╛рдиреЛрдВ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛ (рдФрд░ 1 рдмрд┐рдЯ рдЕрдкреНрд░рдЪрд▓рд┐рдд рд░рд╣реЗрдЧрд╛)ред

 //   20   Long class Signature(val signature: Array<Long>, val norma: Double) fun calculateDistance(first: Signature, second: Signature): Double = Math.sqrt(first.signature.mapIndexed { index, value -> calculatePartial(value, second.signature[index]) }.sum()) / (first.norma + second.norma) fun calculatePartial(first: Long, second: Long): Double { var sum = 0L (0..60 step 3).onEach { val current = (first.ushr(it) and 0x7) - (second.ushr(it) and 0x7) sum += current * current } return sum.toDouble() } 

рдпрд╣ рдореЗрдореЛрд░реА рд╕реЗ рдмреЗрд╣рддрд░ рд╣реИ ( 4.200M рдмрдирд╛рдо 1.600M рдмрд╛рдЗрдЯреНрд╕, рдпрджрд┐ рдореЛрдЯреЗ рддреМрд░ рдкрд░), рд▓реЗрдХрд┐рди рдЧрдгрдирд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛?

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ рд╕рдВрдЪрд╛рд▓рди рдХреА рд╕рдВрдЦреНрдпрд╛ рд╕рдорд╛рди рд░рд╣реА рд╣реИ рдФрд░ 8.400M рдмрджрд▓рд╛рд╡ рдФрд░ 8.400M рддрд╛рд░реНрдХрд┐рдХ рдХреЛ рдЙрдирдХреЗ рд╕рд╛рде рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рд╣реИред рд╢рд╛рдпрдж рдЗрд╕реЗ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдкреНрд░рд╡реГрддреНрддрд┐ рдЕрднреА рднреА рдЦреБрд╢ рдирд╣реАрдВ рд╣реИ - рдпрд╣ рд╡рд╣ рдирд╣реАрдВ рд╣реИ рдЬреЛ рд╣рдо рдЪрд╛рд╣рддреЗ рдереЗред

рддреАрд╕рд░рд╛ рджреГрд╖реНрдЯрд┐рдХреЛрдг, рдЙрдк-рдЙрдк рдХреЗ рд╕рд╛рде рдлрд┐рд░ рд╕реЗ рдкреИрдХ


рд╕реБрдмрд╣ рдореИрдВ рдЗрд╕реЗ рд╕реВрдВрдШ рд╕рдХрддрд╛ рд╣реВрдВ, рдпрд╣рд╛рдВ рдЖрдк рдмрд┐рдЯ рдЬрд╛рджреВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ!

рдорд╛рдиреЛрдВ рдХреЛ рддреАрди рдирд╣реАрдВ, рдмрд▓реНрдХрд┐ рдЪрд╛рд░ рдмрд┐рдЯреНрд╕ рдореЗрдВ рд╕реНрдЯреЛрд░ рдХрд░реЗрдВред рдЗрд╕ рддрд░рд╣ рд╕реЗ:
-20b1100
-10b0100
00b0000
10b0010
20b0011

рд╣рд╛рдБ, рд╣рдо рдкрд┐рдЫрд▓реЗ рд╕рдВрд╕реНрдХрд░рдг рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдкреИрдХрд┐рдВрдЧ рдШрдирддреНрд╡ рдЦреЛ рджреЗрдВрдЧреЗ, рд▓реЗрдХрд┐рди рд╣рдореЗрдВ рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ XOR рдХреЗ рдУрдо рдХреЗ рд╕рд╛рде 16 (рдХрд╛рдлреА рдирд╣реАрдВ) рдЕрдВрддрд░ рдХреЗ рд╕рд╛рде Long рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХрд╛ рдЕрд╡рд╕рд░ рдорд┐рд▓реЗрдЧрд╛ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдкреНрд░рддреНрдпреЗрдХ рдЕрдВрддрд┐рдо рдХреБрддрд░рдирд╛ рдореЗрдВ рдмрд┐рдЯреНрд╕ рдХреЗ рд╡рд┐рддрд░рдг рдХреЗ рд▓рд┐рдП рдХреЗрд╡рд▓ 11 рд╡рд┐рдХрд▓реНрдк рд╣реЛрдВрдЧреЗ, рдЬреЛ рдЖрдкрдХреЛ рдорддрднреЗрджреЛрдВ рдХреЗ рд╡рд░реНрдЧреЛрдВ рдХреЗ рдкреВрд░реНрд╡-рдЧрдгрдирд╛ рдореВрд▓реНрдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛ред

 //   27   Long class Signature(val signature: Array<Long>, val norma: Double) // -1    val precomputed = arrayOf(0, 1, 1, 4, 1, -1, 4, 9, 1, -1, -1, -1, 4, -1, 9, 16) fun calculatePartial(first: Long, second: Long): Double { var sum = 0L val difference = first xor second (0..60 step 4).onEach { sum += precomputed[(difference.ushr(it) and 0xF).toInt()] } return sum.toDouble() } 

рдореЗрдореЛрд░реА рд╕реЗ рдпрд╣ 2.160M рдмрдирд╛рдо 1.600M - рдЕрдкреНрд░рд┐рдп рд╣реЛ рдЧрдпрд╛, рд▓реЗрдХрд┐рди рдЕрднреА рднреА рд╢реБрд░реБрдЖрддреА 4.200M рд╕реЗ рдмреЗрд╣рддрд░ рд╣реИред

рдЪрд▓реЛ рд╕рдВрдЪрд╛рд▓рди рдХреА рдЧрдгрдирд╛ рдХрд░рддреЗ рд╣реИрдВ:

10M рд╡рд░реНрдЧрдореВрд▓, рдкрд░рд┐рд╡рд░реНрдзрди рдФрд░ рд╡рд┐рднрд╛рдЬрди (рдХрд╣реАрдВ рдирд╣реАрдВ рдЧрдП)
270M XOR рдХрд╛
4.320 рдЬреЛрдбрд╝, рдмрджрд▓рд╛рд╡, рддрд╛рд░реНрдХрд┐рдХ 4.320 , рдФрд░ рд╕рд░рдгреА рд╕реЗ рдЕрд░реНрдХред

рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЕрдзрд┐рдХ рджрд┐рд▓рдЪрд╕реНрдк рд▓рдЧ рд░рд╣рд╛ рд╣реИ, рд▓реЗрдХрд┐рди, рд╡реИрд╕реЗ рднреА, рдмрд╣реБрдд рдЕрдзрд┐рдХ рдЧрдгрдирд╛рдПрдВ рд╣реИрдВред рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдордиреЗ рдкрд╣рд▓реЗ рд╣реА 80% рдкрд░рд┐рдгрд╛рдо рджреЗрдиреЗ рд╡рд╛рд▓реЗ рдкреНрд░рдпрд╛рд╕реЛрдВ рдореЗрдВ рд╕реЗ 20% рдЦрд░реНрдЪ рдХрд░ рджрд┐рдП рд╣реИрдВ рдФрд░ рдпрд╣ рд╕реЛрдЪрдиреЗ рдХрд╛ рд╕рдордп рд╣реИ рдХрд┐ рдЖрдк рдФрд░ рдХрд╣рд╛рдБ рд╕реЗ рд▓рд╛рдн рдЙрдард╛ рд╕рдХрддреЗ рд╣реИрдВред рдкрд╣рд▓реА рдмрд╛рдд рдЬреЛ рджрд┐рдорд╛рдЧ рдореЗрдВ рдЖрддреА рд╣реИ, рд╡рд╣ рдпрд╣ рд╣реИ рдХрд┐ рдЗрд╕реЗ рдХрд┐рд╕реА рдЧрдгрдирд╛ рдореЗрдВ рди рд▓рд╛рдПрдВ, рдХреБрдЫ рд╣рд▓реНрдХреЗ рдлрд┐рд▓реНрдЯрд░ рдХреЗ рд╕рд╛рде рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЕрдиреБрдЪрд┐рдд рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХреЛ рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд░рдирд╛ред

рдЪреМрдерд╛ рджреГрд╖реНрдЯрд┐рдХреЛрдг, рдмрдбрд╝реА рдЫрд▓рдиреА


рдпрджрд┐ рдЖрдк рдЧрдгрдирд╛ рд╕реВрддреНрд░ рдХреЛ рдереЛрдбрд╝рд╛ рдмрджрд▓ рджреЗрддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдпрд╣ рдЕрд╕рдорд╛рдирддрд╛ (рдЧрдгрдирд╛ рдХреА рдЧрдИ рджреВрд░реА рд╕реЗ рдХрдо, рдмреЗрд╣рддрд░) рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:


рдпрд╛рдиреА рдЕрдм рд╣рдореЗрдВ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ Long рдХреЗ рдмрд┐рдЯреНрд╕ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЕрд╕рдорд╛рдирддрд╛ рдХреЗ рдмрд╛рдИрдВ рдУрд░ рдХреЗ рдиреНрдпреВрдирддрдо рд╕рдВрднрд╛рд╡рд┐рдд рдореВрд▓реНрдп рдХреА рдЧрдгрдирд╛ рд╣рдо рдХреИрд╕реЗ рдХрд░реЗрдВред рдлрд┐рд░ рдмрд╕ рдЙрди рд╕рднреА рд╣рд╕реНрддрд╛рдХреНрд╖рд░реЛрдВ рдХреЛ рддреНрдпрд╛рдЧ рджреЗрдВ рдЬреЛ рдЙрд╕реЗ рд╕рдВрддреБрд╖реНрдЯ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред
рдореБрдЭреЗ рдпрд╛рдж рджрд┐рд▓рд╛рдПрдВ рдХрд┐ x i 0 рд╕реЗ 4 рддрдХ рдорд╛рди рд▓реЗ рд╕рдХрддрд╛ рд╣реИ (рд╕рдВрдХреЗрдд рдорд╣рддреНрд╡рдкреВрд░реНрдг рдирд╣реАрдВ рд╣реИ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ рдХреНрдпреЛрдВ)ред рдпрд╣ рджреЗрдЦрддреЗ рд╣реБрдП рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рд╢рдмреНрдж рдЪреБрдХрддрд╛ рд╣реИ, рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдкреИрдЯрд░реНрди рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИ:


рдЕрдВрддрд┐рдо рд╕реВрддреНрд░ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ (рд╣рдореЗрдВ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ рдЗрд╕реЗ рд▓рдВрдмреЗ рд╕рдордп рдХреЗ рд▓рд┐рдП рдХрд╛рдЯ рд▓рд┐рдпрд╛ рд╣реИ рдФрд░ рдпрд╣ рдХреЗрд╡рд▓ рдХрд┐рд╕реА рдХреЛ рднреВрд▓ рдЬрд╛рдиреЗ рдФрд░ рдирд╣реАрдВ рджрд┐рдЦрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╢рд░реНрдо рдХреА рдмрд╛рдд рд╣реЛрдЧреА):


рдЬрд╣рд╛рдВ B рдмрд┐рдЯреНрд╕ рд╕реЗрдЯ рдХреА рд╕рдВрдЦреНрдпрд╛ рд╣реИред

рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдПрдХ рдХреЗрд╡рд▓ 64 рдмрд┐рдЯреНрд╕ рдореЗрдВ, 64 рд╕рдВрднрд╛рд╡рд┐рдд рдкрд░рд┐рдгрд╛рдо рдкрдврд╝реЗрдВред рдФрд░ рд╡реЗ рдкрд╣рд▓реЗ рд╕реЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЧрдгрдирд╛ рдХреА рдЬрд╛рддреА рд╣реИрдВ рдФрд░ рдкрд┐рдЫрд▓реЗ рдЕрдиреБрднрд╛рдЧ рдХреЗ рд╕рд╛рде рд╕рд╛рджреГрд╢реНрдп рджреНрд╡рд╛рд░рд╛, рдПрдХ рд╕рд░рдгреА рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИред

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрд╣ рд╕рднреА 27 рд▓реЛрдВрдЧреЛрдВ рдХреА рдЧрдгрдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╡реИрдХрд▓реНрдкрд┐рдХ рд╣реИ - рдпрд╣ рдЕрдЧрд▓реЗ рдПрдХ рдкрд░ рд╕реАрдорд╛ рд╕реЗ рдЕрдзрд┐рдХ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ рдФрд░ рдЖрдк рдЪреЗрдХ рдХреЛ рдмрд╛рдзрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЭреВрдареЗ рд╡рд╛рдкрд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╡реИрд╕реЗ, рдПрдХ рд╣реА рджреГрд╖реНрдЯрд┐рдХреЛрдг, рдореБрдЦреНрдп рдЧрдгрдирд╛ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

 fun getSimilar(signature: Signature) = collection .asSequence() //     !? .filter { estimate(it, signature) } .filter { calculateDistance(it, signature) < d } val estimateValues = arrayOf(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 19, 22, 25, 28, 31, 34, 37, 40, 43, 46, 49, 52, 55, 58, 61, 64, 69, 74, 79, 84, 89, 94, 99, 104, 109, 114, 119, 124, 129, 134, 139, 144, 151, 158, 165, 172, 179, 186, 193, 200, 207, 214, 221, 228, 235, 242, 249, 256) fun estimate(first: Signature, second: Signature):Boolean{ var bitThreshold = Math.pow(d * (first.norma + second.norma), 2.0).toLong() first.signature.forEachIndexed { index, value -> bitThreshold -= estimateValues[java.lang.Long.bitCount(value xor second.signature[index])] if (bitThreshold <= 0) return false } return true } 

рдпрд╣рд╛рдБ рдпрд╣ рд╕рдордЭрдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдЗрд╕ рдлрд╝рд┐рд▓реНрдЯрд░ рдХреА рдкреНрд░рднрд╛рд╡рд╢реАрд▓рддрд╛ (рдирдХрд╛рд░рд╛рддреНрдордХ рддрдХ) рдЕрдиреИрддрд┐рдХ рд░реВрдк рд╕реЗ рдЪрдпрдирд┐рдд рд╕реАрдорд╛ рдкрд░ рдирд┐рд░реНрднрд░ рд╣реИ рдФрд░, рдЗрдирдкреБрдЯ рдбреЗрдЯрд╛ рдкрд░ рдереЛрдбрд╝рд╛ рдХрдо рджреГрдврд╝рддрд╛ рд╕реЗред рд╕реМрднрд╛рдЧреНрдп рд╕реЗ, рдЖрд╡рд╢реНрдпрдХ рджрд╣рд▓реАрдЬ d=0.3 рдХрд╛рдлреА рдХрдо рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдСрдмреНрдЬреЗрдХреНрдЯ рдлрд╝рд┐рд▓реНрдЯрд░ рдХреЛ рдкрд╛рд░рд┐рдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдлрд▓ рд╣реЛрддреЗ рд╣реИрдВ рдФрд░ рдХреБрд▓ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд╕рдордп рдореЗрдВ рдЙрдирдХреА рдЧрдгрдирд╛ рдХрд╛ рдпреЛрдЧрджрд╛рди рдЗрддрдирд╛ рдХрдо рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рдЙрдиреНрд╣реЗрдВ рдЙрдкреЗрдХреНрд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдФрд░ рдЕрдЧрд░ рдРрд╕рд╛ рд╣реИ, рддреЛ рдЖрдк рдереЛрдбрд╝рд╛ рдФрд░ рдмрдЪрд╛ рд╕рдХрддреЗ рд╣реИрдВред

рдкрд╛рдВрдЪрд╡рд╛рдВ рджреГрд╖реНрдЯрд┐рдХреЛрдг, рдЕрдиреБрдХреНрд░рдо рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛


рдмрдбрд╝реЗ рд╕рдВрдЧреНрд░рд╣ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп, sequence рдмреЗрд╣рдж рдЕрдкреНрд░рд┐рдп рдЖрдЙрдЯ рдСрдл рдореЗрдореЛрд░реА рдХреЗ рдЦрд┐рд▓рд╛рдл рдПрдХ рдЕрдЪреНрдЫрд╛ рдмрдЪрд╛рд╡ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЕрдЧрд░ рд╣рдо рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдкрд╣рд▓реЗ рдлрд╝рд┐рд▓реНрдЯрд░ рдкрд░ рд╕рдВрдЧреНрд░рд╣ рдХреЛ рдПрдХ рд╕рд╛рдЗрдЬрд╝ рдХреЗ рдЖрдХрд╛рд░ рддрдХ рдХрдо рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рддреЛ рдПрдХ рдФрд░ рдЕрдзрд┐рдХ рдЙрдЪрд┐рдд рд╡рд┐рдХрд▓реНрдк рд╣реЛрдЧрд╛ рдПрдХ рдордзреНрдпрд╡рд░реНрддреА рд╕рдВрдЧреНрд░рд╣ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЗ рд╕рд╛рде рдПрдХ рд▓реВрдк рдореЗрдВ рд╕рд╛рдзрд╛рд░рдг рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛, рдХреНрдпреЛрдВрдХрд┐ sequence рди рдХреЗрд╡рд▓ рдлреИрд╢рдиреЗрдмрд▓ рдФрд░ рдпреБрд╡рд╛ рд╣реИ, рдмрд▓реНрдХрд┐ рдПрдХ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдХрд░реНрддрд╛ рднреА рд╣реИред рдЬрд┐рд╕рдХреЗ рдкрд╛рд╕ hasNext рд╕рд╛рдереА рд╣реИрдВ, рдЬреЛ рдЖрдЬрд╛рдж рд╣реИрдВред

 fun getSimilar(signature: Signature) = collection .filter { estimate(it, signature) } .filter { calculateDistance(it, signature) < d } 

рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣рд╛рдВ рдпрд╣ рдЦреБрд╢реА рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ "рдЗрд╕реЗ рд╕реБрдВрджрд░ рдмрдирд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ред" рдпрд╣рд╛рдБ рд╣рдо рд╡рд╛рджрд╛ рдХрд┐рдпрд╛ рд╣реБрдЖ рд╢рд┐рдХреНрд╖рд╛рдкреНрд░рдж рдХрд╣рд╛рдиреА рдкрд░ рдЖрддреЗ рд╣реИрдВред

рдЫрдард╛ рджреГрд╖реНрдЯрд┐рдХреЛрдг, рд╣рдо рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рдЪрд╛рд╣рддреЗ рдереЗ


рд╣рдо рдХреЛрдЯрд▓рд┐рди рдкрд░ рд▓рд┐рдЦрддреЗ рд╣реИрдВ, рдФрд░ рдпрд╣рд╛рдБ рдХреБрдЫ рд╡рд┐рджреЗрд╢реА java.lang.Long.bitCount ! рдФрд░ рд╣рд╛рд▓ рд╣реА рдореЗрдВ, рдЕрд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЛ рднрд╛рд╖рд╛ рдореЗрдВ рд▓рд╛рдпрд╛ рдЧрдпрд╛ред рд╣рдорд▓рд╛!

рдЬрд▓реНрджреА рд╕реЗ рдирд╣реАрдВ рдХрд╣рд╛ред рд╕рднреА ULong рдХреЛ ULong рджреНрд╡рд╛рд░рд╛ рдмрджрд▓ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, ULong рдЬрд╛рд╡рд╛ рд╕реНрд░реЛрдд рд╕реЗ ULong рдФрд░ ULong рд▓рд┐рдП рдПрдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╕рдорд╛рд░реЛрд╣ рдХреЗ рд░реВрдк рдореЗрдВ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИред

 fun ULong.bitCount(): Int { var i = this i = i - (i.shr(1) and 0x5555555555555555uL) i = (i and 0x3333333333333333uL) + (i.shr(2) and 0x3333333333333333uL) i = i + i.shr(4) and 0x0f0f0f0f0f0f0f0fuL i = i + i.shr(8) i = i + i.shr(16) i = i + i.shr(32) return i.toInt() and 0x7f } 

рд╣рдо рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ ... рдХреБрдЫ рдЧрд▓рдд рд╣реИред рдХреЛрдб рдиреЗ рдзреАрдореА рдЧрддрд┐ рд╕реЗ рдХрд╛рдо рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рджрд┐рдпрд╛ред рд╣рдо рдкреНрд░реЛрдлрд╛рдЗрд▓рд░ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдХреБрдЫ рдЕрдЬреАрдм рджреЗрдЦрддреЗ рд╣реИрдВ (рд▓реЗрдЦ рдХреА bitCount() рджреЗрдЦреЗрдВ): bitCount() рдХреЛ рдПрдХ рдорд┐рд▓рд┐рдпрди рдХреЙрд▓ рд╕реЗ рдереЛрдбрд╝рд╛ рдХрдо bitCount() рд▓рдЧрднрдЧ 16 рдорд┐рд▓рд┐рдпрди рдХреЙрд▓ Kotlin.ULong.constructor-impl ред рд╡реЙрдЯ?

рдкрд╣реЗрд▓реА рдХреЛ рдмрд╕ рд╕рдордЭрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ - рдмрд╕ рдХреНрд▓рд╛рд╕ рдХреЛрдб ULong

 public inline class ULong @PublishedApi internal constructor(@PublishedApi internal val data: Long) : Comparable<ULong> { @kotlin.internal.InlineOnly public inline operator fun plus(other: ULong): ULong = ULong(this.data.plus(other.data)) @kotlin.internal.InlineOnly public inline operator fun minus(other: ULong): ULong = ULong(this.data.minus(other.data)) @kotlin.internal.InlineOnly public inline infix fun shl(bitCount: Int): ULong = ULong(data shl bitCount) @kotlin.internal.InlineOnly public inline operator fun inc(): ULong = ULong(data.inc())  .. } 

рдирд╣реАрдВ, рдореИрдВ рд╕рдм рдХреБрдЫ рд╕рдордЭрддрд╛ рд╣реВрдВ, ULong рдЕрдм experimental рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдХреИрд╕реЗ рд╣реИ?
рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рд╣рдо рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЛ рд╡рд┐рдлрд▓ рдорд╛рдирддреЗ рд╣реИрдВ, рдЬреЛ рдПрдХ рджрдпрд╛ рд╣реИред

рдареАрдХ рд╣реИ, рд▓реЗрдХрд┐рди рдлрд┐рд░ рднреА, рд╢рд╛рдпрдж рдХреБрдЫ рдФрд░ рд╕реБрдзрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ?

рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдЖрдк рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдореВрд▓ java.lang.Long.bitCount рдХреЛрдб рд╕рдмрд╕реЗ рдЗрд╖реНрдЯрддрдо рдирд╣реАрдВ рд╣реИред рдпрд╣ рд╕рд╛рдорд╛рдиреНрдп рдорд╛рдорд▓реЗ рдореЗрдВ рдПрдХ рдЕрдЪреНрдЫрд╛ рдкрд░рд┐рдгрд╛рдо рджреЗрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдЧрд░ рд╣рдо рдкрд╣рд▓реЗ рд╕реЗ рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рд╣рдорд╛рд░рд╛ рдЖрд╡реЗрджрди рдХрд┐рд╕ рдкреНрд░реЛрд╕реЗрд╕рд░ рдкрд░ рдХрд╛рдо рдХрд░реЗрдЧрд╛, рддреЛ рд╣рдо рдЕрдзрд┐рдХ рдЗрд╖реНрдЯрддрдо рддрд░реАрдХрд╛ рдЪреБрди рд╕рдХрддреЗ рд╣реИрдВ - рдпрд╣рд╛рдБ рд╣реИрдмреЗ рдкрд░ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд▓реЗрдЦ рд╣реИред рдореИрдВ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рд┐рдВрдЧрд▓ рдмрд┐рдЯреНрд╕ рдХреА рдЧрд┐рдирддреА рдХрд░рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реВрдВ, рдореИрдВ рдЗрд╕реЗ рдЕрддреНрдпрдзрд┐рдХ рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реВрдВред

рдореИрдВрдиреЗ "рдХрдВрдмрд╛рдЗрдВрдб рдореЗрдердб" рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛

 fun Long.bitCount(): Int { var n = this n -= (n.shr(1)) and 0x5555555555555555L n = ((n.shr(2)) and 0x3333333333333333L) + (n and 0x3333333333333333L) n = ((((n.shr(4)) + n) and 0x0F0F0F0F0F0F0F0FL) * 0x0101010101010101).shr(56) return n.toInt() and 0x7F } 

рддреЛрддреЗ рдХреА рдЧрд┐рдирддреА рдХрд░рдирд╛


рд╕реНрдерд╛рдиреАрдп рдорд╢реАрди рдкрд░ рд╡рд┐рдХрд╛рд╕ рдХреЗ рджреМрд░рд╛рди рд╕рднреА рдорд╛рдкреЛрдВ рдХреЛ рдмреЗрддрд░рддреАрдм рдврдВрдЧ рд╕реЗ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ рдФрд░ рд╕реНрдореГрддрд┐ рд╕реЗ рдкреБрди: рдкреЗрд╢ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдХрд┐рд╕реА рднреА рд╕рдЯреАрдХрддрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдк рдкреНрд░рддреНрдпреЗрдХ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рдЕрдиреБрдорд╛рдирд┐рдд рдпреЛрдЧрджрд╛рди рдХрд╛ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛ рд╕рдХрддреЗ рд╣реИрдВред

рдХреНрдпрд╛ рдХрд┐рдпрд╛рддреЛрддреЗ (рд╕реЗрдХрдВрдб)
рдкрд╣рд▓рд╛ рджреГрд╖реНрдЯрд┐рдХреЛрдг, рднреЛрд▓рд╛25 ┬▒
рджреВрд╕рд░рд╛ рддрд░реАрдХрд╛, рд╣рдо рдкреИрдХ рдХрд░рддреЗ рд╣реИрдВ-
рддреАрд╕рд░рд╛ рджреГрд╖реНрдЯрд┐рдХреЛрдг, рдЙрдк-рдЙрдк рдХреЗ рд╕рд╛рде рдлрд┐рд░ рд╕реЗ рдкреИрдХ11-14
рдЪреМрдерд╛ рджреГрд╖реНрдЯрд┐рдХреЛрдг, рдмрдбрд╝реА рдЫрд▓рдиреА2-3
рдкрд╛рдВрдЪрд╡рд╛рдВ рджреГрд╖реНрдЯрд┐рдХреЛрдг, рдЕрдиреБрдХреНрд░рдо рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛1.8-2.2
рдЫрдард╛ рджреГрд╖реНрдЯрд┐рдХреЛрдг, рд╣рдо рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рдЪрд╛рд╣рддреЗ рдереЗ3-4
рд╕реЗрдЯ рдмрд┐рдЯреНрд╕ рдХреА рдЧрд┐рдирддреА рдХреЗ рд▓рд┐рдП "рд╕рдВрдпреБрдХреНрдд рд╡рд┐рдзрд┐"1.5-1.7

рдирд┐рд╖реНрдХрд░реНрд╖


  • рдмрдбрд╝реА рдорд╛рддреНрд░рд╛ рдореЗрдВ рдбреЗрдЯрд╛ рдХреЗ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп, рдпрд╣ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдкрд░ рд╕рдордп рдмрд┐рддрд╛рдиреЗ рдХреЗ рд▓рд╛рдпрдХ рд╣реИред рд╢рд╛рдпрдж рдЗрд╕ рд╕рднреА рдбреЗрдЯрд╛ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред
  • рдпрджрд┐ рдЖрдк рдореЛрдЯреЗ, рд▓реЗрдХрд┐рди рд╕рд╕реНрддреЗ рдкреНрд░реА-рдлрд┐рд▓реНрдЯрд░рд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдмрд╣реБрдд рдорджрдж рдХрд░ рд╕рдХрддрд╛ рд╣реИред
  • рдмрд┐рдЯ рдЬрд╛рджреВ рд╣рдорд╛рд░рд╛ рд╕рдм рдХреБрдЫ рд╣реИред рдареАрдХ рд╣реИ, рдЬрд╣рд╛рдВ рд▓рд╛рдЧреВ рд╣реЛ, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗред
  • рдорд╛рдирдХ рдХрдХреНрд╖рд╛рдУрдВ рдФрд░ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд╕реНрд░реЛрдд рдХреЛрдб рдХреЛ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХрднреА-рдХрднреА рдмрд╣реБрдд рдЙрдкрдпреЛрдЧреА рд╣реЛрддрд╛ рд╣реИред

рдЖрдкрдХрд╛ рдзреНрдпрд╛рди рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж! :)

рдФрд░ рд╣рд╛рдБ, рдЬрд╛рд░реА рд░рдЦрд╛ рдЬрд╛рдирд╛ рд╣реИред

Source: https://habr.com/ru/post/hi451622/


All Articles