LRU, рдХреИрд╢ рдПрдХреНрд╕рдЯреНрд░реВрдЬрд╝рди рд╡рд┐рдзрд┐

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

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

рдпрд╣реА рд╣реИ, рдЧрдгрдирд╛ рдХреЗ рдкрд░рд┐рдгрд╛рдо рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ, рдЬрд┐рдирдХреЗ рдлрд┐рд░ рд╕реЗ рдЕрдиреБрд░реЛрдз рдХрд┐рдП рдЬрд╛рдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИред
рдЗрди "рд▓реЛрдХрдкреНрд░рд┐рдп" рдкреНрд░рд╢реНрдиреЛрдВ рдХреА рдкрд╣рдЪрд╛рди рдХреИрд╕реЗ рдХрд░реЗрдВ? рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рдЬреНрдЮрд╛рдд рд╡рд┐рдзрд┐ LRU, рдЬреЛ рдореИрдВ рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдЪрд░реНрдЪрд╛ рдХрд░реЗрдВрдЧреЗ рд╣реИред

LRU (рдХрдо рд╕реЗ рдХрдо рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛) рдПрдХ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рд╣реИ рдЬрд┐рд╕рдореЗрдВ рд╕рдмрд╕реЗ рд▓рдВрдмреЗ рд╕рдордп рддрдХ рдирд╣реАрдВ рдорд╛рдВрдЧреЗ рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдореВрд▓реНрдпреЛрдВ рдХреЛ рджрдмрд╛ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рддрджрдиреБрд╕рд╛рд░, рдпрд╣ рдкрд┐рдЫрд▓реЗ рдХреНрд╡реЗрд░реА рдорд╛рди рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИред рдФрд░ рдЬреИрд╕реЗ рд╣реА рдХреИрд╢реНрдб рдорд╛рдиреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ N рд╕реЗ рдЕрдзрд┐рдХ рд╣реЛ рдЬрд╛рддреА рд╣реИ, рдХреИрд╢ рд╕реЗ рдЙрд╕ рдореВрд▓реНрдп рдХреЛ рдмрд╛рд╣рд░ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реЛрддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рд╕рдмрд╕реЗ рд▓рдВрдмреЗ рд╕рдордп рддрдХ рдЕрдиреБрд░реЛрдз рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реЛред

рдЗрд╕ рдкрджреНрдзрддрд┐ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рджреЛ рдбрд╛рдЯрд╛ рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреА рдЬрд░реВрд░рдд рд╣реИ:
  1. Hashtable рд╣реИрд╢ рддрд╛рд▓рд┐рдХрд╛, рдЬреЛ рд╕реАрдзреЗ рдХреИрд╢ рдХреА рдЧрдИ рдореВрд▓реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
  2. рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрддрд╛рд░ рд╕рдордпрдХреНрд╖реЗрддреНрд░ ред рдПрдХ рд╕рдВрд░рдЪрдирд╛ рдЬреЛ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддреА рд╣реИ:
    • рдорд╣рддреНрд╡ рдФрд░ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ timeQueue.Add (рд╡реИрд▓, рдкреНрд░рд╛рдердорд┐рдХрддрд╛) рдХреА рдПрдХ рдЬреЛрдбрд╝реА рдЬреЛрдбрд╝реЗрдВред
    • рдирд┐рдореНрдирддрдо рдкреНрд░рд╛рдердорд┐рдХрддрд╛ timeQueue.extractMinValue () рдХреЗ рд╕рд╛рде рдорд╛рди рдирд┐рдХрд╛рд▓реЗрдВ (рд╣рдЯрд╛рдПрдВ рдФрд░ рд╡рд╛рдкрд╕ рд▓реМрдЯреЗрдВ ) ред
рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрддрд╛рд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдпрд╣рд╛рдБ рдкрдврд╝реЗрдВ ред

рдорд╛рди рд▓реЗрдВ рдХрд┐ рдкреНрд░рд╛рд░рдВрднрд┐рдХ calculate (рдПрдХреНрд╕) рд╡рд┐рдзрд┐ рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдЧрдгрдирд╛ рдХреЗ рд▓рд┐рдПред рд╣рдо рдЧрдгрдирд╛ рдкрджреНрдзрддрд┐ рдХреЛ рдПрдХ рдирдИ рдЧрдгрдирд╛ рдХреЗ рд╕рд╛рде рдмрджрд▓ рджреЗрдВрдЧреЗ, рдЬреЛ рдХреИрд╢ рдХреА рднрд░рдкрд╛рдИ рдХрд░рддрд╛ рд╣реИ, рдкреБрд░рд╛рдиреЗ рдореВрд▓реНрдпреЛрдВ рдХреЛ рдзрдХреЗрд▓рддрд╛ рд╣реИ рдФрд░ рдЧрдгрдирд╛ рд╕реЗ рдкрд░рд┐рдгрд╛рдо рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░рддрд╛ рд╣реИ, рдЕрдЧрд░ рдпрд╣ рдХреИрд╢ рдореЗрдВ рдирд╣реАрдВ рдорд┐рд▓рддрд╛ рд╣реИред

рддреЛ рдпрд╣ calculateWithCache рдХреЗ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рддрд░рд╣ рджрд┐рдЦреЗрдЧрд╛:

calculateWithCache(key) { curTime = getCurrentTime(); //         if (key in hashTable) { //       key timeQueue.set(key, curTime); return hashTable[key]; } //    result = calculate(key); //     N ,     if (hashTable.length == N) { minKey = timeQueue.extractMinValue(); hashTable.remove(minKey); } //   ,    hashTable.add(key, result); timeQueue.add(key, curTime); return result; } 


рд╡рд╣ рд╕рдм рд╣реИред рдЕрдм, рдХреИрд╢ рдлреНрд▓рд╢ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдХреИрд╢ рдЖрдХрд╛рд░ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рдХрд╛рдо рдХреЗ рд▓рд┐рдП рдПрдХ рдЙрдЪрд┐рдд рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдорд╛рди рдХрд╛ рд╕реНрд╡рд╛рдЧрдд рдХрд┐рдпрд╛ред

рдпрджрд┐ рдЖрдк рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрддрд╛рд░ рдХреЗ рдкреНрд░рднрд╛рд╡реА рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдУрд╡рд░рд╣реЗрдб рдХреЛ LRU рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ O (рд▓реЙрдЧ рдПрди) ред

рдорд╛рдирдХ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдореЗрдВ, рдПрдХ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрддрд╛рд░ рдХреЛ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, C ++ рдореЗрдВред рд▓реЗрдХрд┐рди рднрд▓реЗ рд╣реА рдЗрд╕реЗ рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЖрд▓рд╕реА рдХреЛ рдкрдврд╝реЗрдВ, рдЖрдк рдЕрдиреБрдорд╛рди рд▓рдЧрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдПрдХ рд╕рдорд╛рди рдЬрдЯрд┐рд▓рддрд╛ рдХреЗ рд╕рд╛рде рдкреНрд░рд╛рдердорд┐рдХрддрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдХрддрд╛рд░ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдВрддреБрд▓рд┐рдд рдкреЗрдбрд╝ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдереЛрдбрд╝рд╛ рдЕрдзрд┐рдХ рдЧреБрдгрд╛рдВрдХ рдХреЗ рд╕рд╛рдеред

рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд╡рд╛рд▓ рдЬреЛ рдереЛрдбрд╝рд╛ рд╕реЛрдЪрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рд╣реИрд╢ рдЯреЗрдмрд▓ рдСрдкрд░реЗрд╢рди рдХреА рдЬрдЯрд┐рд▓рддрд╛ рд╕реНрдерд┐рд░ рд╣реИ, рдпрд╣ рджреЗрдЦрддреЗ рд╣реБрдП рдПрдХ рдирд┐рд░рдВрддрд░ рдЙрдкрд░рд┐ рдХреИрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ?
рд╕рдВрдХреЗрдд: рдЖрдкрдХреЛ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрддрд╛рд░ рдХреЛ рд╣рдЯрд╛рдиреЗ рдФрд░ рдирд┐рдпрдорд┐рдд рдХрддрд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ :)

рдЖрдк рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдХрд┐рд╕реА рджрд┐рдП рдЧрдП рдХреБрдВрдЬреА рдХреБрдВрдЬреА , рдпрд╛ рдкрд░рд┐рдгрд╛рдо рдХреА рдорд╛рддреНрд░рд╛, рдпрд╛ рдХреБрдЫ рдФрд░ рдХреЗ рд▓рд┐рдП рдЧрдгрдирд╛ рдХреЗ рд╕рдордп рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрддреЗ рд╣реИрдВред
рд▓реЗрдХрд┐рди рдЕрдзрд┐рдХрд╛рдВрд╢ рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ, LRU рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ "рд▓реЛрдХрдкреНрд░рд┐рдп" рдкреНрд░рд╢реНрдиреЛрдВ рдХреЛ рдкрд░реНрдпрд╛рдкреНрдд рд░реВрдк рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИред

рдиреЛрдЯ 1 : рдЖрдк рд╕рдВрдЧреНрд░рд╣реАрдд рдореВрд▓реНрдпреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЗ рдмрдЬрд╛рдп, рдкреНрд░рддрд┐ рдХреИрд╢ рдореЗрдореЛрд░реА рдХреА рдорд╛рддреНрд░рд╛ рдХреЛ рд╕реАрдорд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ рдирд╣реАрдВ рдмрджрд▓реЗрдЧрд╛, рдХреЗрд╡рд▓ рд▓рдВрдмрд╛рдИ рдХреЗ рдмрдЬрд╛рдп рдирдП рдореВрд▓реНрдп рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореЗрдореЛрд░реА + рдореЗрдореЛрд░реА рдкрд░ рдХрдмреНрдЬрд╛ рдХрд░ рд▓рд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рдиреЛрдЯ 2 : рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдмрд╣реБрд╕реНрддрд░реАрдп рдореБрджреНрджреЛрдВ рд╕реЗ рдмрдЪрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЗрд╕ рд▓реЗрдЦ рдХрд╛ рд╡рд┐рд╖рдп рдирд╣реАрдВ рд╣реИред

рдЕрдкрдбреЗрдЯ (рдЯрд┐рдкреНрдкрдгреА рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж ToSHiC22) рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП, рдЬреЛ рдереЛрдбрд╝рд╛ рдФрд░ рдЕрдзрд┐рдХ рдЙрдиреНрдирдд 2Q рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд▓рд┐рдП рдПрдХ рд▓рд┐рдВрдХ рд╣реИ

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


All Articles