Runtime: рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрддрд╛рд░ рдЬреЛрдбрд╝реЗрдВ<t>рд╕рдВрдЧреНрд░рд╣ рдХреЗ рд▓рд┐рдП</t>

рдХреЛ рдирд┐рд░реНрдорд┐рдд 30 рдЬрдире░ 2015  ┬╖  318рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: dotnet/runtime

Corefxlab рд░реЗрдкреЛ рдореЗрдВ рдирд╡реАрдирддрдо рдкреНрд░рд╕реНрддрд╛рд╡ рджреЗрдЦреЗрдВред

рджреВрд╕рд░рд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рд╡рд┐рдХрд▓реНрдк

https://github.com/dotnet/corefx/issues/574#issuecomment -307971397 рд╕реЗ рдкреНрд░рд╕реНрддрд╛рд╡

рдорд╛рдиреНрдпрддрд╛рдУрдВ

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

Queue<T> рдмрд╛рдж рдореЙрдбрд▓рд┐рдВрдЧ рдХреА рдЧрдИ ( MSDN рд▓рд┐рдВрдХ )

рдПрдкреАрдЖрдИ

```рд╕реА#
рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╡рд░реНрдЧ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрддрд╛рд░
: рдЖрдИрдиреЗрдорд░реЗрдмрд▓,
IEnumerable<(TElement рддрддреНрд╡, TP рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдкреНрд░рд╛рдердорд┐рдХрддрд╛)>,
IReadOnlyCollection<(TElement рддрддреНрд╡, TP рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдкреНрд░рд╛рдердорд┐рдХрддрд╛)>
// рдЖрдИрд╕реАрдУрд▓реЗрдХреНрд╢рди рдЙрджреНрджреЗрд╢реНрдп рдкрд░ рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рд╣реИ
{
рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрддрд╛рд░ ();
рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрддрд╛рд░ (IComparer .)рддреБрд▓рдирд╛рдХрд░реНрддрд╛);

public IComparer<TPriority> Comparer { get; }
public int Count { get; }
public bool IsEmpty { get; }

public bool Contains(TElement element);

// Peek & Dequeue
public (TElement element, TPriority priority) Peek(); // Throws if empty
public (TElement element, TPriority priority) Dequeue(); // Throws if empty
public bool TryPeek(out TElement element, out TPriority priority); // Returns false if empty
public bool TryDequeue(out TElement element, out TPriority priority); // Returns false if empty

// Enqueue & Update
public void Enqueue(TElement element, TPriority priority); // Throws if it is duplicate
public void Update(TElement element, TPriority priority); // Throws if element does not exist
public void EnqueueOrUpdate(TElement element, TPriority priority);
public bool TryEnqueue(TElement element, TPriority priority); // Returns false if it is duplicate (does NOT update it)
public bool TryUpdate(TElement element, TPriority priority); // Returns false if element does not exist (does NOT add it)

public void Remove(TElement element); // Throws if element does not exist
public bool TryRemove(TElement element); // Returns false if element does not exist

public void Clear();

public IEnumerator<(TElement element, TPriority priority)> GetEnumerator();
IEnumerator IEnumerable.GetEnumerator();

//
// рдЪрдпрдирдХрд░реНрддрд╛ рднрд╛рдЧ
//
рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрддрд╛рд░ (Func .)рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдЪрдпрдирдХрд░реНрддрд╛);
рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрддрд╛рд░ (Func .)рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдЪрдпрдирдХрд░реНрддрд╛, рдЖрдИрд╕реАрдУрдПрдордкреЗрдпрд░рддреБрд▓рдирд╛рдХрд░реНрддрд╛);

public Func<TElement, TPriority> PrioritySelector { get; }

public void Enqueue(TElement element);
public void Update(TElement element);

}
````

рдкреНрд░рд╢реНрди рдЦреЛрд▓реЗрдВ:

  1. рд╡рд░реНрдЧ рдХрд╛ рдирд╛рдо PriorityQueue рдмрдирд╛рдо Heap
  2. IHeap рдФрд░ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдЕрдзрд┐рднрд╛рд░ рдХрд╛ рдкрд░рд┐рдЪрдп рджреЗрдВ? (рдХреНрдпрд╛ рд╣рдореЗрдВ рдмрд╛рдж рдореЗрдВ рдЗрдВрддрдЬрд╛рд░ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП?)
  3. IPriorityQueue рдкрд░рд┐рдЪрдп рджреЗрдВ? (рдХреНрдпрд╛ рд╣рдореЗрдВ рдмрд╛рдж рдореЗрдВ рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рдиреА рдЪрд╛рд╣рд┐рдП - IDictionary рдЙрджрд╛рд╣рд░рдг)
  4. рдЪрдпрдирдХрд░реНрддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ (рдореВрд▓реНрдп рдХреЗ рдЕрдВрджрд░ рд╕рдВрдЧреНрд░рд╣реАрдд рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрд╛) рдпрд╛ рдирд╣реАрдВ (5 рдПрдкреАрдЖрдИ рдЕрдВрддрд░)
  5. рдЯреБрдкрд▓реНрд╕ рдХрд╛ рдкреНрд░рдпреЛрдЧ рдХрд░реЗрдВ (TElement element, TPriority priority) рдмрдирд╛рдо KeyValuePair<TPriority, TElement>

    • рдХреНрдпрд╛ Peek рдФрд░ Dequeue рдмрдЬрд╛рдп рдЯрдкрд▓ рдХреЗ рдмрдЬрд╛рдп out рддрд░реНрдХ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП?

  6. рдХреНрдпрд╛ Peek рдФрд░ Dequeue рдлреЗрдВрдХрдирд╛ рдЙрдкрдпреЛрдЧреА рд╣реИ?

рдореВрд▓ рдкреНрд░рд╕реНрддрд╛рд╡

рд╕рдорд╕реНрдпрд╛ https://github.com/dotnet/corefx/issues/163 рдиреЗ рдХреЛрд░ .NET рд╕рдВрдЧреНрд░рд╣ рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛рдУрдВ рдореЗрдВ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрддрд╛рд░ рдЬреЛрдбрд╝рдиреЗ рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд┐рдпрд╛ред

рдпрд╣ рдкреЛрд╕реНрдЯ, рдЬрдмрдХрд┐ рдПрдХ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рд╣реИ, рдХрд╛ рдЙрджреНрджреЗрд╢реНрдп corefx API рд╕рдореАрдХреНрд╖рд╛ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдФрдкрдЪрд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдирд╛ рд╣реИред рд╕рдорд╕реНрдпрд╛ рд╕рд╛рдордЧреНрд░реА рдПрдХ рдирдП System.Collections.Generic.PriorityQueue рдХреЗ рд▓рд┐рдП _speclet_ рд╣реИрдВрдкреНрд░рдХрд╛рд░ред

рдордВрдЬреВрд░реА рдорд┐рд▓рдиреЗ рдкрд░ рдореИрдВ рдкреАрдЖрд░ рдореЗрдВ рдпреЛрдЧрджрд╛рди рджреВрдВрдЧрд╛ред

рддрд░реНрдХ рдФрд░ рдЙрдкрдпреЛрдЧ

.NET рдмреЗрд╕ рдХреНрд▓рд╛рд╕ рд▓рд╛рдЗрдмреНрд░реЗрд░реА (рдмреАрд╕реАрдПрд▓) рдореЗрдВ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдСрд░реНрдбрд░ рдХрд┐рдП рдЧрдП рдирд┐рд░реНрдорд╛рддрд╛-рдЙрдкрднреЛрдХреНрддрд╛ рд╕рдВрдЧреНрд░рд╣ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рдХреА рдХрдореА рд╣реИред рдХрдИ рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреА рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╕рдордп рдХреЗ рд╕рд╛рде рд╡рд╕реНрддреБрдУрдВ рдХреА рдПрдХ рд╕реВрдЪреА рддреИрдпрд╛рд░ рдХрд░рдиреЗ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдкреНрд░рд╛рдкреНрдд рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рдХреНрд░рдо рд╕реЗ рдЕрд▓рдЧ рдХреНрд░рдо рдореЗрдВ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рд╣реИред

рд╕рд┐рд╕реНрдЯрдо рдХреЗ рднреАрддрд░ рддреАрди рд╕рд╛рдорд╛рдиреНрдп рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛рдПрдВ рд╣реИрдВред рдирд╛рдорд╕реНрдерд╛рдиреЛрдВ рдХрд╛ рд╕рдВрдЧреНрд░рд╣ рдкрджрд╛рдиреБрдХреНрд░рдо рдЬреЛ рд╡рд╕реНрддреБрдУрдВ рдХреЗ рдХреНрд░рдордмрджреНрдз рд╕рдВрдЧреНрд░рд╣ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ; System.Collections.Generic.SortedList, System.Collections.Generic.SortedSet, рдФрд░ System.Collections.Generic.SortedDictionaryред

рдЗрдирдореЗрдВ рд╕реЗ, SortedSet рдФрд░ SortedDictionary рдирд┐рд░реНрдорд╛рддрд╛-рдЙрдкрднреЛрдХреНрддрд╛ рдкреИрдЯрд░реНрди рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рдирд╣реАрдВ рд╣реИрдВ рдЬреЛ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдорд╛рди рдЙрддреНрдкрдиреНрди рдХрд░рддреЗ рд╣реИрдВред SortedList рдХреА рдЬрдЯрд┐рд▓рддрд╛ рдЬреЛрдбрд╝реЗрдВ рдФрд░ рдирд┐рдХрд╛рд▓реЗрдВ рджреЛрдиреЛрдВ рдХреЗ рд▓рд┐рдП (n) рд╕рдмрд╕реЗ рдЦрд░рд╛рдм рд╕реНрдерд┐рддрд┐ рд╣реИред

рдирд┐рд░реНрдорд╛рддрд╛-рдЙрдкрднреЛрдХреНрддрд╛ рдЙрдкрдпреЛрдЧ рдкреИрдЯрд░реНрди рдХреЗ рд╕рд╛рде рдСрд░реНрдбрд░ рдХрд┐рдП рдЧрдП рд╕рдВрдЧреНрд░рд╣ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рдореЗрдореЛрд░реА рдФрд░ рд╕рдордп рдХреБрд╢рд▓ рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрддрд╛рд░ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдЬрдм рдХреНрд╖рдорддрд╛ рдХрд╛ рдЖрдХрд╛рд░ рдмрджрд▓рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ, рддреЛ рдЦрд░рд╛рдм рдХреЗрд╕ рдЗрдВрд╕рд░реНрд╢рди (рдПрдирдХреНрдпреВ) рдФрд░ рд░рд┐рдореВрд╡ рдЯреЙрдк (рдбреЗрдХреНрдпреВ) рдХрд╛ рдкреНрд░рджрд░реНрд╢рди ╬Ш(рд▓реЙрдЧ рдПрди) рд╣реИ - рдЬреЛ рдмреАрд╕реАрдПрд▓ рдореЗрдВ рдореМрдЬреВрдж рдореМрдЬреВрджрд╛ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдХрд╣реАрдВ рдмреЗрд╣рддрд░ рд╣реИред

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

рдпрд╣ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐ рд╕реА ++ рдорд╛рдирдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдФрд░ рдЬрд╛рд╡рд╛ рджреЛрдиреЛрдВ рдЕрдкрдиреЗ рдореВрд▓ рдПрдкреАрдЖрдИ рдХреЗ рд╣рд┐рд╕реНрд╕реЗ рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрддрд╛рд░ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВред

рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдПрдкреАрдЖрдИ

``` рд╕реА#
рдиреЗрдорд╕реНрдкреЗрд╕ рд╕рд┐рд╕реНрдЯрдо
{
///


/// рдЙрди рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд╕рдВрдЧреНрд░рд╣ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддрд╛ рд╣реИ рдЬрд┐рдиреНрд╣реЗрдВ рдХреНрд░рдордмрджреНрдз рдХреНрд░рдо рдореЗрдВ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
///

///рдХрддрд╛рд░ рдореЗрдВ рддрддреНрд╡реЛрдВ рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддрд╛ рд╣реИред
[рдбреАрдмрдЧрд░ рдбрд┐рд╕реНрдкреНрд▓реЗ ("рдЧрдгрдирд╛ = {рдЧрд┐рдирддреА}")]
[рдбреАрдмрдЧрд░ рдЯрд╛рдЗрдкрдкреНрд░реЙрдХреНрд╕реА (рдЯрд╛рдЗрдкрдСрдлрд╝ (System_PriorityQueueDebugView<>))]
рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╡рд░реНрдЧ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрддрд╛рд░: IEnumerable, ICollection, IEnumerable, IReadOnlyCollection
{
///
/// рдХрд╛ рдПрдХ рдирдпрд╛ рдЙрджрд╛рд╣рд░рдг рдкреНрд░рд╛рд░рдВрдн рдХрд░рддрд╛ рд╣реИ рдХрдХреНрд╖рд╛
/// рдЬреЛ рдПрдХ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рддреБрд▓рдирд╛рдХрд░реНрддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред
///

рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрддрд╛рд░ ();

    /// <summary>
    /// Initializes a new instance of the <see cref="PriorityQueue{T}"/> class 
    /// that has the specified initial capacity.
    /// </summary>
    /// <param name="capacity">The initial number of elements that the <see cref="PriorityQueue{T}"/> can contain.</param>
    /// <exception cref="T:System.ArgumentOutOfRangeException"><paramref name="capacity"/> is less than zero.</exception>
    public PriorityQueue(int capacity);

    /// <summary>
    /// Initializes a new instance of the <see cref="PriorityQueue{T}"/> class 
    /// that uses a specified comparer.
    /// </summary>
    /// <param name="comparer">The <see cref="T:System.Collections.Generic.IComparer{T}"/> to use when comparing elements.</param>
    /// <exception cref="T:System.ArgumentNullException"><paramref name="comparer"/> is null.</exception>
    public PriorityQueue(IComparer<T> comparer);

    /// <summary>
    /// Initializes a new instance of the <see cref="PriorityQueue{T}"/> class 
    /// that contains elements copied from the specified collection and uses a default comparer.
    /// </summary>
    /// <param name="collection">The collection whose elements are copied to the new <see cref="PriorityQueue{T}"/>.</param>
    /// <exception cref="T:System.ArgumentNullException"><paramref name="collection"/> is null.</exception>
    public PriorityQueue(IEnumerable<T> collection);

    /// <summary>
    /// Initializes a new instance of the <see cref="PriorityQueue{T}"/> class 
    /// that contains elements copied from the specified collection and uses a specified comparer.
    /// </summary>
    /// <param name="collection">The collection whose elements are copied to the new <see cref="PriorityQueue{T}"/>.</param>
    /// <param name="comparer">The <see cref="T:System.Collections.Generic.IComparer{T}"/> to use when comparing elements.</param>
    /// <exception cref="T:System.ArgumentNullException">
    /// <paramref name="collection"/> is null. -or-
    /// <paramref name="comparer"/> is null.
    /// </exception>
    public PriorityQueue(IEnumerable<T> collection, IComparer<T> comparer);

    /// <summary>
    /// Initializes a new instance of the <see cref="PriorityQueue{T}"/> class that is empty,
    /// has the specified initial capacity, and uses a specified comparer.
    /// </summary>
    /// <param name="capacity">The initial number of elements that the <see cref="PriorityQueue{T}"/> can contain.</param>
    /// <param name="comparer">The <see cref="T:System.Collections.Generic.IComparer{T}"/> to use when comparing elements.</param>
    /// <exception cref="T:System.ArgumentOutOfRangeException"><paramref name="capacity"/> is less than zero.</exception>
    /// <exception cref="T:System.ArgumentNullException"><paramref name="comparer"/> is null.</exception>
    public PriorityQueue(int capacity, IComparer<T> comparer);

    /// <summary>
    /// Gets the <see cref="IComparer{T}"/> for the <see cref="PriorityQueue{T}"/>. 
    /// </summary>
    /// <value>
    /// The <see cref="T:System.Collections.Generic.IComparer{T}"/> that is used when
    /// comparing elements in the <see cref="PriorityQueue{T}"/>. 
    /// </value>
    public IComparer<T> Comparer 
    { 
        get;
    }

    /// <summary>
    /// Gets the number of elements contained in the <see cref="PriorityQueue{T}"/>.
    /// </summary>
    /// <value>The number of elements contained in the <see cref="PriorityQueue{T}"/>.</value>
    public int Count 
    { 
        get;
    }

    /// <summary>
    /// Adds an object to the into the <see cref="PriorityQueue{T}"/> by its priority.
    /// </summary>
    /// <param name="item">
    /// The object to add to the <see cref="PriorityQueue{T}"/>. 
    /// The value can be null for reference types.
    /// </param>
    public void Enqueue(T item);

    /// <summary>
    /// Removes and returns the object with the lowest priority in the <see cref="PriorityQueue{T}"/>.
    /// </summary>
    /// <returns>The object with the lowest priority that is removed from the <see cref="PriorityQueue{T}"/>.</returns>
    /// <exception cref="InvalidOperationException">The <see cref="PriorityQueue{T}"/> is empty.</exception>
    public T Dequeue();

    /// <summary>
    /// Returns the object with the lowest priority in the <see cref="PriorityQueue{T}"/>.
    /// </summary>
    /// <exception cref="InvalidOperationException">The <see cref="PriorityQueue{T}"/> is empty.</exception>
    public T Peek();

    /// <summary>
    /// Removes all elements from the <see cref="PriorityQueue{T}"/>.
    /// </summary>
    public void Clear();

    /// <summary>
    /// Determines whether an element is in the <see cref="PriorityQueue{T}"/>.
    /// </summary>
    /// <param name="item">
    /// The object to add to the end of the <see cref="PriorityQueue{T}"/>. 
    /// The value can be null for reference types.
    /// </param>
    /// <returns>
    /// true if item is found in the <see cref="PriorityQueue{T}"/>;  otherwise, false.
    /// </returns>
    public bool Contains(T item);

    /// <summary>
    /// Copies the elements of the <see cref="PriorityQueue{T}"/> to an  <see cref="T:System.Array"/>, 
    /// starting at a particular <see cref="T:System.Array"/> index.
    /// </summary>
    /// <param name="array">
    /// The one-dimensional <see cref="T:System.Array">Array</see> that is the
    /// destination of the elements copied from the <see cref="PriorityQueue{T}"/>. 
    /// The <see cref="T:System.Array">Array</see> must have zero-based indexing.
    /// </param>
    /// <param name="arrayIndex">The zero-based index in <paramref name="array"/> at which copying begins.</param>
    /// <exception cref="T:System.ArgumentNullException"><paramref name="array"/> is null.</exception>
    /// <exception cref="T:System.ArgumentOutOfRangeException">
    /// <paramref name="arrayIndex"/> is less than zero. -or- 
    /// <paramref name="arrayIndex"/> is equal to or greater than the length of the <paramref name="array"/>
    /// </exception>
    /// <exception cref="ArgumentException">
    /// The number of elements in the source <see cref="T:System.Collections.ICollection"/> is
    /// greater than the available space from <paramref name="index"/> to the end of the destination
    /// <paramref name="array"/>.
    /// </exception>
    public void CopyTo(T[] array, int arrayIndex);

    /// <summary>
    /// Copies the elements of the <see cref="T:System.Collections.ICollection"/> to an 
    /// <see cref="T:System.Array"/>, starting at a particular <see cref="T:System.Array"/> index.
    /// </summary>
    /// <param name="array">
    /// The one-dimensional <see cref="T:System.Array">Array</see> that is the
    /// destination of the elements copied from the <see cref="PriorityQueue{T}"/>. 
    /// The <see cref="T:System.Array">Array</see> must have zero-based indexing.
    /// </param>
    /// <param name="index">The zero-based index in <paramref name="array"/> at which copying begins.</param>
    /// <exception cref="T:System.ArgumentNullException"><paramref name="array"/> is null.</exception>
    /// <exception cref="T:System.ArgumentOutOfRangeException"><paramref name="index"/> is less than zero.</exception>
    /// <exception cref="ArgumentException">
    /// <paramref name="array"/> is multidimensional. -or-
    /// <paramref name="array"/> does not have zero-based indexing. -or-
    /// <paramref name="index"/> is equal to or greater than the length of the <paramref name="array"/> -or- 
    /// The number of elements in the source <see cref="T:System.Collections.ICollection"/> is
    /// greater than the available space from <paramref name="index"/> to the end of the destination
    /// <paramref name="array"/>. -or- 
    /// The type of the source <see cref="T:System.Collections.ICollection"/> cannot be cast automatically 
    /// to the type of the destination <paramref name="array"/>.
    /// </exception>
    void ICollection.CopyTo(Array array, int index);

    /// <summary>
    /// Copies the elements stored in the <see cref="PriorityQueue{T}"/> to a new array.
    /// </summary>
    /// <returns>
    /// A new array containing a snapshot of elements copied from the <see cref="PriorityQueue{T}"/>.
    /// </returns>
    public T[] ToArray();

    /// <summary>
    /// Returns an enumerator that iterates through the <see cref="PriorityQueue{T}"/>
    /// </summary>
    /// <returns>An enumerator for the contents of the <see cref="PriorityQueue{T}"/>.</returns>
    public Enumerator GetEnumerator();

    /// <summary>
    /// Returns an enumerator that iterates through the <see cref="PriorityQueue{T}"/>
    /// </summary>
    /// <returns>An enumerator for the contents of the <see cref="PriorityQueue{T}"/>.</returns>
    IEnumerator<T> IEnumerable<T>.GetEnumerator();

    /// <summary>
    /// Returns an enumerator that iterates through the <see cref="PriorityQueue{T}"/>.
    /// </summary>
    /// <returns>An <see cref="T:System.Collections.IEnumerator"/> that can be used to iterate through the collection.</returns>
    IEnumerator IEnumerable.GetEnumerator();

    /// <summary>
    /// Sets the capacity to the actual number of elements in the <see cref="PriorityQueue{T}"/>, 
    /// if that number is less than than a threshold value.
    /// </summary>
    public void TrimExcess();

    /// <summary>
    /// Gets a value that indicates whether access to the <see cref="ICollection"/> is 
    /// synchronized with the SyncRoot.
    /// </summary>
    /// <value>true if access to the <see cref="T:System.Collections.ICollection"/> is synchronized
    /// with the SyncRoot; otherwise, false. For <see cref="PriorityQueue{T}"/>, this property always
    /// returns false.</value>
    bool ICollection.IsSynchronized
    {
        get;
    }

    /// <summary>
    /// Gets an object that can be used to synchronize access to the 
    /// <see cref="T:System.Collections.ICollection"/>.
    /// </summary>
    /// <value>
    /// An object that can be used to synchronize access to the 
    /// <see cref="T:System.Collections.ICollection"/>.
    /// </value>
    object ICollection.SyncRoot
    {
        get;
    }

    public struct Enumerator : IEnumerator<T>
    {
        public T Current { get; }
        object IEnumerator.Current { get; }
        public bool MoveNext();
        public void Reset();
        public void Dispose();
    }
}

}
```

рд╡рд┐рд╡рд░рдг

  • рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛ рдПрдХ рджреНрд╡рд┐рдЖрдзрд╛рд░реА рдвреЗрд░ рд╣реЛрдЧреАред рдЕрдзрд┐рдХ рддреБрд▓рдирд╛ рдореВрд▓реНрдп рд╡рд╛рд▓реЗ рдЖрдЗрдЯрдо рдкрд╣рд▓реЗ рд▓реМрдЯрд╛рдП рдЬрд╛рдПрдВрдЧреЗред (рдШрдЯрддреЗ рдХреНрд░рдо рдореЗрдВ)
  • рд╕рдордп рдХреА рдЬрдЯрд┐рд▓рддрд╛рдПрдВ:

| рдСрдкрд░реЗрд╢рди | рдЬрдЯрд┐рд▓рддрд╛ | рдиреЛрдЯреНрд╕ |
| --- | --- | --- |
| рдирд┐рд░реНрдорд╛рдг | (1) | |
| IEnumerable рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХрд░реЗрдВ | (рдПрди) | |
| рдПрдирдХреНрдпреВ | (рд▓реЙрдЧ рдПрди) | |
| Dequeue | (рд▓реЙрдЧ рдПрди) | |
| рдкреАрдХ | (1) | |
| рдЧрдгрдирд╛ | (1) | |
| рд╕рд╛рдлрд╝ | (рдПрди) | |
| рд╢рд╛рдорд┐рд▓ рд╣реИ | (рдПрди) | |
| рдХреЙрдкреА рдЯреВ | (рдПрди) | Array.Copy рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЬрдЯрд┐рд▓рддрд╛ рдХрдо рд╣реЛ рд╕рдХрддреА рд╣реИ |
| ToArray | (рдПрди) | Array.Copy рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЬрдЯрд┐рд▓рддрд╛ рдХрдо рд╣реЛ рд╕рдХрддреА рд╣реИ |
| GetEnumerator | (1) | |
| рдПрдиреНрдпреВрдорд░реЗрдЯрд░.рдореВрд╡рдиреЗрдХреНрд╕реНрдЯ | (1) | |

  • рдЕрддрд┐рд░рд┐рдХреНрдд рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдУрд╡рд░рд▓реЛрдб рдЬреЛ рд╕рд┐рд╕реНрдЯрдо рд▓реЗрддреЗ рд╣реИрдВред рддреБрд▓рдирд╛рдкреНрд░рддрд┐рдирд┐рдзрд┐ рдХреЛ рдЬрд╛рдирдмреВрдЭрдХрд░ рд╕рд░рд▓реАрдХреГрдд рдПрдкреАрдЖрдИ рд╕рддрд╣ рдХреНрд╖реЗрддреНрд░ рдХреЗ рдкрдХреНрд╖ рдореЗрдВ рдЫреЛрдбрд╝ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдХреЙрд▓ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рддреБрд▓рдирд┐рддреНрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ.рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдпрд╛ рд▓реИрдореНрдмреНрдбрд╛ рдПрдХреНрд╕рдкреНрд░реЗрд╢рди рдХреЛ рдПрдХ рдЖрдИрд╕реАрдУрдПрдордкреЗрдпрд░ рдореЗрдВ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдирд╛рдПрдВрдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ рддреЛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ред рдЗрд╕рдХреЗ рд▓рд┐рдП рдХреЙрд▓рд░ рдХреЛ рдПрдХ рдмрд╛рд░ рдвреЗрд░ рдЖрд╡рдВрдЯрди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред
  • рд╣рд╛рд▓рд╛рдВрдХрд┐ System.Collections.Generic рдЕрднреА рддрдХ corefx рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рдирд╣реАрдВ рд╣реИ, рдореЗрд░рд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рд╣реИ рдХрд┐ рдЗрд╕ рджреМрд░рд╛рди рдЗрд╕ рд╡рд░реНрдЧ рдХреЛ corefxlab рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рдПред рдПрдХ рдмрд╛рд░ System.Collections.Generic рдЬреЛрдбрд╝реЗ рдЬрд╛рдиреЗ рдХреЗ рдмрд╛рдж рдЗрд╕реЗ рдкреНрд░рд╛рдердорд┐рдХ corefx рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ рд▓реЗ рдЬрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдЖрдо рд╕рд╣рдорддрд┐ рд╣реИ рдХрд┐ рдЗрд╕рдХреА рд╕реНрдерд┐рддрд┐ рдХреЛ рдкреНрд░рдпреЛрдЧрд╛рддреНрдордХ рд╕реЗ рдПрдХ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ API рддрдХ рдмрдврд╝рд╛рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред
  • рдПрдХ IsEmpty рд╕рдВрдкрддреНрддрд┐ рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рдереА, рдХреНрдпреЛрдВрдХрд┐ рдХреЛрдИ рдЕрддрд┐рд░рд┐рдХреНрдд рдкреНрд░рджрд░реНрд╢рди рджрдВрдб рдХреЙрд▓рд┐рдВрдЧ рдЧрдгрдирд╛ рдирд╣реАрдВ рд╣реИред рдЕрдзрд┐рдХрд╛рдВрд╢ рд╕рдВрдЧреНрд░рд╣ рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛рдУрдВ рдореЗрдВ IsEmpty рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рд╣реИред
  • ICollection рдХреЗ IsSynchronized рдФрд░ SyncRoot рдЧреБрдг рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдП рдЧрдП рдереЗ рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рдкреНрд░рднрд╛рд╡реА рд░реВрдк рд╕реЗ рдЕрдкреНрд░рдЪрд▓рд┐рдд рд╣реИрдВред рдпрд╣ рдЕрдиреНрдп System.Collection.Generic рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЧрдП рдкреИрдЯрд░реНрди рдХрд╛ рднреА рдЕрдиреБрд╕рд░рдг рдХрд░рддрд╛ рд╣реИред
  • рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд╕реНрдерд╛рдкрд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░ рд╕реЗ рдореЗрд▓ рдЦрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрддрд╛рд░ рдЦрд╛рд▓реА рд╣реЛрдиреЗ рдкрд░ Dequeue рдФрд░ Peek рдПрдХ InvalidOperationException рдлреЗрдВрдХ рджреЗрддреЗ рд╣реИрдВред.
  • IProducerConsumerCollectionрд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдХреЗ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдореЗрдВ рдХрд╣рд╛ рдЧрдпрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХреЗрд╡рд▓ рдереНрд░реЗрдб-рд╕реБрд░рдХреНрд╖рд┐рдд рд╕рдВрдЧреНрд░рд╣ рдХреЗ рд▓рд┐рдП рд╣реИред

рдкреНрд░рд╢реНрди рдЦреЛрд▓реЗрдВ

  • рдиреЗрд╕реНрдЯреЗрдб рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдПрдиреНрдпреВрдорд░реЗрдЯрд░ рд╕рдВрд░рдЪрдирд╛ рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдордЬрдмреВрдд рдкрд░реНрдпрд╛рдкреНрдд рддрд░реНрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп GetEnumerator рдХреЛ рдХреЙрд▓ рдХреЗ рджреМрд░рд╛рди рдЕрддрд┐рд░рд┐рдХреНрдд рдвреЗрд░ рдЖрд╡рдВрдЯрди рд╕реЗ рдкрд░рд╣реЗрдЬ рдХрд░ рд░рд╣рд╛ рд╣реИ?
  • рдХреНрдпрд╛ CopyTo, ToArray, рдФрд░ GetEnumerator рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЛ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ (рдХреНрд░рдордмрджреНрдз) рдХреНрд░рдо рдореЗрдВ, рдпрд╛ рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛ рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдЖрдВрддрд░рд┐рдХ рдХреНрд░рдо рдореЗрдВ рд▓реМрдЯрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП? рдореЗрд░реА рдзрд╛рд░рдгрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдЖрдВрддрд░рд┐рдХ рдЖрджреЗрд╢ рд╡рд╛рдкрд╕ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдореЗрдВ рдХреЛрдИ рдЕрддрд┐рд░рд┐рдХреНрдд рдкреНрд░рджрд░реНрд╢рди рджрдВрдб рдирд╣реАрдВ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрд╣ рдПрдХ рд╕рдВрднрд╛рд╡рд┐рдд рдЙрдкрдпреЛрдЧрд┐рддрд╛ рд╕рдорд╕реНрдпрд╛ рд╣реИ рдпрджрд┐ рдХреЛрдИ рдбреЗрд╡рд▓рдкрд░ рдХрдХреНрд╖рд╛ рдХреЛ "рдХреНрд░рдордмрджреНрдз рдХрддрд╛рд░" рдХреЗ рдмрдЬрд╛рдп рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрддрд╛рд░ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реЛрдЪрддрд╛ рд╣реИред
  • рдХреНрдпрд╛ System.Collections.Generic рдореЗрдВ рдкреНрд░рд╛рдпреЛрд░рд┐рдЯреА рдХреНрдпреВ рдирд╛рдо рдХрд╛ рдПрдХ рдкреНрд░рдХрд╛рд░ рдЬреЛрдбрд╝рдиреЗ рд╕реЗ рд╕рдВрднрд╛рд╡рд┐рдд рд░реВрдк рд╕реЗ рдмреНрд░реЗрдХрд┐рдВрдЧ рдкрд░рд┐рд╡рд░реНрддрди рд╣реЛрддрд╛ рд╣реИ? рдиреЗрдорд╕реНрдкреЗрд╕ рдХрд╛ рдЕрддреНрдпрдзрд┐рдХ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдЙрди рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЗ рд▓рд┐рдП рд╕реНрд░реЛрдд рд╕рдВрдЧрддрддрд╛ рд╕рдорд╕реНрдпрд╛ рдкреИрджрд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдЬрд┐рдирдореЗрдВ рдЙрдирдХреА рдЕрдкрдиреА рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрддрд╛рд░ рдкреНрд░рдХрд╛рд░ рд╢рд╛рдорд┐рд▓ рд╣реИред
  • рдХреНрдпрд╛ рдЖрдИрд╕реАрдУрдПрдордкреЗрдпрд░ рдХреЗ рдЖрдЙрдЯрдкреБрдЯ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдЖрд░реЛрд╣реА рдпрд╛ рдЕрд╡рд░реЛрд╣реА рдХреНрд░рдо рдореЗрдВ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП? (рдореЗрд░реА рдзрд╛рд░рдгрд╛ рдЖрдИрд╕реАрдУрдПрдордкреЗрдпрд░ рдХреЗ рд╕рд╛рдорд╛рдиреНрдп рд╕реЙрд░реНрдЯрд┐рдВрдЧ рд╕рдореНрдореЗрд▓рди рд╕реЗ рдореЗрд▓ рдЦрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд░реЛрд╣реА рдХреНрд░рдо рд╣реИ)
  • рдХреНрдпрд╛ рд╕рдВрдЧреНрд░рд╣ 'рд╕реНрдерд┐рд░' рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП? рджреВрд╕рд░реЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ, рд╕рдорд╛рди IComparison рд╡рд╛рд▓реЗ рджреЛ рдЖрдЗрдЯрдо рд╣реЛрдиреЗ рдЪрд╛рд╣рд┐рдПрдкрд░рд┐рдгрд╛рдо рдареАрдХ рдЙрд╕реА рдХреНрд░рдо рдореЗрдВ рд╣рдЯрд╛рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рд╕ рдХреНрд░рдо рдореЗрдВ рд╡реЗ рдХрддрд╛рд░рдмрджреНрдз рд╣реИрдВ? (рдореЗрд░реА рдзрд╛рд░рдгрд╛ рд╣реИ рдХрд┐ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ)

    рдЕрдкрдбреЗрдЯ

  • (n) рд╕реЗ 'IEnumerable рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдирд┐рд░реНрдорд╛рдг' рдХреА рдирд┐рд╢реНрдЪрд┐рдд рдЬрдЯрд┐рд▓рддрд╛ред рдзрдиреНрдпрд╡рд╛рдж @svickред

  • IComparer рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрддрд╛рд░ рдХреЛ рдЖрд░реЛрд╣реА рдпрд╛ рдЕрд╡рд░реЛрд╣реА рдХреНрд░рдо рдореЗрдВ рдХреНрд░рдордмрджреНрдз рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдпрд╛ рдирд╣реАрдВ, рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рдФрд░ рд╡рд┐рдХрд▓реНрдк рдкреНрд░рд╢реНрди рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛.
  • рдирдП рдкреИрдЯрд░реНрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп рдЕрдиреНрдп System.Collection.Generic рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рд╕реЗ рдореЗрд▓ рдЦрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрдкрд╖реНрдЯ SyncRoot рдЧреБрдг рд╕реЗ NotSupportedException рдХреЛ рд╣рдЯрд╛ рджрд┐рдпрд╛ред
  • рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ GetEnumerator рд╡рд┐рдзрд┐ рдХреЛ IEnumerable рдХреЗ рдмрдЬрд╛рдп рдиреЗрд╕реНрдЯреЗрдб рдПрдиреНрдпреВрдорд░реЗрдЯрд░ рд╕реНрдЯреНрд░рдХреНрдЪрд░ рд▓реМрдЯрд╛рдПрдВ, рдореМрдЬреВрджрд╛ System.Collections.Generic рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд╕рдорд╛рдиред рдлрд╝реЛрд░реИрдЪ рд▓реВрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рдвреЗрд░ (рдЬреАрд╕реА) рдЖрд╡рдВрдЯрди рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣ рдПрдХ рдЕрдиреБрдХреВрд▓рди рд╣реИред
  • ComVisible рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣рдЯрд╛рдИ рдЧрдИред
  • рдХреНрд▓рд┐рдпрд░ рдХреА рдЬрдЯрд┐рд▓рддрд╛ рдХреЛ ╬Ш(n) рдореЗрдВ рдмрджрд▓ рджрд┐рдпрд╛ред рдзрдиреНрдпрд╡рд╛рдж @mbeidlerред
api-needs-work area-System.Collections wishlist

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

рд▓реЗрдЯрдХреЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдвреЗрд░ рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛ рдПрдХ рдЬрд░реВрд░реА рд╣реИ
рдЕрдзрд┐рдХ рд▓реЗрдЯрдХреЛрдб, рдЕрдзрд┐рдХ рд╕реА # рдХреЛрдб рд╕рд╛рдХреНрд╖рд╛рддреНрдХрд╛рд░ рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдЕрдзрд┐рдХ рд╕реА # рдбреЗрд╡рд▓рдкрд░реНрд╕ред
рдЕрдзрд┐рдХ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХрд╛ рдЕрд░реНрде рд╣реИ рдмреЗрд╣рддрд░ рдкрд╛рд░рд┐рд╕реНрдерд┐рддрд┐рдХреА рддрдВрддреНрд░ред
рдмреЗрд╣рддрд░ рдкрд╛рд░рд┐рд╕реНрдерд┐рддрд┐рдХреА рддрдВрддреНрд░ рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдЕрдЧрд░ рд╣рдо рдХрд▓ рднреА рд╕реА # рдореЗрдВ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ: рдпрд╣ рди рдХреЗрд╡рд▓ рдПрдХ рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реИ, рдмрд▓реНрдХрд┐ рднрд╡рд┐рд╖реНрдп рднреА рд╣реИред рдЗрд╕рд▓рд┐рдП рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ 'рднрд╡рд┐рд╖реНрдп' рдХрд╛ рд▓реЗрдмрд▓ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

рд╕рднреА 318 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

| рдСрдкрд░реЗрд╢рди | рдЬрдЯрд┐рд▓рддрд╛ |
| --- | --- |
| IEnumerable рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХрд░реЗрдВ | (рд▓реЙрдЧ рдПрди) |

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ ╬Ш (рдПрди) рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдЖрдкрдХреЛ рдХрдо рд╕реЗ рдХрдо рдЗрдирдкреБрдЯ рдХреЛ рдлрд┐рд░ рд╕реЗ рдЪрд╛рд▓реВ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

+1

Rx рдореЗрдВ рдЕрддреНрдпрдзрд┐рдХ рдЙрддреНрдкрд╛рджрди-рдкрд░реАрдХреНрд╖рдг рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрддрд╛рд░ рд╡рд░реНрдЧ рд╣реИ:

https://github.com/Reactive-Extensions/Rx.NET/blob/master/Rx.NET/Source/System.Reactive.Core/Reactive/Internal/PriorityQueue.cs

рдХреНрдпрд╛ GetEnumerator рдХреЛ рдХреЙрд▓ рдХреЗ рджреМрд░рд╛рди рдФрд░ foreach рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рдЕрддрд┐рд░рд┐рдХреНрдд рдвреЗрд░ рдЖрд╡рдВрдЯрди рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдиреЗрд╕реНрдЯреЗрдб рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдПрдиреНрдпреВрдорд░реЗрдЯрд░ рд╕рдВрд░рдЪрдирд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП? рдореЗрд░реА рдзрд╛рд░рдгрд╛ рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдПрдХ рдХрддрд╛рд░ рдореЗрдВ рдЧрдгрдирд╛ рдХрд░рдирд╛ рдПрдХ рдЕрд╕рд╛рдорд╛рдиреНрдп рдСрдкрд░реЗрд╢рди рд╣реИред

рдореИрдВ Queue<T> рдЕрдиреБрд░реВрдк рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрдЯреНрд░рдХреНрдЪрд░ рдПрдиреНрдпреВрдорд░реЗрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдУрд░ рдЭреБрдХрддрд╛ рд╣реВрдВ рдЬреЛ рдПрдХ рд╕реНрдЯреНрд░рдХреНрдЪрд░ рдПрдиреНрдпреВрдорд░реЗрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рд╕рд╛рде рд╣реА, рдпрджрд┐ рдХрд┐рд╕реА рд╕реНрдЯреНрд░рдХреНрдЪрд░ рдПрдиреНрдпреВрдорд░реЗрдЯрд░ рдХрд╛ рдЕрднреА рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд╣рдо рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдХрд┐рд╕реА рдПрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП PriorityQueue<T> рдХреЛ рдмрджрд▓рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдирд╣реАрдВ рд╣реЛрдВрдЧреЗред

рдмреИрдЪ рдЖрд╡реЗрд╖рдг рдХреЗ рд▓рд┐рдП рднреА рд╢рд╛рдпрдж рдПрдХ рд╡рд┐рдзрд┐? рд╢реБрд░реБрдЖрдд рдореЗрдВ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп рдкрд┐рдЫрд▓реЗ рд╕рдореНрдорд┐рд▓рди рдмрд┐рдВрджреБ рд╕реЗ рд╣рдореЗрд╢рд╛ рд╕реЙрд░реНрдЯ рдФрд░ рдЬрд╛рд░реА рд░рдЦ рд╕рдХрддреЗ рд╣реИрдВ рдпрджрд┐ рдЗрд╕рд╕реЗ рдорджрдж рдорд┐рд▓реЗрдЧреА ?:

    public void Enqueue(List<T> items) {
         items.Sort(_comparer);
         ... insertions ...
    }

рдореИрдВрдиреЗ рдпрд╣рд╛рдВ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреА рдПрдХ рдкреНрд░рддрд┐ рдлреЗрдВрдХ рджреА

рдардВрдбрд╛ред рдХреБрдЫ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛:

  • Queue<T>.Enumerator IEnumerator.Reset рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ PriorityQueue<T>.Enumerator рдРрд╕рд╛ рд╣реА рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП?
  • Queue<T>.Enumerator _index == -2 рдпрд╣ рдЗрдВрдЧрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП PriorityQueue<T>.Enumerator рдореЗрдВ рдПрдХ рд╣реА рдЯрд┐рдкреНрдкрдгреА рд╣реИ рд▓реЗрдХрд┐рди рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд _disposed рдлрд╝реАрд▓реНрдб рд╣реИред рдЕрддрд┐рд░рд┐рдХреНрдд _disposed рдлрд╝реАрд▓реНрдб рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ рдФрд░ рдпрд╣ рдЗрдВрдЧрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП _index == -2 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ рдХрд┐ рд╕рдВрд░рдЪрдирд╛ рдХреЛ рдЫреЛрдЯрд╛ рдмрдирд╛рдиреЗ рдФрд░ Queue<T> рдЕрдиреБрд░реВрдк рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕рдХрд╛ рдирд┐рдкрдЯрд╛рди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ
  • рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╕реНрдерд┐рд░ _emptyArray рдлрд╝реАрд▓реНрдб рдХреЛ рд╣рдЯрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдЙрдкрдпреЛрдЧ рдХреЛ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп Array.Empty<T>() рдмрджрд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рднреА...

  • рдЕрдиреНрдп рд╕рдВрдЧреНрд░рд╣ рдЬреЛ рдПрдХ рддреБрд▓рдирд╛рдХрд░реНрддрд╛ рд▓реЗрддреЗ рд╣реИрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП Dictionary<TKey, TValue> , HashSet<T> , SortedList<TKey, TValue> , SortedDictionary<TKey, TValue> , SortedSet<T> , рдЖрджрд┐) рд╢реВрдиреНрдп рд╣реЛрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВ рддреБрд▓рдирд╛рдХрд░реНрддрд╛ рдХреЗ рд▓рд┐рдП рдкрд╛рд╕ рдХрд┐рдпрд╛ рдЧрдпрд╛, рдЬрд┐рд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ Comparer<T>.Default рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рднреА...

  • ToArray рдХреЛ рдирдИ рд╕рд░рдгреА рдЖрд╡рдВрдЯрд┐рдд рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ _size == 0 рдЬрд╛рдВрдЪ рдХрд░рдХреЗ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдмрд╕ Array.Empty<T>() рд▓реМрдЯрд╛рдПрдВред

@justinvp рдмрдврд╝рд┐рдпрд╛ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛, рдзрдиреНрдпрд╡рд╛рдж!

  • рдореИрдВрдиреЗ рдПрдиреНрдпреВрдорд░реЗрдЯрд░ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд░реАрд╕реЗрдЯ рдХрд░реЗрдВ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдПрдХ рдЧрдгрдХ рдХреА рдореВрд▓, рдЧреИрд░-рдкрджрд╛рд╡рдирдд рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рд╣реИред рдпрд╣ рдЙрдЬрд╛рдЧрд░ рд╣реБрдЖ рд╣реИ рдпрд╛ рдирд╣реАрдВ, рд╕рдВрдЧреНрд░рд╣ рдкреНрд░рдХрд╛рд░реЛрдВ рдореЗрдВ рдЕрд╕рдВрдЧрдд рд▓рдЧрддрд╛ рд╣реИ, рдФрд░ рдХреЗрд╡рд▓ рдХреБрдЫ рд╣реА рд╕реНрдкрд╖реНрдЯ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред
  • _index рдХреЗ рдкрдХреНрд╖ рдореЗрдВ _disposed рдлрд╝реАрд▓реНрдб рдХреЛ рд╣рдЯрд╛ рджрд┐рдпрд╛, рдзрдиреНрдпрд╡рд╛рдж! рдЙрд╕ рд░рд╛рдд рдЖрдЦрд┐рд░реА рдорд┐рдирдЯ рдореЗрдВ рдлреЗрдВрдХ рджрд┐рдпрд╛ рдФрд░ рд╕реНрдкрд╖реНрдЯ рдЪреВрдХ рдЧрдпрд╛ред ObjectDisposedException рдХреЛ рдирдП рд╕рдВрдЧреНрд░рд╣ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд╕рд╛рде рд╢реБрджреНрдзрддрд╛ рдХреЗ рд▓рд┐рдП рд░рдЦрдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛, рднрд▓реЗ рд╣реА рдкреБрд░рд╛рдиреЗ System.Collections.Generic рдкреНрд░рдХрд╛рд░ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред
  • рд╕рд░рдгреАред рдЦрд╛рд▓реАрдПрдХ рдПрдл # рд╕реБрд╡рд┐рдзрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рджреБрдЦ рдХреА рдмрд╛рдд рд╣реИ рдХрд┐ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдпрд╣рд╛рдВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ!
  • рдЕрд╢рдХреНрдд, рдЕрдЪреНрдЫреА рдЦреЛрдЬ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддреБрд▓рдирд┐рддреНрд░ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд┐рдпрд╛!
  • ToArray рдЕрдиреБрдХреВрд▓рди рдореБрд╢реНрдХрд┐рд▓ рд╣реИред _рддрдХрдиреАрдХреА рд░реВрдк рд╕реЗ_ рдмреЛрд▓рдиреЗ рд╡рд╛рд▓реЗ рд╕рд░рдгрд┐рдпрд╛рдБ C# рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрдирд╢реАрд▓ рд╣реЛрддреА рд╣реИрдВ, рднрд▓реЗ рд╣реА рдЙрдирдХреА рд▓рдВрдмрд╛рдИ рд╢реВрдиреНрдп рд╣реЛред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЖрдк рд╕рд╣реА рд╣реИрдВ, рдЖрд╡рдВрдЯрди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ рдФрд░ рдЗрд╕реЗ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдореИрдВ рдЕрдзрд┐рдХ рд╕рддрд░реНрдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреА рдУрд░ рдЭреБрдХ рд░рд╣рд╛ рд╣реВрдВ, рдпрджрд┐ рдХреЛрдИ рджреБрд╖реНрдкреНрд░рднрд╛рд╡ рд╣реИрдВ рдЬрд┐рдирдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдореИрдВ рдирд╣реАрдВ рд╕реЛрдЪ рд░рд╣рд╛ рд╣реВрдВред рдЕрд░реНрдерд╛рддреН рдХреЙрд▓рд░ рдЕрднреА рднреА рдЙрд╕ рдЖрд╡рдВрдЯрди рдХреА рдЕрдкреЗрдХреНрд╖рд╛ рдХрд░реЗрдЧрд╛, рдФрд░ рдпрд╣ рдорд╛рдореВрд▓реА рд╣реИред

@ рдПрдмрд┐рдХрд▓реЗ

Array.Empty рдПрдХ F# рд╕реБрд╡рд┐рдзрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рджреБрдЦ рдХреА рдмрд╛рдд рд╣реИ рдХрд┐ рдпрд╣рд╛рдБ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛!

рдЕрдм рдФрд░ рдирд╣реАрдВ: https://github.com/dotnet/coreclr/blob/master/src/mscorlib/src/System/Array.cs#L1060 -L1069

рдореИрдВрдиреЗ рдЗрд╢реНрдпреВ -574 рд╢рд╛рдЦрд╛ рдореЗрдВ рдХреЛрдб рдХреЛ

рдРрд░реЗ рдХреЛ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ред рдЦрд╛рд▓реА() рдирд┐рдпрдорд┐рдд рдмрд┐рд▓реНрдб рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдореЗрдВ рд╕рдм рдХреБрдЫ рдмрджрд▓реЗрдВ рдФрд░ рдкреНрд▓рдЧ рдХрд░реЗрдВред рдПрдХ рдорд╛рдореВрд▓реА рдЕрд╕реНрдерд╛рдпреА рдХреАрдЪрдбрд╝ рдЬреЛ рдореБрдЭреЗ рдкреЗрд╢ рдХрд░рдирд╛ рдерд╛, рд╡рд╣ рдерд╛ System.Collections рдкреНрд░реЛрдЬреЗрдХреНрдЯ System.Collections nuget рдкреИрдХреЗрдЬ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ, рддреБрд▓рдирд╛рдХрд░реНрддрд╛ рдХреЗ рд░реВрдк рдореЗрдВрдЕрднреА рддрдХ рдЦреБрд▓рд╛ рд╕реНрд░реЛрдд рдирд╣реАрдВ рд╣реИред

рдбреЙрдЯрдиреЗрдЯ/рдХреЛрд░рдПрдлрдПрдХреНрд╕#966 рдЬрд╛рд░реА рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рдЗрд╕реЗ рдареАрдХ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

рдПрдХ рдкреНрд░рдореБрдЦ рдХреНрд╖реЗрддреНрд░ рдЬрд┐рд╕реЗ рдореИрдВ рдлреАрдбрдмреИрдХ рдХреА рддрд▓рд╛рд╢ рдореЗрдВ рд╣реВрдВ рд╡рд╣ рд╣реИ рдХрд┐ рдХреИрд╕реЗ ToArray, CopyTo, рдФрд░ рдЧрдгрдХ рдХреЛ рд╕рдВрднрд╛рд▓рд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рд╡рд░реНрддрдорд╛рди рдореЗрдВ рд╡реЗ рдкреНрд░рджрд░реНрд╢рди рдХреЗ рд▓рд┐рдП рдЕрдиреБрдХреВрд▓рд┐рдд рд╣реИрдВ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рд▓рдХреНрд╖реНрдп рд╕рд░рдгреА рдПрдХ рдвреЗрд░ рд╣реИ рдФрд░ рддреБрд▓рдирд╛рдХрд░реНрддрд╛ рджреНрд╡рд╛рд░рд╛ рдХреНрд░рдордмрджреНрдз рдирд╣реАрдВ рд╣реИред

рддреАрди рд╡рд┐рдХрд▓реНрдк рд╣реИрдВ:
1) рдЗрд╕реЗ рд╡реИрд╕реЗ рд╣реА рдЫреЛрдбрд╝ рджреЗрдВ, рдФрд░ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХрд░реЗрдВ рдХрд┐ рд▓реМрдЯрд╛ рд╣реБрдЖ рд╕рд░рдгреА рд╕реЙрд░реНрдЯ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред (рдпрд╣ рдПрдХ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрддрд╛рд░ рд╣реИ, рдХреНрд░рдордмрджреНрдз рдХрддрд╛рд░ рдирд╣реАрдВ)
2) рд▓реМрдЯрд╛рдИ рдЧрдИ рд╡рд╕реНрддреБрдУрдВ/рд╕рд░рдгрд┐рдпреЛрдВ рдХреЛ рдХреНрд░рдордмрджреНрдз рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЛрдВ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░реЗрдВред рд╡реЗ рдЕрдм рдУ (рдПрди) рд╕рдВрдЪрд╛рд▓рди рдирд╣реАрдВ рд╣реЛрдВрдЧреЗред
3) рд╡рд┐рдзрд┐рдпреЛрдВ рдФрд░ рдЧрдгрдирд╛ рдпреЛрдЧреНрдп рд╕рдорд░реНрдерди рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╣рдЯрд╛ рджреЗрдВред рдпрд╣ "рд╢реБрджреНрдзрддрд╛рд╡рд╛рджреА" рд╡рд┐рдХрд▓реНрдк рд╣реИ, рд▓реЗрдХрд┐рди рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрддрд╛рд░ рдХреА рдЕрдм рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрдиреЗ рдкрд░ рд╢реЗрд╖ рдХрддрд╛рд░рдмрджреНрдз рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдЬрд▓реНрджреА рд╕реЗ рд╣рдерд┐рдпрд╛рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдХреЛ рд╣рдЯрд╛ рджреЗрддрд╛ рд╣реИред

рдПрдХ рдФрд░ рдЪреАрдЬ рдЬрд┐рд╕ рдкрд░ рдореБрдЭреЗ рдлреАрдбрдмреИрдХ рдЪрд╛рд╣рд┐рдП рд╡рд╣ рдпрд╣ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдХрддрд╛рд░ рд╕рдорд╛рди рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рд╡рд╛рд▓реЗ рджреЛ рдЖрдЗрдЯрдореЛрдВ рдХреЗ рд▓рд┐рдП рд╕реНрдерд┐рд░ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП (0 рдХреЗ рдкрд░рд┐рдгрд╛рдо рдХреА рддреБрд▓рдирд╛ рдХрд░реЗрдВ)ред рдЖрдо рддреМрд░ рдкрд░ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрддрд╛рд░реЗрдВ рдЗрд╕ рдмрд╛рдд рдХреА рдХреЛрдИ рдЧрд╛рд░рдВрдЯреА рдирд╣реАрдВ рджреЗрддреА рд╣реИрдВ рдХрд┐ рд╕рдорд╛рди рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рд╡рд╛рд▓реЗ рджреЛ рдЖрдЗрдЯрдо рдХреЛ рдЙрд╕реА рдХреНрд░рдо рдореЗрдВ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдЬрд┐рд╕ рдХреНрд░рдо рдореЗрдВ рдЙрдиреНрд╣реЗрдВ рд▓рдЧрд╛рдпрд╛ рдЧрдпрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ рджреЗрдЦрд╛ рдХрд┐ System.Reactive.Core рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рдЖрдВрддрд░рд┐рдХ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрддрд╛рд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдиреЗ рдЗрд╕ рд╕рдВрдкрддреНрддрд┐ рдХреЛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдЕрддрд┐рд░рд┐рдХреНрдд рдУрд╡рд░рд╣реЗрдб рд▓рд┐рдпрд╛ред рдореЗрд░реА рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдРрд╕рд╛ рдирд╣реАрдВ рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреА рдЕрдкреЗрдХреНрд╖рд╛рдУрдВ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдХреМрди рд╕рд╛ рд╡рд┐рдХрд▓реНрдк рдмреЗрд╣рддрд░ рд╣реИред

рдореИрдВ рдЗрд╕ рдкреАрдЖрд░ рдкрд░ рд╣реБрдЖ рдХреНрдпреЛрдВрдХрд┐ рдореБрдЭреЗ рднреА .NET рдореЗрдВ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрддрд╛рд░ рдЬреЛрдбрд╝рдиреЗ рдореЗрдВ рджрд┐рд▓рдЪрд╕реНрдкреА рдереАред рдпрд╣ рджреЗрдЦрдХрд░ рдЦреБрд╢реА рд╣реБрдИ рдХрд┐ рдХреЛрдИ рдЗрд╕ рдкреНрд░рд╕реНрддрд╛рд╡ рдХреЛ рдмрдирд╛рдиреЗ рдХреЗ рдкреНрд░рдпрд╛рд╕ рдореЗрдВ рдЧрдпрд╛ :)ред рдХреЛрдб рдХреА рд╕рдореАрдХреНрд╖рд╛ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдореИрдВрдиреЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рджреЗрдЦрд╛:

  • рдЬрдм IComparer рдСрд░реНрдбрд░рд┐рдВрдЧ Equals рдЕрдиреБрд░реВрдк рдирд╣реАрдВ рд╣реИ, рддреЛ рдЗрд╕ Contains рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди (рдЬреЛ IComparer рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ) рдХрд╛ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреБрдЫ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдЖрд╢реНрдЪрд░реНрдпрдЬрдирдХ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ _ рд╕рдорд╛рди рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рд╡рд╛рд▓рд╛ рдЖрдЗрдЯрдо рд╢рд╛рдорд┐рд▓ рд╣реИ_ред
  • рдореБрдЭреЗ Dequeue рдореЗрдВ рд╕рд░рдгреА рдХреЛ рд╕рд┐рдХреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдб рдирд╣реАрдВ рджрд┐рдЦрд╛рдИ рджрд┐рдпрд╛ред рдЪреМрдерд╛рдИ рдкреВрд░реНрдг рд╣реЛрдиреЗ рдкрд░ рд╣реАрдк рд╕рд░рдгреА рдХреЛ рдЖрдзрд╛ рдШрдЯрд╛рдирд╛ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╣реИред
  • рдХреНрдпрд╛ Enqueue рдкрджреНрдзрддрд┐ рдХреЛ null рддрд░реНрдХреЛрдВ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП?
  • рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ Clear рдХреА рдЬрдЯрд┐рд▓рддрд╛ ╬Ш(n) рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ System.Array.Clear рдХреА рдЬрдЯрд┐рд▓рддрд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рд╡рд╣ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред https://msdn.microsoft.com/en-us/library/system.array.clear%28v=vs.110%29.aspx

рдореБрдЭреЗ Dequeue рдореЗрдВ рд╕рд░рдгреА рдХреЛ рд╕рд┐рдХреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдб рдирд╣реАрдВ рджрд┐рдЦрд╛рдИ рджрд┐рдпрд╛ред рдЪреМрдерд╛рдИ рдкреВрд░реНрдг рд╣реЛрдиреЗ рдкрд░ рд╣реАрдк рд╕рд░рдгреА рдХреЛ рдЖрдзрд╛ рдШрдЯрд╛рдирд╛ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╣реИред

Queue<T> рдФрд░ Stack<T> рднреА рдЕрдкрдиреЗ рд╕рд░рдгрд┐рдпреЛрдВ рдХреЛ рд╕рд┐рдХреЛрдбрд╝рддреЗ рдирд╣реАрдВ рд╣реИрдВ ( рд╕рдВрджрд░реНрдн рд╕реНрд░реЛрдд рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рд╡реЗ рдЕрднреА рддрдХ CoreFX рдореЗрдВ рдирд╣реАрдВ рд╣реИрдВ)ред

@mbeidler рдореИрдВ @svick рдиреЗ рдмрддрд╛рдпрд╛ рдХрд┐ рдпрд╣ рд╕рдорд╛рди рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреЗ рд╕рдВрджрд░реНрдн рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реИред рдореИрдВ .NET рдХреЛрд░/рдмреАрд╕реАрдПрд▓ рдЯреАрдо рдореЗрдВ рдХрд┐рд╕реА рд╕реЗ рднреА рдпрд╣ рдЬрд╛рдирдиреЗ рдХреЗ рд▓рд┐рдП рдЙрддреНрд╕реБрдХ рд╣реВрдВ рдХрд┐ рдХреНрдпрд╛ рдХреЛрдИ рд╡рд┐рд╢реЗрд╖ рдХрд╛рд░рдг рд╣реИ рдХрд┐ рдЙрдиреНрд╣реЛрдВрдиреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреА рд╢реИрд▓реА рдХреЛ рдЪреБрдирд╛ рд╣реИред

рдЕрджреНрдпрддрди: рдореИрдВрдиреЗ рд╕реВрдЪреА рдХреА рдЬрд╛рдБрдЪ рдХреА, рдкрдВрдХреНрддрд┐, Queue, рдФрд░ ArrayList - рдЙрдирдореЗрдВ рд╕реЗ рдХреЛрдИ рднреА рд╣рдЯрд╛рдиреЗ/рдбреЗрдХреНрдпреВ рдкрд░ рдЖрдВрддрд░рд┐рдХ рд╕рд░рдгреА рдХреЗ рдЖрдХрд╛рд░ рдХреЛ рдЫреЛрдЯрд╛ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред

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

рджрд┐рд▓рдЪрд╕реНрдк рд╣реИ, рдореИрдВрдиреЗ @svick рджреНрд╡рд╛рд░рд╛ рд▓рд┐рдВрдХ рдХрд┐рдП рдЧрдП рд╕рдВрджрд░реНрдн рд╕реНрд░реЛрдд рдореЗрдВ рджреЗрдЦрд╛ рдХрд┐ Queue<T> рдореЗрдВ рдПрдХ рдЕрдкреНрд░рдпреБрдХреНрдд рдирд┐рдЬреА рд╕реНрдерд┐рд░рд╛рдВрдХ рд╣реИ рдЬрд┐рд╕рдХрд╛ рдирд╛рдо _ShrinkThreshold ред рд╢рд╛рдпрдж рд╡рд╣ рд╡реНрдпрд╡рд╣рд╛рд░ рдкрд┐рдЫрд▓реЗ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рдореМрдЬреВрдж рдерд╛ред

рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ IComparer рдХреЗ рдмрдЬрд╛рдп Equals рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ Contains :, рдореИрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЗрдХрд╛рдИ рдкрд░реАрдХреНрд╖рдг, рдЬреЛ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рдПрдЧрд╛ рд▓рд┐рдЦрд╛ https: //gist.githubред рдХреЙрдо/рдПрдордмреАрдбрд▓рд░/9e9f566ba7356302c57e

@mbeidler рдЕрдЪреНрдЫрд╛ рдмрд┐рдВрджреБред MSDN рдХреЗ рдЕрдиреБрд╕рд╛рд░, IComparer/ рдЖрдИрддреБрд▓рдиреАрдпрдХреЗрд╡рд▓ рдЧрд╛рд░рдВрдЯреА рджреЗрддрд╛ рд╣реИ рдХрд┐ рд╢реВрдиреНрдп рдХреЗ рдорд╛рди рдореЗрдВ рд╕рдорд╛рди рдХреНрд░рдо рд╣реИред

рд╣рд╛рд▓рд╛рдВрдХрд┐, рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЕрдиреНрдп рд╕рдВрдЧреНрд░рд╣ рд╡рд░реНрдЧреЛрдВ рдореЗрдВ рдПрдХ рд╣реА рд╕рдорд╕реНрдпрд╛ рдореМрдЬреВрдж рд╣реИред рдЕрдЧрд░ рдореИрдВ SortedList рдкрд░ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдб рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рддрд╛ рд╣реВрдВ, рдЯреЗрд╕реНрдЯ рдХреЗрд╕ рдЕрднреА рднреА рдХрдВрдЯреЗрдиреНрд╕рдХреА рдкрд░ рд╡рд┐рдлрд▓ рд░рд╣рддрд╛ рд╣реИред рд╕реЙрд░реНрдЯреЗрдбрд▓рд┐рд╕реНрдЯ рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди.ContainsKey Array.BinarySearch рдХреЛ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рд╕рдорд╛рдирддрд╛ рдХреА рдЬрд╛рдВрдЪ рдХреЗ рд▓рд┐рдП IComparer рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИред рд╕реЙрд░реНрдЯреЗрдбрд╕реЗрдЯ рдХреЗ рд▓рд┐рдП рднреА рдпрд╣реА рд╕рдЪ рд╣реИ.

рдпрдХреАрдирди рдпрд╣ рдореМрдЬреВрджрд╛ рд╕рдВрдЧреНрд░рд╣ рд╡рд░реНрдЧреЛрдВ рдореЗрдВ рднреА рдПрдХ рдмрдЧ рд╣реИред рдореИрдВ рдмрд╛рдХреА рд╕рдВрдЧреНрд░рд╣ рд╡рд░реНрдЧреЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЦреЛрджреВрдВрдЧрд╛ рдФрд░ рджреЗрдЦреВрдВрдЧрд╛ рдХрд┐ рдХреНрдпрд╛ рдХреЛрдИ рдЕрдиреНрдп рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛рдПрдВ рд╣реИрдВ рдЬреЛ рдЖрдИрд╕реАрдУрдПрдордкреЗрдпрд░ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддреА рд╣реИрдВ рд▓реЗрдХрд┐рди рд╕рдорд╛рдирддрд╛ рдХреЗ рд▓рд┐рдП рдЕрд▓рдЧ рд╕реЗ рдкрд░реАрдХреНрд╖рдг рдХрд░рддреА рд╣реИрдВред рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЖрдк рд╕рд╣реА рд╣реИрдВ, рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрддрд╛рд░ рдХреЗ рд▓рд┐рдП рдЖрдк рдХрд╕реНрдЯрдо рдСрд░реНрдбрд░рд┐рдВрдЧ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреА рдЕрдкреЗрдХреНрд╖рд╛ рдХрд░реЗрдВрдЧреЗ рдЬреЛ рд╕рдорд╛рдирддрд╛ рд╕реЗ рдкреВрд░реА рддрд░рд╣ рд╕реНрд╡рддрдВрддреНрд░ рд╣реИред

рдореЗрд░реА рдХрд╛рдВрдЯрд╛ рд╢рд╛рдЦрд╛ рдореЗрдВ рдПрдХ рдлрд┐рдХреНрд╕ рдФрд░ рдЯреЗрд╕реНрдЯ рдХреЗрд╕ рдХрд┐рдпрд╛ред рдХрдВрдЯреЗрдиреНрд╕ рдХрд╛ рдирдпрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╕реАрдзреЗ рд▓рд┐рд╕реНрдЯ . рдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИредрд╢рд╛рдорд┐рд▓ рд╣реИред рдЪреВрдВрдХрд┐ рд╕реВрдЪреАIEqualityComparer рд╕реНрд╡реАрдХрд╛рд░ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рд░реВрдк рд╕реЗ рд╕рдорддреБрд▓реНрдп рд╣реИред

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

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ ContainsKey рд▓рд┐рдП IComparer<TKey> рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣реА рдХреБрдВрдЬреА рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ ContainsValue рд▓рд┐рдП рдЕрдкрдиреА рд░реИрдЦрд┐рдХ рдЦреЛрдЬ рдореЗрдВ IComparable<TValue> рдмрдЬрд╛рдп Equals рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЕрдзрд┐рдХ рддрд╛рд░реНрдХрд┐рдХ рд╣реЛрдЧрд╛; рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рджрд╛рдпрд░рд╛ рдХрд╛рдлреА рдХрдо рд╣реЛ рдЧрдпрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдПрдХ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдкреНрд░рд╛рдХреГрддрд┐рдХ рдХреНрд░рдо рдмрд░рд╛рдмрд░ рдХреЗ рд╕рд╛рде рдЕрд╕рдВрдЧрдд рд╣реЛрдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдмрд╣реБрдд рдХрдо рд╣реИред

рдпрд╣ рдХреЗ рд▓рд┐рдП MSDN рджрд╕реНрддрд╛рд╡реЗрдЬ рдореЗрдВ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ рдХрд┐ SortedList<TKey, TValue> , рдЯрд┐рдкреНрдкрдгреА рдЕрдиреБрднрд╛рдЧ рдХреЗ рд▓рд┐рдП ContainsValue рд╕рдВрдХреЗрдд рдорд┐рд▓рддрд╛ рд╣реИ рдХрд┐ TValue рдХреА рддрд░рд╣ рдЖрджреЗрд╢ рд╕рдорд╛рдирддрд╛ рдХреЗ рдПрд╡рдЬ рдореЗрдВ рдкреНрд░рдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

@terrajobst рдЕрдм рддрдХ рдЖрдк API рдкреНрд░рд╕реНрддрд╛рд╡ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреИрд╕рд╛ рдорд╣рд╕реВрд╕ рдХрд░рддреЗ рд╣реИрдВ? рдХреНрдпрд╛ рдЖрдкрдХреЛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ CoreFX рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рд╣реИ?

:+1:

рдЗрд╕реЗ рджрд╛рдЦрд┐рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛрд╣реИ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЗрд╕ рдкреНрд░рд╕реНрддрд╛рд╡ рдХреА рдФрдкрдЪрд╛рд░рд┐рдХ рд╕рдореАрдХреНрд╖рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рдбреЗрдЯрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдЗрд╕реЗ 'рдПрдкреАрдЖрдИ рд╕рдореАрдХреНрд╖рд╛ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░' рдХреЗ рд░реВрдк рдореЗрдВ рд▓реЗрдмрд▓ рдХрд┐рдпрд╛ рд╣реИред

рдЪреВрдВрдХрд┐ Dequeue рдФрд░ Peek рдлреЗрдВрдХрдиреЗ рдХреЗ рддрд░реАрдХреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдХреЙрд▓рд░ рдХреЛ рдкреНрд░рддреНрдпреЗрдХ рдХреЙрд▓ рд╕реЗ рдкрд╣рд▓реЗ рдЧрд┐рдирддреА рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдХреНрдпрд╛ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп (рдпрд╛ рдЗрд╕рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд) рд╕рдорд╡рд░реНрддреА рд╕рдВрдЧреНрд░рд╣ рдХреЗ рдкреИрдЯрд░реНрди рдХреЗ рдмрд╛рдж TryDequeue рдФрд░ TryPeek рдкреНрд░рджрд╛рди рдХрд░рдирд╛ рдЙрдЪрд┐рдд рд╣реЛрдЧрд╛? рдореМрдЬреВрджрд╛ рдЬреЗрдиреЗрд░рд┐рдХ рд╕рдВрдЧреНрд░рд╣реЛрдВ рдореЗрдВ рдЧреИрд░-рдлреЗрдВрдХрдиреЗ рдХреЗ рддрд░реАрдХреЛрдВ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдЦреБрд▓реЗ рдореБрджреНрджреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдПрдХ рдирдпрд╛ рд╕рдВрдЧреНрд░рд╣ рдЬреЛрдбрд╝рдирд╛ рдЬрд┐рд╕рдореЗрдВ рдпреЗ рд╡рд┐рдзрд┐рдпрд╛рдВ рдирд╣реАрдВ рд╣реИрдВ, рдЙрд▓реНрдЯрд╛ рд▓рдЧрддрд╛ рд╣реИред

@andrewgmorris рд╕рдВрдмрдВрдзрд┐рдд https://github.com/dotnet/corefx/issues/4316 "рдХрддрд╛рд░ рдореЗрдВ TryDequeue рдЬреЛрдбрд╝реЗрдВ"

рд╣рдордиреЗ рдЗрд╕рдХреА рдПрдХ рдмреБрдирд┐рдпрд╛рджреА рд╕рдореАрдХреНрд╖рд╛ рдХреА рдереА рдФрд░ рд╣рдо рд╕рд╣рдордд рд╣реИрдВ рдХрд┐ рд╣рдо рдврд╛рдВрдЪреЗ рдореЗрдВ рдПрдХ ProrityQueue рдЪрд╛рд╣рддреЗ рд╣реИрдВред рд╣рд╛рд▓рд╛рдВрдХрд┐, рд╣рдореЗрдВ рдЗрд╕рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╛рдЗрди рдФрд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рдЪрд▓рд╛рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рд╕реА рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЬреЛ рдХреЛрдИ рднреА рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдкрдХрдбрд╝ рд▓реЗрддрд╛ рд╣реИ рд╡рд╣ рдПрдкреАрдЖрдИ рдХреЛ рдЕрдВрддрд┐рдо рд░реВрдк рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП @terrajobst рдкрд░ рдХрд╛рдо рдХрд░ рд╕рдХрддрд╛ рд╣реИред

рддреЛ рдПрдкреАрдЖрдИ рдкрд░ рдХреНрдпрд╛ рдХрд╛рдо рдмрдЪрд╛ рд╣реИ?

рдпрд╣ рдЙрдкрд░реЛрдХреНрдд рдПрдкреАрдЖрдИ рдкреНрд░рд╕реНрддрд╛рд╡ рд╕реЗ рдЧрд╛рдпрдм рд╣реИ: PriorityQueue<T> рдХреЛ IReadOnlyCollection<T> рдХреЛ Queue<T> рд╕реЗ рдореЗрд▓ рдЦрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП ( Queue<T> рдЕрдм IReadOnlyCollection<T> рдХреЛ .NET рдХреЗ рд░реВрдк рдореЗрдВ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИред 4.6)ред

рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рд╕рд░рдгреА-рдЖрдзрд╛рд░рд┐рдд рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрддрд╛рд░ рд╕рд░реНрд╡реЛрддреНрддрдо рд╣реИрдВред .NET рдореЗрдВ рдореЗрдореЛрд░реА рдЖрд╡рдВрдЯрди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рддреЗрдЬрд╝ рд╣реИред рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╡рд╣реА рдЦреЛрдЬ-рдЫреЛрдЯреЗ-рдмреНрд▓реЙрдХ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реИ рдЬреЛ рдкреБрд░рд╛рдиреЗ рдореЙрд▓реЛрдХ рд╕реЗ рдирд┐рдкрдЯрддреЗ рд╣реИрдВред рдпрд╣рд╛рдВ рд╕реЗ рдореЗрд░реА рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрддрд╛рд░ рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХрд╛ рд╕реНрд╡рд╛рдЧрдд рд╣реИ: https://github.com/BrannonKing/Kts.Astar/tree/master/Kts.AStar

@ebickle _speclet_ рдкрд░ рдПрдХ рдЫреЛрдЯрд╛ рд╕рд╛ рдирд╛рдЗрдЯред рдЗрд╕реЗ рдХрд╣рддреЗ рд╣реИрдВ:

/// Adds an object to the end of the <see cref="PriorityQueue{T}"/>. ... public void Enqueue(T item);

рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдпрд╣ рдирд╣реАрдВ рдХрд╣рдирд╛ рдЪрд╛рд╣рд┐рдП, /// Inserts object into the <see cref="PriorityQueue{T}"> by its priority.

@SunnyWar Enqueue рд╡рд┐рдзрд┐ рдХреЗ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдХреЛ рдареАрдХ рдХрд┐рдпрд╛, рдзрдиреНрдпрд╡рд╛рдж!

рдХреБрдЫ рд╕рдордп рдкрд╣рд▓реЗ, рдореИрдВрдиреЗ рдПрдХ рд╕реНрдХрд┐рдк рд▓рд┐рд╕реНрдЯ рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрддрд╛рд░ рдХреЗ рд╕рдорд╛рди рдЬрдЯрд┐рд▓рддрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛ рдмрдирд╛рдИ рдереА рдЬрд┐рд╕реЗ рдореИрдВрдиреЗ рдЗрд╕ рдмрд┐рдВрджреБ рдкрд░ рд╕рд╛рдЭрд╛ рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ рд╣реИ: https://gist.github.com/bbarry/5e0f3cc1ac7f7521fe6ea25947f48ace

https://en.wikipedia.org/wiki/Skip_list

рд╕реНрдХрд┐рдк рд╕реВрдЪреА рдФрд╕рдд рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдЙрдкрд░реЛрдХреНрдд рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрддрд╛рд░ рдХреА рдЬрдЯрд┐рд▓рддрд╛рдУрдВ рд╕реЗ рдореЗрд▓ рдЦрд╛рддреА рд╣реИ, рд╕рд┐рд╡рд╛рдп рдЗрд╕рдХреЗ рдХрд┐ рдЗрд╕рдореЗрдВ рдПрдХ рдФрд╕рдд рдорд╛рдорд▓рд╛ O(log(n)) ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдкрд╣рд▓реЗ рдпрд╛ рдЕрдВрддрд┐рдо рддрддреНрд╡реЛрдВ рддрдХ рдкрд╣реБрдВрдЪ рдирд┐рд░рдВрддрд░ рд╕рдордп рд╕рдВрдЪрд╛рд▓рди рд╣реИ рдФрд░ рдЖрдЧреЗ рдФрд░ рд░рд┐рд╡рд░реНрд╕ рдСрд░реНрдбрд░ рджреЛрдиреЛрдВ рдореЗрдВ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдПрдХ рдкреАрдХреНрдпреВ рдХреА рдлреЙрд░рд╡рд░реНрдб рдСрд░реНрдбрд░ рдЬрдЯрд┐рд▓рддрд╛рдУрдВ рд╕реЗ рдореЗрд▓ рдЦрд╛рддреА рд╣реИред

рд╕реНрдореГрддрд┐ рдкрд░ рдЙрдЪреНрдЪ рд▓рд╛рдЧрдд рдХреЗ рд░реВрдк рдореЗрдВ рдЗрд╕ рддрд░рд╣ рдХреА рд╕рдВрд░рдЪрдирд╛ рдХреЗ рд▓рд┐рдП рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдбрд╛рдЙрдирд╕рд╛рдЗрдбреНрд╕ рд╣реИрдВ, рдФрд░ рдпрд╣ O(n) рд╕рдмрд╕реЗ рдЦрд░рд╛рдм рд╕реНрдерд┐рддрд┐ рдбрд╛рд▓рдиреЗ рдФрд░ рд╣рдЯрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рдХрд╕рд┐рдд рд╣реЛрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕рдХрд╛ рд╡реНрдпрд╛рдкрд╛рд░ рдмрдВрдж рд╣реИ ...

рдХреНрдпрд╛ рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХрд╣реАрдВ рд▓рд╛рдЧреВ рд╣реИ? рдЕрдкреЗрдХреНрд╖рд┐рдд рд░рд┐рд▓реАрдЬ рдХрдм рд╣реИ?
рдореМрдЬреВрджрд╛ рдЖрдЗрдЯрдо рдХреА рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рднреА рдХреНрдпрд╛?

@Priya91 @ianhays рдХреНрдпрд╛ рдпрд╣ рд╕рдореАрдХреНрд╖рд╛ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реИ?

рдпрд╣ рдКрдкрд░ рджрд┐рдП рдЧрдП API рдкреНрд░рд╕реНрддрд╛рд╡ рд╕реЗ рдЧрд╛рдпрдм рд╣реИ: рдкреНрд░рд╛рдпреЛрд░рд┐рдЯреА рдХреНрдпреВIReadOnlyCollection рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПрдХрддрд╛рд░ рд╕реЗ рдореЗрд▓ рдЦрд╛рдиреЗ рдХреЗ рд▓рд┐рдП(рдкрдВрдХреНрддрд┐рдЕрдм IReadOnlyCollection рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ.NET 4.6 рдХреЗ рдЕрдиреБрд╕рд╛рд░)ред

рдореИрдВ рдпрд╣рд╛рдВ @justinvp рд╕реЗ рд╕рд╣рдордд рд╣реВрдВред

@Priya91 @ianhays рдХреНрдпрд╛ рдпрд╣ рд╕рдореАрдХреНрд╖рд╛ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реИ?

рдореИрдВ рдРрд╕рд╛ рдХрд╣реВрдВрдЧрд╛ред рдпрд╣ рдереЛрдбрд╝реА рджреЗрд░ рдХреЗ рд▓рд┐рдП рдмреИрдард╛ рд╣реИ; рдЪрд▓реЛ рдЙрд╕ рдкрд░ рдЪрд╛рд▓ рдЪрд▓рддреЗ рд╣реИрдВред

@justinvp @ianhays рдореИрдВрдиреЗ . рд╢реБрдХреНрд░рд┐рдпрд╛!

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

@NKnusperer рдиреЗ рдореМрдЬреВрджрд╛ рдЖрдЗрдЯрдо рдХреА рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рдЕрдЪреНрдЫреА рдмрд╛рдд

рдкреВрд░реНрдг рдврд╛рдВрдЪреЗ рдореЗрдВ 2 рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реИрдВ, рдЬреЛ рд╕рдВрднрд╛рд╡рд┐рдд рд╡рд┐рдХрд▓реНрдк рд╣реИрдВред
https://referencesource.microsoft.com/#q =priorityqueue

рд╕рдВрджрд░реНрдн рдХреЗ рд▓рд┐рдП рдпрд╣рд╛рдВ рд╕реНрдЯреИрдХ рдУрд╡рд░рдлреНрд▓реЛ рдкрд░ рдЬрд╛рд╡рд╛ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХреНрдпреВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рдкреНрд░рд╢реНрди рд╣реИ http://stackoverflow.com/questions/683041/java-how-do-i-use-a-priorityqueue ред рдпрд╣ рджрд┐рд▓рдЪрд╕реНрдк рд╣реИ рдХрд┐ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХреЗрд╡рд▓ рдПрдХ рд╕рд╛рдзрд╛рд░рдг int рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рд░реИрдкрд░ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреА рдмрдЬрд╛рдп рддреБрд▓рдирд╛рдХрд░реНрддрд╛ рджреНрд╡рд╛рд░рд╛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХреА рдЬрд╛рддреА рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХрддрд╛рд░ рдореЗрдВ рдХрд┐рд╕реА рдЖрдЗрдЯрдо рдХреА рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХреЛ рдмрджрд▓рдирд╛ рдЖрд╕рд╛рди рдирд╣реАрдВ рд╣реИред

рдПрдкреАрдЖрдИ рд╕рдореАрдХреНрд╖рд╛:
рд╣рдо рд╕рд╣рдордд рд╣реИрдВ рдХрд┐ CoreFX рдореЗрдВ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХрд╛ рд╣реЛрдирд╛ рдЙрдкрдпреЛрдЧреА рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рдЙрдореНрдореАрдж рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ CoreFX рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдЧрд╛ред

рдПрдкреАрдЖрдИ рдЖрдХрд╛рд░ рдХреА рдЕрдВрддрд┐рдо рд╕рдореАрдХреНрд╖рд╛ рдХреЗ рд▓рд┐рдП, рд╣рдо рдирдореВрдирд╛ рдХреЛрдб рджреЗрдЦрдирд╛ рдЪрд╛рд╣реЗрдВрдЧреЗ: PriorityQueue<Thread> рдФрд░ PriorityQueue<MyClass> ред

  1. рд╣рдо рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХреИрд╕реЗ рдмрдирд╛рдП рд░рдЦрддреЗ рд╣реИрдВ? рдЕрднреА рдпрд╣ рдХреЗрд╡рд▓ T рджреНрд╡рд╛рд░рд╛ рдирд┐рд╣рд┐рдд рд╣реИред
  2. рдХреНрдпрд╛ рд╣рдо рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рдЬрдм рдЖрдк рдХреЛрдИ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдЬреЛрдбрд╝реЗрдВ рддреЛ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХреЛ рдкрд╛рд░рд┐рдд рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реЛ? (рдЬреЛ рдмрд╣реБрдд рдЖрд╕рд╛рди рд▓рдЧрддрд╛ рд╣реИ)

рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ:

  • рд╣рдо рдЙрдореНрдореАрдж рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдЕрдкрдиреЗ рдЖрдк рдирд╣реАрдВ рдмрджрд▓реЗрдЧреА - рд╣рдореЗрдВ рдЗрд╕рдХреЗ рд▓рд┐рдП рдпрд╛ рддреЛ рдПрдкреАрдЖрдИ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА, рдпрд╛ рд╣рдо рдХрддрд╛рд░ рдореЗрдВ Remove рдФрд░ Add рдЕрдкреЗрдХреНрд╖рд╛ рдХрд░реЗрдВрдЧреЗред
  • рдпрд╣ рджреЗрдЦрддреЗ рд╣реБрдП рдХрд┐ рд╣рдорд╛рд░реЗ рдпрд╣рд╛рдВ рдПрдХ рд╕реНрдкрд╖реНрдЯ рдЧреНрд░рд╛рд╣рдХ рдХреЛрдб рдирд╣реАрдВ рд╣реИ (рдХреЗрд╡рд▓ рд╕рд╛рдорд╛рдиреНрдп рдЗрдЪреНрдЫрд╛ рд╣реИ рдХрд┐ рд╣рдо рдкреНрд░рдХрд╛рд░ рдЪрд╛рд╣рддреЗ рд╣реИрдВ), рдпрд╣ рддрдп рдХрд░рдирд╛ рдХрдард┐рди рд╣реИ рдХрд┐ рдХрд┐рд╕рдХреЗ рд▓рд┐рдП рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдП - perf, рдмрдирд╛рдо рдкреНрд░рдпреЛрдЬреНрдп рдмрдирд╛рдо рдХреБрдЫ рдФрд░?

CoreFX рдореЗрдВ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЙрдкрдпреЛрдЧреА рдкреНрд░рдХрд╛рд░ рд╣реЛрдЧрд╛ред рдХреНрдпрд╛ рдХрд┐рд╕реА рдХреЛ рдЗрд╕реЗ рд╣рдерд┐рдпрд╛рдиреЗ рдореЗрдВ рджрд┐рд▓рдЪрд╕реНрдкреА рд╣реИ?

рдореБрдЭреЗ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрддрд╛рд░ рдХреЛ рдмрд╛рдЗрдирд░реА рдвреЗрд░ рдореЗрдВ рдареАрдХ рдХрд░рдиреЗ рдХрд╛ рд╡рд┐рдЪрд╛рд░ рдкрд╕рдВрдж рдирд╣реАрдВ рд╣реИред рд╡рд┐рд╡рд░рдг рдХреЗ рд▓рд┐рдП рдореЗрд░реЗ AlgoKit рд╡рд┐рдХреА рдкреГрд╖реНрда рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВред рддреНрд╡рд░рд┐рдд рд╡рд┐рдЪрд╛рд░:

  • рдпрджрд┐ рд╣рдо рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдкреНрд░рдХрд╛рд░ рдХреЗ рдвреЗрд░ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рдареАрдХ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдЗрд╕реЗ 4-рдЖрд░реА рд╣реАрдк рдмрдирд╛рдПрдВред
  • рд╣рдореЗрдВ рдвреЗрд░ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рдареАрдХ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдХреНрдпреЛрдВрдХрд┐ рдХреБрдЫ рдкрд░рд┐рджреГрд╢реНрдпреЛрдВ рдореЗрдВ рдХреБрдЫ рдкреНрд░рдХрд╛рд░ рдХреЗ рдвреЗрд░ рджреВрд╕рд░реЛрдВ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЕрдзрд┐рдХ рдкреНрд░рджрд░реНрд╢рдирдХрд╛рд░реА рд╣реЛрддреЗ рд╣реИрдВред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдпрд╣ рджреЗрдЦрддреЗ рд╣реБрдП рдХрд┐ рд╣рдо рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдвреЗрд░ рдкреНрд░рдХрд╛рд░ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рдареАрдХ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЧреНрд░рд╛рд╣рдХ рдХреЛ рдЕрдзрд┐рдХ рдкреНрд░рджрд░реНрд╢рди рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрд▓рдЧ рдХреА рдЬрд░реВрд░рдд рд╣реИ, рдЙрд╕реЗ рдкреВрд░реА рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрддрд╛рд░ рдХреЛ рдЬрдореАрди рд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред рдпрд╣ рдЧрд▓рдд рд╣реИред рд╣рдореЗрдВ рдпрд╣рд╛рдВ рдЕрдзрд┐рдХ рд▓рдЪреАрд▓рд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рдЙрд╕реЗ рдХреБрдЫ CoreFX рдХреЛрдб (рдХрдо рд╕реЗ рдХрдо рдХреБрдЫ рдЗрдВрдЯрд░рдлреЗрд╕) рдХрд╛ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдПред

рдкрд┐рдЫрд▓реЗ рд╕рд╛рд▓ рдореИрдВрдиреЗ рдХреБрдЫ рдвреЗрд░ рдкреНрд░рдХрд╛рд░ рд▓рд╛рдЧреВ рдХрд┐рдПред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, IHeap рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╣реИ рдЬрд┐рд╕реЗ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрддрд╛рд░ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

  • рдЗрд╕реЗ рд╕рд┐рд░реНрдл рдвреЗрд░ рдХреНрдпреЛрдВ рдирд╣реАрдВ рдХрд╣рддреЗ...? рдЖрдк рдвреЗрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрддрд╛рд░ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рд╕рдордЭрджрд╛рд░ рддрд░реАрдХрд╛ рдЬрд╛рдирддреЗ рд╣реИрдВ?

рдореИрдВ рдПрдХ IHeap рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдФрд░ рдХреБрдЫ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рдкреНрд░рджрд░реНрд╢рди рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди (рдХрдо рд╕реЗ рдХрдо рдЙрди рд╕рд░рдгреА рдЖрдзрд╛рд░рд┐рдд) рдХреЛ рдкреЗрд╢ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реВрдВред рдПрдкреАрдЖрдИ рдФрд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдКрдкрд░ рд▓рд┐рдВрдХ рдХрд┐рдП рдЧрдП рднрдВрдбрд╛рд░ рдореЗрдВ рд╣реИрдВред

рддреЛ рдХреЛрдИ _рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрддрд╛рд░_ тАЛтАЛрдирд╣реАрдВред рдвреЗрд░ ред

рддреБрдо рдХреНрдпрд╛ рд╕реЛрдЪрддреЗ рд╣реЛ?

@karelz @safern @danmosemsft

@pgolebiowski рдпрд╣ рди рднреВрд▓реЗрдВ рдХрд┐ рд╣рдо рдЙрдкрдпреЛрдЧ рдореЗрдВ рдЖрд╕рд╛рди-рд╕реБрдВрджрд░-рдкреНрд░рджрд░реНрд╢рди рдХрд░рдиреЗ рд╡рд╛рд▓реЗ API рдХреЛ рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдпрджрд┐ рдЖрдк PriorityQueue (рдЬреЛ рдХрд┐ рд╕реНрдерд╛рдкрд┐рдд рдХрдВрдкреНрдпреВрдЯрд░-рд╡рд┐рдЬреНрдЮрд╛рди рд╢рдмреНрдж рд╣реИ) рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реЛрдВ рдореЗрдВ/рдЗрдВрдЯрд░рдиреЗрдЯ рдЦреЛрдЬ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдХ рдЦреЛрдЬрдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред
рдпрджрд┐ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдвреЗрд░ рд╣реИ (рдЬреЛ рдореБрдЭреЗ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рдЖрд╢реНрдЪрд░реНрдп рд╣реИ рдХреНрдпреЛрдВ), рдпрд╛ рдХреБрдЫ рдФрд░, рдЗрд╕рд╕реЗ рдХреЛрдИ рдлрд░реНрдХ рдирд╣реАрдВ рдкрдбрд╝рддрд╛ред рдорд╛рди рд▓реЗрдВ рдХрд┐ рдЖрдк рдпрд╣ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╕рд░рд▓ рд╡рд┐рдХрд▓реНрдкреЛрдВ рд╕реЗ рдмреЗрд╣рддрд░ рд╣реИ (рдХреЛрдб рдХреА рдЬрдЯрд┐рд▓рддрд╛ рднреА рдПрдХ рдореАрдЯреНрд░рд┐рдХ рд╣реИ рдЬреЛ рдХреБрдЫ рд╣рдж рддрдХ рдорд╛рдпрдиреЗ рд░рдЦрддреА рд╣реИ)ред

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

рдбреНрд░реЙрдк ICollection , IEnumerable ? рдмрд╕ рд╕рд╛рдорд╛рдиреНрдп рд╕рдВрд╕реНрдХрд░рдг рд╣реИрдВ (рд╣рд╛рд▓рд╛рдВрдХрд┐ рд╕рд╛рдорд╛рдиреНрдп IEnumerable<T> рд▓рд╛рдПрдЧрд╛ IEnumerable )

@pgolebiowski рдЗрд╕рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреИрд╕реЗ рдмрд╛рд╣рд░реА рдПрдкреАрдЖрдИ рдХреЛ рдирд╣реАрдВ рдмрджрд▓рддрд╛ рд╣реИред PriorityQueue рд╡реНрдпрд╡рд╣рд╛рд░/рдЕрдиреБрдмрдВрдз рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИ; рдЬрдмрдХрд┐ Heap рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реИред

рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрддрд╛рд░ рдмрдирд╛рдо рдвреЗрд░

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

рдЗрд╕рд▓рд┐рдП рдпрджрд┐ рдЖрдк рдЕрднреА рднреА рдорд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдвреЗрд░-рдЖрдзрд╛рд░рд┐рдд рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреБрдЫ рд╕рд░рд▓ рд╕реВрдЪреА-рдЖрдзрд╛рд░рд┐рдд рдпрд╛ рд╕реВрдЪреА-рд╕реЗ-рд╕рд░рдгреА-рднрд╛рдЧ-рдЖрдзрд╛рд░рд┐рдд рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╕реЗ рдмреЗрд╣рддрд░ рд╣реИ, рддреЛ рдХреГрдкрдпрд╛ рдмрддрд╛рдПрдВ рдХрд┐ рдХреНрдпреЛрдВ (рдЖрджрд░реНрд╢ рд░реВрдк рд╕реЗ рдХреБрдЫ рд╡рд╛рдХреНрдпреЛрдВ/рдкреИрд░рд╛рдЧреНрд░рд╛рдл рдореЗрдВ), рддрд╛рдХрд┐ рд╣рдо рдЗрд╕ рдкрд░ рд╕рд╣рдорддрд┐ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХреЗрдВ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рджреГрд╖реНрдЯрд┐рдХреЛрдг [...]

рдареАрдХ рд╣реИред рдПрдХ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрддрд╛рд░ рдПрдХ рд╕рд╛рд░ рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛ рд╣реИ рдЬрд┐рд╕реЗ рддрдм рдХрд┐рд╕реА рддрд░рд╣ рд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдмреЗрд╢рдХ рдЖрдк рдЗрд╕реЗ рдвреЗрд░ рд╕реЗ рдЕрд▓рдЧ рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛ рдХреЗ рд╕рд╛рде рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдХреЛрдИ рд░рд╛рд╕реНрддрд╛ рдЕрдзрд┐рдХ рдХреБрд╢рд▓ рдирд╣реАрдВ рд╣реИред рдирддреАрдЬрддрди:

  • рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрддрд╛рд░ рдФрд░ рдвреЗрд░ рдХреЛ рдЕрдХреНрд╕рд░ рд╕рдорд╛рдирд╛рд░реНрдердХ рд╢рдмреНрдж рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рдЗрд╕рдХрд╛ рд╕реНрдкрд╖реНрдЯ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рдиреАрдЪреЗ рдкрд╛рдпрдерди рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рджреЗрдЦреЗрдВ)
  • рдЬрдм рднреА рдЖрдкрдХреЗ рдкрд╛рд╕ рдХрд┐рд╕реА рдкреБрд╕реНрддрдХрд╛рд▓рдп рдореЗрдВ "рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрддрд╛рд░" рд╕рдорд░реНрдерди рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдПрдХ рдвреЗрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ (рдиреАрдЪреЗ рд╕рднреА рдЙрджрд╛рд╣рд░рдг рджреЗрдЦреЗрдВ)

рдЕрдкрдиреЗ рд╢рдмреНрджреЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдЗрдП рд╕реИрджреНрдзрд╛рдВрддрд┐рдХ рд╕рдорд░реНрдерди рд╕реЗ рд╢реБрд░реВ рдХрд░реЗрдВред рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХрд╛ рдкрд░рд┐рдЪрдп , рдХреЙрд░реНрдореЗрди:

[тАж] рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рд╡рд╛рд▓реА рдХрддрд╛рд░реЗрдВ рджреЛ рд░реВрдкреЛрдВ рдореЗрдВ рдЖрддреА рд╣реИрдВ: рдЕрдзрд┐рдХрддрдо-рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рд╡рд╛рд▓реА рдХрддрд╛рд░реЗрдВ рдФрд░ рдиреНрдпреВрдирддрдо-рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рд╡рд╛рд▓реА рдХрддрд╛рд░реЗрдВред рд╣рдо рдпрд╣рд╛рдВ рдЗрд╕ рдмрд╛рдд рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░реЗрдВрдЧреЗ рдХрд┐ рдЕрдзрд┐рдХрддрдо-рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рд╡рд╛рд▓реА рдХрддрд╛рд░реЛрдВ рдХреЛ рдХреИрд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рдП, рдЬреЛ рдмрджрд▓реЗ рдореЗрдВ рдЕрдзрд┐рдХрддрдо- рдвреЗрд░ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реЛрддреА рд╣реИрдВред

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

  • рдЬрд╛рд╡рд╛: PriorityQueue<T> - рдвреЗрд░ рдХреЗ рд╕рд╛рде рд▓рд╛рдЧреВ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрддрд╛рд░ред
  • рдЬрдВрдЧ: BinaryHeap тАФ рдПрдкреАрдЖрдИ рдореЗрдВ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдвреЗрд░ред рдпрд╣ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реЛрдВ рдореЗрдВ рдХрд╣рддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рдмрд╛рдЗрдирд░реА рдвреЗрд░ рдХреЗ рд╕рд╛рде рд▓рд╛рдЧреВ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрддрд╛рд░ рд╣реИред рд▓реЗрдХрд┐рди рдПрдкреАрдЖрдИ рд╕рдВрд░рдЪрдирд╛ рдкрд░ рдмрд╣реБрдд рд╕реНрдкрд╖реНрдЯ рд╣реИ - рдПрдХ рдвреЗрд░ред
  • рд╕реНрд╡рд┐рдлреНрдЯ: CFBinaryHeap - рдлрд┐рд░ рд╕реЗ, рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдХрд╣рддрд╛ рд╣реИ рдХрд┐ рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛ рдХреНрдпрд╛ рд╣реИ, рдЕрдореВрд░реНрдд рд╢рдмреНрдж "рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрддрд╛рд░" рдХреЗ рдЙрдкрдпреЛрдЧ рд╕реЗ рдмрдЪрддреЗ рд╣реБрдПред рдХрдХреНрд╖рд╛ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝: рдмрд╛рдЗрдирд░реА рдвреЗрд░ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрддрд╛рд░ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧреА рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред рдореБрдЭреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдкрд╕рдВрдж рд╣реИред
  • C++: priority_queue тАФ рдПрдХ рдмрд╛рд░ рдлрд┐рд░, рдПрдХ рд╕рд░рдгреА рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ рдмрдиреЗ рдмрд╛рдЗрдирд░реА рд╣реАрдк рдХреЗ рд╕рд╛рде рдХреИрдирдирд┐рдХ рд░реВрдк рд╕реЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ред
  • рдкрд╛рдпрдерди: heapq - рдПрдкреАрдЖрдИ рдореЗрдВ рдвреЗрд░ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЙрдЬрд╛рдЧрд░ рд╣реЛрддрд╛ рд╣реИред рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрддрд╛рд░ рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХреЗрд╡рд▓ рдбреЙрдХреНрд╕ рдореЗрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ: рдпрд╣ рдореЙрдбреНрдпреВрд▓ рд╣реАрдк рдХрддрд╛рд░ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрддрд╛рд░ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреЗ рд░реВрдк рдореЗрдВ рднреА рдЬрд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИред
  • рдЬрд╛рдУ: heap package тАФ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдПрдХ рд╣реАрдк рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рднреА рд╣реИред рдХреЛрдИ рд╕реНрдкрд╖реНрдЯ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрддрд╛рд░ рдирд╣реАрдВ, рд▓реЗрдХрд┐рди рдлрд┐рд░ рд╕реЗ рдХреЗрд╡рд▓ рдбреЙрдХреНрд╕ рдореЗрдВ: рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрддрд╛рд░ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдвреЗрд░ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рддрд░реАрдХрд╛ рд╣реИред

рдореЗрд░рд╛ рджреГрдврд╝ рд╡рд┐рд╢реНрд╡рд╛рд╕ рд╣реИ рдХрд┐ рд╣рдореЗрдВ рд░рд╕реНрдЯ/рд╕реНрд╡рд┐рдлреНрдЯ/рдкрд╛рдпрдерди/рдЧреЛ рд░рд╛рд╕реНрддреЗ рдкрд░ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рдбреЙрдХреНрд╕ рдореЗрдВ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдмрддрд╛рддреЗ рд╣реБрдП рдПрдХ рдвреЗрд░ рдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ

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

рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдЖрдк рд╕рднреА рдХреЛ рдПрдХ рд╣реАрдк рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛ рдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЙрдЬрд╛рдЧрд░ рдХрд░рдиреЗ рдХрд╛ рддрд░реАрдХрд╛ рдкрд╕рдВрдж рдЖрдПрдЧрд╛ - рдФрд░ рдХреЗрд╡рд▓ рдбреЙрдХреНрд╕ рдореЗрдВ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрддрд╛рд░ рд╕рдВрджрд░реНрдн рдмрдирд╛рдирд╛ред

рдПрдкреАрдЖрдИ рдФрд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди

рд╣рдореЗрдВ рдЙрдкрд░реЛрдХреНрдд рдорд╛рдорд▓реЗ рдкрд░ рд╕рд╣рдордд рд╣реЛрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдПрдХ рдФрд░ рд╡рд┐рд╖рдп рд╢реБрд░реВ рдХрд░рдиреЗ рджреЗрдВ - рдЗрд╕реЗ рдХреИрд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рдП ред рдореИрдВ рдпрд╣рд╛рдВ рджреЛ рд╕рдорд╛рдзрд╛рди рджреЗрдЦ рд╕рдХрддрд╛ рд╣реВрдВ:

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

рдЙрдкрд░реЛрдХреНрдд рджреГрд╖реНрдЯрд┐рдХреЛрдг рдореЗрдВ, ArrayHeap рдПрдХ рдирд┐рд╣рд┐рдд рдвреЗрд░-рдЖрджреЗрд╢рд┐рдд рдкреВрд░реНрдг рдбреА-рдЖрд░реА рдкреЗрдбрд╝ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рдПрдХ рд╕рд░рдгреА рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП BinaryHeap рдпрд╛ QuaternaryHeap рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдЬрдореАрдиреА рд╕реНрддрд░

рдЖрдЧреЗ рдХреА рдЪрд░реНрдЪрд╛ рдХреЗ рд▓рд┐рдП рдореИрдВ рдЖрдкрдХреЛ рдЗрд╕ рдкреЗрдкрд░ рдХреЛ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рджреГрдврд╝рддрд╛ рд╕реЗ рдкреНрд░реЛрддреНрд╕рд╛рд╣рд┐рдд рдХрд░рддрд╛ рд╣реВрдВред рдЖрдкрдХреЛ рдкрддрд╛ рдЪрд▓ рдЬрд╛рдПрдЧрд╛ рдХрд┐:

  • 4-рдЖрд░реА рдвреЗрд░ (рдЪрддреБрд░реНрднреБрдЬ) рдХреЗрд╡рд▓ 2-рдЖрд░реА рдвреЗрд░ (рдмрд╛рдЗрдирд░реА) рд╕реЗ рддреЗрдЬ рд╣реЛрддреЗ рд╣реИрдВред рдкреЗрдкрд░ рдореЗрдВ рдХрдИ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдП рдЧрдП рд╣реИрдВ - рдЖрдк implicit_4 рдФрд░ implicit_2 (рдХрднреА-рдХрднреА implicit_simple_4 рдФрд░ implicit_simple_2 ) рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдХреА рддреБрд▓рдирд╛ рдХрд░рдиреЗ рдореЗрдВ рд░реБрдЪрд┐ рд▓реЗрдВрдЧреЗред

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

    • рдирд┐рд╣рд┐рдд рдбреА-рдЖрд░реА рдвреЗрд░ (рдРрд░реЗрд╣реЗрдк), <- рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рд╣рдореЗрдВ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ
    • рдвреЗрд░реЛрдВ рдХреЛ рдЬреЛрдбрд╝рдирд╛ , <-

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


@karelz @beanadams

CoreFX рдореЗрдВ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЙрдкрдпреЛрдЧреА рдкреНрд░рдХрд╛рд░ рд╣реЛрдЧрд╛ред рдХреНрдпрд╛ рдХрд┐рд╕реА рдХреЛ рдЗрд╕реЗ рд╣рдерд┐рдпрд╛рдиреЗ рдореЗрдВ рджрд┐рд▓рдЪрд╕реНрдкреА рд╣реИ?

@safern рдореБрдЭреЗ рдЕрдм рд╕реЗ рдЗрд╕реЗ рд╣рдерд┐рдпрд╛рдиреЗ рдореЗрдВ рдмрд╣реБрдд рдЦреБрд╢реА рд╣реЛрдЧреАред

рдареАрдХ рд╣реИ, рдпрд╣ рдореЗрд░реЗ рдХреАрдмреЛрд░реНрдб рдФрд░ рдореЗрд░реА рдХреБрд░реНрд╕реА рдХреЗ рдмреАрдЪ рдПрдХ рд╕рдорд╕реНрдпрд╛ рдереА - PriorityQueue рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ Heap рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИ - рдореИрдВ рд╕рд┐рд░реНрдл Queue рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪ рд░рд╣рд╛ рдерд╛ рдЬрд╣рд╛рдВ рдЗрд╕рдХрд╛ рдХреЛрдИ рдорддрд▓рдм рдирд╣реАрдВ рд╣реИ рдФрд░ рднреВрд▓ рдЧрдпрд╛ рдХрд┐ рдвреЗрд░ 'рдХреНрд░рдордмрджреНрдз' рд╣реИ - рдореЗрд░реЗ рдЬреИрд╕реЗ рдХрд┐рд╕реА рд╡реНрдпрдХреНрддрд┐ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рд╢рд░реНрдордирд╛рдХ рд╕реЛрдЪ-рдкреНрд░рдХреНрд░рд┐рдпрд╛-рдЖрдЙрдЯреЗрдЬ, рдЬреЛ рддрд░реНрдХ, рдПрд▓реНрдЧреЛрд░рд┐рджрдо, рдЯреНрдпреВрд░рд┐рдВрдЧ рдорд╢реАрди рдЗрддреНрдпрд╛рджрд┐ рд╕реЗ рдкреНрдпрд╛рд░ рдХрд░рддрд╛ рд╣реИ, рдореЗрд░реА рдорд╛рдлрд╝реАред (рдмреАрдЯреАрдбрдмреНрд▓реВ: рдЬреИрд╕реЗ рд╣реА рдореИрдВрдиреЗ рдЖрдкрдХреЗ рдЬрд╛рд╡рд╛ рдбреЙрдХреНрд╕ рд▓рд┐рдВрдХ рдореЗрдВ рдХреБрдЫ рд╡рд╛рдХреНрдп рдкрдврд╝реЗ, рд╡рд┐рд╕рдВрдЧрддрд┐ рддреБрд░рдВрдд рдХреНрд▓рд┐рдХ рдХреА рдЧрдИ)

рдЙрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ Heap рд╢реАрд░реНрд╖ рдкрд░ рдПрдкреАрдЖрдИ рдмрдирд╛рдирд╛ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИред рд╣рдореЗрдВ рдЙрд╕ рд╡рд░реНрдЧ рдХреЛ рдЕрднреА рддрдХ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП - рдЗрд╕рдХреЗ рд▓рд┐рдП рдЕрдкрдиреА рд╕реНрд╡рдпрдВ рдХреА рдПрдкреАрдЖрдИ рд╕рдореАрдХреНрд╖рд╛ рдФрд░ рдЕрдкрдиреА рдЪрд░реНрдЪрд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА рдпрджрд┐ рдпрд╣ рдХреБрдЫ рдРрд╕рд╛ рд╣реИ рдЬреЛ рд╣рдореЗрдВ CoreFX рдореЗрдВ рдЪрд╛рд╣рд┐рдПред рд╣рдо рдирд╣реАрдВ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рдХрд╛рд░рдг рдПрдкреАрдЖрдИ рдХреА рд╕рддрд╣ рд░реЗрдВрдЧ рдЬрд╛рдП, рд▓реЗрдХрд┐рди рдпрд╣ рдХрд░рдирд╛ рд╕рд╣реА рд╣реЛ рд╕рдХрддрд╛ рд╣реИ - рдЗрд╕рд▓рд┐рдП рдЪрд░реНрдЪрд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рдЙрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рд╣рдореЗрдВ рдЕрднреА IHeap рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдмрд╛рдж рдореЗрдВ рдЕрдЪреНрдЫрд╛ рдлреИрд╕рд▓рд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
рдпрджрд┐ рдХреЛрдИ рд╢реЛрдз рд╣реИ рдХрд┐ рд╕рд╛рдорд╛рдиреНрдп рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдЗрдирдкреБрдЯ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢рд┐рд╖реНрдЯ рдвреЗрд░ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП 4-рдЖрд░реА) рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╣реИ, рддреЛ рд╣рдореЗрдВ рдЙрд╕реЗ рдЪреБрдирдирд╛ рдЪрд╛рд╣рд┐рдПред @Safern @ianhays рдХреЗ рд▓рд┐рдП рдЖрдЗрдП рдкреНрд░рддреАрдХреНрд╖рд╛ рдХреА рдкреБрд╖реНрдЯрд┐ / рдЖрд╡рд╛рдЬ рд░рд╛рдп рдХреЛ @stephentoubред

рдХрдИ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреЗ рд╕рд╛рде рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдвреЗрд░ рдХрд╛ рдкреИрд░рд╛рдореАрдЯреНрд░рд┐рдЬреЗрд╢рди рдХреБрдЫ рдРрд╕рд╛ рд╣реИ рдЬреЛ рдЖрдИрдПрдордУ рдХреЛрд░рдПрдлрдПрдХреНрд╕ рдореЗрдВ рдирд╣реАрдВ рд╣реИ (рдореИрдВ рдпрд╣рд╛рдВ рдЧрд▓рдд рд╣реЛ рд╕рдХрддрд╛ рд╣реВрдВ, рдлрд┐рд░ рд╕реЗ - рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рджреВрд╕рд░реЗ рдХреНрдпрд╛ рд╕реЛрдЪрддреЗ рд╣реИрдВ)ред
рдореЗрд░рд╛ рдХрд╛рд░рдг рдпрд╣ рд╣реИ рдХрд┐ рдЖрдИрдПрдордУ рд╣рдо рдЬрд▓реНрдж рд╣реА рд╡рд┐рд╢реЗрд╖ рд╕рдВрдЧреНрд░рд╣ рдХреЗ рдЧрдЬрд┐рд▓рд┐рдпрди рднреЗрдЬ рджреЗрдВрдЧреЗ рдЬреЛ рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдХрдард┐рди рд╣реЛрдЧрд╛ (рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреА рдмрд╛рд░реАрдХрд┐рдпреЛрдВ рдореЗрдВ рдордЬрдмреВрдд рдкреГрд╖реНрдарднреВрдорд┐ рдХреЗ рдмрд┐рдирд╛ рдФрд╕рдд рдбреЗрд╡рд▓рдкрд░) рд╕реЗ рдЪреБрдирдиреЗ рдХреЗ рд▓рд┐рдПред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЗрд╕ рддрд░рд╣ рдХреА рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдЖрдкрдХреЗ/рд╕рдореБрджрд╛рдп рдХреЗ рд╕реНрд╡рд╛рдорд┐рддреНрд╡ рд╡рд╛рд▓реЗ рдХреНрд╖реЗрддреНрд░ рдХреЗ рд╡рд┐рд╢реЗрд╖рдЬреНрдЮреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдмреЗрд╣рддрд░реАрди NuGet рдкреИрдХреЗрдЬ рдмрдирд╛рдПрдЧреАред рднрд╡рд┐рд╖реНрдп рдореЗрдВ, рд╣рдо рдЗрд╕реЗ PowerCollections рдореЗрдВ рдЬреЛрдбрд╝рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (рд╣рдо рдкрд┐рдЫрд▓реЗ 4 рдорд╣реАрдиреЛрдВ рд╕реЗ рд╕рдХреНрд░рд┐рдп рд░реВрдк рд╕реЗ рдЪрд░реНрдЪрд╛ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдХрд┐ GitHub рдкрд░ рдЗрд╕ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЛ рдХрд╣рд╛рдБ рд░рдЦрд╛ рдЬрд╛рдП рдФрд░ рдпрджрд┐ рд╣рдореЗрдВ рдЗрд╕рдХрд╛ рд╕реНрд╡рд╛рдорд┐рддреНрд╡ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдпрд╛ рдпрджрд┐ рд╣рдореЗрдВ рд╕рдореБрджрд╛рдп рдХреЛ рдЗрд╕рдХреЗ рдорд╛рд▓рд┐рдХ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░реЛрддреНрд╕рд╛рд╣рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП - рдЗрд╕ рдорд╛рдорд▓реЗ рдкрд░ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд░рд╛рдп рд╣реИрдВ , рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рд╣рдо 2.0 рдХреЗ рдмрд╛рдж рдЗрд╕рдХреЗ рднрд╛рдЧреНрдп рдХреЛ рдЕрдВрддрд┐рдо рд░реВрдк рджреЗрдВрдЧреЗ)

рдЖрдкрдХреЛ рдЕрд╕рд╛рдЗрди рдХрд░рдирд╛ рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдЙрд╕ рдкрд░ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ ...

@pgolebiowski рд╕рд╣рдпреЛрдЧреА рдЖрдордВрддреНрд░рдг рднреЗрдЬрд╛ рдЧрдпрд╛ - рдЬрдм рдЖрдк рдореБрдЭреЗ рдкрд┐рдВрдЧ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдореИрдВ рдЗрд╕реЗ рдЖрдкрдХреЛ рддрдм рд╕реМрдВрдк рд╕рдХреВрдВрдЧрд╛ (GitHub рд╕реАрдорд╛рдПрдВ)ред

@benaadams рдореИрдВ ICollection (рд╣рд▓реНрдХрд╛ рд╡рд░реАрдпрддрд╛) рд░рдЦреВрдВрдЧрд╛ ред CoreFX рдореЗрдВ рдЕрдиреНрдп рдбреАрдПрд╕ рдХреЗ рд╕рд╛рде рд╕рдВрдЧрддрд┐ рдХреЗ рд▓рд┐рдПред рдЖрдИрдПрдордУ рдпрд╣рд╛рдВ рдПрдХ рдЕрдЬреАрдм рдЬрд╛рдирд╡рд░ рдХреЗ рд▓рд╛рдпрдХ рдирд╣реАрдВ рд╣реИ ... рдЕрдЧрд░ рд╣рдо рдХреБрдЫ рдореБрдЯреНрдареА рднрд░ рдирдП рдЬреЛрдбрд╝ рд░рд╣реЗ рдереЗ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдкрд╛рд╡рд░рдХреЛрд▓реЗрдХреНрд╢рди рднреА рджреВрд╕рд░реЗ рд░реЗрдкреЛ рдореЗрдВ), рддреЛ рд╣рдореЗрдВ рдЧреИрд░-рдЬреЗрдиреЗрд░рд┐рдХ рд▓реЛрдЧреЛрдВ рдХреЛ рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП ... рд╡рд┐рдЪрд╛рд░?

рдареАрдХ рд╣реИ, рдпрд╣ рдореЗрд░реЗ рдХреАрдмреЛрд░реНрдб рдФрд░ рдореЗрд░реА рдХреБрд░реНрд╕реА рдХреЗ рдмреАрдЪ рдПрдХ рд╕рдорд╕реНрдпрд╛ рдереАред

рд╣рд╛рд╣рд╛ рдХреЛрдИ рдЪрд┐рдВрддрд╛ рдирд╣реАрдВред

рдвреЗрд░ рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ рдПрдкреАрдЖрдИ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИред рд╣рдореЗрдВ рдЙрд╕ рд╡рд░реНрдЧ рдХреЛ рдЕрднреА рддрдХ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП [...] рд╣рдо рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рдХрд╛рд░рдг рдПрдкреАрдЖрдИ рд╕рддрд╣ рд░реЗрдВрдЧрдирд╛ рдирд╣реАрдВ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рд╕рд╣реА рдХрд╛рдо рд╣реЛ рд╕рдХрддрд╛ рд╣реИ - рдЗрд╕рд▓рд┐рдП рдЪрд░реНрдЪрд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред [...] рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рд╣рдореЗрдВ рдЕрднреА IHeap рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдмрд╛рдж рдореЗрдВ рдЕрдЪреНрдЫрд╛ рдлреИрд╕рд▓рд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

рдпрджрд┐ рд╕рдореВрд╣ рдХрд╛ рдирд┐рд░реНрдгрдп PriorityQueue рд╕рд╛рде рдЬрд╛рдирд╛ рд╣реИ, рддреЛ рдореИрдВ рдХреЗрд╡рд▓ рдбрд┐рдЬрд╛рдЗрди рдФрд░ рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░реВрдВрдЧрд╛ред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдХреГрдкрдпрд╛ рдЗрд╕ рддрдереНрдп рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦреЗрдВ рдХрд┐ рдпрджрд┐ рд╣рдо рдЕрднреА PriorityQueue рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ, рддреЛ рдмрд╛рдж рдореЗрдВ рдПрдкреАрдЖрдИ рдореЗрдВ Heap рдЬреЛрдбрд╝рдирд╛ рдЧрдбрд╝рдмрдбрд╝ рд╣реЛ рдЬрд╛рдПрдЧрд╛ - рдХреНрдпреЛрдВрдХрд┐ рджреЛрдиреЛрдВ рдореВрд▓ рд░реВрдк рд╕реЗ рд╕рдорд╛рди рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рддреЗ рд╣реИрдВред рдпрд╣ рдЕрддрд┐рд░реЗрдХ рдЖрдИрдПрдордУ рдХреА рддрд░рд╣ рд╣реЛрдЧрд╛ред рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рдПрдХ рдбрд┐рдЬрд╛рдЗрди рдЧрдВрдз рд╣реЛрдЧреАред рдореИрдВ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрддрд╛рд░ рдирд╣реАрдВ рдЬреЛрдбрд╝реВрдВрдЧрд╛ред рдпрд╣ рдорджрдж рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред

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

IHeap + ArrayHeap + PairingHeap рд▓рд┐рдП рд╡реЛрдЯрд┐рдВрдЧ! (рдЬреИрд╕реЗ рд░рд╕реНрдЯ/рд╕реНрд╡рд┐рдлреНрдЯ/рдкрд╛рдпрдерди/рдЧреЛ рдореЗрдВ)

рдпрджрд┐ рдпреБрдЧреНрдорди рдвреЗрд░ рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╣реИ -- рдареАрдХ рд╣реИред рд▓реЗрдХрд┐рди рдЖрдЗрдП рдХрдо рд╕реЗ рдХрдо IHeap + ArrayHeap рд╕рд╛рде рдЪрд▓реЗрдВред рдХреНрдпрд╛ рдЖрдк рд▓реЛрдЧреЛрдВ рдХреЛ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ PriorityQueue рд╡рд░реНрдЧ рдХреЗ рд╕рд╛рде рдЬрд╛рдиреЗ рд╕реЗ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рд╕рдВрднрд╛рд╡рдирд╛рдПрдВ рдмрдВрдж рд╣реЛ рд░рд╣реА рд╣реИрдВ рдФрд░ рдПрдкреАрдЖрдИ рдХрдо рд╕реНрдкрд╖реНрдЯ рд╣реЛ рд░рд╣реА рд╣реИ?

рд▓реЗрдХрд┐рди рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдХрд╣рд╛ - рдпрджрд┐ рдЖрдк рд╕рднреА рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рд╕рдорд╛рдзрд╛рди рдкрд░ PriorityQueue рд╡рд░реНрдЧ рдХреЗ рд▓рд┐рдП рд╡реЛрдЯ рдХрд░рддреЗ рд╣реИрдВ - рдареАрдХ рд╣реИред

рд╕рд╣рдпреЛрдЧреА рдЖрдордВрддреНрд░рдг рднреЗрдЬрд╛ рдЧрдпрд╛ - рдЬрдм рдЖрдк рдореБрдЭреЗ рдкрд┐рдВрдЧ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдореИрдВ рдЗрд╕реЗ рдЖрдкрдХреЛ рддрдм рд╕реМрдВрдк рд╕рдХреВрдВрдЧрд╛ (GitHub рд╕реАрдорд╛рдПрдВ)ред

@ рдХрд░реЗрд▓реНрдЬрд╝ рдкрд┐рдВрдЧ :)

рдХреГрдкрдпрд╛ рдЗрд╕ рддрдереНрдп рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦреЗрдВ рдХрд┐ рдпрджрд┐ рд╣рдо рдЕрднреА рдПрдХ рдкреНрд░рд╛рдпреЛрд░рд┐рдЯреА рдХреНрдпреВ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ, рддреЛ рдмрд╛рдж рдореЗрдВ рдПрдкреАрдЖрдИ рдореЗрдВ рд╣реАрдк рдХреЛ рдЬреЛрдбрд╝рдирд╛ рдЧрдбрд╝рдмрдбрд╝ рд╣реЛ рдЬрд╛рдПрдЧрд╛ - рдХреНрдпреЛрдВрдХрд┐ рджреЛрдиреЛрдВ рдореВрд▓ рд░реВрдк рд╕реЗ рд╕рдорд╛рди рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рддреЗ рд╣реИрдВред рдпрд╣ рдЕрддрд┐рд░реЗрдХ рдЖрдИрдПрдордУ рдХреА рддрд░рд╣ рд╣реЛрдЧрд╛ред рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рдПрдХ рдбрд┐рдЬрд╛рдЗрди рдЧрдВрдз рд╣реЛрдЧреАред рдореИрдВ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрддрд╛рд░ рдирд╣реАрдВ рдЬреЛрдбрд╝реВрдВрдЧрд╛ред рдпрд╣ рдорджрдж рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред

рдХреНрдпрд╛ рдЖрдк рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рджреЗ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдмрд╛рдж рдореЗрдВ рдЧрдиреНрджрд╛ рдХреНрдпреЛрдВ рд╣реЛрдЧрд╛? рдЖрдкрдХреА рдХреНрдпрд╛ рдЪрд┐рдВрддрд╛рдПрдВ рд╣реИрдВ?
PriorityQueue рдПрдХ рдЕрд╡рдзрд╛рд░рдгрд╛ рд╣реИ рдЬрд┐рд╕рдХрд╛ рд▓реЛрдЧ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕ рддрд░рд╣ рдирд╛рдорд┐рдд рдПрдХ рдкреНрд░рдХрд╛рд░ рдХрд╛ рд╣реЛрдирд╛ рдЙрдкрдпреЛрдЧреА рд╣реИ, рд╣реИ рдирд╛?
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ Heap рдкрд░ рддрд╛рд░реНрдХрд┐рдХ рд╕рдВрдЪрд╛рд▓рди (рдХрдо рд╕реЗ рдХрдо рдЙрдирдХреЗ рдирд╛рдо) рднрд┐рдиреНрди рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред рдпрджрд┐ рд╡реЗ рд╕рдорд╛рди рд╣реИрдВ, рддреЛ рд╕рдмрд╕реЗ рдЦрд░рд╛рдм рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рд╣реА рдХреЛрдб рдХреЗ 2 рдЕрд▓рдЧ-рдЕрд▓рдЧ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ (рдЖрджрд░реНрд╢ рдирд╣реАрдВ, рд▓реЗрдХрд┐рди рджреБрдирд┐рдпрд╛ рдХрд╛ рдЕрдВрдд рдирд╣реАрдВ)ред рдпрд╛ рд╣рдо Heap рд╡рд░реНрдЧ рдХреЛ PriorityQueue рдЕрднрд┐рднрд╛рд╡рдХ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдореНрдорд┐рд▓рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд╣реИ рдирд╛? (рдпрд╣ рдорд╛рдирддреЗ рд╣реБрдП рдХрд┐ рдПрдкреАрдЖрдИ рд╕рдореАрдХреНрд╖рд╛ рдкрд░рд┐рдкреНрд░реЗрдХреНрд╖реНрдп рд╕реЗ рдЗрд╕рдХреА рдЕрдиреБрдорддрд┐ рд╣реИ - рдЕрднреА рдореБрдЭреЗ рдЗрд╕рдХрд╛ рдХрд╛рд░рдг рдирд╣реАрдВ рджрд┐рдЦ рд░рд╣рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореЗрд░реЗ рдкрд╛рд╕ рдПрдкреАрдЖрдИ рд╕рдореАрдХреНрд╖рд╛рдУрдВ рдХреЗ рд╕рд╛рде рдЗрддрдиреЗ рд╡рд░реНрд╖реЛрдВ рдХрд╛ рдЕрдиреБрднрд╡ рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдкреБрд╖реНрдЯрд┐ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рджреВрд╕рд░реЛрдВ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░реЗрдВрдЧреЗ)

рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рдорддрджрд╛рди рдФрд░ рдЖрдЧреЗ рдХреА рдбрд┐рдЬрд╛рдЗрди рдЪрд░реНрдЪрд╛ рдХреИрд╕реЗ рдЪрд▓рддреА рд╣реИ ... рдореИрдВ рдзреАрд░реЗ-рдзреАрд░реЗ IHeap + ArrayHeap рдХреЗ рд╡рд┐рдЪрд╛рд░ рдХреЛ рдЧрд░реНрдо рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдЕрднреА рддрдХ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЖрд╢реНрд╡рд╕реНрдд рдирд╣реАрдВ рд╣реВрдВ ...

рдЕрдЧрд░ рд╣рдо рдХреБрдЫ рдирдП рдЬреЛрдбрд╝ рд░рд╣реЗ рдереЗ ... рд╣рдореЗрдВ рдЧреИрд░-рдЬреЗрдиреЗрд░рд┐рдХ рд▓реЛрдЧреЛрдВ рдХреЛ рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП

рдПрдХ рдмреИрд▓ рдХреЛ рд▓рд╛рд▓ рдЪреАрд░ред рдХрд┐рд╕реА рдХреЗ рдкрд╛рд╕ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдЕрдиреНрдп рд╕рдВрдЧреНрд░рд╣ рд╣реИрдВ рддрд╛рдХрд┐ рд╣рдо ICollection рдЫреЛрдбрд╝ рд╕рдХреЗрдВ?

рдкрд░рд┐рдкрддреНрд░/рдЕрдВрдЧреВрдареА рдмрдлрд░; рд╕рд╛рдорд╛рдиреНрдп рдФрд░ рд╕рдорд╡рд░реНрддреА?

@karelz рдирд╛рдордХрд░рдг рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рдорд╛рдзрд╛рди IPriorityQueue рдЬреИрд╕рд╛ рдХреБрдЫ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдЬреИрд╕реЗ DataFlow рдЙрддреНрдкрд╛рджрди/рдЙрдкрднреЛрдХреНрддрд╛ рдкреИрдЯрд░реНрди рдХреЗ рд▓рд┐рдП рдХрд░рддрд╛ рд╣реИред рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрддрд╛рд░ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рдХрдИ рддрд░реАрдХреЗ рдФрд░ рдпрджрд┐ рдЖрдкрдХреЛ рдЗрд╕рдХреА рдкрд░рд╡рд╛рд╣ рдирд╣реАрдВ рд╣реИ рддреЛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрд░рд╡рд╛рд╣ рд╣реИ рдпрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдмрдирд╛ рд░рд╣реЗ рд╣реИрдВ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╡рд░реНрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред

рдХреНрдпрд╛ рдЖрдк рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рджреЗ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдмрд╛рдж рдореЗрдВ рдЧрдиреНрджрд╛ рдХреНрдпреЛрдВ рд╣реЛрдЧрд╛? рдЖрдкрдХреА рдХреНрдпрд╛ рдЪрд┐рдВрддрд╛рдПрдВ рд╣реИрдВ?
PriorityQueue рдПрдХ рдЕрд╡рдзрд╛рд░рдгрд╛ рд╣реИ рдЬрд┐рд╕рдХрд╛ рд▓реЛрдЧ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕ рддрд░рд╣ рдирд╛рдорд┐рдд рдПрдХ рдкреНрд░рдХрд╛рд░ рдХрд╛ рд╣реЛрдирд╛ рдЙрдкрдпреЛрдЧреА рд╣реИ, рд╣реИ рдирд╛? [...] рдореИрдВ рдзреАрд░реЗ-рдзреАрд░реЗ IHeap + ArrayHeap рдХреЗ рд╡рд┐рдЪрд╛рд░ рдХреЛ рдЧрд░реНрдо рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдЕрднреА рддрдХ рдкреВрд░реА рддрд░рд╣ рдЖрд╢реНрд╡рд╕реНрдд рдирд╣реАрдВ рд╣реВрдВ ...

@karelz рдореЗрд░реЗ рдЕрдиреБрднрд╡ рд╕реЗ, рдореБрдЭреЗ рдПрдХ рдЕрдореВрд░реНрдд рд╣реЛрдирд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд▓рдЧрддрд╛ рд╣реИ ( IPriorityQueue рдпрд╛ IHeap )ред рдЗрд╕ рддрд░рд╣ рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж рдПрдХ рдбреЗрд╡рд▓рдкрд░ рдХреЛрдб рд▓рд┐рдЦ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рдбрд┐рдХреВрдкреНрдб рд╣реИред рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдПрдХ рдЗрдВрдЯрд░рдлреЗрд╕ (рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рдмрдЬрд╛рдп) рдХреЗ рдЦрд┐рд▓рд╛рдл рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИ, рдЗрд╕рдореЗрдВ рдЕрдзрд┐рдХ рд▓рдЪреАрд▓рд╛рдкрди рдФрд░ рдЖрдИрдУрд╕реА рднрд╛рд╡рдирд╛ рд╣реИред рдРрд╕реЗ рдХреЛрдб рдХреЗ рд▓рд┐рдП рдпреВрдирд┐рдЯ рдкрд░реАрдХреНрд╖рдг рд▓рд┐рдЦрдирд╛ рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реИ (рдирд┐рд░реНрднрд░рддрд╛ рдЗрдВрдЬреЗрдХреНрд╢рди рд╣реЛрдиреЗ рд╕реЗ рдХреЛрдИ рднреА рдЕрдкрдиреЗ рдирдХрд▓реА IPriorityQueue рдпрд╛ IHeap рдХреЛ рдЗрдВрдЬреЗрдХреНрдЯ рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рджреЗрдЦ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдХрд┐рд╕ рд╕рдордп рдФрд░ рдХрд┐рд╕ рддрд░реНрдХ рдХреЗ рд╕рд╛рде рдХреМрди рд╕реЗ рддрд░реАрдХреЛрдВ рдХреЛ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ)ред рдПрдмреНрд╕реНрдЯреНрд░рдХреНрд╢рди рдЕрдЪреНрдЫреЗ рд╣реИрдВред

рдпрд╣ рд╕рдЪ рд╣реИ рдХрд┐ "рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрддрд╛рд░" рд╢рдмреНрдж рдХрд╛ рдкреНрд░рдпреЛрдЧ рдЖрдорддреМрд░ рдкрд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрддрд╛рд░ рдХреЛ рдкреНрд░рднрд╛рд╡реА рдврдВрдЧ рд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рд╣реА рддрд░реАрдХрд╛ рд╣реИ - рдПрдХ рдвреЗрд░ рдХреЗ рд╕рд╛рдеред рдвреЗрд░ рд╕рд╛рд░реЗ рдкреНрд░рдХрд╛рд░ рдХреЗ рдвреЗрд░ред рддреЛ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ:

class ArrayHeap : IPriorityQueue {}
class PairingHeap : IPriorityQueue {}
class FibonacciHeap : IPriorityQueue {}
class BinomialHeap : IPriorityQueue {}

рдпрд╛

class ArrayHeap : IHeap {}
class PairingHeap : IHeap {}
class FibonacciHeap : IHeap {}
class BinomialHeap : IHeap {}

рдореЗрд░реЗ рд▓рд┐рдП, рджреВрд╕рд░рд╛ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдмреЗрд╣рддрд░ рджрд┐рдЦрддрд╛ рд╣реИред рдЖрдк рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреИрд╕рд╛ рдорд╣рд╕реВрд╕ рдХрд░рддреЗ рд╣реИрдВ?

PriorityQueue рд╡рд░реНрдЧ рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ - рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдмрд╣реБрдд рдЕрд╕реНрдкрд╖реНрдЯ рд╣реЛрдЧрд╛ рдФрд░ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЗрд╕ рддрд░рд╣ рдХреЗ рд╡рд░реНрдЧ рдХреЗ рдЦрд┐рд▓рд╛рдл рд╣реИред рдПрдХ рдЕрд╕реНрдкрд╖реНрдЯ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдЕрдЪреНрдЫрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдирд╣реАрдВред рдпрджрд┐ рдпрд╣ рдПрдХ рдмрд╛рдЗрдирд░реА рдвреЗрд░ рд╣реИ, рддреЛ рдмрд╕ рдЗрд╕реЗ BinaryHeap рдХреЙрд▓ рдХрд░реЗрдВред рдЕрдЧрд░ рдпрд╣ рдХреБрдЫ рдФрд░ рд╣реИ, рддреЛ рдЙрд╕реА рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдирд╛рдо рджреЗрдВред

SortedDictionary рдЬреИрд╕реА рдХрдХреНрд╖рд╛рдУрдВ рдХреА рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЗ рдХрд╛рд░рдг рдореИрдВ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдХрдХреНрд╖рд╛рдУрдВ рдХрд╛ рдирд╛рдордХрд░рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реВрдВред рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рдмреАрдЪ рдмрд╣реБрдд рднреНрд░рдо рд╣реИ рдХрд┐ рдЗрд╕рдХрд╛ рдХреНрдпрд╛ рдорддрд▓рдм рд╣реИ рдФрд░ рдпрд╣ SortedList рд╕реЗ рдХреИрд╕реЗ рднрд┐рдиреНрди рд╣реИред рдЕрдЧрд░ рдЗрд╕реЗ рд╕рд┐рд░реНрдл BinarySearchTree рдХрд╣рд╛ рдЬрд╛рддрд╛, рддреЛ рдЬреАрд╡рди рдЖрд╕рд╛рди рд╣реЛ рдЬрд╛рддрд╛ рдФрд░ рд╣рдо рдШрд░ рдЬрд╛рдХрд░ рдЕрдкрдиреЗ рдмрдЪреНрдЪреЛрдВ рдХреЛ рдкрд╣рд▓реЗ рджреЗрдЦ рдкрд╛рддреЗред

рдЖрдЗрдП рдПрдХ рдвреЗрд░ рдХреЛ рдПрдХ рдвреЗрд░ рдирд╛рдо рджреЗрдВред

@benaadams рдЙрдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдХреЛ рдЗрд╕реЗ CoreFX рдореЗрдВ рдмрдирд╛рдирд╛ рд╣реИ (рдпрд╛рдиреА рдЗрд╕реЗ CoreFX рдХреЛрдб рдХреЗ рд▓рд┐рдП рд╣реА рдореВрд▓реНрдпрд╡рд╛рди рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдпрд╛ рдЗрд╕реЗ рдЙрддрдирд╛ рд╣реА рдмреБрдирд┐рдпрд╛рджреА рдФрд░ рд╡реНрдпрд╛рдкрдХ рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдЬрд┐рддрдирд╛ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдкрд╣рд▓реЗ рд╕реЗ рд╣реИ) - рд╣рдордиреЗ рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдЙрди рдЪреАрдЬреЛрдВ рдкрд░ рдХрд╛рдлреА рдЪрд░реНрдЪрд╛ рдХреА рд╣реИред . рдЕрднреА рднреА 100% рдЖрдо рд╕рд╣рдорддрд┐ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдХреЛрдИ рднреА CoreFX рдореЗрдВ рдФрд░ рд╕рдВрдЧреНрд░рд╣ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрддреНрд╕реБрдХ рдирд╣реАрдВ рд╣реИред

рд╕рдмрд╕реЗ рд╕рдВрднрд╛рд╡рд┐рдд рдкрд░рд┐рдгрд╛рдо (рдкрдХреНрд╖рдкрд╛рддреА рджрд╛рд╡рд╛, рдХреНрдпреЛрдВрдХрд┐ рдореБрдЭреЗ рд╕рдорд╛рдзрд╛рди рдкрд╕рдВрдж рд╣реИ) рдпрд╣ рд╣реИ рдХрд┐ рд╣рдо рдПрдХ рдФрд░ рд░реЗрдкреЛ рдмрдирд╛рдПрдВрдЧреЗ рдФрд░ рдЗрд╕реЗ PowerCollections рдХреЗ рд╕рд╛рде рдкреНрд░рд╛рдЗрдо рдХрд░реЗрдВрдЧреЗ рдФрд░ рдлрд┐рд░ рд╕рдореБрджрд╛рдп рдХреЛ рд╣рдорд╛рд░реА рдЯреАрдо рд╕реЗ рдХреБрдЫ рдмреБрдирд┐рдпрд╛рджреА рдорд╛рд░реНрдЧрджрд░реНрд╢рди/рдирд┐рдЧрд░рд╛рдиреА рдХреЗ рд╕рд╛рде рдЗрд╕рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдиреЗ рджреЗрдВрдЧреЗред
BTW: @terrajobst рдХреЛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЗрд╕рдХреЗ рд▓рд╛рдпрдХ рдирд╣реАрдВ рд╣реИ ("рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд╛рд░рд┐рд╕реНрдерд┐рддрд┐рдХреА рддрдВрддреНрд░ рдореЗрдВ рдмреЗрд╣рддрд░ рдФрд░ рдЕрдзрд┐рдХ рдкреНрд░рднрд╛рд╡рд╢рд╛рд▓реА рдЪреАрдЬреЗрдВ рд╣реИрдВ") рдФрд░ рд╣рдореЗрдВ рд╕рдореБрджрд╛рдп рдХреЛ рдЗрд╕реЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░реЛрддреНрд╕рд╛рд╣рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП (рдореМрдЬреВрджрд╛ PowerCollections рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рдХрд░реЗрдВ) рдФрд░ рдЗрд╕реЗ рд╣рдорд╛рд░реЗ рдореЗрдВ рд╕реЗ рдПрдХ рдирд╣реАрдВ рдмрдирд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рд░реЗрдкреЛ - рдХреБрдЫ рд╣рд╛рд▓рд╛рдВрдХрд┐ рд╣рдорд╛рд░реЗ рд╕рд╛рдордиреЗ рдЪрд░реНрдЪрд╛ рдФрд░ рдирд┐рд░реНрдгрдпред
// рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдорд╛рд░реЗ рд╡рд┐рдЪрд╛рд░ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд╕рдореБрджрд╛рдп рдХреЗ рд▓рд┐рдП рдЗрд╕ рд╕рдорд╛рдзрд╛рди рдкрд░ рдХреВрджрдиреЗ рдХрд╛ рдЕрд╡рд╕рд░ рд╣реИ ;-)ред рдЗрд╕рд╕реЗ рдЪрд░реНрдЪрд╛ (рдФрд░ рдореЗрд░реА рд╡рд░реАрдпрддрд╛) рдореВрдХ рд╣реЛ рдЬрд╛рдПрдЧреА ;-)

@pgolebiowski рдЖрдк рдзреАрд░реЗ-рдзреАрд░реЗ рдореБрдЭреЗ Heap рдХрд╛ рд╣реЛрдирд╛ PriorityQueue рд╕реЗ рдмреЗрд╣рддрд░ рд╣реИ - рд╣рдореЗрдВ рдХреЗрд╡рд▓ рдордЬрдмреВрдд рдорд╛рд░реНрдЧрджрд░реНрд╢рди рдФрд░ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА "рдЗрд╕ рддрд░рд╣ рдЖрдк PriorityQueue - Heap рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ

рд╣рд╛рд▓рд╛рдВрдХрд┐, рдореИрдВ CoreFX рдореЗрдВ 1 рд╕реЗ рдЕрдзрд┐рдХ рд╣реАрдк рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░рдиреЗ рдореЗрдВ рдмрд╣реБрдд рд╕рдВрдХреЛрдЪ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред 98%+ 'рд╕рд╛рдорд╛рдиреНрдп' рд╕реА # рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреА рдкрд░рд╡рд╛рд╣ рдирд╣реАрдВ рд╣реИред рд╡реЗ рдпрд╣ рд╕реЛрдЪрдирд╛ рднреА рдирд╣реАрдВ рдЪрд╛рд╣рддреЗ рдХрд┐ рдХреМрди рд╕рд╛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╣реИ, рдЙрдиреНрд╣реЗрдВ рдмрд╕ рдХреБрдЫ рдРрд╕рд╛ рдЪрд╛рд╣рд┐рдП рдЬреЛ рдХрд╛рдо рдкреВрд░рд╛ рдХрд░реЗред рдкреНрд░рддреНрдпреЗрдХ SW рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рдЯреБрдХрдбрд╝реЗ рдХреЛ рдЙрдЪреНрдЪ-рдкреНрд░рджрд░реНрд╢рди рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрдХрд░ рдбрд┐рдЬрд╝рд╛рдЗрди рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдареАрдХ рд╣реА рдРрд╕рд╛ рд╣реИред рд╕рднреА рдПрдХрддрд░рдлрд╛ рдЯреВрд▓, UI рдРрдкреНрд╕ рдЖрджрд┐ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪреЗрдВред рдЬрдм рддрдХ рдЖрдк рдЙрдЪреНрдЪ-рдкреНрд░рджрд░реНрд╢рди рд╕реНрдХреЗрд▓рд┐рдВрдЧ-рдЖрдЙрдЯ рд╕рд┐рд╕реНрдЯрдо рдбрд┐рдЬрд╝рд╛рдЗрди рдирд╣реАрдВ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдЬрд╣рд╛рдВ рдпрд╣ рдбреАрдПрд╕ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдкрде рдкрд░ рд╣реИ, рдЖрдкрдХреЛ рдкрд░рд╡рд╛рд╣ рдирд╣реАрдВ рдХрд░рдиреА рдЪрд╛рд╣рд┐рдПред

рдЙрд╕реА рддрд░рд╣, рдореБрдЭреЗ рдкрд░рд╡рд╛рд╣ рдирд╣реАрдВ рд╣реИ рдХрд┐ SortedDictionary рдпрд╛ ArrayList рдпрд╛ рдЕрдиреНрдп рдбреАрдПрд╕ рдХреИрд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ - рд╡реЗ рдЕрдкрдирд╛ рдХрд╛рдо рд╢рд╛рд▓реАрдирддрд╛ рд╕реЗ рдХрд░рддреЗ рд╣реИрдВред рдореИрдВ (рдХрдИ рдЕрдиреНрдп) рд╕рдордЭрддрд╛ рд╣реВрдВ рдХрд┐ рдЕрдЧрд░ рдореБрдЭреЗ рдЕрдкрдиреЗ рдкрд░рд┐рджреГрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЗрди рдбреАрдПрд╕ рдореЗрдВ рд╕реЗ рдЙрдЪреНрдЪ-рдкрд░рдл рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдореЗрд░реЗ рдкрд░рд┐рджреГрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд

рд╣рдореЗрдВ 98% рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдХрд╛ рдЕрдиреБрдХреВрд▓рди рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рди рдХрд┐ 2% рдХреЗ рд▓рд┐рдПред рдпрджрд┐ рд╣рдо рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╡рд┐рдХрд▓реНрдк (рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди) рдкреНрд░рд╕реНрддреБрдд рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рд╕рднреА рдХреЛ рдирд┐рд░реНрдгрдп рд▓реЗрдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╛рдзреНрдп рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдордиреЗ рдХреЗрд╡рд▓ 98% рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдЕрдирд╛рд╡рд╢реНрдпрдХ рднреНрд░рдо рдкреИрджрд╛ рдХрд┐рдпрд╛ рд╣реИред рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдпрд╣ рдЗрд╕рдХреЗ рд▓рд╛рдпрдХ рд╣реИ ...
IMO .NET рдкрд╛рд░рд┐рд╕реНрдерд┐рддрд┐рдХреА рддрдВрддреНрд░ рдореЗрдВ рдХрдИ рдПрдкреАрдЖрдИ (рди рдХреЗрд╡рд▓ рд╕рдВрдЧреНрд░рд╣) рдХреА рдПрдХрд▓-рдИрд╢ рдкрд╕рдВрдж рдХреА рдкреЗрд╢рдХрд╢ рдХрд░рдиреЗ рдореЗрдВ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рдкреНрд░рджрд░реНрд╢рди рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рд╕рд╛рде, рдЕрдзрд┐рдХрд╛рдВрд╢ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реИред рдФрд░ рдкрд╛рд░рд┐рд╕реНрдерд┐рддрд┐рдХреА рддрдВрддреНрд░ рдХреА рдкреЗрд╢рдХрд╢ рдЬреЛ рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдЪреНрдЪ-рдкреНрд░рджрд░реНрд╢рди рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдЬрд┐рдиреНрд╣реЗрдВ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рдФрд░ рдЬреЛ рдЧрд╣рд░реА рдЦреБрджрд╛рдИ рдХрд░рдиреЗ рдФрд░ рдЕрдзрд┐рдХ рд╕реАрдЦрдиреЗ / рд╢рд┐рдХреНрд╖рд┐рдд рд╡рд┐рдХрд▓реНрдк рдФрд░ рдЯреНрд░реЗрдбрдСрдлрд╝ рдмрдирд╛рдиреЗ рдХреЗ рдЗрдЪреНрдЫреБрдХ рд╣реИрдВред

рдЙрд╕ рдиреЗ рдХрд╣рд╛, рдПрдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╣реЛрдиреЗ рдкрд░ IHeap (рдЬреИрд╕реЗ IDictionary рдФрд░ IReadOnlyDictionary ), рд╕рдордЭ рдореЗрдВ рдЖ рд╕рдХрддрд╛ рд╣реИ - рдореБрдЭреЗ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдереЛрдбрд╝рд╛ рдФрд░ рд╕реЛрдЪрдирд╛ рд╣реЛрдЧрд╛ / рдПрдкреАрдЖрдИ рд╕рдореАрдХреНрд╖рд╛ рд╡рд┐рд╢реЗрд╖рдЬреНрдЮреЛрдВ рд╕реЗ рдкреВрдЫрдирд╛ рд╣реЛрдЧрд╛ рд╕реНрдерд╛рди ...

рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА (рдХреБрдЫ рд╣рдж рддрдХ) рд╣реИ рдЬреЛ @pgolebiowski ISet<T> рдФрд░ HashSet<T> ред рдореИрдВ рдХрд╣рддрд╛ рд╣реВрдВ рдмрд╕ рдЗрд╕реЗ рджрд░реНрдкрдг рдХрд░реЛред рддреЛ рдЙрдкрд░реЛрдХреНрдд рдПрдкреАрдЖрдИ рдХреЛ рдПрдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ ( IPriorityQueue<T> ) рдореЗрдВ рдмрджрд▓ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдлрд┐рд░ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди ( HeapPriorityQueue<T> ) рд╣реИ рдЬреЛ рдЖрдВрддрд░рд┐рдХ рд░реВрдк рд╕реЗ рдПрдХ рдвреЗрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ рдЬреЛ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд░реВрдк рд╕реЗ рдЕрдкрдиреА рдХрдХреНрд╖рд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдЬрд╛рдЧрд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВред

рдХреНрдпрд╛ рдЗрд╕реЗ ( PriorityQueue<T> ) рднреА IList<T> рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП?

@karelz ICollection рд╕рд╛рде рдореЗрд░реА рд╕рдорд╕реНрдпрд╛ SyncRoot рдФрд░ IsSynchronized ; рдпрд╛ рддреЛ рдЙрдиреНрд╣реЗрдВ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рд▓реЙрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП рдЕрддрд┐рд░рд┐рдХреНрдд рдЖрд╡рдВрдЯрди рд╣реИ; рдпрд╛ рд╡реЗ рдлреЗрдВрдХ рджреЗрддреЗ рд╣реИрдВ, рдЬрдм рдЙрдирдХрд╛ рд╣реЛрдирд╛ рдереЛрдбрд╝рд╛ рд╡реНрдпрд░реНрде рд╣реЛрддрд╛ рд╣реИред

@benaadams рдпрд╣ рднреНрд░рд╛рдордХ рд╣реЛрдЧрд╛ред рдЪреВрдВрдХрд┐ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрддрд╛рд░реЛрдВ рдХреЗ 99.99% рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╕рд░рдгреА рдкрд░ рдЖрдзрд╛рд░рд┐рдд рдвреЗрд░ рд╣реИрдВ (рдФрд░ рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВ рджреЗрдЦ рд╕рдХрддрд╛ рд╣реВрдВ рдХрд┐ рд╣рдо рдпрд╣рд╛рдВ рднреА рдПрдХ рдХреЗ рд╕рд╛рде рдЬрд╛ рд░рд╣реЗ рд╣реИрдВ), рдХреНрдпрд╛ рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╕рд░рдгреА рдХреА рдЖрдВрддрд░рд┐рдХ рд╕рдВрд░рдЪрдирд╛ рддрдХ рдкрд╣реБрдВрдЪ рдХреЛ рдЙрдЬрд╛рдЧрд░ рдХрд░рдирд╛ рд╣реЛрдЧрд╛?

рдорд╛рди рд▓реЗрдВ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ 4, 8, 10, 13, 30, 45 рддрддреНрд╡реЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдвреЗрд░ рд╣реИред рдЖрджреЗрд╢ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрддреЗ рд╣реБрдП, рдЙрдиреНрд╣реЗрдВ 0, 1, 2, 3, 4, 5 рдЗрдВрдбреЗрдХреНрд╕ рджреНрд╡рд╛рд░рд╛ рдПрдХреНрд╕реЗрд╕ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдвреЗрд░ рдХреА рдЖрдВрддрд░рд┐рдХ рд╕рдВрд░рдЪрдирд╛ рд╣реИ [4, 8, 30, 10, 13, 45] (рдмрд╛рдЗрдирд░реА рдореЗрдВ, рдЪрддреБрд░реНрдзрд╛рддреБрдХ рдореЗрдВ рдпрд╣ рдЕрд▓рдЧ рд╣реЛрдЧрд╛)ред

  • рдЗрдВрдбреЗрдХреНрд╕ i рдкрд░ рдЖрдВрддрд░рд┐рдХ рдирдВрдмрд░ рд▓реМрдЯрд╛рдирд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ рдХреЛрдИ рдорддрд▓рдм рдирд╣реАрдВ рд░рдЦрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд▓рдЧрднрдЧ рдордирдорд╛рдирд╛ рд╣реИред
  • рдХрд┐рд╕реА рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдХреНрд░рдо рдореЗрдВ рд▓реМрдЯрд╛рдирд╛ (рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХреЗ рдЖрдзрд╛рд░ рдкрд░) рдмрд╣реБрдд рдорд╣рдВрдЧрд╛ рд╣реИ -- рдпрд╣ рд░реИрдЦрд┐рдХ рд╣реИред
  • рдЗрдирдореЗрдВ рд╕реЗ рдХрд┐рд╕реА рдПрдХ рдХреЛ рд╡рд╛рдкрд╕ рдХрд░рдирд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЕрдиреНрдп рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ рд╕рдордЭ рдореЗрдВ рдирд╣реАрдВ рдЖрддрд╛ рд╣реИред рдЕрдХреНрд╕рд░ рдпрд╣ рдХреЗрд╡рд▓ i рддрддреНрд╡реЛрдВ рдХреЛ рдкреЙрдк рдХрд░ рд░рд╣рд╛ рд╣реИ, i -th рддрддреНрд╡ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд░рд╣рд╛ рд╣реИ, рдФрд░ рдлрд┐рд░ рдЙрдиреНрд╣реЗрдВ рдПрдХ рдмрд╛рд░ рдлрд┐рд░ рд╕реЗ рдзрдХреНрдХрд╛ рджреЗ рд░рд╣рд╛ рд╣реИред

IList<T> рдЖрдо рддреМрд░ рдкрд░ рдЗрд╕рдХреЗ рд▓рд┐рдП рдЪреБрдЯреАрд▓рд╛ рд╕рдорд╛рдзрд╛рди рд╣реИ: рдореИрдВ рдЕрдкрдиреЗ рдПрдкреАрдЖрдИ рджреНрд╡рд╛рд░рд╛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд┐рдП рдЧрдП рд╕рдВрдЧреНрд░рд╣ рдХреЗ рд╕рд╛рде рд▓рдЪреАрд▓рд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рдФрд░ рдореИрдВ рдЙрдиреНрд╣реЗрдВ рдЧрд┐рдирдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рд▓реЗрдХрд┐рди IEnumerable<T> рдорд╛рдзреНрдпрдо рд╕реЗ рдЖрд╡рдВрдЯрд┐рдд рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛

рдмрд╕ рдПрд╣рд╕рд╛рд╕ рд╣реБрдЖ рдХрд┐ рдЗрд╕рдХреЗ рд▓рд┐рдП рдХреЛрдИ рд╕рд╛рдорд╛рдиреНрдп рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдирд╣реАрдВ рд╣реИ

ICollection<T>
{
    int Count
    CopyTo(T[], int index)
}

рддреЛ рдЙрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдХрднреА рднреА рдзреНрдпрд╛рди рди рджреЗрдВ ЁЯШв (рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЗрд╕рдХреА рддрд░рд╣ IReadOnlyCollection)

рд▓реЗрдХрд┐рди рдПрдиреНрдпреВрдорд░реЗрдЯрд░ рдкрд░ рд░реАрд╕реЗрдЯ рдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЦрд░рд╛рдм рд╣реИ рдФрд░ рдЗрд╕реЗ рдлреЗрдВрдХ рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдПред

рддреЛ рдореЗрд░реЗ рд╕реБрдЭрд╛рдП рдЧрдП рдкрд░рд┐рд╡рд░реНрддрди

public bool TryDequeue(out T item);     // Add
public bool TryPeek(out T item);        // Add

public struct Enumerator : IEnumerator<T>
{
    public T Current { get; }
    object IEnumerator.Current { get; }
    public bool MoveNext();
    void IEnumerator.Reset();             // Explicit
    public void Dispose();
}

рдЪреВрдВрдХрд┐ рдЖрдк рд╡рд┐рдзрд┐рдпреЛрдВ рдкрд░ рдЪрд░реНрдЪрд╛ рдХрд░ рд░рд╣реЗ рд╣реИрдВ... рд╣рдо рдЕрднреА рддрдХ IHeap рдмрдирд╛рдо IPriorityQueue рдмрд╛рдд рдкрд░ рд╕рд╣рдордд рдирд╣реАрдВ рд╣реБрдП рд╣реИрдВ - рдпрд╣ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рдирд╛рдо рдФрд░ рддрд░реНрдХ рдХреЛ рдереЛрдбрд╝рд╛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ, рдореБрдЭреЗ рд╡рд░реНрддрдорд╛рди рдПрдкреАрдЖрдИ рдкреНрд░рд╕реНрддрд╛рд╡ рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЧрд╛рдпрдм рд╣реИрдВ:

  • рдХрддрд╛рд░ рд╕реЗ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рддрддреНрд╡ рдХреЛ рд╣рдЯрд╛рдиреЗ рдХреА рдХреНрд╖рдорддрд╛
  • рдХрд┐рд╕реА рддрддреНрд╡ рдХреА рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХреЛ рдЕрджреНрдпрддрди рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛
  • рдЗрди рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреЛ рдорд┐рд▓рд╛рдиреЗ рдХреА рдХреНрд╖рдорддрд╛

рдпреЗ рдСрдкрд░реЗрд╢рди рдмрд╣реБрдд рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИрдВ, рдЦрд╛рд╕рдХрд░ рдХрд┐рд╕реА рддрддреНрд╡ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ред рдЗрд╕рдХреЗ рдмрд┐рдирд╛, рдХрдИ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреЛ рдЖрд╕рд╛рдиреА рд╕реЗ рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд╣рдореЗрдВ рдПрдХ рд╣реИрдВрдбрд▓ рдкреНрд░рдХрд╛рд░ рдкреЗрд╢ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдпрд╣рд╛рдВ рдПрдкреАрдЖрдИ рдореЗрдВ , рд╣реИрдВрдбрд▓ IHeapNode ред рдЬреЛ IHeap рд░рд╛рд╕реНрддреЗ рдкрд░ рдЬрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдФрд░ рддрд░реНрдХ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЕрдиреНрдпрдерд╛ рд╣рдореЗрдВ PriorityQueueHandle рдкреНрд░рдХрд╛рд░ рдкреЗрд╢ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдЬреЛ рд╣рдореЗрд╢рд╛ рдПрдХ рдвреЗрд░ рдиреЛрдб рд╣реЛрдЧрд╛ ... рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдпрд╣ рд╕рд┐рд░реНрдл рдЕрд╕реНрдкрд╖реНрдЯ рд╣реИ рдЗрд╕рдХрд╛ рдХреНрдпрд╛ рдЕрд░реНрде рд╣реИ ... рдЬрдмрдХрд┐, рдПрдХ рдвреЗрд░ рдиреЛрдб - рд╣рд░ рдХреЛрдИ рд╕рд╛рдорд╛рди рдЬрд╛рдирддрд╛ рд╣реИ рдФрд░ рдХрд▓реНрдкрдирд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рд╡реЗ рдХрд┐рд╕ рдЪреАрдЬ рд╕реЗ рдирд┐рдкрдЯ рд░рд╣реЗ рд╣реИрдВред

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

рдЖрдкрдХреЗ рдХреНрдпрд╛ рд╡рд┐рдЪрд╛рд░ рд╣реИрдВ рджреЛрд╕реНрддреЛрдВ?

IHeapNode clr рдкреНрд░рдХрд╛рд░ KeyValuePair рд╕реЗ рдмрд╣реБрдд рдЕрд▓рдЧ рдирд╣реАрдВ рд╣реИ?

рд╣рд╛рд▓рд╛рдБрдХрд┐ рдпрд╣ рддрдм рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХреЛ рдЕрд▓рдЧ рдХрд░ рд░рд╣рд╛ рд╣реИ рдФрд░ рдЕрдм рдпрд╣ PriorityQueue<TKey, TValue> рд╕рд╛рде IComparer<TKey> comparer ?

KeyValuePair рди рдХреЗрд╡рд▓ рдПрдХ рд╕рдВрд░рдЪрдирд╛ рд╣реИ рдмрд▓реНрдХрд┐ рдЗрд╕рдХреЗ рдЧреБрдг рдХреЗрд╡рд▓ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИрдВред рдпрд╣ рдореВрд▓ рд░реВрдк рд╕реЗ рд╕рдВрд░рдЪрдирд╛ рдХреЗ рдЕрджреНрдпрддрди рд╣реЛрдиреЗ рдкрд░ рд╣рд░ рдмрд╛рд░ рдПрдХ рдирдИ рд╡рд╕реНрддреБ рдмрдирд╛рдиреЗ рдХреЗ рдмрд░рд╛рдмрд░ рд╣реЛрдЧрд╛ред

рдХреЗрд╡рд▓ рдПрдХ рдХреБрдВрдЬреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╕рдорд╛рди рдХреБрдВрдЬрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ -- рдпрд╣ рдЬрд╛рдирдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рдХрд┐рд╕ рддрддреНрд╡ рдХреЛ рдЕрджреНрдпрддрди/рдирд┐рдХрд╛рд▓рдирд╛ рд╣реИред

IHeapNode рдФрд░ ArrayHeapNode :

    /// <summary>
    /// Represents a heap node. It is a wrapper around a key and a value.
    /// </summary>
    public interface IHeapNode<out TKey, out TValue>
    {
        /// <summary>
        /// Gets the key for the value.
        /// </summary>
        TKey Key { get; }

        /// <summary>
        /// Gets the value contained in the node.
        /// </summary>
        TValue Value { get; }
    }

    /// <summary>
    /// Represents a node of an <see cref="ArrayHeap{TKey,TValue}"/>.
    /// </summary>
    public class ArrayHeapNode<TKey, TValue> : IHeapNode<TKey, TValue>
    {
        /// <inheritdoc cref="IHeapNode{TKey,TValue}.Key"/>
        public TKey Key { get; internal set; }

        /// <inheritdoc cref="IHeapNode{TKey,TValue}.Value"/>
        public TValue Value { get; }

        /// <summary>
        /// The index of the node within an <see cref="ArrayHeap{TKey,TValue}"/>.
        /// </summary>
        public int Index { get; internal set; }

        /// <summary>
        /// Initializes a new instance of the <see cref="ArrayHeapNode{TKey,TValue}"/> class,
        /// containing the specified value.
        /// </summary>
        public ArrayHeapNode(TKey key, TValue value, int index)
        {
            this.Key = key;
            this.Value = value;
            this.Index = index;
        }
    }

рдФрд░ ArrayHeap рднреАрддрд░ рдЕрджреНрдпрддрди рд╡рд┐рдзрд┐:

        /// <inheritdoc cref="IHeap{TKey,TValue}.Update"/>
        public override void Update(ArrayHeapNode<TKey, TValue> node, TKey key)
        {
            if (node == null)
                throw new ArgumentNullException(nameof(node));

            var relation = this.Comparer.Compare(key, node.Key);
            node.Key = key;

            if (relation < 0)
                this.MoveUp(node);
            else
                this.MoveDown(node);
        }

рд▓реЗрдХрд┐рди рдЕрдм рд╣реАрдк рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рддрддреНрд╡ рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рд╡рд╕реНрддреБ рд╣реИ; рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ рдореБрдЭреЗ рдкреНрд░рд╛рдпреЛрд░рд┐рдЯреА рдХреНрдпреВ рд╡реНрдпрд╡рд╣рд╛рд░ рдЪрд╛рд╣рд┐рдП рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдпреЗ рдЕрддрд┐рд░рд┐рдХреНрдд рдЖрд╡рдВрдЯрди рдирд╣реАрдВ рдЪрд╛рд╣рд┐рдП?

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

рд╕рд╛рде рд╣реА, рд╣рд░ рджреВрд╕рд░реЗ рдвреЗрд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ - рддрддреНрд╡ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдХреЗрд╡рд▓ рдиреЛрдбреНрд╕ рд╣реИрдВред рдпрд╣ рдЕрдиреНрдп рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд╣реИ, рдпрд╣рд╛рдВ рдпрд╣ рдереЛрдбрд╝рд╛ рдХреГрддреНрд░рд┐рдо рд╣реИ, рд▓реЗрдХрд┐рди рдЕрджреНрдпрддрди/рдирд┐рдХрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИред

рдЬрд╛рд╡рд╛ рдореЗрдВ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрддрд╛рд░ рдореЗрдВ рддрддреНрд╡реЛрдВ рдХреЛ рдЕрджреНрдпрддрди рдХрд░рдиреЗ рдХрд╛ рд╡рд┐рдХрд▓реНрдк рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред рдирддреАрдЬрд╛:

рдЬрдм рдореИрдВрдиреЗ рдПрд▓реНрдЧреЛрдХрд┐рдЯ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд▓рд┐рдП рдвреЗрд░ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдФрд░ рдЗрди рд╕рднреА рдбрд┐рдЬрд╛рдЗрди рд╕рдорд╕реНрдпрд╛рдУрдВ рдореЗрдВ рдЖрдпрд╛ рддреЛ рдореИрдВрдиреЗ рд╕реЛрдЪрд╛ рдХрд┐ рдпрд╣реА рдХрд╛рд░рдг рд╣реИ рдХрд┐ .NET рдХреЗ рд▓реЗрдЦрдХреЛрдВ рдиреЗ рдЗрд╕ рддрд░рд╣ рдХреА рдмреБрдирд┐рдпрд╛рджреА рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛ рдХреЛ рдвреЗрд░ (рдпрд╛ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрддрд╛рд░) рдХреЗ рд░реВрдк рдореЗрдВ рдЬреЛрдбрд╝рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдирд╣реАрдВ рдХрд┐рдпрд╛ред рдХреНрдпреЛрдВрдХрд┐ рди рддреЛ рдбрд┐рдЬрд╛рдЗрди рдЕрдЪреНрдЫрд╛ рд╣реИред рдкреНрд░рддреНрдпреЗрдХ рдХреА рдЕрдкрдиреА рдХрдорд┐рдпрд╛рдВ рд╣реИрдВред

рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ - рдпрджрд┐ рд╣рдо рдЙрдирдХреА рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рддрддреНрд╡реЛрдВ рдХреЗ рдХреБрд╢рд▓ рдХреНрд░рдо рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рд╡рд╛рд▓реА рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛ рдЬреЛрдбрд╝рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рдЗрд╕реЗ рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕рдореЗрдВ рд╕реЗ рддрддреНрд╡реЛрдВ рдХреЛ рдЕрдкрдбреЗрдЯ / рд╣рдЯрд╛рдиреЗ рдЬреИрд╕реА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВред

рдпрджрд┐ рдЖрдк рдХрд┐рд╕реА рдЕрдиреНрдп рд╡рд╕реНрддреБ рдХреЗ рд╕рд╛рде рдХрд┐рд╕реА рд╕рд░рдгреА рдореЗрдВ рддрддреНрд╡реЛрдВ рдХреЛ рд▓рдкреЗрдЯрдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмреБрд░рд╛ рдорд╣рд╕реВрд╕ рдХрд░рддреЗ рд╣реИрдВ - рдпрд╣ рдПрдХрдорд╛рддреНрд░ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реИред рдПрдХ рдФрд░ рд╡рд┐рд▓рдп рд╣реЛ рд░рд╣рд╛ рд╣реИред рд╕рд░рдгреА-рдЖрдзрд╛рд░рд┐рдд рдвреЗрд░ рдХреЗ рд╕рд╛рде, рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрдХреНрд╖рдо рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐... рдпрджрд┐ рд╣рдо рдкреЗрдпрд░рд┐рдВрдЧ рд╣реАрдк рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ ( рдкреЗрдпрд░рд┐рдВрдЧ рд╣реАрдк: рд╕реНрд╡-рд╕рдорд╛рдпреЛрдЬрди рд╣реАрдк рдХрд╛ рдПрдХ рдирдпрд╛ рд░реВрдк ), рддреЛ:

  • рддрддреНрд╡реЛрдВ рдХреЗ рд╣реИрдВрдбрд▓ рдЕрджреНрднреБрдд рдиреЛрдб рд╣реИрдВ - рдЗрдиреНрд╣реЗрдВ рд╡реИрд╕реЗ рднреА рдЖрд╡рдВрдЯрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЗрд╕рд▓рд┐рдП рдХреЛрдИ рдЧрдиреНрджрд╛ рд╕рд╛рдорд╛рди рдирд╣реАрдВ рд╣реИ
  • рд╡рд┐рд▓рдп рд╕реНрдерд┐рд░ рд╣реИ (рд╕рд░рдгреА-рдЖрдзрд╛рд░рд┐рдд рд╕рдорд╛рдзрд╛рди рдореЗрдВ рд░реИрдЦрд┐рдХ рдмрдирд╛рдо)

рдЕрд╕рд▓ рдореЗрдВ, рд╣рдо рдЗрд╕реЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рддрд░реАрдХреЗ рд╕реЗ рд╣рд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

  • IHeap рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдЬреЛрдбрд╝реЗрдВ рдЬреЛ рд╕рднреА рд╡рд┐рдзрд┐рдпреЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ
  • рдЙрди рд╕рднреА рд╣реИрдВрдбрд▓ рдХреЗ рд╕рд╛рде ArrayHeap рдФрд░ PairingHeap , рдЕрдкрдбреЗрдЯ рдХрд░рдирд╛, рд╣рдЯрд╛рдирд╛, рдорд░реНрдЬ рдХрд░рдирд╛
  • PriorityQueue рдЬреЛ рдПрдкреАрдЖрдИ рдХреЛ рд╕рд░рд▓ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП ArrayHeap рдЖрд╕рдкрд╛рд╕ рд╕рд┐рд░реНрдл рдПрдХ рд░реИрдкрд░ рд╣реИ

PriorityQueue System.Collections.Generic рдФрд░ рд╕рднреА рдвреЗрд░ System.Collections.Specialized ред

рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ?

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

рдпрд╣реА рдХрд╛рд░рдг рд╣реИ рдХрд┐ рдореИрдВ HeapNode рд╡рд░реНрдЧ рдХрд╛ рдкреНрд░рд╢рдВрд╕рдХ рдирд╣реАрдВ рд╣реВрдВред рдЗрдореЛ рдЙрд╕ рддрд░рд╣ рдХреА рдЪреАрдЬ рдХреЗрд╡рд▓ рдЖрдВрддрд░рд┐рдХ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП рдФрд░ рдпрджрд┐ рд╕рдВрднрд╡ рд╣реЛ рддреЛ рдПрдкреАрдЖрдИ рдХреЛ рдкрд╣рд▓реЗ рд╕реЗ рдореМрдЬреВрдж рдореМрдЬреВрджрд╛ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдкрд░реНрджрд╛рдлрд╛рд╢ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП - рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдХреЗрд╡реАрдкреА рд╢рд╛рдпрджред

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

рдмреАрдЯреАрдбрдмреНрд▓реВ: рдПрдХ рд▓рд┐рдВрдХреНрдб рд╕реВрдЪреА рдореЗрдВ рдиреЛрдб рдХреНрд▓рд╛рд╕ рд╣реЛрддрд╛ рд╣реИ рддрд╛рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЙрдЪрд┐рдд рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХреЗрдВред рдпрд╣ рдХрд╛рдлреА рд╣рдж рддрдХ рдорд┐рд░рд░рд┐рдВрдЧ рд╣реИред

рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛ рдореЗрдВ рддрддреНрд╡реЛрдВ рдХреА рдкреНрд░рд╛рдердорд┐рдХрддрд╛рдУрдВ рдХреЛ рдЕрджреНрдпрддрди рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдирд╣реАрдВ рд╣реЛрдВрдЧреЗред

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

        public override void Update(ArrayHeapNode<TKey, TValue> node, TKey key)
        {

        }

рдЖрдкрдХреЗ рдкрд╛рд╕ рдЙрджрд╛рд╣рд░рдг рд╣реЛрдЧрд╛

        public override void Update(TKey item, TValue priority)
        {

        }

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

void Update(TKey item, TValue priority)

рдкрд╣рд▓рд╛ -- рдЖрдкрдХреЗ рдХреЛрдб рдореЗрдВ TKey рдФрд░ TValue рдХреНрдпрд╛ рд╣реИ? рдпрд╣ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП? рдХрдВрдкреНрдпреВрдЯрд░ рд╡рд┐рдЬреНрдЮрд╛рди рдореЗрдВ рд╕рдореНрдореЗрд▓рди рдпрд╣ рд╣реИ рдХрд┐:

  • рдХреБрдВрдЬреА = рдкреНрд░рд╛рдердорд┐рдХрддрд╛
  • value = рдЬреЛ рднреА рдЖрдк рдХрд┐рд╕реА рддрддреНрд╡ рдореЗрдВ рд╕реНрдЯреЛрд░ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ

рджреВрд╕рд░рд╛:

рдЗрдореЛ рдЕрдзрд┐рдХрд╛рдВрд╢ рд▓реЛрдЧ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВ рдФрд░ рдЯреАрд╡реАрдПрд▓реНрдпреВ рдПрдХ рдЕрдирд╛рд╡рд╢реНрдпрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯрддрд╛ рд╣реЛрдЧреАред

рдХреГрдкрдпрд╛ "рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдкреНрд░рдХрд╛рд░" рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реЗрдВред рдореИрдВ рдорд╣рд╕реВрд╕ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ рдХрд┐ рдЖрдк рдХреЗрд╡рд▓ PriorityQueue<T> , рдХреНрдпрд╛ рдпрд╣ рд╕рд╣реА рд╣реИ? рдпрджрд┐ рдРрд╕рд╛ рд╣реИ, рддреЛ рдЗрд╕ рддрдереНрдп рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ рдХрд┐ рдПрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдЕрдкрдиреА рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдФрд░ рдореВрд▓реНрдп рдХреЗ рдЖрд╕рдкрд╛рд╕ рдПрдХ рдирдпрд╛ рд╡рд░реНрдЧ, рдПрдХ рдЖрд╡рд░рдг рдмрдирд╛рдирд╛ рд╣реЛрдЧрд╛, рд╕рд╛рде рд╣реА IComparable рдЬреИрд╕реЗ рдХреБрдЫ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдпрд╛ рдПрдХ рдХрд╕реНрдЯрдо рддреБрд▓рдирд┐рддреНрд░ рдкреНрд░рджрд╛рди рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдмрд╣реБрдд рдЧрд░реАрдмред

рдкрд╣рд▓рд╛ -- рдЖрдкрдХреЗ рдХреЛрдб рдореЗрдВ TKey рдФрд░ TValue рдХреНрдпрд╛ рд╣реИ?

рдЖрдЗрдЯрдо рдФрд░ рдЖрдЗрдЯрдо рдХреА рдкреНрд░рд╛рдердорд┐рдХрддрд╛ред рдЖрдк рдЙрдиреНрд╣реЗрдВ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдФрд░ рдЙрд╕ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рд╕реЗ рдЬреБрдбрд╝реЗ рдЖрдЗрдЯрдо рдХреЗ рд░реВрдк рдореЗрдВ рд╕реНрд╡рд┐рдЪ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдлрд┐рд░ рдЖрдкрдХреЗ рдкрд╛рд╕ рдПрдХ рд╕рдВрдЧреНрд░рд╣ рд╣реИ рдЬрд┐рд╕рдореЗрдВ TKeys рдЖрд╡рд╢реНрдпрдХ рд░реВрдк рд╕реЗ рдЕрджреНрд╡рд┐рддреАрдп рдирд╣реАрдВ рд╣реИрдВ (рдпрд╛рдиреА рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдкреНрд░рд╛рдердорд┐рдХрддрд╛рдУрдВ рдХреА рдЕрдиреБрдорддрд┐)ред рдореИрдВ рдЗрд╕рдХреЗ рдЦрд┐рд▓рд╛рдл рдирд╣реАрдВ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдореЗрд░реЗ рд▓рд┐рдП рдЯреАрдХреЗрдИ рдЖрдорддреМрд░ рдкрд░ рд╡рд┐рд╢рд┐рд╖реНрдЯрддрд╛ рдХрд╛ рддрд╛рддреНрдкрд░реНрдп рд╣реИред

рдореБрджреНрджрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдПрдХ рдЕрджреНрдпрддрди рд╡рд┐рдзрд┐ рдХреЛ рдЙрдЬрд╛рдЧрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдиреЛрдб рд╡рд░реНрдЧ рдХреЛ рдЙрдЬрд╛рдЧрд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред

рдХреГрдкрдпрд╛ "рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдкреНрд░рдХрд╛рд░" рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реЗрдВред рдореИрдВ рдорд╣рд╕реВрд╕ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ рдХрд┐ рдЖрдк рдХреЗрд╡рд▓ рдкреНрд░рд╛рдпреЛрд░рд┐рдЯреА рдХреНрдпреВ рд░рдЦрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдХреНрдпрд╛ рд╡рд╣ рд╕рд╣реА рд╣реИ?

рд╣рд╛рдВред рд╣рд╛рд▓рд╛рдБрдХрд┐ рдЗрд╕ рд╕реВрддреНрд░ рдХреЛ рдлрд┐рд░ рд╕реЗ рдкрдврд╝рдХрд░, рдореИрдВ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЖрд╢реНрд╡рд╕реНрдд рдирд╣реАрдВ рд╣реВрдБ рдХрд┐ рдпрд╣ рдорд╛рдорд▓рд╛ рд╣реИред

рдпрджрд┐ рдРрд╕рд╛ рд╣реИ, рддреЛ рдЗрд╕ рддрдереНрдп рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ рдХрд┐ рдПрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдЕрдкрдиреА рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдФрд░ рдореВрд▓реНрдп рдХреЗ рдЖрд╕рдкрд╛рд╕ рдПрдХ рдирдпрд╛ рд╡рд░реНрдЧ, рдПрдХ рдЖрд╡рд░рдг рдмрдирд╛рдирд╛ рд╣реЛрдЧрд╛, рд╕рд╛рде рд╣реА IComparable рдЬреИрд╕реА рдХрд┐рд╕реА рдЪреАрдЬрд╝ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдпрд╛ рдПрдХ рдХрд╕реНрдЯрдо рддреБрд▓рдирд┐рддреНрд░ рдкреНрд░рджрд╛рди рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдмрд╣реБрдд рдЧрд░реАрдмред

рдЖрдк рдЧрд▓рдд рдирд╣реАрдВ рд╣реЛред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЙрдЪрд┐рдд рдорд╛рддреНрд░рд╛ рдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдХрд╕реНрдЯрдо рддреБрд▓рдирд┐рддреНрд░ рддрд░реНрдХ рдХреЗ рд╕рд╛рде рдПрдХ рд░реИрдкрд░ рдкреНрд░рдХрд╛рд░ рдмрдирд╛рдирд╛

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХреЛ PriorityQueue<T> рдХрд╣рд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рди рдХрд┐ Heap<T> , ArrayHeap<T> рдпрд╛ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ QuaternaryHeap<T> рдХреЛ рд╢реЗрд╖ .Net рдХреЗ рдЕрдиреБрд░реВрдк рд░рд╣рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП:

  • рд╣рдорд╛рд░реЗ рдкрд╛рд╕ List<T> , рди рдХрд┐ ArrayList<T> ред
  • рд╣рдорд╛рд░реЗ рдкрд╛рд╕ Dictionary<K, V> , рди рдХрд┐ HashTable<K, V> ред
  • рд╣рдорд╛рд░реЗ рдкрд╛рд╕ ImmutableList<T> , рди рдХрд┐ ImmutableAVLTreeList<T> ред
  • рд╣рдорд╛рд░реЗ рдкрд╛рд╕ Array.Sort() , рди рдХрд┐ Array.IntroSort() ред

рдРрд╕реЗ рдкреНрд░рдХрд╛рд░ рдХреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЖрдорддреМрд░ рдкрд░ рдкрд░рд╡рд╛рд╣ рдирд╣реАрдВ рдХрд░рддреЗ рдХрд┐ рдЙрдиреНрд╣реЗрдВ рдХреИрд╕реЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдпрд╣ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдкреНрд░рдХрд╛рд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рдмрд╕реЗ рдкреНрд░рдореБрдЦ рдмрд╛рдд рдирд╣реАрдВ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред

рдпрджрд┐ рдРрд╕рд╛ рд╣реИ, рддреЛ рдЗрд╕ рддрдереНрдп рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ рдХрд┐ рдПрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдЕрдкрдиреА рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдФрд░ рдореВрд▓реНрдп рдХреЗ рдЖрд╕рдкрд╛рд╕ рдПрдХ рдирдпрд╛ рд╡рд░реНрдЧ, рдПрдХ рдЖрд╡рд░рдг рдмрдирд╛рдирд╛ рд╣реЛрдЧрд╛, рд╕рд╛рде рд╣реА IComparable рдЬреИрд╕реА рдХрд┐рд╕реА рдЪреАрдЬрд╝ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдпрд╛ рдПрдХ рдХрд╕реНрдЯрдо рддреБрд▓рдирд┐рддреНрд░ рдкреНрд░рджрд╛рди рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред

рдЖрдк рдЧрд▓рдд рдирд╣реАрдВ рд╣реЛред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЙрдЪрд┐рдд рдорд╛рддреНрд░рд╛ рдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдХрд╕реНрдЯрдо рддреБрд▓рдирд┐рддреНрд░ рддрд░реНрдХ рдХреЗ рд╕рд╛рде рдПрдХ рд░реИрдкрд░ рдкреНрд░рдХрд╛рд░ рдмрдирд╛рдирд╛ рд╣реЛрдЧрд╛ред

рд╕рд╛рд░рд╛рдВрд╢ рдПрдкреАрдЖрдИ рдореЗрдВ рддреБрд▓рдирд╛ рдкреНрд░рджрд╛рди рдХрд┐рдП рдЧрдП рддреБрд▓рдирд╛рдХрд░реНрддрд╛ IComparer<T> comparer рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди рдХреА рдЬрд╛рддреА рд╣реИ, рдХрд┐рд╕реА рд░реИрдкрд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИред рдЕрдХреНрд╕рд░ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдкреНрд░рдХрд╛рд░ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реЛрдЧреА рдЬреИрд╕реЗ рдПрдХ рд╕рдордп рдЕрдиреБрд╕реВрдЪрдХ рдХреЗ рдкрд╛рд╕ рдкреНрд░рдХрд╛рд░ рдХреА рд╕рдВрдкрддреНрддрд┐ рдХреЗ рд░реВрдк рдореЗрдВ рдирд┐рд╖реНрдкрд╛рджрди рд╕рдордп рд╣реЛрдЧрд╛ред

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

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

@svick

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХреЛ PriorityQueue<T> рдХрд╣рд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рди рдХрд┐ Heap<T> , ArrayHeap<T> рдпрд╛ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ QuaternaryHeap<T> рдХреЛ рд╢реЗрд╖ .Net рдХреЗ рдЕрдиреБрд░реВрдк рд░рд╣рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдореЗрд░рд╛ рдорд╛рдирд╡рддрд╛ рдкрд░ рд╕реЗ рд╡рд┐рд╢реНрд╡рд╛рд╕ рдЙрда рд░рд╣рд╛ рд╣реИред

  • рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛ рдХреЛ рдХреЙрд▓ рдХрд░рдирд╛ PriorityQueue рдмрд╛рдХреА .NET рдХреЗ рд╕рд╛рде рд╕рдВрдЧрдд рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ Heap рдХреЙрд▓ рдХрд░рдирд╛ рдирд╣реАрдВ рд╣реИ? рдвреЗрд░ рдореЗрдВ рдХреБрдЫ рдЧрдбрд╝рдмрдбрд╝ рд╣реИ? рдЙрд╕реА рддрд░рд╣ рдвреЗрд░ рдФрд░ рдХрддрд╛рд░реЛрдВ рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред
  • ArrayHeap -> QuaternaryHeap рд▓рд┐рдП рдмреЗрд╕ рдХреНрд▓рд╛рд╕ред рдмрд╣реБрдд рдмрдбрд╝рд╛ рдлрд░реНрдХред
  • рдЪрд░реНрдЪрд╛ рдХреЛрдИ рдЕрдЪреНрдЫрд╛ рдирд╛рдо рд▓реЗрдиреЗ рдХреА рдирд╣реАрдВ рд╣реИред рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдбрд┐рдЬрд╝рд╛рдЗрди рдкрде рдХрд╛ рдЕрдиреБрд╕рд░рдг рдХрд░рдиреЗ рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдмрд╣реБрдд рд╕рд╛рд░реА рдЪреАрдЬрд╝реЗрдВ рдЖ рд░рд╣реА рд╣реИрдВред рдХреГрдкрдпрд╛ рдзрд╛рдЧреЗ рдХреЛ рджреЛрдмрд╛рд░рд╛ рдкрдврд╝реЗрдВред
  • рд╣реИрд╢рдЯреЗрдмрд▓ , рдРрд░реЗрд▓рд┐рд╕реНрдЯ ред рдЙрдирдХрд╛ рдЕрд╕реНрддрд┐рддреНрд╡ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИред рдмреАрдЯреАрдбрдмреНрд▓реВ, рдПрдХ "рд╕реВрдЪреА" рдЖрдИрдПрдордУ рдирд╛рдордХрд░рдг рдХрд╛ рдПрдХ рдмрд╣реБрдд рдмреБрд░рд╛ рд╡рд┐рдХрд▓реНрдк рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХрд╛ рдкрд╣рд▓рд╛ рд╡рд┐рдЪрд╛рд░ рдпрд╣ рд╣реИ рдХрд┐ List рдПрдХ рд╕реВрдЪреА рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдПрдХ рд╕реВрдЪреА рдирд╣реАрдВ рд╣реИред рдореИрдВ
  • рдпрд╣ рдордЬрд╝реЗ рдХрд░рдиреЗ рдФрд░ рдпрд╣ рдХрд╣рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдХрд┐рд╕реА рдЪреАрдЬрд╝ рдХреЛ рдХреИрд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рд╕рд╛рд░реНрдердХ рдирд╛рдо рджреЗрдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИ рдЬреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рддреБрд░рдВрдд рджрд┐рдЦрд╛рддрд╛ рд╣реИ рдХрд┐ рд╡реЗ рдХрд┐рд╕рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣реИрдВред

рдмрд╛рдХреА .NET рдХреЗ рд╕рд╛рде рд╕рдВрдЧрдд рд░рд╣рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕ рддрд░рд╣ рдХреА рд╕рдорд╕реНрдпрд╛рдУрдВ рдореЗрдВ рднрд╛рдЧ рд▓реЗрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ?

рдФрд░ рдореИрдВ рд╡рд╣рд╛рдВ рдХреНрдпрд╛ рджреЗрдЦрддрд╛ рд╣реВрдВ... рдЬреЙрди рд╕реНрдХреАрдЯ рдиреЗ рдХрд╣рд╛ рдХрд┐ SortedDictionary рдХреЛ SortedTree рдХрд╣рд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рдЕрдзрд┐рдХ рдмрд╛рд░реАрдХреА рд╕реЗ рджрд░реНрд╢рд╛рддрд╛ рд╣реИред

@pgolebiowski

рдвреЗрд░ рдореЗрдВ рдХреБрдЫ рдЧрдбрд╝рдмрдбрд╝ рд╣реИ?

рд╣рд╛рдВ, рдпрд╣ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддрд╛ рд╣реИ, рдЙрдкрдпреЛрдЧ рдХрд╛ рдирд╣реАрдВред

рдЙрд╕реА рддрд░рд╣ рдвреЗрд░ рдФрд░ рдХрддрд╛рд░реЛрдВ рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

рди рддреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдирд╛рдо рдЖрдкрдХреЛ рдпрд╣ рдирд╣реАрдВ рдмрддрд╛рддрд╛ рдХрд┐ рд╡реЗ рд╕рд░рдгреА-рдЖрдзрд╛рд░рд┐рдд рд╣реИрдВред

ArrayHeap -> QuaternaryHeap рд▓рд┐рдП рдмреЗрд╕ рдХреНрд▓рд╛рд╕ред рдмрд╣реБрдд рдмрдбрд╝рд╛ рдлрд░реНрдХред

рд╣рд╛рдВ, рдореИрдВ рдЖрдкрдХрд╛ рдбрд┐рдЬрд╛рдЗрди рд╕рдордЭрддрд╛ рд╣реВрдВред рдореИрдВ рдЬреЛ рдХрд╣ рд░рд╣рд╛ рд╣реВрдВ рд╡рд╣ рдпрд╣ рд╣реИ рдХрд┐ рдЗрд╕рдореЗрдВ рд╕реЗ рдХреЛрдИ рднреА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд╕рд╛рдордиреЗ рдирд╣реАрдВ рдЖрдирд╛ рдЪрд╛рд╣рд┐рдПред

рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдбрд┐рдЬрд╝рд╛рдЗрди рдкрде рдХрд╛ рдЕрдиреБрд╕рд░рдг рдХрд░рдиреЗ рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдмрд╣реБрдд рд╕рд╛рд░реА рдЪреАрдЬрд╝реЗрдВ рдЖ рд░рд╣реА рд╣реИрдВред рдХреГрдкрдпрд╛ рдзрд╛рдЧреЗ рдХреЛ рджреЛрдмрд╛рд░рд╛ рдкрдврд╝реЗрдВред

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

рдпрджрд┐ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЙрдирдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рд╣реИ, рддреЛ рд╡рд╣реАрдВ рдЕрдиреНрдп рдкреБрд╕реНрддрдХрд╛рд▓рдп (рдЬреИрд╕реЗ рдЖрдкрдХреЗ рд╕реНрд╡рдпрдВ рдХреЗ) рдЖрддреЗ рд╣реИрдВред

рд╣реИрд╢рдЯреЗрдмрд▓, ArrayList. рдЙрдирдХрд╛ рдЕрд╕реНрддрд┐рддреНрд╡ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИред

рд╣рд╛рдВ, рд╡реЗ .Net Framework 1.0 рд╡рд░реНрдЧ рд╣реИрдВ рдЬрд┐рдирдХрд╛ рдЕрдм рдХреЛрдИ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдЬрд╣рд╛рдВ рддрдХ тАЛтАЛрдореИрдВ рдмрддрд╛ рд╕рдХрддрд╛ рд╣реВрдВ, рдЙрдирдХреЗ рдирд╛рдо рдЬрд╛рд╡рд╛ рд╕реЗ рдХреЙрдкреА рдХрд┐рдП рдЧрдП рдереЗ рдФрд░ рдиреЗрдЯ рдлреНрд░реЗрдорд╡рд░реНрдХ 2.0 рдбрд┐рдЬрд╛рдЗрдирд░реЛрдВ рдиреЗ рдЙрд╕ рд╕рдореНрдореЗрд▓рди рдХрд╛ рдкрд╛рд▓рди рдирд╣реАрдВ рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред рдореЗрд░реА рд░рд╛рдп рдореЗрдВ рдпрд╣ рд╕рд╣реА рдлреИрд╕рд▓рд╛ рдерд╛ред

рдмреАрдЯреАрдбрдмреНрд▓реВ, рдПрдХ "рд╕реВрдЪреА" рдЖрдИрдПрдордУ рдирд╛рдордХрд░рдг рдХрд╛ рдПрдХ рдмрд╣реБрдд рдмреБрд░рд╛ рд╡рд┐рдХрд▓реНрдк рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХрд╛ рдкрд╣рд▓рд╛ рд╡рд┐рдЪрд╛рд░ рдпрд╣ рд╣реИ рдХрд┐ List рдПрдХ рд╕реВрдЪреА рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдПрдХ рд╕реВрдЪреА рдирд╣реАрдВ рд╣реИред

рдпрд╣ рд╣реИред рдпрд╣ рдПрдХ рд▓рд┐рдВрдХреНрдб рд╕реВрдЪреА рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рд╡рд╣реА рдмрд╛рдд рдирд╣реАрдВ рд╣реИред рдФрд░ рдореБрдЭреЗ рд╣рд░ рдЬрдЧрд╣ ArrayList рдпрд╛ ResizeArray (F# рдХрд╛ рдирд╛рдо List<T> ) рд▓рд┐рдЦрдирд╛ рдкрд╕рдВрдж рдирд╣реАрдВ рд╣реИред

рдпрд╣ рд╕рд╛рд░реНрдердХ рдирд╛рдо рджреЗрдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИ рдЬреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рддреБрд░рдВрдд рджрд┐рдЦрд╛рддрд╛ рд╣реИ рдХрд┐ рд╡реЗ рдХрд┐рд╕рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣реИрдВред

рдпрджрд┐ рд╡реЗ QuaternaryHeap рджреЗрдЦрддреЗ рд╣реИрдВ рддреЛ рдЕрдзрд┐рдХрд╛рдВрд╢ рд▓реЛрдЧреЛрдВ рдХреЛ рдкрддрд╛ рдирд╣реАрдВ рд╣реЛрдЧрд╛ рдХрд┐ рд╡реЗ рдХреНрдпрд╛ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░ рд░рд╣реЗ рд╣реИрдВред рджреВрд╕рд░реА рдУрд░, рдпрджрд┐ рд╡реЗ PriorityQueue рджреЗрдЦрддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рд╡реЗ рдХрд┐рд╕рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рднрд▓реЗ рд╣реА рдЙрдирдХреЗ рдкрд╛рд╕ рдХреЛрдИ рд╕реАрдПрд╕ рдкреГрд╖реНрдарднреВрдорд┐ рди рд╣реЛред рдЙрдиреНрд╣реЗрдВ рдпрд╣ рдирд╣реАрдВ рдкрддрд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреНрдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдЗрд╕реА рдХреЗ рд▓рд┐рдП рд╣реИред

@ianhays

рдкрд╣рд▓рд╛ -- рдЖрдкрдХреЗ рдХреЛрдб рдореЗрдВ TKey рдФрд░ TValue рдХреНрдпрд╛ рд╣реИ?

рдЖрдЗрдЯрдо рдФрд░ рдЖрдЗрдЯрдо рдХреА рдкреНрд░рд╛рдердорд┐рдХрддрд╛ред рдЖрдк рдЙрдиреНрд╣реЗрдВ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдФрд░ рдЙрд╕ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рд╕реЗ рдЬреБрдбрд╝реЗ рдЖрдЗрдЯрдо рдХреЗ рд░реВрдк рдореЗрдВ рд╕реНрд╡рд┐рдЪ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдлрд┐рд░ рдЖрдкрдХреЗ рдкрд╛рд╕ рдПрдХ рд╕рдВрдЧреНрд░рд╣ рд╣реИ рдЬрд┐рд╕рдореЗрдВ TKeys рдЖрд╡рд╢реНрдпрдХ рд░реВрдк рд╕реЗ рдЕрджреНрд╡рд┐рддреАрдп рдирд╣реАрдВ рд╣реИрдВ (рдпрд╛рдиреА рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдкреНрд░рд╛рдердорд┐рдХрддрд╛рдУрдВ рдХреА рдЕрдиреБрдорддрд┐)ред рдореИрдВ рдЗрд╕рдХреЗ рдЦрд┐рд▓рд╛рдл рдирд╣реАрдВ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдореЗрд░реЗ рд▓рд┐рдП рдЯреАрдХреЗрдИ рдЖрдорддреМрд░ рдкрд░ рд╡рд┐рд╢рд┐рд╖реНрдЯрддрд╛ рдХрд╛ рддрд╛рддреНрдкрд░реНрдп рд╣реИред

рдЪрд╛рдмрд┐рдпрд╛рдВ - рдЪреАрдЬреЗрдВ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рдпреЛрдЧ рдХреА рдЬрд╛рддреА рд╣реИрдВред рдХреБрдВрдЬрд┐рдпреЛрдВ рдХрд╛ рдЕрджреНрд╡рд┐рддреАрдп рд╣реЛрдирд╛ рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реИред рд╣рдо рдРрд╕реА рдзрд╛рд░рдгрд╛ рдирд╣реАрдВ рдмрдирд╛ рд╕рдХрддреЗред

рдореБрджреНрджрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдПрдХ рдЕрджреНрдпрддрди рд╡рд┐рдзрд┐ рдХреЛ рдЙрдЬрд╛рдЧрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдиреЛрдб рд╡рд░реНрдЧ рдХреЛ рдЙрдЬрд╛рдЧрд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред

рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛтАЛтАЛрд╣реИ рдХрд┐ рдпрд╣ рд╣реИ: рджреЗрд╢реА рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдореЗрдВ рдХрдореА-рдХреБрдВрдЬреА/рд╡реГрджреНрдзрд┐-рдХреБрдВрдЬреА рд╕рдорд░реНрдерди ред рдЗрд╕ рд╡рд┐рд╖рдп рдкрд░ рднреА, рдЗрд╕рд▓рд┐рдП рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛рдУрдВ рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд╣рд╛рдпрдХ рд╡рд░реНрдЧ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ:

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЙрдЪрд┐рдд рдорд╛рддреНрд░рд╛ рдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдХрд╕реНрдЯрдо рддреБрд▓рдирд┐рддреНрд░ рддрд░реНрдХ рдХреЗ рд╕рд╛рде рдПрдХ рд░реИрдкрд░ рдкреНрд░рдХрд╛рд░ рдмрдирд╛рдирд╛ рд╣реЛрдЧрд╛ред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдРрд╕реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреА рдПрдХ рдЙрдЪрд┐рдд рдорд╛рддреНрд░рд╛ рднреА рд╣реИ рдЬрд┐рдирдХреЗ рдкрд╛рд╕ рдкрд╣рд▓реЗ рд╕реЗ рдПрдХ рддреБрд▓рдиреАрдп рдкреНрд░рдХрд╛рд░ рд╣реИ рдЬрд┐рд╕реЗ рд╡реЗ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдореЗрдВ рд░рдЦрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдпрд╛ рдПрдХ рдкрд░рд┐рднрд╛рд╖рд┐рдд рддреБрд▓рдирд┐рддреНрд░ рдХреЗ рд╕рд╛рде рдПрдХ рдкреНрд░рдХрд╛рд░ред рд╕рд╡рд╛рд▓ рдпрд╣ рд╣реИ рдХрд┐ рджреЛрдиреЛрдВ рдореЗрдВ рд╕реЗ рдХреМрди рд╕рд╛ рдХреИрдВрдк рдмрдбрд╝рд╛ рд╣реИред

рдореИрдВ рджреВрд╕рд░реЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рдЬрд╛рдирддрд╛, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд╣рд░ рдмрд╛рд░ рдХрд╕реНрдЯрдо рддреБрд▓рдирд┐рддреНрд░ рддрд░реНрдХ рдХреЗ рд╕рд╛рде рдПрдХ рд░реИрдкрд░ рдмрдирд╛рдирд╛ рдкрдбрд╝рддрд╛ рд╣реИ рдЬрдм рдореИрдВ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрддрд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдмрд╣реБрдд рднрдпрд╛рдирдХ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ ...

рдПрдХ рдФрд░ рд╡рд┐рдЪрд╛рд░ - рдорд╛рди рд▓реЗрдВ рдХрд┐ рдореИрдВрдиреЗ рдПрдХ рд░реИрдкрд░ рдмрдирд╛рдпрд╛ рд╣реИ:

class Wrapper
{
    public int Priority { get; set; }
    public string SomeStuff ...
}

рдореИрдВ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рд╛рде PriorityQueue<T> рдлрд╝реАрдб рдХрд░рддрд╛ рд╣реВрдВред рдЗрд╕рд▓рд┐рдП рдпрд╣ рдЗрд╕рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЕрдкрдиреЗ рддрддреНрд╡реЛрдВ рдХреЛ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рджреЗрддрд╛ рд╣реИред рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рдЗрд╕рдиреЗ рдХреБрдЫ рдкреНрд░рдореБрдЦ рдЪрдпрдирдХрд░реНрддрд╛рдУрдВ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рд╣реИред рдРрд╕рд╛ рдбрд┐рдЬрд╝рд╛рдЗрди рдвреЗрд░ рдХреЗ рдЖрдВрддрд░рд┐рдХ рдХрд╛рд░реНрдп рдХреЛ рдХреНрд░реИрд╢ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдЖрдк рдХрд┐рд╕реА рднреА рд╕рдордп рдкреНрд░рд╛рдердорд┐рдХрддрд╛рдПрдВ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдЖрдк рддрддреНрд╡ рдХреЗ рд╕реНрд╡рд╛рдореА рд╣реИрдВред рдвреЗрд░ рдХреЛ рдЕрджреНрдпрддрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рд╕реВрдЪрдирд╛ рддрдВрддреНрд░ рдирд╣реАрдВ рд╣реИред рдЖрдк рдЙрд╕ рд╕рдм рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдФрд░ рдЙрд╕реЗ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реЛрдВрдЧреЗред рдореЗрд░реЗ рд▓рд┐рдП рдмрд╣реБрдд рдЦрддрд░рдирд╛рдХ рдФрд░ рд╕реАрдзреЗ-рд╕реАрдзреЗ рдирд╣реАрдВред

рдореЗрд░реЗ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рд╣реИрдВрдбрд▓ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ - рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ рдкреНрд░рдХрд╛рд░ рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп рдерд╛ред рдФрд░ рд╡рд┐рд╢рд┐рд╖реНрдЯрддрд╛ рдХреЗ рд╕рд╛рде рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рдереАред

IMO рдореБрдЭреЗ рдПрдХ IHeap рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдФрд░ рдлрд┐рд░ рдЙрд╕ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдХреНрд▓рд╛рд╕ API рдХрд╛ рд╡рд┐рдЪрд╛рд░ рдкрд╕рдВрдж рд╣реИред рдореИрдВ рдЗрд╕ рдкрд░ @ianhays рдХреЗ рд╕рд╛рде рдПрдкрд┐рд╕ рдХреЛ рдЙрдЬрд╛рдЧрд░ рдирд╣реАрдВ рдХрд░рдиреЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдПрдХ рдПрдкреАрдЖрдИ рд╕рдореАрдХреНрд╖рд╛ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА рдФрд░ рд╣рдо PriorityQueue рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣реЗрдВрдЧреЗред

рджреВрд╕рд░рд╛ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХрддрд╛рд░ рдореЗрдВ рдореВрд▓реНрдпреЛрдВ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдиреЛрдб рдЖрдВрддрд░рд┐рдХ/рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╡рд░реНрдЧ рд╣реЛрдиреЗ рдХреА рдХреЛрдИ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдЕрддрд┐рд░рд┐рдХреНрдд рдЖрд╡рдВрдЯрди рдХреА рдХреЛрдИ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рд╣рдо рдХреБрдЫ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЕрдиреБрд╕рд░рдг рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ IDictionary рдХрд░рддрд╛ рд╣реИ рдФрд░ рд╕рдВрдЦреНрдпрд╛рддреНрдордХ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдореВрд▓реНрдпреЛрдВ рдХреЛ рдЙрддреНрдкрдиреНрди рдХрд░рддреЗ рд╕рдордп KeyValuePairрд╡рд╕реНрддреБрдУрдВ рдЕрдЧрд░ рд╣рдо рдкреНрд░рддреНрдпреЗрдХ рдЖрдЗрдЯрдо рдХреЗ рд▓рд┐рдП рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рд░рдЦрдиреЗ рдХреЗ рд╡рд┐рдХрд▓реНрдк рдХреЗ рд▓рд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ (рдЬреЛ рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдпрд╣ рдЬрд╛рдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рддрд░реАрдХрд╛ рд╣реИ, рдореИрдВ рдкреНрд░рддрд┐ рдЖрдЗрдЯрдо рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЖрд╢реНрд╡рд╕реНрдд рдирд╣реАрдВ рд╣реВрдВ)ред рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рддрд░реАрдХрд╛ рдЬреЛ рдореИрдВ рдЪрд╛рд╣реВрдВрдЧрд╛ рд╡рд╣ рд╣реЛрдЧрд╛ PriorityQueue<T> (рдпрд╣ рдирд╛рдо рд╕рд┐рд░реНрдл рдЗрд╕реЗ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИ)ред рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рд╕рд╛рде рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рдкреВрд░реЗ рдмреАрд╕реАрдПрд▓ IComparer<T> рд╕рд╛рде рдХрд░рддрд╛ рд╣реИ рдФрд░ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдЙрд╕ рддреБрд▓рдирд╛рдХрд░реНрддрд╛ рдХреЗ рд╕рд╛рде рддреБрд▓рдирд╛ рдХрд░ рд░рд╣рд╛ рд╣реИред рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХреЛ рдкрд╛рд░рд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдПрдкреАрдЖрдИ рдХреЛ рдЙрдЬрд╛рдЧрд░ рдХрд░рдиреЗ рдХреА рдХреЛрдИ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХреБрдЫ рдПрдкреАрдЖрдИ рдХреЛ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдкреНрд░рд╛рдкреНрдд рд╣реЛрдиреЗ рд╕реЗ рдпрд╣ "рдХрдо рдкреНрд░рдпреЛрдЧ рдХрд░рдиреЗ рдпреЛрдЧреНрдп" рдпрд╛ рд╕рд╛рдорд╛рдиреНрдп рдЧреНрд░рд╛рд╣рдХреЛрдВ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рд╣реЛ рдЬрд╛рдПрдЧрд╛ рдЬреЛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдмрдирдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдлрд┐рд░ рд╣рдо рдЙрдиреНрд╣реЗрдВ рджреЗрддреЗ рд╕рдордп рдЗрд╕рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЛ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ рдФрд░ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рдмрдирд╛ рд░рд╣реЗ рд╣реИрдВред рдХрд╕реНрдЯрдо IComparer<T> рд░рдЦрдиреЗ рдХрд╛ рд╡рд┐рдХрд▓реНрдк рд╕рдмрд╕реЗ рдЙрдЪрд┐рдд рд╣реЛрдЧрд╛ рдФрд░ рдмреАрд╕реАрдПрд▓ рдореЗрдВ рд╣рдорд╛рд░реЗ рджрд┐рд╢рд╛рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХрд╛ рдкрд╛рд▓рди рдХрд░реЗрдЧрд╛ред

рдирд╛рдо рд╡реЗ рд╣реИрдВ рдЬреЛ рд╡реЗ рдХрд░рддреЗ рд╣реИрдВ, рди рдХрд┐ рд╡реЗ рдЗрд╕реЗ рдХреИрд╕реЗ рдХрд░рддреЗ рд╣реИрдВред

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

рдЙрд╕реА рддрд░рд╣ рдвреЗрд░ рдФрд░ рдХрддрд╛рд░реЛрдВ рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

Stack рдПрдХ рдЕрд╕реАрдорд┐рдд рдЖрдХрд╛рд░ рдмрджрд▓рдиреЗ рд╡рд╛рд▓рд╛ рд╕рд░рдгреА рд╣реИ рдФрд░ Queue рдПрдХ рдЕрд╕реАрдорд┐рдд рдЖрдХрд╛рд░ рдмрджрд▓рдиреЗ рд╡рд╛рд▓реЗ рд╕рд░реНрдХреБрд▓рд░ рдмрдлрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЙрдирдХрд╛ рдирд╛рдо рдЙрдирдХреА рдЕрдореВрд░реНрдд рдЕрд╡рдзрд╛рд░рдгрд╛рдУрдВ рдХреЗ рдирд╛рдо рдкрд░ рд░рдЦрд╛ рдЧрдпрд╛ рд╣реИред рд╕реНрдЯреИрдХ (рд╕рд╛рд░ рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░) : рд▓рд╛рд╕реНрдЯ-рдЗрди-рдлрд░реНрд╕реНрдЯ-рдЖрдЙрдЯ (LIFO), рдХреНрдпреВ (рд╕рд╛рд░ рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░) : рдлрд░реНрд╕реНрдЯ-рдЗрди-рдлрд░реНрд╕реНрдЯ-рдЖрдЙрдЯ (рдлреАрдлреЛ)

рд╣реИрд╢рдЯреЗрдмрд▓, ArrayList. рдЙрдирдХрд╛ рдЕрд╕реНрддрд┐рддреНрд╡ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИред

рд╢рдмреНрджрдХреЛрд╢ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐

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

рдЖрдк @terrajobst рдХреЗ рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рд╕рдВрдЧрддрддрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдпрд╣ рдЖрдкрдХреЛ рдмрддрд╛рдПрдЧрд╛: "рдХреГрдкрдпрд╛ рдРрд╕рд╛ рди рдХрд░реЗрдВ"

рд╕реВрдЪреА рдПрдХ рд╕реВрдЪреА рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдПрдХ рд╕реВрдЪреА рдирд╣реАрдВ рд╣реИ

рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рд╕реВрдЪреА (рд╕рд╛рд░ рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░) рд╣реИ рдЬрд┐рд╕реЗ рдЕрдиреБрдХреНрд░рдо рдХреЗ рд░реВрдк рдореЗрдВ рднреА рдЬрд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИред

рд╕рдорд╛рди рд░реВрдк рд╕реЗ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрддрд╛рд░ рдПрдХ рд╕рд╛рд░ рдкреНрд░рдХрд╛рд░ рд╣реИ рдЬреЛ рдЖрдкрдХреЛ рдмрддрд╛рддреА рд╣реИ рдХрд┐ рдпрд╣ рдЙрдкрдпреЛрдЧ рдореЗрдВ рдХреНрдпрд╛ рд╣рд╛рд╕рд┐рд▓ рдХрд░рддрд╛ рд╣реИ; рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ рдпрд╣ рдХреИрд╕реЗ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ (рдХреНрдпреЛрдВрдХрд┐ рдХрдИ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ)

рдмрд╣реБрдд рдмрдврд╝рд┐рдпрд╛ рдЪрд░реНрдЪрд╛!

рдореВрд▓ рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рдХреБрдЫ рдореВрд▓ рд╕рд┐рджреНрдзрд╛рдВрддреЛрдВ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрдХрд░ рддреИрдпрд╛рд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛:

  • рд╕рд╛рдорд╛рдиреНрдп рдЙрджреНрджреЗрд╢реНрдп - рдЕрдзрд┐рдХрд╛рдВрд╢ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЛрдВ рдХреЛ рд╕реАрдкреАрдпреВ рдФрд░ рдореЗрдореЛрд░реА рдЦрдкрдд рдХреЗ рдмреАрдЪ рд╕рдВрддреБрд▓рди рдХреЗ рд╕рд╛рде рдХрд╡рд░ рдХрд░реЗрдВред
  • рдЬрд┐рддрдирд╛ рд╕рдВрднрд╡ рд╣реЛ рд╕рдХреЗ, System.Collections.Generic рдореЗрдВ рдореМрдЬреВрджрд╛ рдкреИрдЯрд░реНрди рдФрд░ рдкрд░рдВрдкрд░рд╛рдУрдВ рдХреЗ рд╕рд╛рде рд╕рдВрд░реЗрдЦрд┐рдд рдХрд░реЗрдВред
  • рдПрдХ рд╣реА рддрддреНрд╡ рдХреА рдХрдИ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐рдпреЛрдВ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдВред
  • рдореМрдЬреВрджрд╛ рдмреАрд╕реАрдПрд▓ рддреБрд▓рдирд╛ рдЗрдВрдЯрд░рдлреЗрд╕ рдФрд░ рдХрдХреНрд╖рд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ (рдпрд╛рдиреА рддреБрд▓рдирд╛рдХрд░реНрддрд╛)*
  • рдЙрдЪреНрдЪ рд╕реНрддрд░ рдХреА рдЕрдореВрд░реНрддрддрд╛ - рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рдЙрдкрднреЛрдХреНрддрд╛рдУрдВ рдХреЛ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рддрдХрдиреАрдХ рд╕реЗ рдмрдЪрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

@karelz @pgolebiowski
"рд╣реАрдк" рдХрд╛ рдирд╛рдо рдмрджрд▓рдирд╛ рдпрд╛ рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╕реЗ рдЬреБрдбрд╝рд╛ рдХреЛрдИ рдЕрдиреНрдп рд╢рдмреНрдж рд╕рдВрдЧреНрд░рд╣ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХрд╛рдВрд╢ рдмреАрд╕реАрдПрд▓ рд╕рдореНрдореЗрд▓рдиреЛрдВ рд╕реЗ рдореЗрд▓ рдирд╣реАрдВ рдЦрд╛рдПрдЧрд╛ред рдРрддрд┐рд╣рд╛рд╕рд┐рдХ рд░реВрдк рд╕реЗ, .NET рд╕рдВрдЧреНрд░рд╣ рдХрдХреНрд╖рд╛рдУрдВ рдХреЛ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛/рдкреИрдЯрд░реНрди рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп рд╕рд╛рдорд╛рдиреНрдп рдЙрджреНрджреЗрд╢реНрдп рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдореЗрд░реА рдореВрд▓ рд╕реЛрдЪ рдпрд╣ рдереА рдХрд┐ .NET рдкрд╛рд░рд┐рд╕реНрдерд┐рддрд┐рдХреА рддрдВрддреНрд░ рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ рдПрдкреАрдЖрдИ рдбрд┐рдЬрд╛рдЗрдирд░ рдЬрд╛рдирдмреВрдЭрдХрд░ "ArrayList" рд╕реЗ "List ." рдореЗрдВ рдЪрд▓реЗ рдЧрдП рдереЗ"ред рдкрд░рд┐рд╡рд░реНрддрди рдПрдХ рдРрд░реЗ рдХреЗ рд╕рд╛рде рдПрдХ рднреНрд░рдо рдХреЗ рдХрд╛рд░рдг рд╣реЛрдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдереА - рдЖрдкрдХреЗ рдФрд╕рдд рдбреЗрд╡рд▓рдкрд░ рдиреЗ рд╕реЛрдЪрд╛ рд╣реЛрдЧрд╛ "ArrayList? рдореБрдЭреЗ рд╕рд┐рд░реНрдл рдПрдХ рд╕реВрдЪреА рдЪрд╛рд╣рд┐рдП, рдПрдХ рд╕рд░рдгреА рдирд╣реАрдВ"ред

рдпрджрд┐ рд╣рдо рд╣реАрдк рдХреЗ рд╕рд╛рде рдЬрд╛рддреЗ рд╣реИрдВ, рддреЛ рдРрд╕рд╛ рд╣реА рд╣реЛ рд╕рдХрддрд╛ рд╣реИ - рдХрдИ рдордзреНрдпрд╡рд░реНрддреА-рдХреБрд╢рд▓ рдбреЗрд╡рд▓рдкрд░реНрд╕ (рджреБрдЦ рдХреА рдмрд╛рдд рд╣реИ) "рд╣реАрдк" рджреЗрдЦреЗрдВрдЧреЗ рдФрд░ рдЗрд╕реЗ "рд╕рд╛рдорд╛рдиреНрдпреАрдХреГрдд рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛ рдХреЛ рдвреЗрд░" рдХреЗ рдмрдЬрд╛рдп рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рдореЗрдореЛрд░реА рд╣реАрдк (рдпрд╛рдиреА рд╣реАрдк рдФрд░ рд╕реНрдЯреИрдХ) рдХреЗ рд▓рд┐рдП рднреНрд░рдорд┐рдд рдХрд░реЗрдВрдЧреЗред System.Collections.Generic рдХреА рд╡реНрдпрд╛рдкрдХрддрд╛ рдХреЗ рдХрд╛рд░рдг рдпрд╣ рд▓рдЧрднрдЧ рд╣рд░ .NET рдбреЗрд╡рд▓рдкрд░ рдХреЗ рдмреБрджреНрдзрд┐рдорд╛рди рдкреНрд░рд╕реНрддрд╛рд╡ рдореЗрдВ рджрд┐рдЦрд╛рдИ рджреЗрдЧрд╛, рдФрд░ рдЙрдиреНрд╣реЗрдВ рдЖрд╢реНрдЪрд░реНрдп рд╣реЛрдЧрд╛ рдХрд┐ рд╡реЗ рдПрдХ рдирдпрд╛ рдореЗрдореЛрд░реА рд╣реАрдк рдХреНрдпреЛрдВ рдЖрд╡рдВрдЯрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ :)

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

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

рдпрджрд┐ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐рдпреЛрдВ рдХреЛ рдЕрджреНрд╡рд┐рддреАрдп рд╣реЛрдирд╛ рдЖрд╡рд╢реНрдпрдХ рдерд╛, рддреЛ Enqueue () рдХреЛ ArgumentException рдХреЛ рдлреЗрдВрдХрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯрддрд╛ рд▓реБрдХрдЕрдк рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдХрд┐рд╕реА рдЖрдЗрдЯрдо рдХреЛ рдПрдХ рд╕реЗ рдЕрдзрд┐рдХ рдмрд╛рд░ рдХрддрд╛рд░рдмрджреНрдз рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрднрд╛рд╡рд┐рдд рдорд╛рдиреНрдп рдкрд░рд┐рджреГрд╢реНрдп рд╣реИрдВред рдпрд╣ рдЧреИрд░-рд╡рд┐рд╢рд┐рд╖реНрдЯрддрд╛ рдбрд┐рдЬрд╝рд╛рдЗрди рдЕрдкрдбреЗрдЯ() рдСрдкрд░реЗрд╢рди рдХреЛ рдЪреБрдиреМрддреАрдкреВрд░реНрдг рдмрдирд╛рддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдмрддрд╛рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реЛрдЧрд╛ рдХрд┐ рдХреМрди рд╕реА рд╡рд╕реНрддреБ рдЕрдкрдбреЗрдЯ рдХреА рдЬрд╛ рд░рд╣реА рд╣реИред рдЬреИрд╕рд╛ рдХрд┐ рдХреБрдЫ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рд╕реЗ рд╕рдВрдХреЗрдд рдорд┐рд▓рддрд╛ рд╣реИ, рдпрд╣ "рдиреЛрдб" рд╕рдВрджрд░реНрднреЛрдВ рдХреЛ рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдПрдкреАрдЖрдИ рдореЗрдВ рдорд┐рд▓рдирд╛ рд╢реБрд░реВ рд╣реЛ рдЬрд╛рдПрдЧрд╛, рдЬреЛ рдмрджрд▓реЗ рдореЗрдВ (рд╕рдВрднрд╛рд╡рд┐рдд) рдЖрд╡рдВрдЯрди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА рдЬрд┐рд╕реЗ рдХрдЪрд░рд╛ рдПрдХрддреНрд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред рдпрд╣рд╛рдВ рддрдХ тАЛтАЛтАЛтАЛрдХрд┐ рдЕрдЧрд░ рд╡рд╣ рдЖрд╕рдкрд╛рд╕ рдХрд╛рдо рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рддреЛ рдпрд╣ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрддрд╛рд░ рдХреА рдкреНрд░рддрд┐-рддрддреНрд╡ рд╕реНрдореГрддрд┐ рдЦрдкрдд рдореЗрдВ рд╡реГрджреНрдзрд┐ рдХрд░реЗрдЧрд╛ред

рдПрдХ рдмрд┐рдВрджреБ рдкрд░ рдореИрдВ рдХрд▓реНрдкрдирд╛ рдкреЛрд╕реНрдЯ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдПрдкреАрдЖрдИ рдореЗрдВ рдПрдХ рдХрд╕реНрдЯрдо IPriorityQueue рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдерд╛ред рдЕрдВрддрдд: рдореИрдВрдиреЗ рдЗрд╕рдХреЗ рдЦрд┐рд▓рд╛рдл рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ - рдореИрдВ рдЬрд┐рд╕ рдЙрдкрдпреЛрдЧ рдкреИрдЯрд░реНрди рдХрд╛ рд▓рдХреНрд╖реНрдп рд░рдЦ рд░рд╣рд╛ рдерд╛ рд╡рд╣ рдПрдирдХреНрдпреВ, рдбреЗрдХреНрдпреВ рдФрд░ рдЗрдЯрд░реЗрдЯ рдерд╛ред рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдореМрдЬреВрджрд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╕реЗрдЯ рджреНрд╡рд╛рд░рд╛ рдХрд╡рд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЗрд╕реЗ рдПрдХ рдХрддрд╛рд░ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реЛрдЪрдирд╛ рдЬреЛ рдЖрдВрддрд░рд┐рдХ рд░реВрдк рд╕реЗ рдХреНрд░рдордмрджреНрдз рд╣реИ; рдЬрдм рддрдХ рдЖрдЗрдЯрдо рдЕрдкрдиреЗ рдЖрдИрд╕реАрдУрдПрдордкреЗрдпрд░ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдХрддрд╛рд░ рдореЗрдВ рдЕрдкрдиреА (рдкреНрд░рд╛рд░рдВрднрд┐рдХ) рд╕реНрдерд┐рддрд┐ рд░рдЦрддреЗ рд╣реИрдВ, рдХреЙрд▓ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдХреЛ рдЗрд╕ рдмрд╛рдд рд╕реЗ рдЪрд┐рдВрддрд┐рдд рд╣реЛрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдкреБрд░рд╛рдиреЗ рд╕рдВрджрд░реНрдн рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ рдореИрдВрдиреЗ рдХрд┐рдпрд╛, (рдЕрдЧрд░ рдореБрдЭреЗ рд╕рд╣реА рдпрд╛рдж рд╣реИ!) рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдмрд┐рд▓реНрдХреБрд▓ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рдЖрдИрд╕реАрдУрдПрдордкреЗрдпрд░ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╕рднреА рд╕рд╛рдкреЗрдХреНрд╖ рд╣реИрдпрд╛ рддреБрд▓рдирд╛.

рдореЗрд░реЗ рдкрд╛рд╕ рдЖрдк рд╕рднреА рдЧреНрд░рд╛рд╣рдХ рдХреЛрдб рдЙрджрд╛рд╣рд░рдг рд╣реИрдВ - рдореЗрд░реА рдореВрд▓ рдпреЛрдЬрдирд╛ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЗ рдЖрдзрд╛рд░ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рд╛рдпреЛрд░рд┐рдЯреА рдХреНрдпреВ рдХреЗ рдореМрдЬреВрджрд╛ рдмреАрд╕реАрдПрд▓ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЬрд╛рдирд╛ рдерд╛ред

рд╕рд╛рд░рд╛рдВрд╢ рдПрдкреАрдЖрдИ рдореЗрдВ рддреБрд▓рдирд╛ рдкреНрд░рджрд╛рди рдХрд┐рдП рдЧрдП рддреБрд▓рдирд╛рдХрд░реНрддрд╛ IComparer рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди рдХреА рдЬрд╛рддреА рд╣реИрддреБрд▓рдирд╛рдХрд░реНрддрд╛, рдХреЛрдИ рдЖрд╡рд░рдг рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдЕрдХреНрд╕рд░ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдкреНрд░рдХрд╛рд░ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реЛрдЧреА рдЬреИрд╕реЗ рдПрдХ рд╕рдордп рдЕрдиреБрд╕реВрдЪрдХ рдХреЗ рдкрд╛рд╕ рдкреНрд░рдХрд╛рд░ рдХреА рд╕рдВрдкрддреНрддрд┐ рдХреЗ рд░реВрдк рдореЗрдВ рдирд┐рд╖реНрдкрд╛рджрди рд╕рдордп рд╣реЛрдЧрд╛ред

рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдУрдкреА рдПрдкреАрдЖрдИ рдХреЗ рддрд╣рдд, рдХрдХреНрд╖рд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрдирдореЗрдВ рд╕реЗ рдПрдХ рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:

  • рдПрдХ рдкреНрд░рдХрд╛рд░ рд╣реИ рдЬреЛ рдкрд╣рд▓реЗ рд╕реЗ рддреБрд▓рдиреАрдп рд╣реИ рдЬрд┐рд╕ рддрд░рд╣ рд╕реЗ рдЖрдк рдЗрд╕реЗ рдЪрд╛рд╣рддреЗ рд╣реИрдВ
  • рдХрд┐рд╕реА рдЕрдиреНрдп рд╡рд░реНрдЧ рдХреЗ рд╕рд╛рде рдПрдХ рдкреНрд░рдХрд╛рд░ рд▓рдкреЗрдЯреЗрдВ рдЬрд┐рд╕рдореЗрдВ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдорд╛рди рд╣реЛ рдФрд░ рдЬрд┐рд╕ рддрд░рд╣ рд╕реЗ рдЖрдк рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдЙрд╕рдХреА рддреБрд▓рдирд╛ рдХрд░реЗрдВ
  • рдЕрдкрдиреЗ рдкреНрд░рдХрд╛рд░ рдХреЗ рд▓рд┐рдП рдПрдХ рдХрд╕реНрдЯрдо рдЖрдИрд╕реАрдУрдПрдордкреЗрдпрд░ рдмрдирд╛рдПрдВ рдФрд░ рдЗрд╕реЗ рдХрдиреНрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкрд╛рд╕ рдХрд░реЗрдВред рдорд╛рди рд▓реЗрдВ рдХрд┐ рдЬрд┐рд╕ рдорд╛рди рдХреЛ рдЖрдк рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рд╡рд╣ рдЖрдкрдХреЗ рдкреНрд░рдХрд╛рд░ рджреНрд╡рд╛рд░рд╛ рдкрд╣рд▓реЗ рд╣реА рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд░реВрдк рд╕реЗ рдкреНрд░рдХрдЯ рд╣реЛ рдЪреБрдХрд╛ рд╣реИред

рджреЛрд╣рд░реЗ рдкреНрд░рдХрд╛рд░ рдХреЗ рдПрдкреАрдЖрдИ рдХрд╛ рдЙрджреНрджреЗрд╢реНрдп рджреВрд╕рд░реЗ рджреЛ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреЗ рдмреЛрдЭ рдХреЛ рдХрдо рдХрд░рдирд╛ рд╣реИ, рд╣рд╛рдБ? рдЬрдм рдЖрдкрдХреЗ рдкрд╛рд╕ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рд╡рд╛рд▓рд╛ рдкреНрд░рдХрд╛рд░ рд╣реЛрддрд╛ рд╣реИ рддреЛ рдПрдХ рдирдИ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХреНрдпреВ/рд╣реАрдк рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд╛рд░реНрдп рдХреИрд╕реЗ рд╣реЛрддрд╛

рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛтАЛтАЛрд╣реИ рдХрд┐ рдпрд╣ рд╣реИ: рджреЗрд╢реА рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдореЗрдВ рдХрдореА-рдХреБрдВрдЬреА/рд╡реГрджреНрдзрд┐-рдХреБрдВрдЬреА рд╕рдорд░реНрдердиред

public override void Update(ArrayHeapNode<TKey, TValue> node, TKey key) {}
public override void Update(TKey key, TValue value);

рдХрд┐рд╕реА рднреА рдорд╛рдорд▓реЗ рдореЗрдВ, рджреА рдЧрдИ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рд╕реЗ рдЬреБрдбрд╝реЗ рдЖрдЗрдЯрдо рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЕрджреНрдпрддрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП ArrayHeapNode рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпреЛрдВ рд╣реИ? рдпрд╣ рдХреНрдпрд╛ рд╣рд╛рд╕рд┐рд▓ рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рд╕реАрдзреЗ TKey/TValue рд▓реЗрдХрд░ рдкреВрд░рд╛ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ?

@ianhays

рдХрд┐рд╕реА рднреА рдорд╛рдорд▓реЗ рдореЗрдВ, рджреА рдЧрдИ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рд╕реЗ рдЬреБрдбрд╝реЗ рдЖрдЗрдЯрдо рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЕрджреНрдпрддрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП ArrayHeapNode рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпреЛрдВ рд╣реИ? рдпрд╣ рдХреНрдпрд╛ рд╣рд╛рд╕рд┐рд▓ рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рд╕реАрдзреЗ TKey/TValue рд▓реЗрдХрд░ рдкреВрд░рд╛ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ?

рдХрдо рд╕реЗ рдХрдо рдмрд╛рдЗрдирд░реА рд╣реАрдк (рдЬрд┐рд╕рд╕реЗ рдореИрдВ рд╕рдмрд╕реЗ рдЬреНрдпрд╛рджрд╛ рдкрд░рд┐рдЪрд┐рдд рд╣реВрдВ) рдХреЗ рд╕рд╛рде, рдпрджрд┐ рдЖрдк рдХреБрдЫ рдореВрд▓реНрдп рдХреА рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдФрд░ рдЖрдк рдвреЗрд░ рдореЗрдВ рдЗрд╕рдХреА рд╕реНрдерд┐рддрд┐ рдЬрд╛рдирддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдЗрд╕реЗ рдЬрд▓реНрджреА рд╕реЗ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (рдУ (рд▓реЙрдЧ рдПрди) рд╕рдордп рдореЗрдВ)ред

рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдЖрдк рдХреЗрд╡рд▓ рдореВрд▓реНрдп рдФрд░ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдЬрд╛рдирддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ рд╡рд╣ рдорд╛рди рдвреВрдВрдврдирд╛ рд╣реЛрдЧрд╛, рдЬреЛ рдзреАрдорд╛ рд╣реИ (рдУ (рдПрди))ред

рджреВрд╕рд░реА рдУрд░, рдпрджрд┐ рдЖрдкрдХреЛ рдХреБрд╢рд▓рддрд╛ рд╕реЗ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рддреЛ рдвреЗрд░ рдореЗрдВ рдкреНрд░рддрд┐ рдЖрдЗрдЯрдо рдПрдХ рдЖрд╡рдВрдЯрди рд╢реБрджреНрдз рдУрд╡рд░рд╣реЗрдб рд╣реИред

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

рджреЛрд╣рд░реЗ рдкреНрд░рдХрд╛рд░ рдХреЗ рдПрдкреАрдЖрдИ рдХрд╛ рдЙрджреНрджреЗрд╢реНрдп рджреВрд╕рд░реЗ рджреЛ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреЗ рдмреЛрдЭ рдХреЛ рдХрдо рдХрд░рдирд╛ рд╣реИ, рд╣рд╛рдБ? рдЬрдм рдЖрдкрдХреЗ рдкрд╛рд╕ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рд╡рд╛рд▓рд╛ рдкреНрд░рдХрд╛рд░ рд╣реЛрддрд╛ рд╣реИ рддреЛ рдПрдХ рдирдИ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХреНрдпреВ/рд╣реАрдк рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд╛рд░реНрдп рдХреИрд╕реЗ рд╣реЛрддрд╛ рд╣реИ? рдПрдкреАрдЖрдИ рдХреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ?

рдпрд╣ рдПрдХ рдЕрдЪреНрдЫреА рдмрд╛рдд рд╣реИ, рдЙрди рдкрд░рд┐рджреГрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдореВрд▓ рдПрдкреАрдЖрдИ рдореЗрдВ рдПрдХ рдЕрдВрддрд░ рд╣реИ рдЬрд╣рд╛рдВ рдЙрдкрднреЛрдХреНрддрд╛ рдХреЗ рдкрд╛рд╕ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдорд╛рди (рдпрд╛рдиреА рдкреВрд░реНрдгрд╛рдВрдХ) рд╣реИ рдЬреЛ рдореВрд▓реНрдп рд╕реЗ рдЕрд▓рдЧ рд░рдЦрд╛ рдЧрдпрд╛ рд╣реИред рджреВрд╕рд░рд╛ рдкрд╣рд▓реВ рдпрд╣ рд╣реИ рдХрд┐ aрдПрдкреАрдЖрдИ рдХреА рд╢реИрд▓реА рд╕рднреА рдЖрдВрддрд░рд┐рдХ рд░реВрдк рд╕реЗ рддреБрд▓рдиреАрдп рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЛ рдЬрдЯрд┐рд▓ рдмрдирд╛рддреА рд╣реИред рд╡рд░реНрд╖реЛрдВ рдкрд╣рд▓реЗ рдореИрдВрдиреЗ рдмрд╣реБрдд рд╣рд▓реНрдХрд╛ рдЕрдиреБрд╕реВрдЪрдХ рдШрдЯрдХ рд▓рд┐рдЦрд╛ рдерд╛ рдЬрд┐рд╕рдХрд╛ рдЕрдкрдирд╛ рдЖрдВрддрд░рд┐рдХ рдЕрдиреБрд╕реВрдЪрд┐рдд рдХрд╛рд░реНрдп рд╡рд░реНрдЧ рдерд╛ред рдкреНрд░рддреНрдпреЗрдХ рдЕрдиреБрд╕реВрдЪрд┐рдд рдХрд╛рд░реНрдп рдиреЗ рдЖрдИрд╕реАрдУрдПрдордкреЗрдпрд░ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ред рдЙрдиреНрд╣реЗрдВ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рд╡рд╛рд▓реА рдХрддрд╛рд░ рдореЗрдВ рдЯреЙрд╕ рдХрд░реЗрдВ, рдЬрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдЪреНрдЫрд╛ рд╣реИред

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

рдореЗрд░реЗ рд▓рд┐рдП, рд╡рд╣реА рд╕рд┐рджреНрдзрд╛рдВрдд рдХрддрд╛рд░реЛрдВ рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрддрд╛ рд╣реИред рдПрдХ рдХрддрд╛рд░, рдРрддрд┐рд╣рд╛рд╕рд┐рдХ рд░реВрдк рд╕реЗ, рдПрдХ рдЖрдпрд╛рдореА рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛ рд╣реИред

рдореЗрд░рд╛ рдЖрдзреБрдирд┐рдХ рд╕реА ++ рдПрд╕рдЯреАрдбреА рдкреБрд╕реНрддрдХрд╛рд▓рдп рдЬреНрдЮрд╛рди рд╕реНрд╡реАрдХрд╛рд░реНрдп рд░реВрдк рд╕реЗ рдереЛрдбрд╝рд╛ рдЬрдВрдЧрд▓реА рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣рд╛рдВ рддрдХ тАЛтАЛтАЛтАЛрдХрд┐ std::priority_queue рдореЗрдВ рдкреБрд╢, рдкреЙрдк, рдФрд░ рдПрдХ рддреБрд▓рдирд╛рдХрд░реНрддрд╛ рдХреЛ рдПрдХ рдЯреЗрдореНрдкрд▓реЗрдЯреЗрдб (рдЬреЗрдиреЗрд░рд┐рдХ) рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рд▓реЗрдирд╛ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИред рд╕реА ++ рдорд╛рдирдХ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреНрд░реВ рдЙрддрдирд╛ рд╣реА рд╕рдВрд╡реЗрджрдирд╢реАрд▓ рд╣реИ рдЬрд┐рддрдирд╛ рдЖрдк рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ :)

рдореИрдВрдиреЗ рдЕрднреА рдХреБрдЫ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрддрд╛рд░ рдФрд░ рдвреЗрд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛ рдПрдХ рдмрд╣реБрдд рддреЗрдЬрд╝ рд╕реНрдХреИрди рдХрд┐рдпрд╛ рд╣реИ - рд╕реА ++, рдЬрд╛рд╡рд╛, рдЬрдВрдЧ, рдФрд░ рдПрдХ рд╣реА рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рд╛рде рд╕рднреА рдХрд╛рдо рдХрд░реЗрдВ (рдпрд╣рд╛рдВ рдкреЛрд╕реНрдЯ рдХреА рдЧрдИ рдореВрд▓ рдПрдкреАрдЖрдИ рдХреЗ рд╕рдорд╛рди)ред рдПрдирдкреАрдПрдо рдореЗрдВ рд╕рдмрд╕реЗ рд▓реЛрдХрдкреНрд░рд┐рдп рдвреЗрд░/рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрддрд╛рд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреА рдПрдХ рд╕рд░рд╕рд░реА рдирдЬрд╝рд░ рдЗрд╕реЗ рджрд┐рдЦрд╛рддреА рд╣реИред

@pgolebiowski рдореБрдЭреЗ рдЧрд▓рдд рдирд╣реАрдВ рд▓рдЧрддрд╛ рдЙрдирдХреЗ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рдмрд╛рдж рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдирд╛рдорд┐рдд рдЪреАрдЬреЛрдВ рдХреЗ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

рд╣рд╛рд▓рд╛рдВрдХрд┐ рдРрд╕рд╛ рддрдм рд╣реЛрддрд╛ рд╣реИ рдЬрдм рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдЖрдк рдХреМрди рд╕реА рд╡рд┐рд╢рд┐рд╖реНрдЯ рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдЬреЛ рдЖрдкрдХреЗ рдкреНрд░рджрд░реНрд╢рди рд▓рдХреНрд╖реНрдпреЛрдВ рд╕реЗ рдореЗрд▓ рдЦрд╛рддреА рд╣реИ рдФрд░ рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рд╡реНрдпрд╛рдкрд╛рд░ рдмрдВрдж рд╣реИрдВред

рдЖрдо рддреМрд░ рдкрд░ рдврд╛рдВрдЪреЗ рдХреЗ рд╕рдВрдЧреНрд░рд╣ рдореЗрдВ 90% рдЙрдкрдпреЛрдЧ рд╢рд╛рдорд┐рд▓ рд╣реЛрддреЗ рд╣реИрдВ рдЬрд╣рд╛рдВ рдЖрдк рд╕рд╛рдорд╛рдиреНрдп рд╡реНрдпрд╡рд╣рд╛рд░ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдлрд┐рд░ рдпрджрд┐ рдЖрдк рдПрдХ рдмрд╣реБрдд рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╡реНрдпрд╡рд╣рд╛рд░ рдпрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЪрд╛рд╣рддреЗ рд╣реИрдВ рддреЛ рдЖрдк рд╢рд╛рдпрдж рдХрд┐рд╕реА рддреГрддреАрдп рдкрдХреНрд╖ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рд▓рд┐рдП рдЬрд╛рдПрдВрдЧреЗ; рдФрд░ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдЙрдиреНрд╣реЗрдВ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рдирд╛рдо рдкрд░ рд░рдЦрд╛ рдЬрд╛рдПрдЧрд╛ рддрд╛рдХрд┐ рдЖрдк рдЬрд╛рди рд╕рдХреЗрдВ рдХрд┐ рдпрд╣ рдЖрдкрдХреА рдЬрд╝рд░реВрд░рдд рд╕реЗ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИред

рдмрд╕ рд╕рд╛рдорд╛рдиреНрдп рд╡реНрдпрд╡рд╣рд╛рд░ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЛ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╕реЗ рдЬреЛрдбрд╝рдирд╛ рдирд╣реАрдВ рдЪрд╛рд╣рддреЗ рд╣реИрдВ; рддрдм рдХреЗ рд░реВрдк рдореЗрдВ рдпрд╣ рдЕрдЬреАрдм рд╣реИ рдЕрдЧрд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдмрджрд▓рддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдирд╛рдо рд╡рд╣реА рд░рд╣рдирд╛ рд╣реИ рдФрд░ рд╡реЗ рдореЗрд▓ рдирд╣реАрдВ рдЦрд╛рдПрдВрдЧреЗред

рдРрд╕реА рдХрдИ рдЪрд┐рдВрддрд╛рдПрдБ рд╣реИрдВ рдЬрд┐рди рдкрд░ рдЪрд░реНрдЪрд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдЗрдП рдЙрд╕ рд╕рдорд╕реНрдпрд╛ рд╕реЗ рд╢реБрд░реВ рдХрд░реЗрдВ рдЬрд┐рд╕рдХрд╛ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдЙрди рд╣рд┐рд╕реНрд╕реЛрдВ рдкрд░ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рдкреНрд░рднрд╛рд╡ рдкрдбрд╝рддрд╛ рд╣реИ рдЬрд┐рдирдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣рдо рдЕрд╕рд╣рдордд рд╣реИрдВ: рддрддреНрд╡реЛрдВ рдХреЛ рдЕрджреНрдпрддрди рдХрд░рдирд╛ рдФрд░ рдирд┐рдХрд╛рд▓рдирд╛ ред

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

  1. рдлрд╝реЛрд░рдо рдкрд░ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдкреНрд░рд╢реНрди рд╣реИрдВ рдХрд┐ рдЕрдиреБрдкрд▓рдмреНрдз рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЗ рдХрд╛рд░рдг рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб рдХреИрд╕реЗ рдХрд░реЗрдВред
  2. рдкреНрд░рдердо-рдкрдХреНрд╖ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдвреЗрд░/рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрддрд╛рд░ рдХреЗ рддреАрд╕рд░реЗ рдкрдХреНрд╖ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдХрд╛рдлреА рдмреЗрдХрд╛рд░ рд╣реИред

рдпрд╣ рд╕рд┐рд░реНрдл рджрдпрдиреАрдп рд╣реИред рдХреНрдпрд╛ рдХреЛрдИ рд╣реИ рдЬреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдЖрдЧреЗ рдмрдврд╝рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИ? рдореБрдЭреЗ рдРрд╕реА рдЕрдХреНрд╖рдо рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛ рдЬрд╛рд░реА рдХрд░рдиреЗ рдореЗрдВ рд╢рд░реНрдо рдЖрдПрдЧреАред

@pgolebiowski рдирд┐рд╢реНрдЪрд┐рдВрдд рд░рд╣реЗрдВ рдХрд┐ рдпрд╣рд╛рдВ рд╕рднреА рдХреЗ рдкрд╛рд╕ рдордВрдЪ рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рдЕрдЪреНрдЫреЗ рдЗрд░рд╛рджреЗ рд╣реИрдВред рдХреЛрдИ рднреА рдЯреВрдЯреЗ рд╣реБрдП рдПрдкреАрдЖрдИ рдХреЛ рд╢рд┐рдк рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ред рд╣рдо рджреВрд╕рд░реЛрдВ рдХреА рдЧрд▓рддрд┐рдпреЛрдВ рд╕реЗ рд╕реАрдЦрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдХреГрдкрдпрд╛ рдРрд╕реА рдЙрдкрдпреЛрдЧреА рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рд▓рд╛рддреЗ рд░рд╣реЗрдВ (рдЬреИрд╕реЗ рдХрд┐ рдЬрд╛рд╡рд╛ рдХрд╣рд╛рдиреА рдХреЛ рдЫреЛрдбрд╝рдХрд░)ред

рд╣рд╛рд▓рд╛рдБрдХрд┐, рдореИрдВ рджреЛ рдмрд╛рддреЛрдВ рдХреА рдУрд░ рдЗрд╢рд╛рд░рд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдБ:

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

рдореИрдВрдиреЗ рдЕрднреА рдкреВрдЫрд╛ рд╣реИ рдХрд┐ рдпрджрд┐ рдЖрдк рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЛ рдкрд╕рдВрдж рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдЖрдк рд▓реЛрдЧ рдЕрджреНрдпрддрди/рд╣рдЯрд╛рдиреЗ рд╡рд╛рд▓реА рдЪреАрдЬрд╝ рдХреЛ рдХреИрд╕реЗ рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ ... рдпрд╣ рджреВрд╕рд░реЛрдВ рдХреЛ рд╕реБрди рд░рд╣рд╛ рд╣реИ рдФрд░ рдЖрдо рд╕рд╣рдорддрд┐ рдХреА рддрд▓рд╛рд╢ рдореЗрдВ рд╣реИ, рдореБрдЭреЗ рд╡рд┐рд╢реНрд╡рд╛рд╕ рд╣реИред

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

рд╣реАрдк рдмрдирд╛рдо рдкреНрд░рд╛рдпреЛрд░рд┐рдЯреА рдХреНрдпреВ рдмрд╣рд╕ рдкрд░ рдореЗрд░реЗ рджреЛ рд╕реЗрдВрдЯ: рджреЛрдиреЛрдВ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдорд╛рдиреНрдп рд╣реИрдВ рдФрд░ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд▓рд╛рдн рдФрд░ рдХрдорд┐рдпрд╛рдВ рд╣реИрдВред

рдЙрд╕ рдиреЗ рдХрд╣рд╛, "PriorityQueue" рдореМрдЬреВрджрд╛ .NET рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рд╕рд╛рде рдХрд╣реАрдВ рдЕрдзрд┐рдХ рд╕реБрд╕рдВрдЧрдд рд▓рдЧрддрд╛ рд╣реИред рдЖрдЬ рдореБрдЦреНрдп рд╕рдВрдЧреНрд░рд╣ рд╣реИрдВ List, рд╢рдмреНрджрдХреЛрд╢, рдвреЗрд░, рдкрдВрдХреНрддрд┐, рд╣реИрд╢рд╕реЗрдЯ, рдХреНрд░рдордмрджреНрдз рд╢рдмреНрджрдХреЛрд╢, рдФрд░ рд╕реЙрд░реНрдЯреЗрдбрд╕реЗрдЯ. рдЗрдирдХрд╛ рдирд╛рдо рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдФрд░ рд╢рдмреНрджрд╛рд░реНрде рдХреЗ рдирд╛рдо рдкрд░ рд░рдЦрд╛ рдЧрдпрд╛ рд╣реИ, рдПрд▓реНрдЧреЛрд░рд┐рдердо рдирд╣реАрдВред рд╣реИрд╢рд╕реЗрдЯрдПрдХрдорд╛рддреНрд░ рдмрд╛рд╣рд░реА рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣рд╛рдВ рддрдХ тАЛтАЛтАЛтАЛрдХрд┐ рдЗрд╕реЗ рд╕реЗрдЯ рд╕рдорд╛рдирддрд╛ рд╢рдмреНрджрд╛рд░реНрде (рд╕реЙрд░реНрдЯреЗрдбрд╕реЗрдЯ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ) рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдХреЗ рд░реВрдк рдореЗрдВ рдпреБрдХреНрддрд┐рд╕рдВрдЧрдд рдмрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ) рдЖрдЦрд┐рд░рдХрд╛рд░, рдЕрдм рд╣рдорд╛рд░реЗ рдкрд╛рд╕ ImmutableHashSet рд╣реИрдЬреЛ рд╣реБрдб рдХреЗ рдиреАрдЪреЗ рдПрдХ рдкреЗрдбрд╝ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИред

рдПрдХ рд╕рдВрдЧреНрд░рд╣ рдХреЗ рд▓рд┐рдП рдпрд╣рд╛рдВ рдЪрд▓рди рдХреЛ рдХрдо рдХрд░рдирд╛ рдЕрдЬреАрдм рд▓рдЧреЗрдЧрд╛ред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЕрддрд┐рд░рд┐рдХреНрдд рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХреЗ рд╕рд╛рде рдкреНрд░рд╛рдпреЛрд░рд┐рдЯреА рдХреНрдпреВ: рдкреНрд░рд╛рдпреЛрд░рд┐рдЯреА рдХреНрдпреВ(рдЖрдИрд╣реЗрдк) рд╕рдорд╛рдзрд╛рди рд╣реЛ рд╕рдХрддрд╛ рд╣реИред IHeap рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рдмрд┐рдирд╛ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╣реАрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдЙрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрддрд╛рд░рд╕рд╛рд░ рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░ (рдЕрдзрд┐рдХрд╛рдВрд╢ C# рд╕рдВрдЧреНрд░рд╣ рдХреЗ рд░реВрдк рдореЗрдВ) рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░реЗрдЧрд╛ рдФрд░ IPriorityQueue рдХреЛ рд▓рд╛рдЧреВ рдХрд░реЗрдЧрд╛рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд▓реЗрдХрд┐рди рд╡рд┐рднрд┐рдиреНрди рдвреЗрд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреИрд╕реЗ @pgolebiowski рдиреЗ рд╕реБрдЭрд╛рд╡ рджрд┐рдпрд╛:

рд╡рд░реНрдЧ ArrayHeap : IHeap {}
рдХреНрд▓рд╛рд╕ рдкреЗрдпрд░рд┐рдВрдЧрд╣реАрдк : IHeap {}
рдХреНрд▓рд╛рд╕ рдлрд╛рдЗрдмреЛрдиреИрдЪрд┐рд╣реАрдк: рдЖрдИрд╣реЗрдк {}
рд╡рд░реНрдЧ рджреНрд╡рд┐рдкрдж рдвреЗрд░ : IHeap {}

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

рд╣рдорд╛рд░рд╛ рд▓рдХреНрд╖реНрдп

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

  • рдЙрдЪреНрдЪрддрдо рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рд╡рд╛рд▓реЗ рддрддреНрд╡ рдХреЛ рдкреБрдирдГ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ (рдФрд░ рдЗрд╕реЗ рд╣рдЯрд╛рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛ)ред
  • рд╕рдВрдЧреНрд░рд╣ рдореЗрдВ рдПрдХ рдирдпрд╛ рддрддреНрд╡ рдЬреЛрдбрд╝реЗрдВред
  • рд╕рдВрдЧреНрд░рд╣ рд╕реЗ рдПрдХ рддрддреНрд╡ рдирд┐рдХрд╛рд▓реЗрдВред
  • рд╕рдВрдЧреНрд░рд╣ рдореЗрдВ рдПрдХ рддрддреНрд╡ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░реЗрдВред
  • рджреЛ рд╕рдВрдЧреНрд░рд╣ рдорд░реНрдЬ рдХрд░реЗрдВред

рдЕрдиреНрдп рдорд╛рдирдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп

рдЕрдиреНрдп рдорд╛рдирдХ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЗ рд▓реЗрдЦрдХреЛрдВ рдиреЗ рднреА рдЗрд╕ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛ рд╣реИред рдЗрд╕ рдЦрдВрдб рдореЗрдВ, рдореИрдВ рдЗрд╕рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд░реВрдВрдЧрд╛ рдХрд┐ рдЗрд╕реЗ рдкрд╛рдпрдерди , рдЬрд╛рд╡рд╛ , рд╕реА ++ , рдЧреЛ , рд╕реНрд╡рд┐рдлреНрдЯ рдФрд░ рд░рд╕реНрдЯ рдореЗрдВ рдХреИрд╕реЗ рд╣рд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред

рдЙрдирдореЗрдВ рд╕реЗ рдХреЛрдИ рднреА рд╕рдВрдЧреНрд░рд╣ рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рдбрд╛рд▓реЗ рдЧрдП рддрддреНрд╡реЛрдВ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдиреЗ рдХрд╛ рд╕рдорд░реНрдерди StackOverflow ред рдпрд╣ рдЗрдВрдЯрд░рдиреЗрдЯ рдкрд░ рдРрд╕реЗ рдЕрдиреЗрдХ рдкреНрд░рд╢реНрдиреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИред рдбрд┐рдЬрд╛рдЗрдирд░ рд╡рд┐рдлрд▓ рд░рд╣реЗ рд╣реИрдВред

рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рдПрдХ рдФрд░ рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдмрд╛рдЗрдирд░реА рдвреЗрд░ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдпрд╣ рдЖрдВрд╢рд┐рдХ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рдЦреИрд░, рдпрд╣ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рдЪрддреБрд░реНрдзрд╛рддреБрдХ рдвреЗрд░ рд╣реИ (рдПрдХ рдирд┐рд╣рд┐рдд рдвреЗрд░-рдЖрджреЗрд╢рд┐рдд рдкреВрд░реНрдг 4-рдЖрд░реА рдкреЗрдбрд╝, рдПрдХ рд╕рд░рдгреА рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд)ред рдпрд╣ рдХрд╛рдлреА рдХрдо рдЬреНрдЮрд╛рдд рд╣реИ рдФрд░ рд╢рд╛рдпрдж рдпрд╣реА рдХрд╛рд░рдг рд╣реИ рдХрд┐ рдбрд┐рдЬрд╛рдЗрдирд░ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдмрд╛рдЗрдирд░реА рдвреЗрд░ рдХреЗ рд╕рд╛рде рдЧрдПред рд▓реЗрдХрд┐рди рдлрд┐рд░ рднреА - рдПрдХ рдФрд░ рдЦрд░рд╛рдм рд╡рд┐рдХрд▓реНрдк, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдХрдо рдЧрдВрднреАрд░рддрд╛ рдХрд╛ред

рд╣рдо рдЗрд╕рд╕реЗ рдХреНрдпрд╛ рд╕реАрдЦрддреЗ рд╣реИрдВ?

  • рдпрджрд┐ рд╣рдо рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рд╣рдорд╛рд░реЗ рдЧреНрд░рд╛рд╣рдХ рдЦреБрд╢ рд░рд╣реЗрдВ рдФрд░ рд╣рдорд╛рд░реА рдЕрджреНрднреБрдд рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛ рдХреЛ рдЕрдирджреЗрдЦрд╛ рдХрд░рддреЗ рд╣реБрдП рдЙрдиреНрд╣реЗрдВ рд╕реНрд╡рдпрдВ рдЗрд╕ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рд╕реЗ рд░реЛрдХреЗрдВ, рддреЛ рд╣рдореЗрдВ рд╕рдВрдЧреНрд░рд╣ рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рдбрд╛рд▓реЗ рдЧрдП рддрддреНрд╡реЛрдВ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рдкреНрд░рджрд╛рди рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред
  • рд╣рдореЗрдВ рдпрд╣ рдирд╣реАрдВ рдорд╛рдирдирд╛ тАЛтАЛтАЛтАЛрдЪрд╛рд╣рд┐рдП рдХрд┐ рдХреНрдпреЛрдВрдХрд┐ рдХреБрдЫ рдорд╛рдирдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдореЗрдВ рдХреБрдЫ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХрд┐рд╕реА рддрд░рд╣ рд╕реЗ рд╡рд┐рддрд░рд┐рдд рдХреА рдЧрдИ рдереА, рд╣рдореЗрдВ рднреА рдРрд╕рд╛ рд╣реА рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдХреНрдпреЛрдВрдХрд┐ рдЕрдм рдпрд╣ рд╡реНрдпрд╛рдкрдХ рд░реВрдк рд╕реЗ рдЬреНрдЮрд╛рдд рд╣реИ рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрд╕рдХреЗ рдЕрднреНрдпрд╕реНрдд рд╣реИрдВред рд╡рд╛рдХреНрдп рдХреЗ рдЕрдВрддрд┐рдо рднрд╛рдЧ рдкрд░ рдзреНрдпрд╛рди рджреЗрдВред

рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рджреГрд╖реНрдЯрд┐рдХреЛрдг

рдореБрдЭреЗ рджреГрдврд╝рддрд╛ рд╕реЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдореЗрдВ рдкреНрд░рджрд╛рди рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП:

  • IHeap<T> рдЗрдВрдЯрд░рдлрд╝реЗрд╕
  • Heap<T> рд╡рд░реНрдЧ

IHeap рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдореЗрдВ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЗрд╕ рдкреЛрд╕реНрдЯ рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ рд╡рд░реНрдгрд┐рдд рд╕рднреА рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ рд╢рд╛рдорд┐рд▓ рд╣реЛрдВрдЧреЗред рдЪрддреБрд░реНрдзрд╛рддреБрдХ рдвреЗрд░ рдХреЗ рд╕рд╛рде рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд Heap рд╡рд░реНрдЧ, 98% рдорд╛рдорд▓реЛрдВ рдореЗрдВ рд╕рдмрд╕реЗ рдЖрд╕рд╛рди рд╕рдорд╛рдзрд╛рди рд╣реЛрдЧрд╛ред рддрддреНрд╡реЛрдВ рдХрд╛ рдХреНрд░рдо рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдореЗрдВ рдкрд╛рд░рд┐рдд IComparer<T> рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реЛрдЧрд╛ рдпрд╛ рдпрджрд┐ рдХреЛрдИ рдкреНрд░рдХрд╛рд░ рдкрд╣рд▓реЗ рд╕реЗ рддреБрд▓рдиреАрдп рд╣реИ рддреЛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдСрд░реНрдбрд░рд┐рдВрдЧред

рдФрдЪрд┐рддреНрдп

  • рдбреЗрд╡рд▓рдкрд░реНрд╕ рдПрдХ рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЗ рдЦрд┐рд▓рд╛рдл рдЕрдкрдирд╛ рддрд░реНрдХ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рд░ рдХреЛрдИ рдЬрд╛рдирддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХрд┐рддрдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдФрд░ рд╡рд┐рд╡рд░рдг рдореЗрдВ рдирд╣реАрдВ рдЬрд╛рдПрдЧрд╛ред рдкрдврд╝реЗрдВ: рдирд┐рд░реНрднрд░рддрд╛ рдЙрд▓рдЯрд╛ рд╕рд┐рджреНрдзрд╛рдВрдд , рдирд┐рд░реНрднрд░рддрд╛ рдЗрдВрдЬреЗрдХреНрд╢рди , рдЕрдиреБрдмрдВрдз рджреНрд╡рд╛рд░рд╛ рдбрд┐рдЬрд╛рдЗрди , рдирд┐рдпрдВрддреНрд░рдг рдХрд╛ рдЙрд▓рдЯрд╛ ред
  • рдбреЗрд╡рд▓рдкрд░реНрд╕ рдЕрдиреНрдп рдвреЗрд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкреНрд░рджрд╛рди рдХрд░рдХреЗ рдЕрдкрдиреА рдХрд╕реНрдЯрдо рдЬрд░реВрд░рддреЛрдВ рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕ рддрд░рд╣ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ PowerCollections рдЬреИрд╕реЗ рддреГрддреАрдп-рдкрдХреНрд╖ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдРрд╕реА рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рд╕рдВрджрд░реНрдн рджреЗрдХрд░, рдЖрдк рдмрд╕ рдЕрдкрдиреЗ рдХрд╕реНрдЯрдо рдвреЗрд░ рдХреЛ рдХрд┐рд╕реА рднреА рддрд░реНрдХ рдореЗрдВ рдЗрдВрдЬреЗрдХреНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдЗрдирдкреБрдЯ рдХреЗ рд░реВрдк рдореЗрдВ IHeap рд▓реЗрддрд╛ рд╣реИред рдЕрдиреНрдп рдвреЗрд░реЛрдВ рдХреЗ рдХреБрдЫ рдЙрджрд╛рд╣рд░рдг рдЬреЛ рдХреБрдЫ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкрд░рд┐рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдореЗрдВ рдЪрддреБрд░реНрдзрд╛рддреБрдХ рдвреЗрд░ рд╕реЗ рдмреЗрд╣рддрд░ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рддреЗ рд╣реИрдВ: рдмрд╛рдБрдзрдирд╛ рдвреЗрд░ , рджреНрд╡рд┐рдкрдж рдвреЗрд░, рдФрд░ рд╣рдорд╛рд░реЗ рдкреНрд░рд┐рдп рджреНрд╡рд┐рдЖрдзрд╛рд░реА рдвреЗрд░ред
  • рдпрджрд┐ рдХрд┐рд╕реА рдбреЗрд╡рд▓рдкрд░ рдХреЛ рдХреЗрд╡рд▓ рдПрдХ рдЙрдкрдХрд░рдг рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рдЬреЛ рдмрд┐рдирд╛ рдХрд┐рд╕реА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЗ рдХрд╛рдо рдкреВрд░рд╛ рдХрд░ рд▓реЗрддрд╛ рд╣реИ, рддреЛ рдпрд╣ рд╕реЛрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдХреМрди рд╕рд╛ рдкреНрд░рдХрд╛рд░ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╣реИ, рд╡реЗ рд╕рд╛рдорд╛рдиреНрдп рдЙрджреНрджреЗрд╢реНрдп Heap рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ 98% рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЛрдВ рдХреА рдУрд░ рдЕрдиреБрдХреВрд▓рди рдХрд░ рд░рд╣рд╛ рд╣реИред
  • рд╣рдо рдмрд╣реБрдд рд╣реА рд╕рднреНрдп рдкреНрд░рджрд░реНрд╢рди рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рд╕рд╛рде рд╕рд┐рдВрдЧрд▓-рдИрд╢ рд╡рд┐рдХрд▓реНрдк рдХреА рдкреЗрд╢рдХрд╢ рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ .NET рдкрд╛рд░рд┐рд╕реНрдерд┐рддрд┐рдХреА рддрдВрддреНрд░ рдХреЗ рдорд╣рд╛рди рдореВрд▓реНрдп рдореЗрдВ рд╡реГрджреНрдзрд┐ рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ рдЕрдзрд┐рдХрд╛рдВрд╢ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реИ, рд╕рд╛рде рд╣реА рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдЪреНрдЪ-рдкреНрд░рджрд░реНрд╢рди рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдЬрд┐рдиреНрд╣реЗрдВ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдФрд░ рдЦреБрджрд╛рдИ рдХрд░рдиреЗ рдХреЗ рдЗрдЪреНрдЫреБрдХ рд╣реИрдВ рдЧрд╣рд░рд╛рдИ рд╕реЗ рдФрд░ рдЕрдзрд┐рдХ рдЬрд╛рдиреЗрдВ / рд╢рд┐рдХреНрд╖рд┐рдд рд╡рд┐рдХрд▓реНрдк рдФрд░ рдЯреНрд░реЗрдбрдСрдлрд╝ рдмрдирд╛рдПрдВред
  • рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╡рд░реНрддрдорд╛рди рд╕рдореНрдореЗрд▓рдиреЛрдВ рдХреЛ рджрд░реНрд╢рд╛рддрд╛ рд╣реИ:

    • ISet рдФрд░ HashSet

    • IList рдФрд░ List

    • IDictionary рдФрд░ Dictionary

  • рдХреБрдЫ рд▓реЛрдЧреЛрдВ рдиреЗ рдХрд╣рд╛ рд╣реИ рдХрд┐ рд╣рдореЗрдВ рдЙрдирдХреЗ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдХрдХреНрд╖рд╛рдУрдВ рдХрд╛ рдирд╛рдо рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдП, рди рдХрд┐ рд╡реЗ рдЗрд╕реЗ рдХреИрд╕реЗ рдХрд░рддреЗ рд╣реИрдВред рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рдЪ рдирд╣реАрдВ рд╣реИред рдпрд╣ рдХрд╣рдирд╛ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рд╢реЙрд░реНрдЯрдХрдЯ рд╣реИ рдХрд┐ рд╣рдореЗрдВ рдХрдХреНрд╖рд╛рдУрдВ рдХрд╛ рдирд╛рдо рдЙрдирдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рд░рдЦрдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХрдИ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рд▓рд╛рдЧреВ рд╣реЛрддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдРрд╕реЗ рдорд╛рдорд▓реЗ рд╣реИрдВ рдЬрд╣рд╛рдВ рдпрд╣ рдЙрдЪрд┐рдд рджреГрд╖реНрдЯрд┐рдХреЛрдг рдирд╣реАрдВ рд╣реИред рд╕рдмрд╕реЗ рдЙрд▓реНрд▓реЗрдЦрдиреАрдп рдЙрджрд╛рд╣рд░рдг рдмреБрдирд┐рдпрд╛рджреА рдмрд┐рд▓реНрдбрд┐рдВрдЧ рдмреНрд▓реЙрдХ рд╣реИрдВ - рдЬреИрд╕реЗ рдЖрджрд┐рдо рдкреНрд░рдХрд╛рд░, рдПрдирдо рдкреНрд░рдХрд╛рд░ рдпрд╛ рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛рдПрдВред рд╕рд┐рджреНрдзрд╛рдВрдд рдХреЗрд╡рд▓ рдЙрди рдирд╛рдореЛрдВ рдХреЛ рдЪреБрдирдирд╛ рд╣реИ рдЬреЛ рдЕрд░реНрдердкреВрд░реНрдг рд╣реИрдВ (рдпрд╛рдиреА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд▓рд┐рдП рд╕реНрдкрд╖реНрдЯ)ред рдЗрд╕ рддрдереНрдп рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦреЗрдВ рдХрд┐ рд╣рдо рдЬрд┐рд╕ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреА рдЪрд░реНрдЪрд╛ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рд╡рд╣ рд╣рдореЗрд╢рд╛ рдПрдХ рдвреЗрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рджрд╛рди рдХреА рдЬрд╛рддреА рд╣реИ - рдЪрд╛рд╣реЗ рд╡рд╣ рдкрд╛рдпрдерди, рдЬрд╛рд╡рд╛, рд╕реА ++, рдЧреЛ, рд╕реНрд╡рд┐рдлреНрдЯ рдпрд╛ рд░рд╕реНрдЯ рд╣реЛред рд╣реАрдк рд╕рдмрд╕реЗ рдкреНрд░рд╛рдердорд┐рдХ рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛рдУрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИред Heap рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕реНрдкрд╖реНрдЯ рдФрд░ рд╕реНрдкрд╖реНрдЯ рд╣реИред рдпрд╣ Stack , Queue , List , рдФрд░ Array рдЕрдиреБрд░реВрдк рднреА рд╣реИред рдирд╛рдордХрд░рдг рдХреЗ рд╕рд╛рде рдПрдХ рд╣реА рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕рдмрд╕реЗ рдЖрдзреБрдирд┐рдХ рдорд╛рдирдХ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ (рдЧреЛ, рд╕реНрд╡рд┐рдлреНрдЯ, рд░рд╕реНрдЯ) рдореЗрдВ рд▓рд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ - рд╡реЗ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдПрдХ рдвреЗрд░ рдХреЛ рдЙрдЬрд╛рдЧрд░ рдХрд░рддреЗ рд╣реИрдВред

@pgolebiowski рдореИрдВ рдирд╣реАрдВ рджреЗрдЦ рд░рд╣рд╛ рд╣реВрдБ рдХрд┐ рдХреИрд╕реЗ Heap<T> / IHeap<T> рдХреЛ Stack<T> , Queue<T> , рдФрд░/рдпрд╛ List<T> ? рдЙрди рдирд╛рдореЛрдВ рдореЗрдВ рд╕реЗ рдХреЛрдИ рднреА рдпрд╣ рдирд╣реАрдВ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ рдЙрдиреНрд╣реЗрдВ рдЖрдВрддрд░рд┐рдХ рд░реВрдк рд╕реЗ рдХреИрд╕реЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рдЯреА рдХреА рдПрдХ рд╕рд░рдгреА рдЬреИрд╕рд╛ рд╣реЛрддрд╛ рд╣реИ)ред

@ рд╕реИрдореБрдПрд▓рдЗрдВрдЧреНрд▓рд╛рд░реНрдб

Heap рдпрд╣ рдирд╣реАрдВ рдмрддрд╛рддрд╛ рдХрд┐ рдЗрд╕реЗ рдЖрдВрддрд░рд┐рдХ рд░реВрдк рд╕реЗ рдХреИрд╕реЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдореИрдВ рдпрд╣ рд╕рдордЭрдиреЗ рдореЗрдВ рд╡рд┐рдлрд▓ рд╣реВрдВ рдХрд┐ рдЗрддрдиреЗ рд╕рд╛рд░реЗ рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдвреЗрд░ рддреБрд░рдВрдд рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛ рдкрд╛рд▓рди рдХреНрдпреЛрдВ рдХрд░рддрд╛ рд╣реИред рдвреЗрд░ рдХреЗ рдХрдИ рдкреНрд░рдХрд╛рд░ рд╣реИрдВ рдЬреЛ рдПрдХ рд╣реА рдПрдкреАрдЖрдИ рд╕рд╛рдЭрд╛ рдХрд░рддреЗ рд╣реИрдВ, рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП:

  • рдбреА-рдЖрд░реА рдвреЗрд░,
  • 2-3 рдвреЗрд░,
  • рд╡рд╛рдордкрдВрдереА рдвреЗрд░,
  • рдирд░рдо рдвреЗрд░,
  • рдХрдордЬреЛрд░ рдвреЗрд░,
  • рдмреА-рдвреЗрд░,
  • рдореВрд▓рд╛рдВрдХ рдвреЗрд░,
  • рддрд┐рд░рдЫрд╛ рдвреЗрд░,
  • рдвреЗрд░ рдЬреЛрдбрд╝рдирд╛,
  • рдлрд╛рдЗрдмреЛрдиреИрдЪрд┐ рдвреЗрд░,
  • рджреНрд╡рд┐рдкрдж рдвреЗрд░,
  • рд░реИрдВрдХ-рдкреЗрдпрд░рд┐рдВрдЧ рдвреЗрд░,
  • рднреВрдХрдВрдк рдХреЗ рдвреЗрд░,
  • рдЙрд▓реНрд▓рдВрдШрди рдвреЗрд░ред

рдпрд╣ рдХрд╣рдирд╛ рдХрд┐ рд╣рдо рдвреЗрд░ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдЕрднреА рднреА рдмрд╣реБрдд рд╕рд╛рд░рдЧрд░реНрднрд┐рдд рд╣реИред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдпрд╣рд╛рдВ рддрдХ тАЛтАЛтАЛтАЛрдХрд┐ рдпрд╣ рдХрд╣рдирд╛ рдХрд┐ рд╣рдо рдПрдХ рдЪрддреБрд░реНрдзрд╛рддреБрдХ рдвреЗрд░ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рд╕рд╛рд░ рд╣реИ - рдЗрд╕реЗ рдпрд╛ рддреЛ T рдХреА рдПрдХ рд╕рд░рдгреА рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдПрдХ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛ рдХреЗ рд░реВрдк рдореЗрдВ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ (рдЬреИрд╕реЗ рд╣рдорд╛рд░реЗ Stack<T> , Queue<T> , рдФрд░ List<T> ) рдпрд╛ рд╕реНрдкрд╖реНрдЯ (рдиреЛрдбреНрд╕ рдФрд░ рдкреЙрдЗрдВрдЯрд░реНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ)ред

рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ, Heap<T> Stack<T> , Queue<T> , рдФрд░ List<T> , рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдПрдХ рдкреНрд░рд╛рдердорд┐рдХ рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛ рд╣реИ, рдПрдХ рдмреБрдирд┐рдпрд╛рджреА рд╕рд╛рд░ рдмрд┐рд▓реНрдбрд┐рдВрдЧ рдмреНрд▓реЙрдХ рд╣реИ, рдЬреЛ рдХрдИ рддрд░рд╣ рд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд, рдЬреИрд╕рд╛ рднреА рд╣реЛрддрд╛ рд╣реИ, рд╡реЗ рд╕рднреА рдиреАрдЪреЗ T рдХреА рдПрдХ рд╕рд░рдгреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред рдореБрдЭреЗ рдпрд╣ рд╕рдорд╛рдирддрд╛ рдмрд╣реБрдд рдордЬрдмреВрдд рд▓рдЧрддреА рд╣реИред

рдХреНрдпрд╛ рдЗрд╕рдХрд╛ рдХреЛрдИ рдорддрд▓рдм рд╣реИ?

рд░рд┐рдХреЙрд░реНрдб рдХреЗ рд▓рд┐рдП, рдореИрдВ рдирд╛рдордХрд░рдг рдХреЗ рдкреНрд░рддрд┐ рдЙрджрд╛рд╕реАрди рд╣реВрдВред рдЬреЛ рд▓реЛрдЧ C++ рдорд╛рдирдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдЖрджреА рд╣реИрдВ, рд╡реЗ рд╢рд╛рдпрдж _priority_queue_ рдкрд╕рдВрдж рдХрд░реЗрдВрдЧреЗред рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╢рд┐рдХреНрд╖рд┐рдд рд▓реЛрдЧ _Heap_ рдкрд╕рдВрдж рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЕрдЧрд░ рдореБрдЭреЗ рд╡реЛрдЯ рджреЗрдирд╛ рд╣реЛрддрд╛, рддреЛ рдореИрдВ _heap_ рдЪреБрдирддрд╛, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рдПрдХ рд╕рд┐рдХреНрдХреЗ рдХреЗ рдЙрдЫрд╛рд▓ рдХреЗ рдХрд░реАрдм рд╣реИред

@pgolebiowski рдореИрдВрдиреЗ рдЕрдкрдиреЗ рдкреНрд░рд╢реНрди рдХреЛ рдЧрд▓рдд рдмрддрд╛рдпрд╛, рдпрд╣ рдореЗрд░рд╛ рдмреБрд░рд╛ рд╣реИред рд╣рд╛рдВ, Heap<T> рдпрд╣ рдирд╣реАрдВ рдмрддрд╛рддрд╛ рдХрд┐ рдЗрд╕реЗ рдЖрдВрддрд░рд┐рдХ рд░реВрдк рд╕реЗ рдХреИрд╕реЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рд╣рд╛рдБ рд╣реАрдк рдПрдХ рдорд╛рдиреНрдп рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╣реАрдк! = рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрддрд╛рд░ред рд╡реЗ рджреЛрдиреЛрдВ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдПрдкреАрдЖрдИ рд╕рддрд╣реЛрдВ рдХреЛ рдЙрдЬрд╛рдЧрд░ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рд╡рд┐рднрд┐рдиреНрди рд╡рд┐рдЪрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред Heap<T> / IHeap<T> рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдЬреЛ рдЖрдВрддрд░рд┐рдХ рд░реВрдк рд╕реЗ (рд╕рд┐рд░реНрдл рд╕реИрджреНрдзрд╛рдВрддрд┐рдХ рдирд╛рдо) PriorityQueue<T> / IPriorityQueue<T> ред

@ рд╕реИрдореБрдПрд▓рдЗрдВрдЧреНрд▓рд╛рд░реНрдб
рдХрдВрдкреНрдпреВрдЯрд░ рд╡рд┐рдЬреНрдЮрд╛рди рдХреА рджреБрдирд┐рдпрд╛ рдХреИрд╕реЗ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рд╣реИ, рдЗрд╕рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ, рд╣рд╛рдБред рдпрд╣рд╛рдБ рдЕрдореВрд░реНрддрддрд╛ рдХреЗ рд╕реНрддрд░ рд╣реИрдВ:

  • рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди : рдПрдХ рд╕рд░рдгреА рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдирд┐рд╣рд┐рдд рдЪрддреБрд░реНрдзрд╛рддреБрдХ рдвреЗрд░
  • рдЕрдореВрд░реНрддрддрд╛ : рдЪрддреБрд░реНрдзрд╛рддреБрдХ рдвреЗрд░
  • рдЕрдореВрд░реНрддрддрд╛ : рдвреЗрд░ рдХрд╛ рдкрд░рд┐рд╡рд╛рд░
  • рдЕрдореВрд░реНрддрддрд╛ : рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрддрд╛рд░реЛрдВ рдХрд╛ рдкрд░рд┐рд╡рд╛рд░

рдФрд░ рд╣рд╛рдБ, IHeap рдФрд░ Heap , PriorityQueue рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореВрд▓ рд░реВрдк рд╕реЗ рд╣реЛрдЧрд╛:

public class PriorityQueue<T>
{
    private readonly IHeap<T> heap;

    public PriorityQueue(IHeap<T> heap)
    {
        this.heap = heap;
    }

    public void Add<T>(T item) => this.heap.Add(item);

    public void Remove<T>(T item) => this.heap.Remove(item);

    // etc...
}

рдЖрдЗрдП рдпрд╣рд╛рдВ рдПрдХ рдирд┐рд░реНрдгрдп рд╡реГрдХреНрд╖ рдЪрд▓рд╛рддреЗ рд╣реИрдВред

рдПрдХ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрддрд╛рд░ рднреА рдПрдХ рдвреЗрд░ рдХреЗ рдХреБрдЫ рд░реВрдкреЛрдВ (рд╕реИрджреНрдзрд╛рдВрддрд┐рдХ рд░реВрдк рд╕реЗ) рд╕реЗ рднрд┐рдиреНрди рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛ рдХреЗ рд╕рд╛рде рд▓рд╛рдЧреВ рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИред рдпрд╣ PriorityQueue рдХреЗ рдбрд┐рдЬрд╝рд╛рдЗрди рдХреЛ рдКрдкрд░ рд╡рд╛рд▓реЗ рдХреА рддрд░рд╣ рдмрджрд╕реВрд░рдд рдмрдирд╛рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдХреЗрд╡рд▓ рдвреЗрд░ рдХреЗ рдкрд░рд┐рд╡рд╛рд░ рдХреЗ рд▓рд┐рдП рддрдп рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдпрд╣ IHeap рдЖрд╕рдкрд╛рд╕ рдПрдХ рдмрд╣реБрдд рдкрддрд▓рд╛ рдЖрд╡рд░рдг рднреА рд╣реИред рдпрд╣ рдПрдХ рдкреНрд░рд╢реНрди рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИ - _ рдХреНрдпреЛрдВ рди рдХреЗрд╡рд▓ рдвреЗрд░ рдХреЗ рдкрд░рд┐рд╡рд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ_?

рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рд╕рдорд╛рдзрд╛рди рдмрдЪрд╛ рд╣реИ - IHeap рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рд▓рд┐рдП рдПрдХ рдХрдорд░реЗ рдХреЗ рдмрд┐рдирд╛, рдПрдХ рдЪрддреБрд░реНрдзрд╛рддреБрдХ рдвреЗрд░ рдХреЗ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд▓рд┐рдП рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрддрд╛рд░ рдХреЛ рдареАрдХ рдХрд░рдирд╛ред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЕрдореВрд░реНрддрддрд╛ рдХреЗ рдмрд╣реБрдд рд╕рд╛рд░реЗ рд╕реНрддрд░реЛрдВ рд╕реЗ рдЧреБрдЬрд░ рд░рд╣рд╛ рд╣реИ рдФрд░ рдПрдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╣реЛрдиреЗ рдХреЗ рд╕рднреА рдЕрджреНрднреБрдд рд▓рд╛рднреЛрдВ рдХреЛ рдорд╛рд░рддрд╛ рд╣реИред

рд╣рдо рдЪрд░реНрдЪрд╛ рдХреЗ рдмреАрдЪ рд╕реЗ рдбрд┐рдЬрд╝рд╛рдЗрди рд╡рд┐рдХрд▓реНрдк рдХреЗ рд╕рд╛рде рд╡рд╛рдкрд╕ рдЖ рдЧрдП рд╣реИрдВ - PriorityQueue рдФрд░ IPriorityQueue ред рд▓реЗрдХрд┐рди рддрдм рд╣рдо рдореВрд▓ рд░реВрдк рд╕реЗ рд╣реЛрдВрдЧреЗ:

class BinaryHeap : IPriorityQueue {}
class PairingHeap : IPriorityQueue {}
class FibonacciHeap : IPriorityQueue {}
class BinomialHeap : IPriorityQueue {}

рди рдХреЗрд╡рд▓ рдмрджрд╕реВрд░рдд рд▓рдЧрддрд╛ рд╣реИ, рдмрд▓реНрдХрд┐ рд╡реИрдЪрд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ рднреА рдЧрд▓рдд рд╣реИ - рдпреЗ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рд╡рд╛рд▓реА рдХрддрд╛рд░реЛрдВ рдХреЗ рдкреНрд░рдХрд╛рд░ рдирд╣реАрдВ рд╣реИрдВ рдФрд░ рдПрдХ рд╣реА рдПрдкреАрдЖрдИ рд╕рд╛рдЭрд╛ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ (рдЬреИрд╕рд╛ рдХрд┐ @SamuelEnglard рдкрд╣рд▓реЗ рд╣реА рдиреЛрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ)ред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдореЗрдВ рдвреЗрд░реЛрдВ рд╕реЗ рдЪрд┐рдкрдХреЗ рд░рд╣рдирд╛ рдЪрд╛рд╣рд┐рдП, рдПрдХ рдРрд╕рд╛ рдкрд░рд┐рд╡рд╛рд░ рдЬреЛ рдЙрдирдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдореВрд░реНрддрддрд╛ рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИред рд╣рдореЗрдВ рдорд┐рд▓реЗрдЧрд╛:

class BinaryHeap : IHeap {}
class PairingHeap : IHeap {}
class FibonacciHeap : IHeap {}
class BinomialHeap : IHeap {}

рдФрд░, рд╣рдорд╛рд░реЗ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди рдХрд┐рдпрд╛ рдЧрдпрд╛, class Heap : IHeap {} ред


рдмреАрдЯреАрдбрдмреНрд▓реНрдпреВ, рдХрд┐рд╕реА рдХреЛ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рд╣рд╛рдпрдХ рдорд┐рд▓ рд╕рдХрддрд╛ рд╣реИ:

| рдЧреВрдЧрд▓ рдХреНрд╡реЗрд░реА | рдкрд░рд┐рдгрд╛рдо |
| :--------------------------------------: | :-----: |
| "рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛" "рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрддрд╛рд░" | 172,000 |
| "рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛" "рдвреЗрд░" | 430,000 |
| "рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛" "рдХрддрд╛рд░" - "рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрддрд╛рд░" | 496,000 |
| "рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛" "рдХрддрд╛рд░" | 530,000 |
| "рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛" "рд╕реНрдЯреИрдХ" | 577,000 |

@pgolebiowski рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореИрдВ рдпрд╣рд╛рдВ рдЖрдЧреЗ рдФрд░ рдкреАрдЫреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реВрдВ рдЗрд╕рд▓рд┐рдП рдореИрдВ рдорд╛рди рд▓реВрдВрдЧрд╛

@karelz @safern рдЖрдк рдЙрдкрд░реЛрдХреНрдд рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреИрд╕рд╛ рдорд╣рд╕реВрд╕ рдХрд░рддреЗ рд╣реИрдВ? рдХреНрдпрд╛ рд╣рдо IHeap + Heap рджреГрд╖реНрдЯрд┐рдХреЛрдг рдкрд░ рдЦреБрдж рдХреЛ рдареАрдХ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рдореИрдВ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдПрдкреАрдЖрдИ рдкреНрд░рд╕реНрддрд╛рд╡ рдкреЗрд╢ рдХрд░ рд╕рдХреВрдВ?

рдореИрдВ рдпрд╣рд╛рдВ рдПрдХ рдЗрдВрдЯрд░рдлреЗрд╕ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдкрд░ рд╕рд╡рд╛рд▓ рдЙрдард╛рддрд╛ рд╣реВрдВ (рдЪрд╛рд╣реЗ рд╡рд╣ IHeap рдпрд╛ IPriorityQueue )ред рд╣рд╛рдВ, рдХрдИ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рд╣реИрдВ рдЬреЛ рд╕реИрджреНрдзрд╛рдВрддрд┐рдХ рд░реВрдк рд╕реЗ рдЗрд╕ рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдРрд╕рд╛ рд▓рдЧрддрд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдврд╛рдВрдЪрд╛ рдПрдХ рд╕реЗ рдЕрдзрд┐рдХ рдХреЗ рд╕рд╛рде рдЬрд╣рд╛рдЬ рдЬрд╛рдПрдЧрд╛, рдФрд░ рдпрд╣ рд╡рд┐рдЪрд╛рд░ рдХрд┐ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд▓реЗрдЦрдХреЛрдВ рдХреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рдХреИрдиреЛрд▓рд┐рдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рддрд╛рдХрд┐ рд╡рд┐рднрд┐рдиреНрди рдкрд╛рд░реНрдЯрд┐рдпрд╛рдВ рдХреНрд░реЙрд╕-рд╕рдВрдЧрдд рдвреЗрд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд▓рд┐рдЦрдиреЗ рдореЗрдВ рд╕рдордиреНрд╡рдп рдХрд░ рд╕рдХреЗрдВ, рдРрд╕рд╛ рдкреНрд░рддреАрдд рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдПрдХ рдмрд╛рд░ рдПрдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдЬрд╛рд░реА рд╣реЛ рдЬрд╛рдиреЗ рдХреЗ рдмрд╛рдж рдЗрд╕реЗ рдХреЙрдореНрдкреЗрдЯ рдХреЗ рдХрд╛рд░рдг рдХрднреА рдирд╣реАрдВ рдмрджрд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдареЛрд╕ рд╡рд░реНрдЧреЛрдВ рдХреЗ рдкреАрдЫреЗ рдкрдбрд╝ рдЬрд╛рддрд╛ рд╣реИ (рдЖрдЬ IList рдФрд░ IDictionary рдХреЗ рд╕рд╛рде рдПрдХ рд╕рдорд╕реНрдпрд╛)ред рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд, рдпрджрд┐ рдПрдХ рд╣реАрдк рд╡рд░реНрдЧ рдЬрд╛рд░реА рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдФрд░ IHeap рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рд▓рд┐рдП рдЧрдВрднреАрд░ рд╢реЛрд░ рдерд╛, рддреЛ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рдмрд┐рдирд╛ рдХрд┐рд╕реА рд╕рдорд╕реНрдпрд╛ рдХреЗ рд▓рд╛рдЗрди рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

@ рдореИрдбрд▓рд╕рди рдореИрдВ рдорд╛рдирддрд╛ рд╣реВрдВ рдХрд┐ рдврд╛рдВрдЪреЗ рдХреЛ рдПрдХ рдвреЗрд░ рдХреЗ рдПрдХ рд╕реЗ рдЕрдзрд┐рдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рд╢рд┐рдк рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдПрдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рджреНрд╡рд╛рд░рд╛ рдЙрд╕ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдХреЗ, рд╣рдордореЗрдВ рд╕реЗ рдЬреЛ рдЕрдиреНрдп рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреА рдкрд░рд╡рд╛рд╣ рдХрд░рддреЗ рд╣реИрдВ, рд╡реЗ рдЖрд╕рд╛рдиреА рд╕реЗ рдХрд┐рд╕реА рдЕрдиреНрдп рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди (рд╣рдорд╛рд░реА рдЕрдкрдиреА рд░рдЪрдирд╛ рдпрд╛ рдмрд╛рд╣рд░реА рдкреБрд╕реНрддрдХрд╛рд▓рдп рдореЗрдВ) рдореЗрдВ рд╕реНрд╡реИрдк рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдлрд┐рд░ рднреА рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдХреЛрдб рдХреЗ рд╕рд╛рде рд╕рдВрдЧрдд рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред

рдореБрдЭреЗ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдкрд░ рдХреЛрдбрд┐рдВрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреЛрдИ рдирдХрд╛рд░рд╛рддреНрдордХ рдмрд┐рдВрджреБ рдирд╣реАрдВ рджрд┐рдЦ рд░рд╣рд╛ рд╣реИред рдЬреЛ рд▓реЛрдЧ рдЗрд╕рдХреА рдкрд░рд╡рд╛рд╣ рдирд╣реАрдВ рдХрд░рддреЗ рд╡реЗ рдЗрд╕реЗ рдЕрдирджреЗрдЦрд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рд╕реАрдзреЗ рдареЛрд╕ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд▓рд┐рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВред рдЬреЛ рдкрд░рд╡рд╛рд╣ рдХрд░рддреЗ рд╣реИрдВ рд╡реЗ рдЕрдкрдиреА рдкрд╕рдВрдж рдХреЗ рдХрд┐рд╕реА рднреА рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рдПрдХ рд╡рд┐рдХрд▓реНрдк рд╣реИред рдФрд░ рдпрд╣ рдПрдХ рд╡рд┐рдХрд▓реНрдк рд╣реИ рдЬреЛ рдореБрдЭреЗ рдЪрд╛рд╣рд┐рдПред

@pgolebiowski рдЕрдм рдЬрдм рдЖрдкрдиреЗ рдкреВрдЫрд╛ рд╣реИ, рддреЛ рдореЗрд░реА рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░рд╛рдп рд╣реИ (рдореБрдЭреЗ рдХреБрдЫ рд╣рдж рддрдХ рдпрдХреАрди рд╣реИ рдХрд┐ рдЕрдиреНрдп рдПрдкреАрдЖрдИ рд╕рдореАрдХреНрд╖рдХ/рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЯ рдЗрд╕реЗ рд╕рд╛рдЭрд╛ рдХрд░реЗрдВрдЧреЗ рдХреНрдпреЛрдВрдХрд┐ рдореИрдВрдиреЗ рдХреБрдЫ рдХреЗ рд╕рд╛рде рд░рд╛рдп рдХреА рдЬрд╛рдВрдЪ рдХреА рд╣реИ):
рдирд╛рдо PriorityQueue рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдФрд░ рд╣рдореЗрдВ IHeap рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдкреЗрд╢ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдмрд┐рд▓реНрдХреБрд▓ рдПрдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП (рд╕рдВрднрд╡рддрдГ рдХреБрдЫ рдвреЗрд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ)ред
IHeap рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдмрд╣реБрдд рдЙрдиреНрдирдд рд╡рд┐рд╢реЗрд╖рдЬреНрдЮ рдкрд░рд┐рджреГрд╢реНрдп рд╣реИ - рдореИрдВ рдЗрд╕реЗ PowerCollections рдкреБрд╕реНрддрдХрд╛рд▓рдп (рдЕрдВрддрддрдГ рдмрдирдиреЗ рдХреЗ рд▓рд┐рдП) рдпрд╛ рдХрд┐рд╕реА рдЕрдиреНрдп рдкреБрд╕реНрддрдХрд╛рд▓рдп рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХрд╛ рд╕реБрдЭрд╛рд╡ рджреВрдВрдЧрд╛ред
рдпрджрд┐ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдФрд░ IHeap рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд▓реЛрдХрдкреНрд░рд┐рдп рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рдмрд╛рдж рдореЗрдВ рдЕрдкрдирд╛ рд╡рд┐рдЪрд╛рд░ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдорд╛рдВрдЧ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ IHeap рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ (рдЖрдкрдХреЗ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдЕрдзрд┐рднрд╛рд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ), рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдпрд╣ рдЙрдкрдпреЛрдЧреА/рдЧрдардмрдВрдзрди рд╣реИ рдмрд╛рдХреА рдмреАрд╕реАрдПрд▓ рдХреЗ рд╕рд╛рде рдЕрдм рдирдпрд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдЬреЛрдбрд╝рдиреЗ рдХреА рдЬрдЯрд┐рд▓рддрд╛ рдХреЛ рдЙрдЪрд┐рдд рдард╣рд░рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИред рд╕рд░рд▓ рд╢реБрд░реБрдЖрдд рдХрд░реЗрдВ, рдЬрдЯрд┐рд▓ рд╕реЗ рддрднреА рдмрдврд╝реЗрдВ рдЬрдм рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЬрд░реВрд░рдд рд╣реЛред
... рдмрд╕ рдореЗрд░реЗ 2 (рд╡реНрдпрдХреНрддрд┐рдЧрдд) рд╕реЗрдВрдЯ

рд╡рд┐рдЪрд╛рд░реЛрдВ рдореЗрдВ рдЕрдВрддрд░ рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП, рдореИрдВ рдкреНрд░рд╕реНрддрд╛рд╡ рдХреЛ рдЖрдЧреЗ рдмрдврд╝рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рдХрд░рддрд╛ рд╣реВрдВ (рдЬреЛ рдореИрдВрдиреЗ рдЗрд╕ рд╕рдкреНрддрд╛рд╣ рдХреЗ рд╢реБрд░реВ рдореЗрдВ @ianhays рдХреЛ

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

... рдореЗрд░реА рд░рд╛рдп (рдЬреЛ рдЖрдкрдиреЗ рдорд╛рдВрдЧреА рдереА) рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдкрд╛рд░рджрд░реНрд╢реА рд╣реЛрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реИ, рдХреГрдкрдпрд╛ рдЗрд╕реЗ рдирд┐рд░рд╛рд╢рд╛ рдХреЗ рд░реВрдк рдореЗрдВ рди рд▓реЗрдВ рдпрд╛ рдкреАрдЫреЗ рдзрдХреЗрд▓реЗрдВ - рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рдПрдкреАрдЖрдИ рдкреНрд░рд╕реНрддрд╛рд╡ рдХреИрд╕реЗ рдЬрд╛рддрд╛ рд╣реИред

@ рдХрд░реЗрд▓реНрдЬрд╝

рдирд╛рдо PriorityQueue . рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП

рдХреЛрдИ рддрд░реНрдХ? рдпрд╣ рдХрдо рд╕реЗ рдХрдо рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ рдЖрдкрдиреЗ рдХреЗрд╡рд▓ рдирд╛ рдХрд╣рдиреЗ рдХреЗ рдмрдЬрд╛рдп рдКрдкрд░ рдЬреЛ рд▓рд┐рдЦрд╛ рд╣реИ рдЙрд╕реЗ рд╕рдВрдмреЛрдзрд┐рдд рдХрд░реЗрдВред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдиреЗ рдЗрд╕реЗ рдкрд╣рд▓реЗ рдмрд╣реБрдд рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдирд╛рдо рджрд┐рдпрд╛ рдерд╛: _рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдЗрдирдкреБрдЯ рд╣реИ, рддреЛ рдЗрд╕реЗ рдкреНрд░рджрд╛рди рдХрд░реЗрдВ, рдЗрд╕реЗ рдбреЗрдЯрд╛ рдФрд░ рд╕рд╛рдХреНрд╖реНрдп рдХреЗ рд╕рд╛рде рд╡рд╛рдкрд╕ рдХрд░реЗрдВред рджреВрд╕рд░реЛрдВ рдХреА рджрд▓реАрд▓реЗрдВ рднреА рд╕реБрдиреЗрдВ, рдЙрдиреНрд╣реЗрдВ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░реЗрдВред рдпрджрд┐ рдЖрдк рдЕрд╕рд╣рдордд рд╣реИрдВ рддреЛ рджреВрд╕рд░реЛрдВ рдХреА рд░рд╛рдп рдХреЗ рд╡рд┐рд░реБрджреНрдз рд╕рд╛рдХреНрд╖реНрдп рдкреНрд░рджрд╛рди рдХрд░реЗрдВред_

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрд╣ рд╕рд┐рд░реНрдл рдирд╛рдо рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рд╣реИ ред рдРрд╕рд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЙрдерд▓рд╛ рд╣реИред рдХреГрдкрдпрд╛ рдкрдврд╝реЗрдВ рдХрд┐ рдореИрдВрдиреЗ рдХреНрдпрд╛ рд▓рд┐рдЦрд╛ рд╣реИред рдпрд╣ рдЕрдореВрд░реНрддрддрд╛ рдХреЗ рд╕реНрддрд░реЛрдВ рдХреЗ рдмреАрдЪ рдХрд╛рдо рдХрд░рдиреЗ рдФрд░ рдЗрд╕рдХреЗ рдКрдкрд░ рдХреЛрдб/рдирд┐рд░реНрдорд╛рдг рдХреЛ рдмрдврд╝рд╛рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИред

рдУрд╣, рдЗрд╕ рдЪрд░реНрдЪрд╛ рдореЗрдВ рдПрдХ рддрд░реНрдХ рдерд╛ рдХрд┐ рдХреНрдпреЛрдВ:

рдпрджрд┐ рд╣рдо рдвреЗрд░ рдХреЗ рд╕рд╛рде рдЬрд╛рддреЗ рд╣реИрдВ, рддреЛ рдХрдИ рдордзреНрдпрд╡рд░реНрддреА-рдХреБрд╢рд▓ рдбреЗрд╡рд▓рдкрд░реНрд╕ (рджреБрдЦ рдХреА рдмрд╛рдд рд╣реИ) "рд╣реАрдк" рджреЗрдЦреЗрдВрдЧреЗ рдФрд░ рдЗрд╕реЗ "рд╕рд╛рдорд╛рдиреНрдпреАрдХреГрдд рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛ рдХреЛ рдвреЗрд░" рдХреЗ рдмрдЬрд╛рдп рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рдореЗрдореЛрд░реА рд╣реАрдк (рдпрд╛рдиреА рдвреЗрд░ рдФрд░ рд╕реНрдЯреИрдХ) рдХреЗ рд▓рд┐рдП рднреНрд░рдорд┐рдд рдХрд░реЗрдВрдЧреЗред [...] рдЙрдиреНрд╣реЗрдВ рдЖрд╢реНрдЪрд░реНрдп рд╣реЛрдЧрд╛ рдХрд┐ рд╡реЗ рдПрдХ рдирдпрд╛ рдореЗрдореЛрд░реА рд╣реАрдк рдХреНрдпреЛрдВ рдЖрд╡рдВрдЯрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдореИрдВ

рд╣рдореЗрдВ IHeap рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдкреЗрд╢ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред IHeap рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдмрд╣реБрдд рдЙрдиреНрдирдд рд╡рд┐рд╢реЗрд╖рдЬреНрдЮ рдкрд░рд┐рджреГрд╢реНрдп рд╣реИ - рдореИрдВ рдЗрд╕реЗ PowerCollections рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХрд╛ рд╕реБрдЭрд╛рд╡ рджреВрдВрдЧрд╛ред

@bendono рдиреЗ рдЗрд╕ рдкрд░ рдмрд╣реБрдд рдЕрдЪреНрдЫреА рдЯрд┐рдкреНрдкрдгреА рд▓рд┐рдЦреАред @safern рднреА рдПрдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рд╡рд╛рдкрд╕ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ред рдФрд░ рдХреБрдЫ рдЕрдиреНрдпред

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

рд▓реЗрдХрд┐рди рдлрд┐рд░, рдЖрдкрдиреЗ рдЗрд╕ рдкрд░ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдЯрд┐рдкреНрдкрдгреА рдХреА: рдХреЛрдИ рднреА рдЯреВрдЯреЗ рд╣реБрдП рдПрдкреАрдЖрдИ рдХреЛ рд╢рд┐рдк рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ред

рд╡рд┐рдЪрд╛рд░реЛрдВ рдореЗрдВ рдЕрдВрддрд░ рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП, рдореИрдВ рдкреНрд░рд╕реНрддрд╛рд╡ рдХреЛ рдЖрдЧреЗ рдмрдврд╝рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рдХрд░рддрд╛ рд╣реВрдВред [...] 2 рд╡реИрдХрд▓реНрдкрд┐рдХ рдкреНрд░рд╕реНрддрд╛рд╡ рдмрдирд╛рдПрдВ [...] рдЖрдЗрдП рдЗрд╕реЗ рдПрдкреАрдЖрдИ рд╕рдореАрдХреНрд╖рд╛ рдореЗрдВ рд▓рд╛рдПрдВ, рд╡рд╣рд╛рдВ рдЗрд╕ рдкрд░ рдЪрд░реНрдЪрд╛ рдХрд░реЗрдВ рдФрд░ рд╡рд╣рд╛рдВ рдирд┐рд░реНрдгрдп рд▓реЗрдВред рдпрджрд┐ рдореИрдВ рдЙрд╕ рд╕рдореВрд╣ рдХреЗ рдХрдо рд╕реЗ рдХрдо рдПрдХ рд╡реНрдпрдХреНрддрд┐ рдХреЛ рд╣реАрдкреНрд╕ рдкреНрд░рд╕реНрддрд╛рд╡ рдХреЗ рд▓рд┐рдП рдорддрджрд╛рди рдХрд░рддреЗ рд╣реБрдП рджреЗрдЦрддрд╛ рд╣реВрдВ, рддреЛ рдореБрдЭреЗ рдЕрдкрдиреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдкрд░ рдкреБрдирд░реНрд╡рд┐рдЪрд╛рд░ рдХрд░рдиреЗ рдореЗрдВ рдЦреБрд╢реА рд╣реЛрдЧреАред

рдКрдкрд░ рдПрдкреАрдЖрдИ рдХреЗ рд╡рд┐рднрд┐рдиреНрди рд╣рд┐рд╕реНрд╕реЛрдВ рдкрд░ рдХрд╛рдлреА рдЪрд░реНрдЪрд╛ рд╣реБрдИред рдЗрд╕рдиреЗ рдирд┐рдкрдЯрд╛рдпрд╛:

  • PriorityQueue рдмрдирд╛рдо Heap
  • рдПрдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдЬреЛрдбрд╝рдирд╛
  • рд╕рдВрдЧреНрд░рд╣ рд╕реЗ рддрддреНрд╡реЛрдВ рдХреЛ рдЕрджреНрдпрддрди/рдирд┐рдХрд╛рд▓рдиреЗ рдореЗрдВ рд╕рд╣рд╛рдпрддрд╛ рдХрд░рдирд╛

рдЖрдкрдХреЗ рдорди рдореЗрдВ рдЬреЛ рд▓реЛрдЧ рд╣реИрдВ рд╡реЗ рдЗрд╕ рдЪрд░реНрдЪрд╛ рдореЗрдВ рдпреЛрдЧрджрд╛рди рдХреНрдпреЛрдВ рдирд╣реАрдВ рджреЗ рд╕рдХрддреЗ? рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рд╣рдореЗрдВ рдЗрд╕реЗ рдлрд┐рд░ рд╕реЗ рдХреНрдпреЛрдВ рд╢реБрд░реВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП?

рдпрджрд┐ рд╣рдо рдвреЗрд░ рдХреЗ рд╕рд╛рде рдЬрд╛рддреЗ рд╣реИрдВ, рддреЛ рдХрдИ рдордзреНрдпрд╡рд░реНрддреА-рдХреБрд╢рд▓ рдбреЗрд╡рд▓рдкрд░реНрд╕ (рджреБрдЦ рдХреА рдмрд╛рдд рд╣реИ) "рд╣реАрдк" рджреЗрдЦреЗрдВрдЧреЗ рдФрд░ рдЗрд╕реЗ "рд╕рд╛рдорд╛рдиреНрдпреАрдХреГрдд рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛ рдХреЛ рдвреЗрд░" рдХреЗ рдмрдЬрд╛рдп рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рдореЗрдореЛрд░реА рд╣реАрдк (рдпрд╛рдиреА рдвреЗрд░ рдФрд░ рд╕реНрдЯреИрдХ) рдХреЗ рд▓рд┐рдП рднреНрд░рдорд┐рдд рдХрд░реЗрдВрдЧреЗред

рд╣рд╛рдБ, рдпрд╣ рдореИрдВ рд╣реВрдБред рдореИрдВ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдореЗрдВ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕реНрд╡-рд╢рд┐рдХреНрд╖рд┐рдд рд╣реВрдВ, рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдЬрдм " Heap " рдиреЗ рдЪрд░реНрдЪрд╛ рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рдХрд┐рдпрд╛ рддреЛ рдХреНрдпрд╛ рдХрд╣рд╛ рдЬрд╛ рд░рд╣рд╛ рдерд╛ред рдпрд╣ рдЙрд▓реНрд▓реЗрдЦ рдирд╣реАрдВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдПрдХ рд╕рдВрдЧреНрд░рд╣ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ, "рдЪреАрдЬреЛрдВ рдХрд╛ рдПрдХ рдвреЗрд░", рдореЗрд░реЗ рд▓рд┐рдП рдФрд░ рдЕрдзрд┐рдХ рд╕рд╣рдЬ рд░реВрдк рд╕реЗ рдпрд╣ рд╣рд░ рдлреИрд╢рди рдореЗрдВ рдЕрдирд┐рдпрдВрддреНрд░рд┐рдд рд╣реЛрдиреЗ рдХрд╛ рдЕрд░реНрде рд╣реЛрдЧрд╛ред

рдореБрдЭреЗ рд╡рд┐рд╢реНрд╡рд╛рд╕ рдирд╣реАрдВ рд╣реЛ рд░рд╣рд╛ рд╣реИ рдХрд┐

рдХреЛрдИ рддрд░реНрдХ? рдпрд╣ рдХрдо рд╕реЗ рдХрдо рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ рдЖрдкрдиреЗ рдХреЗрд╡рд▓ рдирд╛ рдХрд╣рдиреЗ рдХреЗ рдмрдЬрд╛рдп рдКрдкрд░ рдЬреЛ рд▓рд┐рдЦрд╛ рд╣реИ рдЙрд╕реЗ рд╕рдВрдмреЛрдзрд┐рдд рдХрд░реЗрдВред

рдпрджрд┐ рдЖрдк рдореЗрд░рд╛ рдЙрддреНрддрд░ рдкрдврд╝рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдореИрдВрдиреЗ рдЕрдкрдиреА рд╕реНрдерд┐рддрд┐ рдХреЗ рд▓рд┐рдП рдореБрдЦреНрдп рддрд░реНрдХреЛрдВ рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рд╣реИ:

  • IHeap рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдмрд╣реБрдд рдЙрдиреНрдирдд рд╡рд┐рд╢реЗрд╖рдЬреНрдЮ рдкрд░рд┐рджреГрд╢реНрдп рд╣реИ
  • рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдпрд╣ рдЕрдм рдирдпрд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдЬреЛрдбрд╝рдиреЗ рдХреА рдЬрдЯрд┐рд▓рддрд╛ рдХреЛ рдЙрдЪрд┐рдд рдард╣рд░рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╢реЗрд╖ рдмреАрд╕реАрдПрд▓ рдХреЗ рд╕рд╛рде рдЙрдкрдпреЛрдЧреА/рдЧрдардмрдВрдзрди рд╣реИ

рд╡рд╣реА рддрд░реНрдХ рдЬреЛ рдзрд╛рдЧреЗ рдкрд░ рдХрдИ рдмрд╛рд░ рдЖрдИрдПрдордУ рдкрд░ рджреЛрд╣рд░рд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред рдореИрдВрдиреЗ рдЕрднреА рдЙрдиреНрд╣реЗрдВ рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдпрд╛ рд╣реИ

. рдХреГрдкрдпрд╛ рдкрдврд╝реЗрдВ рдХрд┐ рдореИрдВрдиреЗ рдХреНрдпрд╛ рд▓рд┐рдЦрд╛ рд╣реИред

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

рдбреЗрд╡рд▓рдкрд░реНрд╕ рд╕рдВрднрд╡рддрдГ рдЙрд╕ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рд╡рд┐рд░реБрджреНрдз рдЕрдкрдирд╛ рдХреЛрдб рдХреИрд╕реЗ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рд╣рдорд╛рд░реА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ?

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

рдЖрдкрдХреЗ рдорди рдореЗрдВ рдЬреЛ рд▓реЛрдЧ рд╣реИрдВ рд╡реЗ рдЗрд╕ рдЪрд░реНрдЪрд╛ рдореЗрдВ рдпреЛрдЧрджрд╛рди рдХреНрдпреЛрдВ рдирд╣реАрдВ рджреЗ рд╕рдХрддреЗ?

рдПрдкреАрдЖрдИ рд╕рдореАрдХреНрд╖рд╛ рд╕рдХреНрд░рд┐рдп рдЪрд░реНрдЪрд╛, рд╡рд┐рдЪрд╛рд░-рдордВрдерди, рд╕рднреА рдХреЛрдгреЛрдВ рдХреЛ рдорд╣рддреНрд╡ рджреЗрдиреЗ рд╡рд╛рд▓реА рдмреИрдардХ рд╣реИред рдХрдИ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдпрд╣ GitHub рдореБрджреНрджреЛрдВ рдкрд░ рдЖрдЧреЗ-рдкреАрдЫреЗ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЕрдзрд┐рдХ рдЙрддреНрдкрд╛рджрдХ/рдХреБрд╢рд▓ рд╣реИред рджреЗрдЦреЗрдВ dotnet/corefx#14354 рдФрд░ рдЗрд╕рдХреЗ рдкреВрд░реНрд╡рд╡рд░реНрддреА dotnet/corefx#8034 - рдмрд╣реБрдд рд▓рдВрдмреА рдЪрд░реНрдЪрд╛, рдЧреИрдЬрд╝рд┐рд▓рд┐рдпрди рдЯреНрд╡рд┐рдХреНрд╕ рдХреЗ рд╕рд╛рде рдХрдИ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд░рд╛рдп рдЬрд┐рдиреНрд╣реЗрдВ рдЯреНрд░реИрдХ рдХрд░рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИ, рдХреЛрдИ рдирд┐рд╖реНрдХрд░реНрд╖ рдирд╣реАрдВ рд╣реИ, рдЬрдмрдХрд┐ рдорд╣рд╛рди рдЪрд░реНрдЪрд╛, рдХреБрдЫ рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЧреИрд░-рддреБрдЪреНрдЫ рдЕрдкрд╢рд┐рд╖реНрдЯ рд╕рдордп рднреА, рдЬрдм рддрдХ рд╣рдо рдмреИрда рдЧрдП рдФрд░ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдирд╣реАрдВ рдХреА рдФрд░ рдЖрдо рд╕рд╣рдорддрд┐ рдирд╣реАрдВ рдмрди рдЧрдИред
рдПрдкреАрдЖрдИ рд╕рдореАрдХреНрд╖рдХ рд╣рд░ рдПрдХ рдПрдкреАрдЖрдИ рдореБрджреНрджреЗ рдХреА рдирд┐рдЧрд░рд╛рдиреА рдХрд░рддреЗ рд╣реИрдВ, рдпрд╛ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛтАЛтАЛрдХрд┐ рд╕рд┐рд░реНрдл рдЧрдкрд╢рдк рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рднреА рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рд╕реНрдХреЗрд▓ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред

рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рд╣рдореЗрдВ рдЗрд╕реЗ рдлрд┐рд░ рд╕реЗ рдХреНрдпреЛрдВ рд╢реБрд░реВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП?

рд╣рдо рдлрд┐рд░ рд╕реЗ рд╢реБрд░реВ рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗред рдЖрдк рдРрд╕рд╛ рдХреНрдпреЛрдВ рд╕реЛрдЪреЗрдВрдЧреЗ?
рд╣рдо рдЕрдЧрд▓реЗ рдПрдкреАрдЖрдИ рд╕рдореАрдХреНрд╖рд╛ рд╕реНрддрд░ рдореЗрдВ рдкреЗрд╢реЗрд╡рд░реЛрдВ/рд╡рд┐рдкрдХреНрд╖реЛрдВ рдХреЗ рд╕рд╛рде 2 рд╕рдмрд╕реЗ рд▓реЛрдХрдкреНрд░рд┐рдп рдкреНрд░рд╕реНрддрд╛рд╡ рднреЗрдЬрдХрд░ рдкрд╣рд▓реЗ рд╕реНрддрд░ (рдХреНрд╖реЗрддреНрд░ рдХреЗ рдорд╛рд▓рд┐рдХ рд╕реНрддрд░) рдкрд░ рдПрдкреАрдЖрдИ рд╕рдореАрдХреНрд╖рд╛ рд╕рдорд╛рдкреНрдд рдХрд░реЗрдВрдЧреЗред
рдпрд╣ рдкрджрд╛рдиреБрдХреНрд░рдорд┐рдд рдЕрдиреБрдореЛрджрди/рд╕рдореАрдХреНрд╖рд╛ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╣реИред рдпрд╣ рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рд╕рдореАрдХреНрд╖рд╛рдУрдВ рдХреЗ рд╕рдорд╛рди рд╣реИ - рдирд┐рд░реНрдгрдп рд╢рдХреНрддрд┐рдпреЛрдВ рд╡рд╛рд▓реЗ рд╡реАрдкреА/рд╕реАрдИрдУ рдЕрдкрдиреА рдХрдВрдкрдиреА рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣рд░ рдЪрд░реНрдЪрд╛ рдХреА рджреЗрдЦрд░реЗрдЦ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рд╡реЗ рдЕрдкрдиреА рдЯреАрдореЛрдВ/рд░рд┐рдкреЛрд░реНрдЯреЛрдВ рд╕реЗ рдЙрдирдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдФрд░ рдЪрд░реНрдЪрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рдкреНрд░рднрд╛рд╡рд╢рд╛рд▓реА рдпрд╛ рд╕рдВрдХреНрд░рд╛рдордХ рдирд┐рд░реНрдгрдпреЛрдВ рдХреЗ рдкреНрд░рд╕реНрддрд╛рд╡ рд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рддреЗ рд╣реИрдВред рдЯреАрдореЛрдВ/рд░рд┐рдкреЛрд░реНрдЯреЛрдВ рдХреЛ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдФрд░ рд╡реИрдХрд▓реНрдкрд┐рдХ рд╕рдорд╛рдзрд╛рдиреЛрдВ рдХреЗ рдкрдХреНрд╖/рд╡рд┐рдкрдХреНрд╖ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред

рдпрджрд┐ рдЖрдк рдорд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рд╣рдо рдЕрдВрддрд┐рдо 2 рдкреНрд░рд╕реНрддрд╛рд╡реЛрдВ рдХреЛ рдкреЗрд╢реЗрд╡рд░реЛрдВ рдФрд░ рд╡рд┐рдкрдХреНрд╖реЛрдВ рдХреЗ рд╕рд╛рде рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рдирд╣реАрдВ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдРрд╕реА рдЪреАрдЬреЗрдВ рд╣реИрдВ рдЬреЛ рдЗрд╕ рдзрд╛рдЧреЗ рдкрд░ рдЕрднреА рддрдХ рдирд╣реАрдВ рдХрд╣реА рдЧрдИ рд╣реИрдВ, рддреЛ рдЖрдЗрдП рдЪрд░реНрдЪрд╛ рдХрд░рддреЗ рд░рд╣реЗрдВ, рдЬрдм рддрдХ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЕрдЧрд▓реЗ рдореЗрдВ рд╕рдореАрдХреНрд╖рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рд╢реАрд░реНрд╖ рдЙрдореНрдореАрджрд╡рд╛рд░ рди рд╣реЛрдВред рдПрдкреАрдЖрдИ рд╕рдореАрдХреНрд╖рд╛ рд╕реНрддрд░ред
рдореБрдЭреЗ рд▓рдЧрд╛ рдХрд┐ рдЬреЛ рдХреБрдЫ рдХрд╣рд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдерд╛, рд╡рд╣ рд╕рдм рдХрд╣ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ?

рдирд╛рдо PriorityQueue . рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП

рдХреЛрдИ рддрд░реНрдХ?

рдпрджрд┐ рдЖрдк рдореЗрд░рд╛ рдЙрддреНрддрд░ рдкрдврд╝рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдореИрдВрдиреЗ рдЕрдкрдиреА рд╕реНрдерд┐рддрд┐ рдХреЗ рд▓рд┐рдП рдореБрдЦреНрдп рддрд░реНрдХреЛрдВ рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рд╣реИред

рдЧреАрдЬрд╝ ... рдореИрдВ рдЬреЛ рдЙрджреНрдзреГрдд рдХрд░ рд░рд╣рд╛ рдерд╛ ( рдЬрд╛рд╣рд┐рд░ рд╣реИ ) - рдЖрдк рдвреЗрд░ рдХреЗ рдмрдЬрд╛рдп рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрддрд╛рд░ рдХреЗ рд╕рд╛рде рдЬрд╛рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд░ рд░рд╣реЗ рдереЗред рдФрд░ рд╣рд╛рдБ, рдореИрдВрдиреЗ рдЖрдкрдХрд╛ рдЙрддреНрддрд░ рдкрдврд╝ рд▓рд┐рдпрд╛ рд╣реИ -- рдЗрд╕рдореЗрдВ рдЗрд╕рдХреЗ рд▓рд┐рдП рдареАрдХ 0% рддрд░реНрдХ рд╣реИрдВред

рдореИрдВ рд╣рд░ рд╕рдордп рд╕рдХреНрд░рд┐рдп рд░реВрдк рд╕реЗ рдЗрд╕ рдзрд╛рдЧреЗ рдХреА рдирд┐рдЧрд░рд╛рдиреА рдХрд░ рд░рд╣рд╛ рдерд╛ред рдореИрдВрдиреЗ рд╕рднреА рддрд░реНрдХреЛрдВ рдФрд░ рдмрд┐рдВрджреБрдУрдВ рдХреЛ рдкрдврд╝рд╛ред рдЖрдкрдХреЗ рдФрд░ рджреВрд╕рд░реЛрдВ рдХреЗ рд╕рднреА рдмрд┐рдВрджреБрдУрдВ рдХреЛ рдкрдврд╝рдиреЗ (рдФрд░ рд╕рдордЭрдиреЗ) рдХреЗ рдмрд╛рд╡рдЬреВрдж, рдпрд╣ рдореЗрд░реА рд╕рдВрдХреНрд╖рд┐рдкреНрдд рд░рд╛рдп рд╣реИред

рдЖрдк рдЕрддрд┐рд╢рдпреЛрдХреНрддрд┐рдкреВрд░реНрдг рд╣реЛрдирд╛ рдкрд╕рдВрдж рдХрд░рддреЗ рд╣реИрдВ, рдореИрдВрдиреЗ рдЗрд╕реЗ рдкрд╣рд▓реЗ рджреЗрдЦрд╛ рд╣реИред рдЖрдк рдХреЗрд╡рд▓ рдмрд┐рдВрджреБрдУрдВ рдХреЗ рдЕрд╕реНрддрд┐рддреНрд╡ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддреЗ рд╣реИрдВред

рдбреЗрд╡рд▓рдкрд░реНрд╕ рд╕рдВрднрд╡рддрдГ рдЙрд╕ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рд╡рд┐рд░реБрджреНрдз рдЕрдкрдирд╛ рдХреЛрдб рдХреИрд╕реЗ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рд╣рдорд╛рд░реА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ?

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

рдХреНрдпрд╛ рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдЖрдк рдореЗрд░реЗ рд╢рдмреНрджреЛрдВ рдХреЛ рдпрд╣рд╛рдБ рджреЛрд╣рд░рд╛ рд░рд╣реЗ рд╣реИрдВ рдФрд░ рдЙрд╕ рдореБрджреНрджреЗ рдХреЛ рдмрд┐рд▓реНрдХреБрд▓ рднреА рд╕рдВрдмреЛрдзрд┐рдд рдирд╣реАрдВ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдЬреЛ рдореИрдВрдиреЗ рдЙрдкрд░реЛрдХреНрдд рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдпрд╛ рд╣реИ? рдореИрдВрдиреЗ рд▓рд┐рдЦрд╛:

рд╡реЗ рдпрд╛ рддреЛ рд╣рдорд╛рд░реА рдЧреИрд░-рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рд╕реЗ рдЪрд┐рдкрдХреЗ рд░рд╣рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рд╣реЛрдВрдЧреЗ рдпрд╛ рдЗрд╕реЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрдирджреЗрдЦрд╛ рдХрд░ рджреЗрдВрдЧреЗ, рдХреЛрдИ рдЕрдиреНрдп рд╡рд┐рдХрд▓реНрдк рдирд╣реАрдВ рд╣реИ, рдпрд╣ рдкрд░рд╕реНрдкрд░ рдЕрдирдиреНрдп рд╣реИред

рдореИрдВ рдЗрд╕реЗ рдЖрдкрдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рд╕реНрдкрд╖реНрдЯ рдХрд░ рджреВрдВрдЧрд╛ред рд▓реЛрдЧреЛрдВ рдХреЗ рджреЛ рдЕрд╕рдВрдмрджреНрдз рд╕рдореВрд╣ рд╣реЛрдВрдЧреЗ:

  1. рдПрдХ рд╕рдореВрд╣ рдЬреЛ рд╣рдорд╛рд░реА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реИред рдЗрд╕рдХрд╛ рдХреЛрдИ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдирд╣реАрдВ рд╣реИ рдФрд░ рдЗрд╕реЗ рдмрдврд╝рд╛рдпрд╛ рдирд╣реАрдВ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдпрд╣ рддреГрддреАрдп-рдкрдХреНрд╖ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдореЗрдВ рдкреНрд░рджрд╛рди рдХреА рдЧрдИ рдЪреАрдЬрд╝реЛрдВ рд╕реЗ рдЬреБрдбрд╝рд╛ рдирд╣реАрдВ рд╣реИред
  2. рджреВрд╕рд░рд╛ рд╕рдореВрд╣ рдЬреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╣рдорд╛рд░реА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреА рдЕрдирджреЗрдЦреА рдХрд░ рд░рд╣рд╛ рд╣реИ рдФрд░ рд╡рд┐рд╢реБрджреНрдз рд░реВрдк рд╕реЗ рддреГрддреАрдп-рдкрдХреНрд╖ рд╕рдорд╛рдзрд╛рдиреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реИред

рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдХрд╣рд╛, рдпрд╣рд╛рдБ рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рд╡реЗ рд▓реЛрдЧреЛрдВ рдХреЗ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╕рдореВрд╣ рд╣реИрдВ ред рдФрд░ рд╡реЗ рдРрд╕реЗ рдХреЛрдб рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдЬреЛ рдПрдХ рд╕рд╛рде рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ , рдХреНрдпреЛрдВрдХрд┐ рдХреЛрдИ рд╕рд╛рдорд╛рдиреНрдп рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░рд▓ рдХреЛрд░ рдирд╣реАрдВ рд╣реИред _ рдХреЛрдбрдмреЗрд╕ рд╕рдВрдЧрдд рдирд╣реАрдВ рд╣реИ _. рдЖрдк рдЗрд╕реЗ рдмрд╛рдж рдореЗрдВ рдкреВрд░реНрд╡рд╡рдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗред

рдЕрдЪреНрдЫреА рдЦрдмрд░ рдпрд╣ рд╣реИ рдХрд┐ IHeap рдХреЛ рдмрд╛рдж рдореЗрдВ рдЬреЛрдбрд╝рдирд╛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рдВрднрд╡ рд╣реИ - рдпрд╣ рдореВрд▓ рд░реВрдк рд╕реЗ рдкреНрд░рд╛рдпреЛрд░рд┐рдЯреА рдХреНрдпреВ рдкрд░ рд╕рд┐рд░реНрдл рдПрдХ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдУрд╡рд░рд▓реЛрдб рдЬреЛрдбрд╝рддрд╛ рд╣реИред

рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рд╣реА рд▓рд┐рдЦрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХреНрдпреЛрдВ рдмреЗрдХрд╛рд░ рд╣реИ: рдЗрд╕ рдкреЛрд╕реНрдЯ рдХреЛ рджреЗрдЦреЗрдВ ред

рдЖрдкрдХреЗ рдорди рдореЗрдВ рдЬреЛ рд▓реЛрдЧ рд╣реИрдВ рд╡реЗ рдЗрд╕ рдЪрд░реНрдЪрд╛ рдореЗрдВ рдпреЛрдЧрджрд╛рди рдХреНрдпреЛрдВ рдирд╣реАрдВ рджреЗ рд╕рдХрддреЗ?

рдПрдкреАрдЖрдИ рд╕рдореАрдХреНрд╖рдХ рд╣рд░ рдПрдХ рдПрдкреАрдЖрдИ рдореБрджреНрджреЗ рдХреА рдирд┐рдЧрд░рд╛рдиреА рдХрд░рддреЗ рд╣реИрдВ, рдпрд╛ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛтАЛтАЛрдХрд┐ рд╕рд┐рд░реНрдл рдЧрдкрд╢рдк рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рднреА рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рд╕реНрдХреЗрд▓ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред

рд╣рд╛рдВ, рдореИрдВ рдкреВрдЫ рд░рд╣рд╛ рдерд╛ рдХрд┐ рдПрдкреАрдЖрдИ рд╕рдореАрдХреНрд╖рдХ рд╣рд░ рдПрдХ рдПрдкреАрдЖрдИ рдореБрджреНрджреЗ рдХреА рдирд┐рдЧрд░рд╛рдиреА рдХреНрдпреЛрдВ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗред рдареАрдХ рд╣реИ, рдЖрдкрдиреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЙрд╕реА рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рджреАред

рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ?

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

рдЕрдкрдиреА рдЕрдХреНрд╖рдо рдкреНрд░рд╛рдпреЛрд░рд┐рдЯреА рдХреНрдпреВ рдХреЗ рд╕рд╛рде рдЬрд╛рдПрдВ рдЬреЛ рддрддреНрд╡реЛрдВ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдФрд░ рд╣рдЯрд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрддреА рд╣реИред рдЕрдкрдиреЗ рдбрд┐рдЬрд╛рдЗрди рдХреЗ рд╕рд╛рде рдЬрд╛рдПрдВ рдЬреЛ рд╕реНрд╡рд╕реНрде рдУрдУ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИред рдЕрдкрдиреЗ рд╕рдорд╛рдзрд╛рди рдХреЗ рд╕рд╛рде рдЬрд╛рдПрдВ рдЬреЛ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рд▓рд┐рдЦрддреЗ рд╕рдордп рдорд╛рдирдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХрд╛ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИред рдЬрд╛рд╡рд╛ рд░рд╛рд╕реНрддрд╛ рдЬрд╛рдУред

рдФрд░ рдпрд╣... рдпрд╣ рд╕рд┐рд░реНрдл рджрд┐рдорд╛рдЧреА рдЙрдбрд╝рд╛рдиреЗ рд╡рд╛рд▓рд╛ рд╣реИ:

рдпрджрд┐ рд╣рдо рдвреЗрд░ рдХреЗ рд╕рд╛рде рдЬрд╛рддреЗ рд╣реИрдВ, рддреЛ рдХрдИ рдордзреНрдпрд╡рд░реНрддреА-рдХреБрд╢рд▓ рдбреЗрд╡рд▓рдкрд░реНрд╕ (рджреБрдЦ рдХреА рдмрд╛рдд рд╣реИ) "рд╣реАрдк" рджреЗрдЦреЗрдВрдЧреЗ рдФрд░ рдЗрд╕реЗ "рд╕рд╛рдорд╛рдиреНрдпреАрдХреГрдд рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛ рдХреЛ рдвреЗрд░" рдХреЗ рдмрдЬрд╛рдп рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рдореЗрдореЛрд░реА рд╣реАрдк (рдпрд╛рдиреА рдвреЗрд░ рдФрд░ рд╕реНрдЯреИрдХ) рдХреЗ рд▓рд┐рдП рднреНрд░рдорд┐рдд рдХрд░реЗрдВрдЧреЗред

рдЕрдкрдиреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рд╕рд╛рде рдПрдкреАрдЖрдИ рдкреНрд░рд╕реНрддреБрдд рдХрд░реЗрдВред рдореИрдВ рдЙрддреНрд╕реБрдХ рд╣реВрдБред

рдореБрдЭреЗ рд╡рд┐рд╢реНрд╡рд╛рд╕ рдирд╣реАрдВ рд╣реЛ рд░рд╣рд╛ рд╣реИ рдХрд┐ рдРрд╕рд╛ рд╕рдЪ рдореЗрдВ рд╣реЛ рд░рд╣рд╛ рд╣реИ...

рдареАрдХ рд╣реИ, рдореБрдЭреЗ рдпрд╣ рдЬрд╛рдирдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ Heap рдПрдХ рдкреНрд░рдХрд╛рд░ рдХреА рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛ рд╣реИ рдЬреЛ рдореЗрдореЛрд░реА рд╣реАрдк рд╕реЗ рдЕрд▓рдЧ рд╣реИ, рдПрдХ рдЙрдЪрд┐рдд рдХрдВрдкреНрдпреВрдЯрд░ рд╡рд┐рдЬреНрдЮрд╛рди рд╢рд┐рдХреНрд╖рд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХрд╛ рдЕрд╡рд╕рд░ рдирд╣реАрдВ рдорд┐рд▓рдиреЗ рдХреЗ рдХрд╛рд░рдг рдореБрдЭреЗ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред

рдмрд╛рдд рдЕрднреА рднреА рдХрд╛рдпрдо рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ред рдХрд┐рд╕реА рдЪреАрдЬ рдХреЗ рдвреЗрд░ рдХрд╛ рдорддрд▓рдм рдпрд╣ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЙрд╕реЗ рдХрд┐рд╕реА рддрд░рд╣ рд╕реЗ рдСрд░реНрдбрд░ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИред рдЕрдЧрд░ рдореБрдЭреЗ рдПрдХ рд╕рдВрдЧреНрд░рд╣ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рдЬреЛ рдореБрдЭреЗ рдЪреАрдЬреЛрдВ рдХреА рд╡рд╕реНрддреБрдУрдВ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдЬрд╣рд╛рдВ рдмрд╛рдж рдореЗрдВ рдЖрдиреЗ рд╡рд╛рд▓реЗ рдХреБрдЫ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЛ рдЬрд▓реНрдж рд╣реА рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИ, рддреЛ рдореИрдВ Heap рдирд╛рдордХ рдХрд┐рд╕реА рдЪреАрдЬрд╝ рдХреА рдЦреЛрдЬ рдирд╣реАрдВ рдХрд░реВрдБрдЧрд╛ред рджреВрд╕рд░реА рдУрд░ PriorityQueue , рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рдВрдЪрд╛рд░ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдареАрдХ рдпрд╣реА рдХрд░рддрд╛ рд╣реИред

рдПрдХ рд╕рдорд░реНрдерди рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд░реВрдк рдореЗрдВ? рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╡рд┐рд╡рд░рдг рдореЗрд░реА рдЪрд┐рдВрддрд╛ рдХрд╛ рд╡рд┐рд╖рдп рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред
рдХреБрдЫ IHeap рдЕрдореВрд░реНрдд? рдПрдкреАрдЖрдИ рд▓реЗрдЦрдХреЛрдВ рдФрд░ рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдмрдврд╝рд┐рдпрд╛ рдЬрд┐рдирдХреЗ рдкрд╛рд╕ рд╕реАрдПрд╕ рдореЗрдЬрд░ рд╣реИ, рдпрд╣ рдЬрд╛рдирдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдЗрд╕рдХрд╛ рдХреНрдпрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдХреЛрдИ рдХрд╛рд░рдг рдирд╣реАрдВ рд╣реИред
рдХреБрдЫ рдРрд╕рд╛ рдЧреБрдкреНрдд рдирд╛рдо рджреЗрдирд╛ рдЬреЛ рдЕрдкрдиреЗ рдЗрд░рд╛рджреЗ рдХреЛ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдирд╣реАрдВ рдмрддрд╛рддрд╛ рд╣реИ рдФрд░ рдмрд╛рдж рдореЗрдВ рдЦреЛрдЬ рдпреЛрдЧреНрдпрддрд╛ рдХреЛ рд╕реАрдорд┐рдд рдХрд░рддрд╛ рд╣реИ? рдореИрдВ

рдареАрдХ рд╣реИ, рдореБрдЭреЗ рдпрд╣ рдЬрд╛рдирдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЙрдЪрд┐рдд рдХрдВрдкреНрдпреВрдЯрд░ рд╡рд┐рдЬреНрдЮрд╛рди рд╢рд┐рдХреНрд╖рд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХрд╛ рдЕрд╡рд╕рд░ рдирд╣реАрдВ рдорд┐рд▓рд╛ рд╣реИ рдХрд┐ рд╣реАрдк рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХреА рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛ рд╣реИ рдЬреЛ рдореЗрдореЛрд░реА рд╣реАрдк рд╕реЗ рдЕрд▓рдЧ рд╣реИред

рдпрд╣ рдордЬрд╝рд╛рдХреАрдп рд╣реИред рд╕рд╛рде рд╣реА рдЖрдк рдЙрд╕ рддрд░рд╣ рдХреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ рдЪрд░реНрдЪрд╛ рдореЗрдВ рднрд╛рдЧ рд▓реЗрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдпрд╣ рдЯреНрд░реЛрд▓рд┐рдВрдЧ рдЬреИрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИред

рдХрд┐рд╕реА рдЪреАрдЬ рдХреЗ рдвреЗрд░ рдХрд╛ рдорддрд▓рдм рдпрд╣ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЙрд╕реЗ рдХрд┐рд╕реА рддрд░рд╣ рд╕реЗ рдСрд░реНрдбрд░ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИред

рдЖрдк рдЧрд▓рдд рд╣реИрдВред рдпрд╣ рдЖрджреЗрд╢ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдПрдХ рдвреЗрд░ рдХреЗ рд░реВрдк рдореЗрдВред рдЬреИрд╕реЗ рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рд▓рд┐рдВрдХ рдХреА рдЧрдИ рддрд╕реНрд╡реАрд░реЛрдВ рдореЗрдВред

рдПрдХ рд╕рдорд░реНрдерди рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд░реВрдк рдореЗрдВ? рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╡рд┐рд╡рд░рдг рдореЗрд░реА рдЪрд┐рдВрддрд╛ рдХрд╛ рд╡рд┐рд╖рдп рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

рдореИрдВ рдЗрд╕реЗ рдкрд╣рд▓реЗ рд╣реА рд╕рдВрдмреЛрдзрд┐рдд рдХрд░ рдЪреБрдХрд╛ рд╣реВрдВред рдвреЗрд░ рдХрд╛ рдкрд░рд┐рд╡рд╛рд░ рдмрд╣реБрдд рдмрдбрд╝рд╛ рд╣реИ рдФрд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рдКрдкрд░ рдЕрдореВрд░реНрддрддрд╛ рдХреЗ рджреЛ рд╕реНрддрд░ рд╣реИрдВред рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрддрд╛рд░ рддреАрд╕рд░реА рдЕрдореВрд░реНрдд рдкрд░рдд рд╣реИред

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

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

рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдЗрдирдкреБрдЯ рд╣реИ, рддреЛ рдЙрд╕реЗ рдкреНрд░рджрд╛рди рдХрд░реЗрдВ, рдбреЗрдЯрд╛ рдФрд░ рд╕рд╛рдХреНрд╖реНрдп рдХреЗ рд╕рд╛рде рдЙрд╕рдХрд╛ рд╕рдорд░реНрдерди рдХрд░реЗрдВред рдЕрдЧрд░ рдЖрдк рдЕрд╕рд╣рдордд рд╣реИрдВ рддреЛ рджреВрд╕рд░реЗ рдХреА рд░рд╛рдп рдХреЗ рдЦрд┐рд▓рд╛рдл рд╕рдмреВрдд рджреЗрдВред

рдФрд░ рдЖрдВрдХрдбрд╝реЛрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдЖрдк рдЧрд▓рдд рд╣реИрдВ:

рдкреНрд░рд╢реНрди | рд╣рд┐рдЯреНрд╕
:----: |:----:|
| "рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛" "рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрддрд╛рд░" | 172,000 |
| "рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛" "рдвреЗрд░" | 430,000 |

рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрдврд╝рддреЗ рд╕рдордп рдпрд╣ рд▓рдЧрднрдЧ 3 рдЧреБрдирд╛ рдЕрдзрд┐рдХ рд╣реЛрдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИред рд╕рд╛рде рд╣реА, рдпрд╣ рдПрдХ рдРрд╕рд╛ рдирд╛рдо рд╣реИ рдЬрд┐рд╕рд╕реЗ рд╕реНрд╡рд┐рдлреНрдЯ, рдЧреЛ, рд░рд╕реНрдЯ рдФрд░ рдкрд╛рдпрдерди рдбреЗрд╡рд▓рдкрд░реНрд╕ рдкрд░рд┐рдЪрд┐рдд рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдЙрдирдХреЗ рдорд╛рдирдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдРрд╕реА рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛ рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВред

рдкреНрд░рд╢реНрди | рд╣рд┐рдЯреНрд╕
:----: |:----:|
| "рдЧреЛрд▓рдВрдЧ" "рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрддрд╛рд░" | 3.390 |
| "рдЬрдВрдЧ" "рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрддрд╛рд░" | 8.630 |
| "рддреЗрдЬ" "рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрддрд╛рд░" | 18.600 |
| "рдкрд╛рдпрдерди" "рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрддрд╛рд░" | 72.800 |
| "рдЧреЛрд▓рдВрдЧ" "рдвреЗрд░" | 79.000 |
| "рдЬрдВрдЧ" "рдвреЗрд░" | 492.000 |
| "рддреЗрдЬ" "рдвреЗрд░" | 551.000 |
| "рдкрд╛рдпрдерди" "рдвреЗрд░" | 555.000 |

рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдпрд╣ рд╕реА ++ рдХреЗ рд▓рд┐рдП рднреА рд╕рдорд╛рди рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдкрд┐рдЫрд▓реА рд╢рддрд╛рдмреНрджреА рдореЗрдВ рдХрднреА-рдХрднреА рдПрдХ рдвреЗрд░ рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛ рдкреЗрд╢ рдХреА рдЧрдИ рдереАред

рдХреБрдЫ рдРрд╕рд╛ рдЧреБрдкреНрдд рдирд╛рдо рджреЗрдирд╛ рдЬреЛ рдЕрдкрдиреЗ рдЗрд░рд╛рджреЗ рдХреЛ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдирд╣реАрдВ рдмрддрд╛рддрд╛ рд╣реИ рдФрд░ рдмрд╛рдж рдореЗрдВ рдЦреЛрдЬ рдпреЛрдЧреНрдпрддрд╛ рдХреЛ рд╕реАрдорд┐рдд рдХрд░рддрд╛ рд╣реИ? рдореИрдВ

рдХреЛрдИ рд░рд╛рдп рдирд╣реАрдВред рдЖрдВрдХрдбрд╝реЗред рдКрдкрд░ рджреЗрдЦреЛред рдЦрд╛рд╕рддреМрд░ рдкрд░ рдХрд┐рд╕реА рдРрд╕реЗ рд╡реНрдпрдХреНрддрд┐ рд╕реЗ рдХреЛрдИ рд░рд╛рдп рдирд╣реАрдВ рдЬрд┐рд╕рдХреА рдХреЛрдИ рдкреГрд╖реНрдарднреВрдорд┐ рди рд╣реЛред рдЖрдк рдкрд╣рд▓реЗ рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рдкрдврд╝реЗ рдмрд┐рдирд╛ Google рдХреЛ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрддрд╛рд░ рдирд╣реАрдВ рджреЗрдВрдЧреЗред рдФрд░ рдвреЗрд░ рдХрдИ рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛ 101 рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИ ред

рдпрд╣ рдХрдВрдкреНрдпреВрдЯрд░ рд╡рд┐рдЬреНрдЮрд╛рди рдореЗрдВ рдиреАрдВрд╡ рд╣реИред рдпрд╣ рдкреНрд░рд╛рдердорд┐рдХ рд╣реИред рдЬрдм рдЖрдкрдХреЗ рдкрд╛рд╕ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдФрд░ рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреЗ рдХрдИ рд╕реЗрдореЗрд╕реНрдЯрд░ рд╣реЛрддреЗ рд╣реИрдВ, рддреЛ рдвреЗрд░ рдХреБрдЫ рдРрд╕рд╛ рд╣реЛрддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдЖрдк рд╢реБрд░реБрдЖрдд рдореЗрдВ рджреЗрдЦрддреЗ рд╣реИрдВред

рдлрд┐рд░ рднреА:

  • рдкрд╣рд▓реЗ - рдКрдкрд░ рджрд┐рдП рдЧрдП рдирдВрдмрд░реЛрдВ рдХреЛ рджреЗрдЦреЗрдВред
  • рджреВрд╕рд░рд╛ - рдЕрдиреНрдп рд╕рднреА рднрд╛рд╖рд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪреЗрдВ рдЬрд╣рд╛рдВ рдвреЗрд░ рдорд╛рдирдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИред

рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: Google рд░реБрдЭрд╛рди рджреЗрдЦреЗрдВред

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

рдФрд░ рдореИрдВ "рдирд╛рдо рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХреНрдпреВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП " рдЬреИрд╕реЗ рдмрдпрд╛рдиреЛрдВ рд╕реЗ рднреА рдЕрд╕рд╣рдордд рд╣реВрдВред рдпрджрд┐ рдЖрдк рд▓реЛрдЧреЛрдВ рдХрд╛ рдЗрдирдкреБрдЯ рдирд╣реАрдВ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЗрд╕реЗ рдУрдкрди-рд╕реЛрд░реНрд╕ рди рдмрдирд╛рдПрдВ рдФрд░ рдЗрд╕рдХреЗ рд▓рд┐рдП рди рдкреВрдЫреЗрдВред

рдореИрдВ рдПрдкреАрдЖрдИ рдирд╛рдордХрд░рдг рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣рдорд╛рд░реЗ рд╡рд┐рдЪрд╛рд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реВрдВ:

  1. рд╣рдо рд▓рдЧрднрдЧ рдХрд┐рд╕реА рднреА рдЪреАрдЬрд╝ рд╕реЗ рдКрдкрд░ .NET рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рдХреЗ рднреАрддрд░ рдирд┐рд░рдВрддрд░рддрд╛ рдХрд╛ рдкрдХреНрд╖ рд▓реЗрддреЗ рд╣реИрдВред рдПрдкреАрдЖрдИ рдХреЛ рдкрд░рд┐рдЪрд┐рдд рдФрд░ рдЕрдиреБрдорд╛рдирд┐рдд рджрд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред рдХрднреА-рдХрднреА рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реИ рдХрд┐ рд╣рдо рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдХреЛрдИ рдирд╛рдо 100% рд╕рд╣реА рдирд╣реАрдВ рд╣реИ, рдпрджрд┐ рдпрд╣ рдПрдХ рдРрд╕рд╛ рд╢рдмреНрдж рд╣реИ рдЬрд┐рд╕рдХрд╛ рд╣рдордиреЗ рдкрд╣рд▓реЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рд╣реИред

  2. рд╣рдорд╛рд░рд╛ рд▓рдХреНрд╖реНрдп рдПрдХ рдРрд╕рд╛ рдордВрдЪ рддреИрдпрд╛рд░ рдХрд░рдирд╛ рд╣реИ рдЬреЛ рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рдХрд╛рд░ рдХреЗ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рд▓рд┐рдП рд╕реБрд▓рдн рд╣реЛ, рдЬрд┐рдирдореЗрдВ рд╕реЗ рдХреБрдЫ рдиреЗ рдХрдВрдкреНрдпреВрдЯрд░ рд╡рд┐рдЬреНрдЮрд╛рди рдореЗрдВ рдФрдкрдЪрд╛рд░рд┐рдХ рд╢рд┐рдХреНрд╖рд╛ рдирд╣реАрдВ рд▓реА рд╣реИред рд╣рдо рдорд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдХрд╛рд░рдг .NET рдХреЛ рдЖрдо рддреМрд░ рдкрд░ рдмрд╣реБрдд рдЙрддреНрдкрд╛рджрдХ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЙрдкрдпреЛрдЧ рдореЗрдВ рдЖрд╕рд╛рди рдЖрдВрд╢рд┐рдХ рд░реВрдк рд╕реЗ рдЙрд╕ рдбрд┐рдЬрд╝рд╛рдЗрди рдмрд┐рдВрджреБ рдХреЗ рдХрд╛рд░рдг рд╣реЛрддрд╛ рд╣реИред

рд╣рдо рдЖрдо рддреМрд░ рдкрд░ "рдЦреЛрдЬ рдЗрдВрдЬрди рдкрд░реАрдХреНрд╖рдг" рдХреЛ рдирд┐рдпреЛрдЬрд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдЬрдм рдпрд╣ рдЬрд╛рдВрдЪрддрд╛ рд╣реИ рдХрд┐ рдирд╛рдо рдпрд╛ рд╢рдмреНрджрд╛рд╡рд▓реА рдХрд┐рддрдиреА рдкреНрд░рд╕рд┐рджреНрдз рдФрд░ рд╕реНрдерд╛рдкрд┐рдд рд╣реИред рдЗрд╕рд▓рд┐рдП рдореИрдВ @pgolebiowski рджреНрд╡рд╛рд░рд╛ рдХрд┐рдП рдЧрдП рд╢реЛрдз рдХреА рдЕрддреНрдпрдзрд┐рдХ рд╕рд░рд╛рд╣рдирд╛ рдХрд░рддрд╛

рдЗрд╕рд▓рд┐рдП, рдореИрдВ @karelz рд╕реЗ рд╕рд╣рдордд PriorityQueue рдмреЗрд╣рддрд░ рд╡рд┐рдХрд▓реНрдк рдХреА рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ ред рдпрд╣ рдПрдХ рдореМрдЬреВрджрд╛ рдЕрд╡рдзрд╛рд░рдгрд╛ (рдХрддрд╛рд░) рдХреЛ рдЬреЛрдбрд╝рддреА рд╣реИ рдФрд░ рд╡рд╛рдВрдЫрд┐рдд рдХреНрд╖рдорддрд╛ рдХреЛ рд╡реНрдпрдХреНрдд рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдореЛрдбрд╝ рдХреЛ рдЬреЛрдбрд╝рддреА рд╣реИ: рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдкреБрдирд░реНрдкреНрд░рд╛рдкреНрддрд┐ рдХрд╛ рдЖрджреЗрд╢ рджрд┐рдпрд╛ред рд▓реЗрдХрд┐рди рд╣рдо рдЙрд╕ рдирд╛рдо рд╕реЗ рдЕрдбрд┐рдЧ рдирд╣реАрдВ рд╣реИрдВред рд╣рдордиреЗ рдЕрдХреНрд╕рд░ рдЧреНрд░рд╛рд╣рдХреЛрдВ рдХреА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛рдУрдВ рдФрд░ рддрдХрдиреАрдХреЛрдВ рдХреЗ рдирд╛рдо рдмрджрд▓реЗ рд╣реИрдВред

рд╣рд╛рд▓рд╛рдБрдХрд┐, рдореИрдВ рдпрд╣ рдмрддрд╛рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ рдХрд┐ рдпрд╣:

рдпрджрд┐ рдЖрдк рд▓реЛрдЧреЛрдВ рдХрд╛ рдЗрдирдкреБрдЯ рдирд╣реАрдВ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЗрд╕реЗ рдУрдкрди-рд╕реЛрд░реНрд╕ рди рдмрдирд╛рдПрдВ рдФрд░ рдЗрд╕рдХреЗ рд▓рд┐рдП рди рдкреВрдЫреЗрдВред

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

@pgolebiowski :

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

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

рдХреГрдкрдпрд╛ рд╕рдореНрдорд╛рди рдХрд░реЗрдВред рд╡рд┐рдЪрд╛рд░реЛрдВ рдХреА рдЬреЛрд╢ рд╕реЗ рдЖрд▓реЛрдЪрдирд╛ рдХрд░рдирд╛ рдЙрдЪрд┐рдд рдЦреЗрд▓ рд╣реИ, рд▓реЗрдХрд┐рди рд▓реЛрдЧреЛрдВ рдкрд░ рд╣рдорд▓рд╛ рдХрд░рдирд╛ рдирд╣реАрдВ рд╣реИред рдзрдиреНрдпрд╡рд╛рджред

рдкреНрд░рд┐рдп рд╣рд░ рдХреЛрдИ рдЬреЛ рдирд┐рд░рд╛рд╢ рдорд╣рд╕реВрд╕ рдХрд░рддрд╛ рд╣реИ,

рдореИрдВ рдЕрдкрдиреЗ рдХрдареЛрд░-рдИрд╢ рд░рд╡реИрдпреЗ рд╕реЗ рдЖрдкрдХреЗ рдЦреБрд╢реА рдХреЗ рд╕реНрддрд░ рдХреЛ рдХрдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреНрд╖рдорд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред

@ рдХрд░реЗрд▓реНрдЬрд╝

рдореИрдВрдиреЗ рд╡рд╣рд╛рдВ рддрдХрдиреАрдХреА рдЧрд▓рддреА рдХрд░рдХреЗ рдЦреБрдж рдХреЛ рдмреЗрд╡рдХреВрдл рдмрдирд╛рдпрд╛ рд╣реИред рдореИрдВрдиреЗ рдорд╛рдлреА рдорд╛рдВрдЧреАред рдЗрд╕реЗ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░ рд▓рд┐рдпрд╛ рдЧрдпрд╛ред рдлрд┐рд░ рднреА рдмрд╛рдж рдореЗрдВ рдореБрдЭ рдкрд░ рдлреЗрдВрдХрд╛ред рдХреВрд▓ рдЖрдИрдПрдордУ рдирд╣реАрдВред

рдореБрдЭреЗ рдЦреЗрдж рд╣реИ рдХрд┐ рдореИрдВрдиреЗ рдЬреЛ рд▓рд┐рдЦрд╛ рд╡рд╣ рдЖрдкрдХреЛ рджреБрдЦреА рдХрд░ рдЧрдпрд╛ред рд╣рд╛рд▓рд╛рдБрдХрд┐ рдпрд╣ рдЙрддрдирд╛ рдмреБрд░рд╛ рдирд╣реАрдВ рдерд╛ рдЬрд┐рддрдирд╛ рдЖрдкрдиреЗ рдЗрд╕рдХрд╛ рд╡рд░реНрдгрди рдХрд┐рдпрд╛ рд╣реИ -- рдореИрдВрдиреЗ рдЗрд╕реЗ рдХреЗрд╡рд▓ рдЙрди рдХрдИ рдХрд╛рд░рдХреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рджрд╛рди рдХрд┐рдпрд╛ рд╣реИ рдЬрд┐рдиреНрд╣реЛрдВрдиреЗ рдореЗрд░реЗ рдердХреЗ рд╣реЛрдиреЗ рдХреА рднрд╛рд╡рдирд╛ рдореЗрдВ рдпреЛрдЧрджрд╛рди рджрд┐рдпрд╛ рд╣реИред рдпрд╣ рдХрдо рдЧрдВрднреАрд░рддрд╛ рдХрд╛ рд╣реИ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдлрд┐рд░ рднреА, рдореБрдЭреЗ рдЦреЗрдж рд╣реИред

рдФрд░ рд╣рд╛рдБ, рд╣рд░ рдХреЛрдИ рдЧрд▓рддреА рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдареАрдХ рд╣реИред рдореИрдВ рднреА, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдХрднреА-рдХрднреА рдмрд╣рдХ рдЬрд╛рдиреЗ рд╕реЗред

рдореБрдЭреЗ рд╕рдмрд╕реЗ рдЬреНрдпрд╛рджрд╛ рдЬреЛ рдорд┐рд▓рд╛ рд╡рд╣ рдерд╛ "рдЖрдкрдХреЛ рдмрд╕ рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ, рдЖрдк рдЗрд╕ рдкрд░ рд╡рд┐рд╢реНрд╡рд╛рд╕ рдирд╣реАрдВ рдХрд░рддреЗ" - рд╣рд╛рдБ, рдпрд╣реА рдХрд╛рд░рдг рд╣реИ рдХрд┐ рдореИрдВ рдЗрд╕реЗ рд╕рдкреНрддрд╛рд╣рд╛рдВрдд рдкрд░ рднреА рдХрд░рддрд╛ рд╣реВрдВред

рдореБрдЭреЗ рдЦреЗрдж рд╣реИ, рдореИрдВ рджреЗрдЦ рд╕рдХрддрд╛ рд╣реВрдВ рдХрд┐ рдЖрдк рдХрдбрд╝реА рдореЗрд╣рдирдд рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдореИрдВ рдЗрд╕рдХреА рдмрд╣реБрдд рд╕рд░рд╛рд╣рдирд╛ рдХрд░рддрд╛ рд╣реВрдВред рдпрд╣ рдореБрдЭреЗ рджрд┐рдЦрд╛рдИ рджреЗ рд░рд╣рд╛ рдерд╛ рдХрд┐ рдЖрдк 5/10 рдореАрд▓ рдХреЗ рдкрддреНрдерд░ рддрдХ рдХрд┐рддрдиреЗ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рд╕рдорд░реНрдкрд┐рдд рдереЗред

@terrajobst

рд╕рд┐рд░реНрдл рдЗрд╕рд▓рд┐рдП рдХрд┐ рдЖрдк рд╣рдорд╕реЗ рдЕрд╕рд╣рдордд рд╣реИрдВ, рдЖрдкрдХреЛ рдпрд╣ рдЖрд░реЛрдк рд▓рдЧрд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╡рд┐рд╢реЗрд╖рдЬреНрдЮрддрд╛ рдирд╣реАрдВ рд╣реИ рдпрд╛ рдкрд░рд╡рд╛рд╣ рдирд╣реАрдВ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ "рд╕рд┐рд░реНрдл рд╣рдорд╛рд░рд╛ рдХрд╛рдо" рд╣реИред

  • рд╡рд┐рд╢реЗрд╖рдЬреНрдЮрддрд╛ рди рд╣реЛрдирд╛ - рдмрд┐рдирд╛ рдХрдВрдкреНрдпреВрдЯрд░ рд╡рд┐рдЬреНрдЮрд╛рди рдкреГрд╖реНрдарднреВрдорд┐ рд╡рд╛рд▓реЗ рдФрд░ рдвреЗрд░/рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрддрд╛рд░реЛрдВ рдХреА рдЕрд╡рдзрд╛рд░рдгрд╛ рдХреЛ рди рд╕рдордЭрдиреЗ рд╡рд╛рд▓реЗ рд▓реЛрдЧреЛрдВ рдХреЗ рдкреНрд░рддрд┐ рд╕рдВрдмреЛрдзрд┐рддред рдЕрдЧрд░ рдРрд╕рд╛ рд╡рд┐рд╡рд░рдг рдХрд┐рд╕реА рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрддрд╛ рд╣реИ -- рдареАрдХ рд╣реИ, рдпрд╣ рд▓рд╛рдЧреВ рд╣реЛрддрд╛ рд╣реИ, рдЗрд╕рдореЗрдВ рдореЗрд░реА рдЧрд▓рддреА рдирд╣реАрдВ рд╣реИред
  • рдкрд░рд╡рд╛рд╣ рдирд╣реАрдВ рдХрд░рдирд╛ - рдХреБрдЫ рддрдХрдиреАрдХреА рдмрд┐рдВрджреБрдУрдВ рдХреЛ рдЕрдирджреЗрдЦрд╛ рдХрд░рдиреЗ рдХреА рдкреНрд░рд╡реГрддреНрддрд┐ рд╡рд╛рд▓реЗ рд▓реЛрдЧреЛрдВ рдХреЗ рдкреНрд░рддрд┐ рд╕рдВрдмреЛрдзрд┐рдд, рдЗрд╕ рдкреНрд░рдХрд╛рд░ рджреЛрд╣рд░рд╛рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рддрд░реНрдХреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛, рдЬреИрд╕реЗ рдЪрд░реНрдЪрд╛ рдХреЛ рдЕрд░рд╛рдЬрдХ рдмрдирд╛рдирд╛ рдФрд░ рдЕрдиреНрдп рд▓реЛрдЧреЛрдВ рджреНрд╡рд╛рд░рд╛ рдкрд╛рд▓рди рдХрд░рдирд╛ рдХрдард┐рди рд╣реЛрддрд╛ рд╣реИ (рдЬреЛ рдмрджрд▓реЗ рдореЗрдВ рдХрдо рдЗрдирдкреБрдЯ рдХреА рдУрд░ рдЬрд╛рддрд╛ рд╣реИ)ред

рдЖрдкрдХреА рддрд░рд╣ рдХреА рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдВ рдмрд╣реБрдд рдЕрдиреБрдЪрд┐рдд рд╣реИрдВ рдФрд░ рдбрд┐рдЬрд╛рдЗрди рдХреЛ рдЖрдЧреЗ рдмрдврд╝рд╛рдиреЗ рдореЗрдВ рднреА рдорджрдж рдирд╣реАрдВ рдХрд░рддреА рд╣реИрдВред

  • рдореЗрд░реА рдХрдареЛрд░ рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ рдЗрд╕ рдЪрд░реНрдЪрд╛ рдореЗрдВ рдЕрдХреНрд╖рдорддрд╛ рдХрд╛ рдкрд░рд┐рдгрд╛рдо рдереАрдВред рдЕрдХреНрд╖рдорддрд╛ = рдЪрд░реНрдЪрд╛ рдХрд╛ рдЕрд░рд╛рдЬрдХ рддрд░реАрдХрд╛, рдЬрд╣рд╛рдБ рдореБрджреНрджреЛрдВ рдХрд╛ рд╕рдорд╛рдзрд╛рди / рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рд╣рдо рдЗрд╕рдХреЗ рдмрд╛рд╡рдЬреВрдж рдЖрдЧреЗ рдмрдврд╝рддреЗ рд╣реИрдВ => рдердХрд╛рдКред
  • рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЪрд░реНрдЪрд╛ рдореЗрдВ рдкреНрд░рдореБрдЦ рдбреНрд░рд╛рдЗрд╡рд░реЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХреЗ рд░реВрдк рдореЗрдВ, рдореБрдЭреЗ рджреГрдврд╝рддрд╛ рд╕реЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдбрд┐рдЬрд╛рдЗрди рдХреЛ рдЖрдЧреЗ рдмрдврд╝рд╛рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореИрдВрдиреЗ рдмрд╣реБрдд рдХреБрдЫ рдХрд┐рдпрд╛ рд╣реИред рдХреГрдкрдпрд╛ рдореБрдЭреЗ рдмрджрдирд╛рдо рди рдХрд░реЗрдВ, рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдпрд╣рд╛рдВ рдФрд░ рд╕реЛрд╢рд▓ рдореАрдбрд┐рдпрд╛ рдореЗрдВ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣реЗ рд╣реИрдВред

рдЕрдЧрд░ рдХреЛрдИ рдмреАрдорд╛рд░ рд╣реИ рдЬреЛ "рдореБрдЭреЗ рдЪрд╛рдЯрдирд╛" рдЪрд╛рд╣рддрд╛ рд╣реИ, рддреЛ рдХреГрдкрдпрд╛ рдмреЗрдЭрд┐рдЭрдХред


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

@pgolebiowski

рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рд╣рдо рдХрд┐рд╕реА рд╕рдордп рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рдорд┐рд▓ рд╕рдХрддреЗ рд╣реИрдВред рдореИрдВ рдИрдорд╛рдирджрд╛рд░реА рд╕реЗ рдорд╛рдирддрд╛ рд╣реВрдВ рдХрд┐ рд╕рдм рдХреБрдЫ рдСрдирд▓рд╛рдЗрди рдХрд░рдиреЗ рдХреА рдЪреБрдиреМрддреА рдХрд╛ рдПрдХ рд╣рд┐рд╕реНрд╕рд╛ рдпрд╣ рд╣реИ рдХрд┐ рд╡реНрдпрдХреНрддрд┐рддреНрд╡ рдХрднреА-рдХрднреА рдХрд┐рд╕реА рднреА рдкрдХреНрд╖ рд╕реЗ рдмрд┐рдирд╛ рдХрд┐рд╕реА рдЗрд░рд╛рджреЗ рдХреЗ рдЦрд░рд╛рдм рддрд░реАрдХреЗ рд╕реЗ рдорд┐рд▓ рд╕рдХрддреЗ рд╣реИрдВред

рдореИрдВ рдЖрдкрдХреЗ рд╕рд╛рде CoreFX рдкрд░ рдХрд╛рдо рдХрд░рдирд╛ рдЬрд╛рд░реА рд░рдЦрдиреЗ рдХреА рдЖрд╢рд╛ рдХрд░рддрд╛ рд╣реВрдВред рдХрд╣рд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ, рдореИрдВ рд╢рд╛рдпрдж рдХрд▓ рдЖрдкрдХреЗ рдирдП рддрдХрдиреАрдХреА рдЗрдирдкреБрдЯ рдХреЛ рд╕рдВрдмреЛрдзрд┐рдд рдХрд░реВрдВрдЧрд╛ред

рдореЗрд░рд╛ рднреА рдпрд╣реА рд╡рд┐рдЪрд╛рд░ рд╣реИред рдпрд╣ рдПрдХ рджрд┐рд▓рдЪрд╕реНрдк рдЬрдЧрд╣ рд╣реИ рдФрд░ рд╣рдо рдПрдХ рд╕рд╛рде рдмрд╣реБрдд рд╕рд╛рд░реА рдЕрджреНрднреБрдд рдЪреАрдЬреЗрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ :-)

@pgolebiowski рдкрд╣рд▓реЗ, рдЖрдкрдХреЗ рдЙрддреНрддрд░ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред рдпрд╣ рджрд┐рдЦрд╛рддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдкрд░рд╡рд╛рд╣ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЖрдк рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдорддрд▓рдм рд░рдЦрддреЗ рд╣реИрдВ (рдЬреЛ рдХреБрдЫ рдРрд╕рд╛ рд╣реИ рдЬреЛ рдореИрдВ рдЧреБрдкреНрдд рд░реВрдк рд╕реЗ рдЙрдореНрдореАрдж рдХрд░рддрд╛ рд╣реВрдВ рдХрд┐ рджреБрдирд┐рдпрд╛ рдореЗрдВ рд╣рд░ рд╡реНрдпрдХреНрддрд┐/рдбреЗрд╡рд▓рдкрд░ рдХрд░рддрд╛ рд╣реИ, рд╕рднреА рд╕рдВрдШрд░реНрд╖ рд╕рд┐рд░реНрдл рдЧрд▓рддрдлрд╣рдореА/рдЧрд▓рдд рд╕рдВрдЪрд╛рд░ рд╣реИ)ред рдФрд░ рдЗрд╕рд╕реЗ рдореБрдЭреЗ рдмрд╣реБрдд рдЦреБрд╢реА рдорд┐рд▓рддреА рд╣реИ - рдпрд╣ рдореБрдЭреЗ рдЙрддреНрд╕рд╛рд╣рд┐рдд рдФрд░ рдЙрддреНрд╕рд╛рд╣рд┐рдд рд░рдЦрддрд╛ рд╣реИред
рдореЗрд░рд╛ рд╕реБрдЭрд╛рд╡ рд╣реИ рдХрд┐ рд╣рдо рдЕрдкрдиреЗ рд░рд┐рд╢реНрддреЗ рдХреЛ рдлрд┐рд░ рд╕реЗ рд╢реБрд░реВ рдХрд░реЗрдВред рдЖрдЗрдП рдЪрд░реНрдЪрд╛ рдХреЛ рд╡рд╛рдкрд╕ рддрдХрдиреАрдХреА рдХреА рдУрд░ рдореЛрдбрд╝реЗрдВ, рдЖрдЗрдП рд╣рдо рд╕рднреА рдЗрд╕ рд╕реВрддреНрд░ рд╕реЗ рд╕реАрдЦреЗрдВ, рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдЗрд╕реА рддрд░рд╣ рдХреА рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдХреЛ рдХреИрд╕реЗ рд╕рдВрднрд╛рд▓рдирд╛ рд╣реИ, рдЖрдЗрдП рд╣рдо рд╕рднреА рдлрд┐рд░ рд╕реЗ рдорд╛рди рд▓реЗрдВ рдХрд┐ рдордВрдЪ рдХреЗ рд▓рд┐рдП рджреВрд╕рд░реЗ рдкрдХреНрд╖ рдХреЗ рдкрд╛рд╕ рдХреЗрд╡рд▓ рд╕рд░реНрд╡реЛрддреНрддрдо рд╣рд┐рдд рд╣реИред
BTW: рдпрд╣ рдкрд┐рдЫрд▓реЗ 9 рдорд╣реАрдиреЛрдВ рдореЗрдВ CoreFX рд░реЗрдкреЛ рдкрд░ рдХреБрдЫ рдЕрдзрд┐рдХ рдХрдард┐рди рдореБрдарднреЗрдбрд╝реЛрдВ/рдЪрд░реНрдЪрд╛рдУрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИ, рдФрд░ рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦрддреЗ рд╣реИрдВ, рд╣рдо (incl./esp. me) рдЕрднреА рднреА рд╕реАрдЦ рд░рд╣реЗ рд╣реИрдВ рдХрд┐ рдЙрдиреНрд╣реЗрдВ рдХреИрд╕реЗ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рд╕рдВрднрд╛рд▓рдирд╛ рд╣реИ - рдЗрд╕рд▓рд┐рдП рдпрд╣ рд╡рд┐рд╢реЗрд╖ рдЙрджрд╛рд╣рд░рдг рдЪрд▓ рд░рд╣рд╛ рд╣реИ рд╣рдореЗрдВ рднреА рд▓рд╛рднрд╛рдиреНрд╡рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдФрд░ рдпрд╣ рд╣рдореЗрдВ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдмреЗрд╣рддрд░ рдмрдирд╛рдПрдЧрд╛ рдФрд░ рдЬреЛрд╢реАрд▓реЗ рд╕рдореБрджрд╛рдп рдХреЗ рд╕рджрд╕реНрдпреЛрдВ рдХреЗ рдЕрд▓рдЧ-рдЕрд▓рдЧ рджреГрд╖реНрдЯрд┐рдХреЛрдгреЛрдВ рдХреЛ рдмреЗрд╣рддрд░ рдврдВрдЧ рд╕реЗ рд╕рдордЭрдиреЗ рдореЗрдВ рд╣рдорд╛рд░реА рдорджрдж рдХрд░реЗрдЧрд╛ред рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╣рдорд╛рд░реЗ рдЕрдкрдбреЗрдЯ рдХреЛ рдпреЛрдЧрджрд╛рди рдбреЙрдХреНрд╕ рдореЗрдВ рдЖрдХрд╛рд░ рджреЗрдЧрд╛ ...

рдореЗрд░реА рдХрдареЛрд░ рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ рдЗрд╕ рдЪрд░реНрдЪрд╛ рдореЗрдВ рдЕрдХреНрд╖рдорддрд╛ рдХрд╛ рдкрд░рд┐рдгрд╛рдо рдереАрдВред рдЕрдХреНрд╖рдорддрд╛ = рдЪрд░реНрдЪрд╛ рдХрд╛ рдЕрд░рд╛рдЬрдХ рддрд░реАрдХрд╛, рдЬрд╣рд╛рдБ рдореБрджреНрджреЛрдВ рдХрд╛ рд╕рдорд╛рдзрд╛рди / рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рд╣рдо рдЗрд╕рдХреЗ рдмрд╛рд╡рдЬреВрдж рдЖрдЧреЗ рдмрдврд╝рддреЗ рд╣реИрдВ => рдердХрд╛рдКред

рдЖрдкрдХреА рд╣рддрд╛рд╢рд╛ рдХреЛ рд╕рдордЭрд╛! рджрд┐рд▓рдЪрд╕реНрдк рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдЗрд╕реА рддрд░рд╣ рдХреА рдирд┐рд░рд╛рд╢рд╛ рджреВрд╕рд░реА рддрд░рдл рднреА рдЗрд╕реА рдХрд╛рд░рдг рд╕реЗ рдереА ЁЯШЙ ... рдпрд╣ рд▓рдЧрднрдЧ рдЕрдЬреАрдм рд╣реИ рдХрд┐ рджреБрдирд┐рдпрд╛ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддреА рд╣реИ :)ред
рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдЬрдм рдЖрдк рдХреЛрдИ рдбрд┐рдЬрд╝рд╛рдЗрди рдирд┐рд░реНрдгрдп рд▓реЗрддреЗ рд╣реИрдВ рддреЛ рдХрдард┐рди рдЪрд░реНрдЪрд╛ рдиреМрдХрд░реА рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реЛрддреА рд╣реИред рдпрд╣ рдмрд╣реБрдд рдХрд╛рдо рд╣реИред рдмрд╣реБрдд рд╕реЗ рд▓реЛрдЧ рдЗрд╕реЗ рдХрдо рдЖрдВрдХрддреЗ рд╣реИрдВред рдЖрд╡рд╢реНрдпрдХ рдореБрдЦреНрдп рдХреМрд╢рд▓ рд╕рднреА рдХреЗ рд╕рд╛рде рдзреИрд░реНрдп рдФрд░ рдЕрдкрдиреА рд░рд╛рдп рд╕реЗ рдКрдкрд░ рдХрджрдо рд░рдЦрдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рд╣реИ рдФрд░ рдпрд╣ рд╕реЛрдЪрдирд╛ рд╣реИ рдХрд┐ рдЖрдо рд╕рд╣рдорддрд┐ рдХреИрд╕реЗ рдЪрд▓рд╛рдИ рдЬрд╛рдП, рднрд▓реЗ рд╣реА рдпрд╣ рдЖрдкрдХреЗ рд░рд╛рд╕реНрддреЗ рдкрд░ рди рдЬрд╛рдПред рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдПрдкреАрдЖрдИ рд╕рдореАрдХреНрд╖рдХ рд╕рдореВрд╣ рдХреЗ рд▓рд┐рдП 2 рдкреНрд░рд╕реНрддрд╛рд╡реЛрдВ рдФрд░ рддрдХрдиреАрдХреА рдЪрд░реНрдЪрд╛ рдХреЛ "рдмрдврд╝рд╛рдиреЗ" рдХрд╛ рд╕реБрдЭрд╛рд╡ рджрд┐рдпрд╛ (рдореБрдЦреНрдпрддрдГ рдХреНрдпреЛрдВрдХрд┐ рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдореИрдВ рд╕рд╣реА рд╣реВрдВ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореИрдВ рдЧреБрдкреНрдд рд░реВрдк рд╕реЗ рдЖрд╢рд╛ рдХрд░рддрд╛ рд╣реВрдВ рдХрд┐ рдореИрдВ рд╕рд╣реА рд╣реВрдВ рдХреНрдпреЛрдВрдХрд┐ рджреБрдирд┐рдпрд╛ рдореЗрдВ рд╣рд░ рджреВрд╕рд░рд╛ рдбреЗрд╡рд▓рдкрд░ рд╣реЛрдЧрд╛ )

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

рдореЗрд░рд╛ рд╕рд╛рдорд╛рдиреНрдп рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╣реИ: рдЬрдм рднреА рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХреЛрдИ рдореБрдЭ рдкрд░ рд╣рдорд▓рд╛ рдХрд░ рд░рд╣рд╛ рд╣реИ, рджреБрд╖реНрдЯ, рдЖрд▓рд╕реА, рдореБрдЭреЗ рдирд┐рд░рд╛рд╢ рдХрд░ рд░рд╣рд╛ рд╣реИ, рдпрд╛ рдХреБрдЫ рдФрд░ред рдореИрдВ рдкрд╣рд▓реЗ рдЦреБрдж рд╕реЗ рдФрд░ рдЙрд╕ рд╡реНрдпрдХреНрддрд┐ рд╕реЗ рднреА рдкреВрдЫрддрд╛ рд╣реВрдВ: рдХреНрдпреЛрдВ? рддреБрдордиреЗ рдпреЗ рдХреНрдпреЛрдВ рдХрд╣рд╛? рдЖрдк рдХреНрдпрд╛ рдорддрд▓рдм рдерд╛?
рдЖрдорддреМрд░ рдкрд░ рдпрд╣ рдЙрджреНрджреЗрд╢реНрдпреЛрдВ рдХреА рд╕рдордЭ/рд╕рдВрдЪрд╛рд░ рдХреА рдХрдореА рдХрд╛ рд╕рдВрдХреЗрдд рд╣реИред рдпрд╛ рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЗ рдмреАрдЪ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдкрдврд╝рдиреЗ рдФрд░ рдЕрдкрдорд╛рди/рдЖрд░реЛрдк/рдмреБрд░реЗ рдЗрд░рд╛рджреЗ рджреЗрдЦрдиреЗ рдХрд╛ рд╕рдВрдХреЗрдд рдЬрд╣рд╛рдВ рд╡реЗ рдирд╣реАрдВ рд╣реИрдВред


рдЕрдм рдЬрдмрдХрд┐ рдореИрдВ рддрдХрдиреАрдХреА рдкреНрд░рд╢реНрдиреЛрдВ рдкрд░ рдЪрд░реНрдЪрд╛ рдХрд░рдиреЗ рд╕реЗ рдирд╣реАрдВ рдбрд░рддрд╛, рдпрд╣рд╛рдБ рдореИрдВ рдкрд╣рд▓реЗ рдЬреЛ рдкреВрдЫрдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛:

рдЕрдкрдиреА рдЕрдХреНрд╖рдо рдкреНрд░рд╛рдпреЛрд░рд┐рдЯреА рдХреНрдпреВ рдХреЗ рд╕рд╛рде рдЬрд╛рдПрдВ рдЬреЛ рддрддреНрд╡реЛрдВ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдФрд░ рд╣рдЯрд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрддреА рд╣реИред

рдпрд╣ рдХреБрдЫ рдРрд╕рд╛ рд╣реИ рдЬреЛ рдореБрдЭреЗ рд╕рдордЭ рдирд╣реАрдВ рдЖ рд░рд╣рд╛ рд╣реИред рдЕрдЧрд░ рд╣рдо IHeap (рдореЗрд░реЗ / рдореВрд▓ рдкреНрд░рд╕реНрддрд╛рд╡ рдореЗрдВ) рдЫреЛрдбрд╝ рджреЗрддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рд╕рдВрднрд╡ рдХреНрдпреЛрдВ рдирд╣реАрдВ рд╣реЛрдЧрд╛?
рдЖрдИрдПрдордУ рд╡рд░реНрдЧ рдХреНрд╖рдорддрд╛рдУрдВ рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ 2 рдкреНрд░рд╕реНрддрд╛рд╡реЛрдВ рдХреЗ рдмреАрдЪ рдХреЛрдИ рдЕрдВрддрд░ рдирд╣реАрдВ рд╣реИ, рдХреЗрд╡рд▓ рдЕрдВрддрд░ рдпрд╣ рд╣реИ - рдХреНрдпрд╛ рд╣рдо PriorityQueue(IHeap) рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдЕрдзрд┐рднрд╛рд░ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ рдпрд╛ рдирд╣реАрдВ (рд╡рд░реНрдЧ рдирд╛рдо рд╡рд┐рд╡рд╛рдж рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрд╡рддрдВрддреНрд░ рд╕рдорд╕реНрдпрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдЫреЛрдбрд╝рдХрд░) .

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

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

@karelz рдКрдкрд░ рдХреА рдЪрд░реНрдЪрд╛ рдХреА рд▓рдВрдмрд╛рдИ рдХреЗ рдХрд╛рд░рдг, рдпрджрд┐ рдкреНрд░рд╡рд╛рд╣ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдХрд┐рд╕реА рдХреЗ рд▓рд┐рдП рднреА рдпреЛрдЧрджрд╛рди рдХрд░рдиреЗ рдХреА рдЕрддреНрдпрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рдирд╣реАрдВ рд╣реИред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдореИрдВ рдЕрднреА рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рдХрд░рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛:

  • рдореИрдВ рдПрдХ рдХреЗ рдмрд╛рдж рдПрдХ рдореВрд▓рднреВрдд рдкрд╣рд▓реБрдУрдВ рдкрд░ рдорддрджрд╛рди рдХрд░рд╛рдКрдВрдЧрд╛ред рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╕рдореБрджрд╛рдп рд╕реЗ рд╕реНрдкрд╖реНрдЯ рдЗрдирдкреБрдЯ рд╣реЛрдЧрд╛ред рдЖрджрд░реНрд╢ рд░реВрдк рд╕реЗ, рдПрдкреАрдЖрдИ рд╕рдореАрдХреНрд╖рдХ рдпрд╣рд╛рдВ рднреА рдЖрдПрдВрдЧреЗ рдФрд░ рд╢реАрдШреНрд░ рд╣реА рдЯрд┐рдкреНрдкрдгреА рдХрд░реЗрдВрдЧреЗред
  • "рд╡реЛрдЯрд┐рдВрдЧ рдкреЛрд╕реНрдЯ" рдореЗрдВ рдЗрддрдиреА рдЬрд╛рдирдХрд╛рд░реА рд╣реЛрдЧреА рдХрд┐ рдКрдкрд░ рджрд┐рдП рдЧрдП рдЯреЗрдХреНрд╕реНрдЯ рдХреА рдкреВрд░реА рджреАрд╡рд╛рд░ рдХреЛ рдирдЬрд╝рд░рдЕрдВрджрд╛рдЬрд╝ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗред
  • рдорддрджрд╛рди рдХрд╛ рдпрд╣ рд╕рддреНрд░ рд╣реЛ рдЬрд╛рдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдо рдЬрд╛рдиреЗрдВрдЧреЗ рдХрд┐ рдПрдкреАрдЖрдИ рд╕рдореАрдХреНрд╖рдХреЛрдВ рд╕реЗ рдХреНрдпрд╛ рдЙрдореНрдореАрдж рдХреА рдЬрд╛рдП рдФрд░ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рд╕рд╛рде рдЖрдЧреЗ рдмрдврд╝рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдВрдЧреЗред рдЬрдм рд╣рдо рдореВрд▓рднреВрдд рдкрд╣рд▓реБрдУрдВ рдкрд░ рд╕рд╣рдордд рд╣реЛрддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдореБрджреНрджрд╛ рдмрдВрдж рд╣реЛ рдЬрд╛рдПрдЧрд╛, рдФрд░ рджреВрд╕рд░рд╛ рдЦреБрд▓ рдЬрд╛рдПрдЧрд╛ (рдЬреЛ рдЗрд╕реЗ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░реЗрдЧрд╛)ред рдирдП рдЕрдВрдХ рдореЗрдВ, рдореИрдВ рдЕрдкрдиреЗ рдирд┐рд╖реНрдХрд░реНрд╖реЛрдВ рдХреЛ рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рдмрддрд╛рдКрдВрдЧрд╛ рдФрд░ рдПрдкреАрдЖрдИ рдкреНрд░рд╕реНрддрд╛рд╡ рдкреНрд░рджрд╛рди рдХрд░реВрдВрдЧрд╛ рдЬреЛ рдЗрди рдирд┐рд░реНрдгрдпреЛрдВ рдХреЛ рджрд░реНрд╢рд╛рддрд╛ рд╣реИред рдФрд░ рд╣рдо рдЗрд╕реЗ рд╡рд╣рд╛рдВ рд╕реЗ рд▓реЗрдВрдЧреЗред

рдХреНрдпрд╛ рдЗрд╕рдХрд╛ рдХреЛрдИ рдорддрд▓рдм рдирд┐рдХрд╛рд▓рдиреЗ рдХрд╛ рдореМрдХрд╛ рд╣реИ?

рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрддрд╛рд░ рдЬреЛ рддрддреНрд╡реЛрдВ рдХреЛ рдЕрджреНрдпрддрди рдХрд░рдиреЗ рдФрд░ рд╣рдЯрд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрддреА рд╣реИред

рдпрд╣ рдореВрд▓ рдкреНрд░рд╕реНрддрд╛рд╡ рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ рдерд╛, рдЬрд┐рд╕рдореЗрдВ рдЗрди рдХреНрд╖рдорддрд╛рдУрдВ рдХрд╛ рдЕрднрд╛рд╡ рдерд╛ :) рдЗрд╕реЗ рд╕реНрдкрд╖реНрдЯ рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреНрд╖рдорд╛ рдХрд░реЗрдВред

рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдЗрд╕реЗ рд╕рдордЭрд╛рдиреЗ/рдЪрд░реНрдЪрд╛ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдКрд░реНрдЬрд╛ рдирд╣реАрдВ рд╣реИ (рдЬреЛ рдЖрдкрдХреА рдУрд░ рд╕реЗ рдХрдард┐рдирд╛рдЗрдпреЛрдВ рдФрд░ рд╕рдордп рдХреЗ рдирд┐рд╡реЗрд╢ рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ), рддреЛ рдмрд╕ рдЗрддрдирд╛ рдХрд╣реЗрдВ, рдХреЛрдИ рдХрдареЛрд░ рднрд╛рд╡рдирд╛ рдирд╣реАрдВред рдХреГрдкрдпрд╛ рдореБрдЭ рдкрд░ рдпрд╛ рдХрд┐рд╕реА рдХреЗ рджреНрд╡рд╛рд░рд╛ рджрдмрд╛рд╡ рдорд╣рд╕реВрд╕ рди рдХрд░реЗрдВ (рдФрд░ рдпрд╣ рдзрд╛рдЧреЗ рдкрд░ рд╕рднреА рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрддрд╛ рд╣реИ)ред

рдореЗрдВ рдЫреЛрдбреВрдВрдЧрд╛ рдирд╣реАрдВред рдХреЛрдИ рджрд░реНрдж рдирд╣реАрдВ рдХреЛрдИ рд▓рд╛рдн рдирд╣реАрдВ xD

@xied75

рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛрд╣реИ рдХрд┐ рдХреБрдЫ рдЕрдиреНрдп рдУрдкрди рд╕реЛрд░реНрд╕ рдХрдореНрдпреБрдирд┐рдЯреА рдЬрд░реВрд░рдд рдкрдбрд╝рдиреЗ рдкрд░ рдЗрд╕ рддрд░рд╣ рдХреА рдЪрд░реНрдЪрд╛ рдХреЗ рд▓рд┐рдП рдЧреВрдЧрд▓ рд╣реИрдВрдЧрдЖрдЙрдЯ рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд░реЗрдВрдЧреЗред рд╢рд╛рдпрдж рд╣рдо рднреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ?

рдЕрдЫрд╛ рд▓рдЧрддрд╛ рд╣реИ ;)

рдПрдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдкреНрд░рджрд╛рди рдХрд░рдирд╛

рдХреЛрдИ рдлрд░реНрдХ рдирд╣реАрдВ рдкрдбрд╝рддрд╛ рдХрд┐ рд╣рдо Heap / IHeap рдпрд╛ PriorityQueue / IPriorityQueue (рдпрд╛ рдХреБрдЫ рдФрд░) рдХреЗ рд╕рд╛рде рдЬрд╛рддреЗ рд╣реИрдВ, рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЗ рд▓рд┐рдП рд╣рдо рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд╣реИрдВ ...

_рдХреНрдпрд╛ рдЖрдк рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд╕рд╛рде-рд╕рд╛рде рдПрдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд░рдЦрдирд╛ рдЪрд╛рд╣реЗрдВрдЧреЗ?_

рдХреЗ рд▓рд┐рдпреЗ

@ рдмреЗрдВрдбреЛрдиреЛ

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

рдЬреЛ рд▓реЛрдЧ рдЗрд╕рдХреА рдкрд░рд╡рд╛рд╣ рдирд╣реАрдВ рдХрд░рддреЗ рд╡реЗ рдЗрд╕реЗ рдЕрдирджреЗрдЦрд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рд╕реАрдзреЗ рдареЛрд╕ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд▓рд┐рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВред рдЬреЛ рдкрд░рд╡рд╛рд╣ рдХрд░рддреЗ рд╣реИрдВ рд╡реЗ рдЕрдкрдиреА рдкрд╕рдВрдж рдХреЗ рдХрд┐рд╕реА рднреА рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдХреЗ рдЦрд┐рд▓рд╛рдл

@madelson

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

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдПрдХ рдмрд╛рд░ рдПрдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдЬрд╛рд░реА рд╣реЛ рдЬрд╛рдиреЗ рдХреЗ рдмрд╛рдж рдЗрд╕реЗ рдХреЙрдореНрдкреЗрдЯ рдХреЗ рдХрд╛рд░рдг рдХрднреА рдирд╣реАрдВ рдмрджрд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдареЛрд╕ рд╡рд░реНрдЧреЛрдВ рдХреЗ рдкреАрдЫреЗ рдкрдбрд╝ рдЬрд╛рддрд╛ рд╣реИ (рдЖрдЬ IList рдФрд░ IDictionary рдХреЗ рд╕рд╛рде рдПрдХ рд╕рдорд╕реНрдпрд╛)ред

@ рдХрд░реЗрд▓реНрдЬрд╝

рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдмрд╣реБрдд рдЙрдиреНрдирдд рд╡рд┐рд╢реЗрд╖рдЬреНрдЮ рдкрд░рд┐рджреГрд╢реНрдп рд╣реИред

рдпрджрд┐ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдФрд░ IHeap рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд▓реЛрдХрдкреНрд░рд┐рдп рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рдмрд╛рдж рдореЗрдВ рдЕрдкрдирд╛ рд╡рд┐рдЪрд╛рд░ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдорд╛рдВрдЧ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ IHeap рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ (рдХрдиреНрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдЕрдзрд┐рднрд╛рд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ), рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдпрд╣ рдЙрдкрдпреЛрдЧреА/рд╕рдВрд░реЗрдЦрд┐рдд рд╣реИ рд╢реЗрд╖ рдмреАрд╕реАрдПрд▓ рдЕрдм рдирдпрд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдЬреЛрдбрд╝рдиреЗ рдХреА рдЬрдЯрд┐рд▓рддрд╛ рдХреЛ рдЙрдЪрд┐рдд рдард╣рд░рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИред рд╕рд░рд▓ рд╢реБрд░реБрдЖрдд рдХрд░реЗрдВ, рдЬрдЯрд┐рд▓ рд╕реЗ рддрднреА рдмрдврд╝реЗрдВ рдЬрдм рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЬрд░реВрд░рдд рд╣реЛред

рд╕рдВрднрд╛рд╡рд┐рдд рдирд┐рд░реНрдгрдп рдкреНрд░рднрд╛рд╡

  • рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░рдиреЗ рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рд╣рдо рдЗрд╕реЗ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдирд╣реАрдВ рдмрджрд▓ рд╕рдХрддреЗред
  • рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рд╢рд╛рдорд┐рд▓ рди рдХрд░рдиреЗ рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рд▓реЛрдЧ рдХреЛрдб рд▓рд┐рдЦрддреЗ рд╣реИрдВ рдЬреЛ рдпрд╛ рддреЛ рд╣рдорд╛рд░реЗ рдорд╛рдирдХ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╕рдорд╛рдзрд╛рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ рдпрд╛ рдХрд┐рд╕реА рддреГрддреАрдп-рдкрдХреНрд╖ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рджреНрд╡рд╛рд░рд╛ рджрд┐рдП рдЧрдП рд╕рдорд╛рдзрд╛рди рдХреЗ рд╡рд┐рд░реБрджреНрдз рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИ (рдХреЛрдИ рд╕рд╛рдорд╛рдиреНрдп рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдирд╣реАрдВ рд╣реИ рдЬреЛ рдХреНрд░реЙрд╕-рд╕рдВрдЧрддрддрд╛ рдХреЛ рд╕рдХреНрд╖рдо рдХрд░реЗрдЧрд╛)ред

рдЗрд╕ рдкрд░ рд╡реЛрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдФрд░ рдХрд╛ рдкреНрд░рдпреЛрдЧ рдХрд░реЗрдВ (рдХреНрд░рдорд╢рдГ рдПрдХ рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЗ рд▓рд┐рдП рдФрд░ рдЙрд╕рдХреЗ рдЦрд┐рд▓рд╛рдл)ред рд╡реИрдХрд▓реНрдкрд┐рдХ рд░реВрдк рд╕реЗ, рдПрдХ рдЯрд┐рдкреНрдкрдгреА рд▓рд┐рдЦреЗрдВред рдЖрджрд░реНрд╢ рд░реВрдк рд╕реЗ, рдПрдкреАрдЖрдИ рд╕рдореАрдХреНрд╖рдХ рднрд╛рдЧ рд▓реЗрдВрдЧреЗред

рдореИрдВ рдпрд╣ рдЬреЛрдбрд╝рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдЗрдВрдЯрд░рдлреЗрд╕ рдмрджрд▓рдирд╛ рдХрдард┐рди рд╣реИ, рд╡рд┐рд╕реНрддрд╛рд░ рд╡рд┐рдзрд┐рдпреЛрдВ (рдФрд░ рдЧреБрдг рдЖрдиреЗ рд╡рд╛рд▓реЗ) рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЗ рд╕рд╛рде рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдирд╛ рдФрд░/рдпрд╛ рдХрд╛рдо рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИ (LINQ рджреЗрдЦреЗрдВ)

рдореИрдВ рдпрд╣ рдЬреЛрдбрд╝рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдЗрдВрдЯрд░рдлреЗрд╕ рдмрджрд▓рдирд╛ рдХрдард┐рди рд╣реИ, рд╡рд┐рд╕реНрддрд╛рд░ рд╡рд┐рдзрд┐рдпреЛрдВ (рдФрд░ рдЧреБрдг рдЖрдиреЗ рд╡рд╛рд▓реЗ) рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЗ рд╕рд╛рде рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдирд╛ рдФрд░/рдпрд╛ рдХрд╛рдо рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИ (LINQ рджреЗрдЦреЗрдВ)

рд╡реЗ рдХреЗрд╡рд▓ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдкрд░ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд░реВрдк рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ; рддреЛ рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдЗрд╕реЗ рдкрд╣рд▓реА рдмрд╛рд░ рд╕рд╣реА рдХрд░рдирд╛ред

рдореИрдВ рд╕реБрдЭрд╛рд╡ рджреЗрддрд╛ рд╣реВрдВ рдХрд┐ рдХрдХреНрд╖рд╛ рдХреЗ рдЙрдкрдпреЛрдЧ рдореЗрдВ рдЖрдиреЗ рддрдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдкрд░ рдереЛрдбрд╝реА рджреЗрд░ рд░реБрдХреЗрдВ рдФрд░ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рд╣реЛ рдЬрд╛рдПрдВ - рдлрд┐рд░ рдПрдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдкреЗрд╢ рдХрд░реЗрдВред (рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рдЖрдХрд╛рд░ рдкрд░ рдПрдХ рдЕрд▓рдЧ рдореБрджреНрджрд╛ рд╣реЛрдиреЗ рдкрд░ рдмрд╣рд╕ рдХреЗ рд╕рд╛рде)

рдХреБрдВрдж рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП, рдХреЗрд╡рд▓ рдПрдХ рдЪреАрдЬ рдЬрд┐рд╕рдХреА рдореБрдЭреЗ рдкрд░рд╡рд╛рд╣ рд╣реИ рд╡рд╣ рд╣реИ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ред рдПрдХ рдареЛрд╕ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдореИрдВ (рдпрд╛ рдХреЛрдИ рдФрд░) рд╣рдореЗрд╢рд╛ рдЕрдкрдирд╛ рдЦреБрдж рдХрд╛ рдмрдирд╛ рд╕рдХрддрд╛ рд╣реВрдВред

рдореБрдЭреЗ рдХреБрдЫ рд╕рд╛рд▓ рдкрд╣рд▓реЗ рдпрд╛рдж рд╣реИ рдХрд┐ рдХреИрд╕реЗ рд╣рдордиреЗ HashSet<T> рд╕рд╛рде рдареАрдХ рд╡реИрд╕реА рд╣реА рдмрд╛рддрдЪреАрдд рдХреА HashSet<T> рдЪрд╛рд╣рддрд╛ рдерд╛ рдЬрдмрдХрд┐ рд╕рдореБрджрд╛рдп ISet<T> рдЪрд╛рд╣рддрд╛ рдерд╛ред рдЕрдЧрд░ рдореБрдЭреЗ рдареАрдХ рд╕реЗ рдпрд╛рдж рд╣реИ, рддреЛ рд╣рдореЗрдВ HashSet<T> рдкрд╣рд▓реЗ рдФрд░ ISet<T> рд╕реЗрдХреЗрдВрдб рдорд┐рд▓рд╛ред рдПрдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рдмрд┐рдирд╛, HashSet<T> рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд╛рдлреА рд╕реАрдорд┐рдд рдерд╛ рдХреНрдпреЛрдВрдХрд┐ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдПрдкреАрдЖрдИ рдХреЛ рдмрджрд▓рдирд╛ рдореБрд╢реНрдХрд┐рд▓ (рдпрджрд┐ рдЕрдХреНрд╕рд░ рдЕрд╕рдВрднрд╡ рдирд╣реАрдВ) рд╣реЛрддрд╛ рд╣реИред

рдореИрдВ рдиреЛрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рд╡рд╣рд╛рдБ рднреА рд╣реИ рдХрд┐ SortedSet<T> рдЕрдм, рдХреЗ рдХрдИ рдЧреИрд░-рдмреАрд╕реАрдПрд▓ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдирд╣реАрдВ ISet<T> ред рдореИрдВрдиреЗ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдПрдкреАрдЖрдИ рдореЗрдВ ISet<T> рдХрд┐рдпрд╛ рд╣реИ рдФрд░ рдЗрд╕рдХреЗ рд▓рд┐рдП рдореИрдВ рдЖрднрд╛рд░реА рд╣реВрдВред рдореЗрд░рд╛ рдирд┐рдЬреА рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд┐рд╕реА рднреА рдареЛрд╕ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рдореБрдЭреЗ рд╕рд╣реА рд▓рдЧрддрд╛ рд╣реИред рдореИрдВ рдмрд┐рдирд╛ рдХреБрдЫ рддреЛрдбрд╝реЗ рдХрд┐рд╕реА рдЕрдиреНрдп рдХреЗ рд▓рд┐рдП рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рдЖрд╕рд╛рдиреА рд╕реЗ рд╕реНрд╡реИрдк рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВред рдпрд╣ рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЗ рдмрд┐рдирд╛ рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реЛрдЧрд╛ред

рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЬреЛ рдХрд╣рддреЗ рд╣реИрдВ рдХрд┐ рд╣рдо рд╣рдореЗрд╢рд╛ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЗрд╕ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред рдПрдХ рдкрд▓ рдХреЗ рд▓рд┐рдП рдорд╛рди рд▓реЗрдВ рдХрд┐ BCL рдореЗрдВ ISet<T> рдХрднреА рдирд╣реАрдВ рд╣реБрдЖред рдЕрдм рдореИрдВ рдЕрдкрдирд╛ рд╕реНрд╡рдпрдВ рдХрд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ IMySet<T> рдФрд░ рд╕рд╛рде рд╣реА рдареЛрд╕ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдмрдирд╛ рд╕рдХрддрд╛ рд╣реВрдВред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдПрдХ рджрд┐рди рдмреАрд╕реАрдПрд▓ HashSet<T> рдЬрд╛рд░реА рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ ISet<T> рд▓рд╛рдЧреВ рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВ рднреА рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ IMySet<T> рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рдореИрдВ рдЕрдкрдиреЗ IMySet<T> рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд░реВрдк рдореЗрдВ HashSet<T> рдореЗрдВ рд╕реНрд╡реИрдк рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ред

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

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

@ebickle @svick @horaciojcfilho @paulcbetts @justinvp @akoeplinger @mbeidler @SirCmpwn @andrewgmorris @weshaggard @BrannonKing @NKnusperer @danmosemsft @ianhays @safern @VisualMelon @ Joe4xied @

рдЕрдзрд┐рд╕реВрдЪрд┐рдд рдХреЗ рд▓рд┐рдП: рджреЛрд╕реНрддреЛрдВ, рдХреНрдпрд╛ рдЖрдк рдХреГрдкрдпрд╛ рдЕрдкрдирд╛ рдЗрдирдкреБрдЯ рдкреНрд░рджрд╛рди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ? рдпрд╣ рдмрд╣реБрдд рдорджрджрдЧрд╛рд░ рд╣реЛрдЧрд╛, рднрд▓реЗ рд╣реА рдЖрдк :+1:, :-1: рдХреЗ рд╕рд╛рде рд╡реЛрдЯ рдХрд░реЗрдВред рдЖрдк рдЗрд╕ рдореБрджреНрджреЗ рдкрд░ рдЯрд┐рдкреНрдкрдгреА рдкрдврд╝рдирд╛ рд╢реБрд░реВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (рдпрд╣рд╛рдБ рдКрдкрд░ 4 рдкреЛрд╕реНрдЯ) -- рд╣рдо рдЪрд░реНрдЪрд╛ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдХрд┐ рдХреНрдпрд╛ рдПрдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдкреНрд░рджрд╛рди рдХрд░рдирд╛ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдЪрд╛рд░ рд╣реИ (рдЕрднреА рдХреЗ рд▓рд┐рдП рдХреЗрд╡рд▓ рдпрд╣ рдкрд╣рд▓реВ, рдЬрдм рддрдХ рдЗрд╕рдХрд╛ рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рд╣реЛ рдЬрд╛рддрд╛)ред_

рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЗрдирдореЗрдВ рд╕реЗ рдХреБрдЫ рд▓реЛрдЧ рдПрдкреАрдЖрдИ рд╕рдореАрдХреНрд╖рдХ рд╣реЛрдВ, рд▓реЗрдХрд┐рди рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛрд╣реИ рдХрд┐ рдЖрдЧреЗ рдмрдврд╝рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд╣рдореЗрдВ рдЗрд╕ рдореМрд▓рд┐рдХ рдирд┐рд░реНрдгрдп рдореЗрдВ рдЙрдирдХреЗ рд╕рдорд░реНрдерди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред @karelz , @terrajobst , рдХреНрдпрд╛ рдпрд╣ рд╕рдВрднрд╡ рд╣реЛрдЧрд╛ рдХрд┐ рдЖрдк рдЙрдирд╕реЗ рдЗрд╕ рдкрд╣рд▓реВ рдХреЛ рд╕реБрд▓рдЭрд╛рдиреЗ рдореЗрдВ рд╣рдорд╛рд░реА рдорджрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣реЗрдВ? рдЙрдирдХрд╛ рдЗрдирдкреБрдЯ рдмрд╣реБрдд рдореВрд▓реНрдпрд╡рд╛рди рд╣реЛрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рд╡рд╣реА рд╣реИрдВ рдЬреЛ рдЕрдВрддрддрдГ рдЗрд╕рдХреА рд╕рдореАрдХреНрд╖рд╛ рдХрд░реЗрдВрдЧреЗ - рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рджреГрд╖реНрдЯрд┐рдХреЛрдг (рдпрд╛ 1 рд╕реЗ рдЕрдзрд┐рдХ рдкреНрд░рд╕реНрддрд╛рд╡ рдХреЗ рд╕рд╛рде рдЬрд╛рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдЗрд╕ рдмрд┐рдВрджреБ рдкрд░ рдЗрд╕реЗ рдЬрд╛рдирдирд╛ рдмрд╣реБрдд рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧрд╛, рдЬреЛ рдердХрд╛рдК рд╣реЛрдЧрд╛) рдФрд░ рдереЛрдбрд╝рд╛ рд╡реНрдпрд░реНрде, рдЬреИрд╕рд╛ рдХрд┐ рд╣рдо рдЙрдирдХреЗ рдирд┐рд░реНрдгрдп рдХреЛ рдкрд╣рд▓реЗ рдЬрд╛рди рд╕рдХрддреЗ рд╣реИрдВ)ред

рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ, рдореИрдВ рдПрдХ рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЗ рд▓рд┐рдП рд╣реВрдВ, рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдирд┐рд░реНрдгрдп рдЕрд▓рдЧ рд╣реИ, рддреЛ рдореБрдЭреЗ рдПрдХ рдЕрд▓рдЧ рд░рд╛рд╕реНрддреЗ рдкрд░ рдЪрд▓рдиреЗ рдореЗрдВ рдЦреБрд╢реА рд╣реЛрдЧреАред

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

рдмреАрдЯреАрдбрдмреНрд▓реНрдпреВ: рдПрдкреАрдЖрдИ рд╕рдореАрдХреНрд╖рд╛ рдмреИрдардХреЗрдВ рд▓рдЧрднрдЧ рд╣рд░ рдордВрдЧрд▓рд╡рд╛рд░ рдХреЛ рд╣реЛрддреА рд╣реИрдВред

рдЗрд╕реЗ рд╢реБрд░реВ рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХреЗ рд▓рд┐рдП, рдпрд╣рд╛рдВ рдмрддрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ рдХрд┐ рдПрдХ рдкреНрд░рд╕реНрддрд╛рд╡ рдХреИрд╕рд╛ рджрд┐рдЦрдирд╛ рдЪрд╛рд╣рд┐рдП:

рдкреНрд░рд╕реНрддрд╛рд╡ рдЙрджрд╛рд╣рд░рдг / рдмреАрдЬ

```рд╕реА#
рдиреЗрдорд╕реНрдкреЗрд╕ рд╕рд┐рд╕реНрдЯрдо
{
рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╡рд░реНрдЧ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрддрд╛рд░
: IEnumerable, ICollection, IEnumerable, IReadOnlyCollection
{
рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрддрд╛рд░ ();
рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрддрд╛рд░ (рдЗрдВрдЯ рдХреНрд╖рдорддрд╛);
рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрддрд╛рд░ (IComparer .)рддреБрд▓рдирд╛рдХрд░реНрддрд╛);
рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрддрд╛рд░(IEnumerableрд╕рдВрдЧреНрд░рд╣);
рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрддрд╛рд░(IEnumerableрд╕рдВрдЧреНрд░рд╣, рдЖрдИрд╕реАрдУрдПрдордкреЗрдпрд░рддреБрд▓рдирд╛рдХрд░реНрддрд╛);
рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрддрд╛рд░ (рдЗрдВрдЯ рдХреНрд╖рдорддрд╛, рдЖрдИрд╕реАрдУрдПрдордкреЗрдпрд░)рддреБрд▓рдирд╛рдХрд░реНрддрд╛);

    public IComparer<T> Comparer { get; }
    public int Count { get; }

    public void Enqueue(T item);
    public T Dequeue();
    public T Peek();
    public void Clear();
    public bool Contains(T item);

    // Sets the capacity to the actual number of elements
    public void TrimExcess();

    public void CopyTo(T[] array, int arrayIndex);
    void ICollection.CopyTo(Array array, int index);
    public T[] ToArray();

    public Enumerator GetEnumerator();
    IEnumerator<T> IEnumerable<T>.GetEnumerator();
    IEnumerator IEnumerable.GetEnumerator();

    bool ICollection.IsSynchronized { get; }
    object ICollection.SyncRoot { get; }
    public struct Enumerator : IEnumerator<T>
    {
        public T Current { get; }
        object IEnumerator.Current { get; }
        public bool MoveNext();
        public void Reset();
        public void Dispose();
    }
}

}
```

рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП:

  • рдЧреБрдо рдЙрдкрдпреЛрдЧ рдЙрджрд╛рд╣рд░рдг (рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рдЕрд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ рдореИрдВ рд╡рд╕реНрддреБрдУрдВ рдХреА рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХреИрд╕реЗ рд╡реНрдпрдХреНрдд рдХрд░рддрд╛ рд╣реВрдВ) - рд╢рд╛рдпрдж рд╣рдореЗрдВ рдЗрд╕реЗ 'int' рдХреЛ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдорд╛рди рдЗрдирдкреБрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдлрд┐рд░ рд╕реЗ рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП? рд╢рд╛рдпрдж рдЙрд╕ рдкрд░ рдХреБрдЫ рдЕрдореВрд░реНрдд? (рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рдкрд░ рдКрдкрд░ рдЪрд░реНрдЪрд╛ рдХреА рдЧрдИ рдереА, рд▓реЗрдХрд┐рди рдзрд╛рдЧрд╛ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рд▓рдВрдмрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдореЗрдВ рдареЛрд╕ рдкреНрд░рд╕реНрддрд╛рд╡реЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдФрд░ рдЕрдзрд┐рдХ рдЪрд░реНрдЪрд╛ рдХреА рдирд╣реАрдВ)
  • UpdatePriority рдкрд░рд┐рджреГрд╢реНрдп рдЧреБрдо рд╣реИ
  • рдКрдкрд░ рдЪрд░реНрдЪрд╛ рдХреА рдЧрдИ рдХреЛрдИ рдФрд░ рдмрд╛рдд рдпрд╣рд╛рдВ рдЧрд╛рдпрдм рд╣реИ?

@karelz рдареАрдХ рд╣реИ, рдпрд╣ рдХрд░реВрдБрдЧрд╛, рдмрдиреЗ рд░рд╣реЗрдВ! :рдореБрд╕реНрдХреБрд░рд╛рдУ:

рдареАрдХ рд╣реИред рдЬрд╣рд╛рдВ рддрдХ тАЛтАЛтАЛтАЛрдореИрдВ рдХрд╣ рд╕рдХрддрд╛ рд╣реВрдВ, рдПрдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдпрд╛ рдвреЗрд░ рдПрдкреАрдЖрдИ рд╕рдореАрдХреНрд╖рд╛ рдкрд╛рд╕ рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдЪрддреБрд░реНрдзрд╛рддреБрдХ рдвреЗрд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рднреВрд▓рдХрд░, рдореИрдВ рдереЛрдбрд╝рд╛ рдЕрд▓рдЧ рд╕рдорд╛рдзрд╛рди рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред рдиреАрдЪреЗ рджреА рдЧрдИ рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛ рдХреБрдЫ рдорд╛рдпрдиреЛрдВ рдореЗрдВ рдЕрд▓рдЧ рд╣реИ рдЬреЛ рд╣рдо рдкрд╛рдпрдерди , рдЬрд╛рд╡рд╛ , рд╕реА ++ , рдЧреЛ , рд╕реНрд╡рд┐рдлреНрдЯ рдФрд░ рд░рд╕реНрдЯ (рдХрдо рд╕реЗ рдХрдо рдЙрди) рдореЗрдВ рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВред

рдЗрд╖реНрдЯрддрдо рдЬрдЯрд┐рд▓рддрд╛рдУрдВ рдФрд░ рдорд╣рд╛рди рд╡рд╛рд╕реНрддрд╡рд┐рдХ рджреБрдирд┐рдпрд╛ рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдХреЛ рдмрдирд╛рдП рд░рдЦрддреЗ рд╣реБрдП, рдореБрдЦреНрдп рдзреНрдпрд╛рди рд╢реБрджреНрдзрддрд╛, рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдкреВрд░реНрдгрддрд╛ рдФрд░ рд╕рд╣рдЬрддрд╛ рдкрд░ рд╣реИред

@karelz @terrajobst

рдкреНрд░рд╕реНрддрд╛рд╡

рджрд▓реАрд▓

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

  1. рд╕рдВрдЧреНрд░рд╣ рдореЗрдВ рдПрдХ рдирдпрд╛ рддрддреНрд╡ рдЬреЛрдбрд╝реЗрдВред
  2. рдЙрдЪреНрдЪрддрдо рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рд╡рд╛рд▓реЗ рддрддреНрд╡ рдХреЛ рдкреБрдирдГ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ (рдФрд░ рдЗрд╕реЗ рд╣рдЯрд╛рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛ)ред
  3. рд╕рдВрдЧреНрд░рд╣ рд╕реЗ рдПрдХ рддрддреНрд╡ рдирд┐рдХрд╛рд▓реЗрдВред
  4. рд╕рдВрдЧреНрд░рд╣ рдореЗрдВ рдПрдХ рддрддреНрд╡ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░реЗрдВред
  5. рджреЛ рд╕рдВрдЧреНрд░рд╣ рдорд░реНрдЬ рдХрд░реЗрдВред

рдкреНрд░рдпреЛрдЧ

рд╢рдмреНрджрдХреЛрд╖

  • рдорд╛рди - рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдбреЗрдЯрд╛ред
  • рдХреБрдВрдЬреА - рдПрдХ рд╡рд╕реНрддреБ рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдЖрджреЗрд╢ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рдХрд╛рд░ рдХреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдбреЗрдЯрд╛

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ рд╣рдо рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрддрд╛рд░ (рдХреЗрд╡рд▓ рддрддреНрд╡реЛрдВ рдХреЛ рдЬреЛрдбрд╝рдиреЗ) рдХреЗ рдирд┐рд░реНрдорд╛рдг рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░реЗрдВрдЧреЗред рдЗрд╕реЗ рдХрд░рдиреЗ рдХрд╛ рддрд░реАрдХрд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдбреЗрдЯрд╛ рдХреЗ рдкреНрд░рдХрд╛рд░ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИред

рджреГрд╖реНрдЯрд╛рдВрдд 1

  • TKey рдФрд░ TValue рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╡рд╕реНрддреБрдПрдВ рд╣реИрдВред
  • TKey рддреБрд▓рдиреАрдп рд╣реИред
var queue = new PriorityQueue<int, string>();

queue.Enqueue(5, "five");
queue.Enqueue(1, "one");
queue.Enqueue(3, "three");

рдкрд░рд┐рджреГрд╢реНрдп 2

  • TKey рдФрд░ TValue рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╡рд╕реНрддреБрдПрдВ рд╣реИрдВред
  • TKey рддреБрд▓рдиреАрдп рдирд╣реАрдВ рд╣реИред
var comparer = Comparer<MyKey>.Create(/* custom logic */);

var queue = new PriorityQueue<MyKey, string>(comparer);

queue.Enqueue(new MyKey(5), "five");
queue.Enqueue(new MyKey(1), "one");
queue.Enqueue(new MyKey(3), "three");

рдкрд░рд┐рджреГрд╢реНрдп 3

  • TKey TValue рднреАрддрд░ рд╕рдорд╛рд╣рд┐рдд рд╣реИред
  • TKey рддреБрд▓рдиреАрдп рдирд╣реАрдВ рд╣реИред
public class MyClass
{
    public MyKey Key { get; set; }
}

рдПрдХ рдкреНрд░рдореБрдЦ рддреБрд▓рдирд┐рддреНрд░ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╣рдореЗрдВ рдПрдХ рдкреНрд░рдореБрдЦ рдЪрдпрдирдХрд░реНрддрд╛ рдХреА рднреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:

var selector = new Func<MyClass, MyKey>(item => item.Key);

var queue = new PriorityQueue<MyKey, MyClass>(selector, comparer);

queue.Enqueue(new MyClass( /* args */ ));
queue.Enqueue(new MyClass( /* args */ ));
queue.Enqueue(new MyClass( /* args */ ));
рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ
  • рд╣рдо рдпрд╣рд╛рдВ рдПрдХ рдЕрд▓рдЧ Enqueue рдкрджреНрдзрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕ рдмрд╛рд░ рдпрд╣ рдХреЗрд╡рд▓ рдПрдХ рддрд░реНрдХ рд▓реЗрддрд╛ рд╣реИ ( TValue )ред
  • рдпрджрд┐ рдХреБрдВрдЬреА рдЪрдпрдирдХрд░реНрддрд╛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рддреЛ рд╡рд┐рдзрд┐ Enqueue(TKey, TValue) рдХреЛ InvalidOperationException рдлреЗрдВрдХрдирд╛ рдЪрд╛рд╣рд┐рдПред
  • рдпрджрд┐ рдХреБрдВрдЬреА рдЪрдпрдирдХрд░реНрддрд╛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдирд╣реАрдВ рд╣реИ, рддреЛ рд╡рд┐рдзрд┐ Enqueue(TValue) рдХреЛ InvalidOperationException рдлреЗрдВрдХрдирд╛ рдЪрд╛рд╣рд┐рдПред

рдкрд░рд┐рджреГрд╢реНрдп 4

  • TKey TValue рднреАрддрд░ рд╕рдорд╛рд╣рд┐рдд рд╣реИред
  • TKey рддреБрд▓рдиреАрдп рд╣реИред
var queue = new PriorityQueue<MyKey, MyClass>(selector);

queue.Enqueue(new MyClass( /* args */ ));
queue.Enqueue(new MyClass( /* args */ ));
queue.Enqueue(new MyClass( /* args */ ));
рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рдкрд░рд┐рджреГрд╢реНрдп 5

  • TKey рдФрд░ TValue рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╡рд╕реНрддреБрдПрдВ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдПрдХ рд╣реА рдкреНрд░рдХрд╛рд░ рдХреА рд╣реИрдВред
  • TKey рддреБрд▓рдиреАрдп рд╣реИред
var queue = new PriorityQueue<int, int>();

queue.Enqueue(5, 50);
queue.Enqueue(1, 10);
queue.Enqueue(3, 30);

рдкрд░рд┐рджреГрд╢реНрдп 6

  • рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдбреЗрдЯрд╛ рдПрдХ рдПрдХрд▓ рд╡рд╕реНрддреБ рд╣реИ, рдЬреЛ рддреБрд▓рдиреАрдп рд╣реИред
  • рдХреЛрдИ рднреМрддрд┐рдХ рдХреБрдВрдЬреА рдирд╣реАрдВ рд╣реИ рдпрд╛ рдХреЛрдИ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИред
public class MyClass : IComparable<MyClass>
{
    public int CompareTo(MyClass other) => /* custom logic */
}
var queue = new PriorityQueue<MyClass, MyClass>();

queue.Enqueue(new MyClass( /* args */ ));
queue.Enqueue(new MyClass( /* args */ ));
queue.Enqueue(new MyClass( /* args */ ));
рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рд╢реБрд░реБрдЖрдд рдореЗрдВ рдПрдХ рдЕрд╕реНрдкрд╖реНрдЯрддрд╛ рд╣реИред

  • рдпрд╣ рд╕рдВрднрд╡ рд╣реИ рдХрд┐ MyClass рдПрдХ рдЕрд▓рдЧ рд╡рд╕реНрддреБ рд╣реИ рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗрд╡рд▓ рдХреБрдВрдЬреА рдФрд░ рдореВрд▓реНрдп рдХреЛ рдЕрд▓рдЧ рд░рдЦрдирд╛ рдЪрд╛рд╣реЗрдЧрд╛, рдЬреИрд╕рд╛ рдХрд┐ рдкрд░рд┐рджреГрд╢реНрдп 5 рдореЗрдВ рдерд╛ред
  • рд╣рд╛рд▓рд╛рдБрдХрд┐, рдпрд╣ рдПрдХ рдПрдХрд▓ рд╡рд╕реНрддреБ рднреА рд╣реЛ рд╕рдХрддреА рд╣реИ (рдЬреИрд╕реЗ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ)ред

рдпрд╣рд╛рдВ рдмрддрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ рдХрд┐ PriorityQueue рдЕрд╕реНрдкрд╖реНрдЯрддрд╛ рд╕реЗ рдХреИрд╕реЗ рдирд┐рдкрдЯрддрд╛ рд╣реИ:

  • рдпрджрд┐ рдХреБрдВрдЬреА рдЪрдпрдирдХрд░реНрддрд╛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рддреЛ рдХреЛрдИ рдЕрд╕реНрдкрд╖реНрдЯрддрд╛ рдирд╣реАрдВ рд╣реИред рдХреЗрд╡рд▓ Enqueue(TValue) рдХреА рдЕрдиреБрдорддрд┐ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдкрд░рд┐рджреГрд╢реНрдп 6 рдХрд╛ рдПрдХ рд╡реИрдХрд▓реНрдкрд┐рдХ рд╕рдорд╛рдзрд╛рди рдХреЗрд╡рд▓ рдПрдХ рдЪрдпрдирдХрд░реНрддрд╛ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдирд╛ рдФрд░ рдЗрд╕реЗ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХреЛ рдкрд╛рд╕ рдХрд░рдирд╛ рд╣реИред
  • рдпрджрд┐ рдХреБрдВрдЬреА рдЪрдпрдирдХрд░реНрддрд╛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдирд╣реАрдВ рд╣реИ, рддреЛ рдЕрд╕реНрдкрд╖реНрдЯрддрд╛ рдХреЛ Enqueue рд╡рд┐рдзрд┐ рдХреЗ рдкрд╣рд▓реЗ рдЙрдкрдпреЛрдЧ рдХреЗ рд╕рд╛рде рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:

    • рдпрджрд┐ Enqueue(TKey, TValue) рдХреЛ рдкрд╣рд▓реА рдмрд╛рд░ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдХреБрдВрдЬреА рдФрд░ рдорд╛рди рдХреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдСрдмреНрдЬреЗрдХреНрдЯ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ ( рдкрд░рд┐рджреГрд╢реНрдп 5 )ред рддрдм рд╕реЗ, Enqueue(TValue) рд╡рд┐рдзрд┐ рдХреЛ InvalidOperationException рдлреЗрдВрдХрдирд╛ рд╣реЛрдЧрд╛ред

    • рдпрджрд┐ Enqueue(TValue) рдХреЛ рдкрд╣рд▓реА рдмрд╛рд░ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдХреБрдВрдЬреА рдФрд░ рдорд╛рди рдХреЛ рдПрдХ рд╣реА рд╡рд╕реНрддреБ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ, рдХреБрдВрдЬреА рдЪрдпрдирдХрд░реНрддрд╛ рдХрд╛ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ ( рдкрд░рд┐рджреГрд╢реНрдп 6 )ред рддрдм рд╕реЗ, Enqueue(TKey, TValue) рд╡рд┐рдзрд┐ рдХреЛ InvalidOperationException рдлреЗрдВрдХрдирд╛ рд╣реЛрдЧрд╛ред

рдЕрдиреНрдп рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛

рд╣рдо рдкрд╣рд▓реЗ рд╣реА рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрддрд╛рд░ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЛ рдХрд╡рд░ рдХрд░ рдЪреБрдХреЗ рд╣реИрдВред рд╣рдо рдпрд╣ рднреА рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рд╕рдВрдЧреНрд░рд╣ рдореЗрдВ рддрддреНрд╡реЛрдВ рдХреЛ рдХреИрд╕реЗ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИред рдЕрдм рд╣рдо рд╢реЗрд╖ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдкрд░ рдзреНрдпрд╛рди рджреЗрдВрдЧреЗред

рд╕рд░реНрд╡реЛрдЪреНрдЪ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рддрддреНрд╡

рддрддреНрд╡ рдкрд░ рд╣рдо рд╕рд░реНрд╡реЛрдЪреНрдЪ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХреЗ рд╕рд╛рде рджреЛ рдСрдкрд░реЗрд╢рди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ - рдЗрд╕реЗ рдкреБрдирдГ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ рдпрд╛ рдЗрд╕реЗ рд╣рдЯрд╛ рджреЗрдВред

var queue = new PriorityQueue<int, string>();

queue.Enqueue(5, "five");
queue.Enqueue(1, "one");
queue.Enqueue(3, "three");

// retrieve the element with the highest priority
var element = queue.Peek();

// remove that element
queue.Dequeue();

Peek рдФрд░ Dequeue рд╡рд┐рдзрд┐рдпреЛрдВ рджреНрд╡рд╛рд░рд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреНрдпрд╛ рд▓реМрдЯрд╛рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ, рдЗрд╕ рдкрд░ рдмрд╛рдж рдореЗрдВ рдЪрд░реНрдЪрд╛ рдХреА рдЬрд╛рдПрдЧреАред

рдПрдХ рддрддреНрд╡ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдирд╛

рдПрдХ рдордирдорд╛рдирд╛ рддрддреНрд╡ рдХреЗ рд▓рд┐рдП, рд╣рдо рдЗрд╕реЗ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдирд╛ рдкрд╕рдВрдж рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ, рдпрджрд┐ рдХрд┐рд╕реА рд╕реЗрд╡рд╛ рдХреЗ рдкреВрд░реЗ рдЬреАрд╡рдирдХрд╛рд▓ рдХреЗ рджреМрд░рд╛рди рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрддрд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдПрдХ рдЙрдЪреНрдЪ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ рдХрд┐ рдбреЗрд╡рд▓рдкрд░ рдкреНрд░рд╛рдердорд┐рдХрддрд╛рдУрдВ рдХреЛ рдЕрджреНрдпрддрди рдХрд░рдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рд░рдЦрдирд╛ рдЪрд╛рд╣реЗрдЧрд╛ред

рдЖрд╢реНрдЪрд░реНрдпрдЬрдирдХ рд░реВрдк рд╕реЗ, рдРрд╕реА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рд╕рдорд╛рди рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛рдУрдВ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди рдирд╣реАрдВ рдХреА рдЬрд╛рддреА рд╣реИ: рдкрд╛рдпрдерди , рдЬрд╛рд╡рд╛ , рд╕реА ++ , рдЧреЛ , рд╕реНрд╡рд┐рдлреНрдЯ рдФрд░ рд░рд╕реНрдЯ рдореЗрдВ ред рд╢рд╛рдпрдж рдХреБрдЫ рдЕрдиреНрдп рднреА, рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ рдХреЗрд╡рд▓ рдЙрдирдХреЛ рдЪреЗрдХ рдХрд┐рдпрд╛ рд╣реИред рдкрд░рд┐рдгрд╛рдо? рдирд┐рд░рд╛рд╢ рдбреЗрд╡рд▓рдкрд░реНрд╕:

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

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

рд╣реИрдВрдбрд▓

рд╣рд░ рдмрд╛рд░ рдЬрдм рдХреЛрдИ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрддрд╛рд░ рдореЗрдВ рдХреЛрдИ рддрддреНрд╡ рдЬреЛрдбрд╝рддрд╛ рд╣реИ, рддреЛ рдЙрдиреНрд╣реЗрдВ рдПрдХ рд╣реИрдВрдбрд▓ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:

var handle = queue.Enqueue(42, "forty two");

рд╣реИрдВрдбрд▓ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдПрдкреАрдЖрдИ рд╡рд╛рд▓рд╛ рдПрдХ рд╡рд░реНрдЧ рд╣реИ:

public class PriorityQueueHandle<TKey, TValue>
{
    public TKey Key { get; }
    public TValue Value { get; }
}

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

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

/*
 * User wants to retrieve a server that at any given moment
 * has the lowest average response time.
 * He doesn't want to maintain a separate key object (it is
 * inside his type) and the key is already comparable.
 */

var queue = new PriorityQueue<double, ServerStats>(selector);

/* adding some elements */

var handle = queue.Enqueue(server);

/*
 * Server stats are kept along with handles (e.g. in a dictionary).
 * Whenever there is a need of updating the priority of a certain
 * server, the user simply updates the appropriate ServerStats object
 * and then simply uses the handle associated with it:
 */

queue.Update(handle);

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

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

рдкрд░рд┐рджреГрд╢реНрдпреЛрдВ

рдкрд░рд┐рджреГрд╢реНрдп 7
  • TKey рдФрд░ TValue рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╡рд╕реНрддреБрдПрдВ рд╣реИрдВред
var queue = new PriorityQueue<int, string>();

var handle = queue.Enqueue(1, "three");
queue.Enqueue(1, "three");
queue.Enqueue(2, "three");

queue.Update(handle, 3);

рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдРрд╕рд╛ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрддрд╛рд░ рдореЗрдВ рдПрдХ рдЕрджреНрд╡рд┐рддреАрдп рддрддреНрд╡ рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдЖрд╕рд╛рди рддрд░реАрдХрд╛ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ, рдХреЛрдИ рдкреНрд░рд╢реНрди рдирд╣реАрдВ рдкреВрдЫрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рдЙрди рдкрд░рд┐рджреГрд╢реНрдпреЛрдВ рдореЗрдВ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рд╕рд╣рд╛рдпрдХ рд╣реЛрддрд╛ рд╣реИ рдЬрд╣рд╛рдБ рдХреБрдВрдЬрд┐рдпреЛрдВ рдХреА рдирдХрд▓ рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрд╣ рдмрд╣реБрдд рдХреБрд╢рд▓ рд╣реИ - рд╣рдо рдУ (1) рдореЗрдВ рдЕрджреНрдпрддрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддрддреНрд╡ рдХреЛ рдЬрд╛рдирддреЗ рд╣реИрдВ, рдФрд░ рдСрдкрд░реЗрд╢рди рдУ (рд▓реЙрдЧ рдПрди) рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рд╡реИрдХрд▓реНрдкрд┐рдХ рд░реВрдк рд╕реЗ, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЕрддрд┐рд░рд┐рдХреНрдд рд╡рд┐рдзрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рдУ (рдПрди) рдореЗрдВ рд╕рдВрдкреВрд░реНрдг рд╕рдВрд░рдЪрдирд╛ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЦреЛрдЬрддреЗ рд╣реИрдВ рдФрд░ рдлрд┐рд░ рддрд░реНрдХреЛрдВ рд╕реЗ рдореЗрд▓ рдЦрд╛рдиреЗ рд╡рд╛рд▓реЗ рдкрд╣рд▓реЗ рддрддреНрд╡ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдЬрд╛рд╡рд╛ рдореЗрдВ рдПрдХ рддрддреНрд╡ рдХреЛ рд╣рдЯрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рди рддреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рд╣реА рд╣реИ рдФрд░ рди рд╣реА рдХреБрд╢рд▓, рд▓реЗрдХрд┐рди рдХрднреА-рдХрднреА рд╕рд░рд▓:

var queue = new PriorityQueue<int, string>();

queue.Enqueue(1, "one");
queue.Enqueue(2, "three");
queue.Enqueue(3, "three");

queue.Update("three", 30);

рдКрдкрд░ рджреА рдЧрдИ рд╡рд┐рдзрд┐ рдкрд╣рд▓реЗ рддрддреНрд╡ рдХреЛ "three" рдмрд░рд╛рдмрд░ рдорд╛рди рдХреЗ рд╕рд╛рде рдвреВрдВрдврддреА рд╣реИред рдЗрд╕рдХреА рдХреБрдВрдЬреА рдХреЛ 30 рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рд╣рд╛рд▓рд╛рдВрдХрд┐, рд╣рдо рдирд╣реАрдВ рдЬрд╛рдирддреЗ рдХрд┐ рд╢рд░реНрдд рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдПрдХ рд╕реЗ рдЕрдзрд┐рдХ рд╣реЛрдиреЗ рдкрд░ рдХрд┐рд╕реЗ рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

рдпрд╣ Update(TKey oldKey, TValue, TKey newKey) рд╡рд┐рдзрд┐ рд╕реЗ рдереЛрдбрд╝рд╛ рд╕реБрд░рдХреНрд╖рд┐рдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рдПрдХ рдФрд░ рд╢рд░реНрдд рдЬреЛрдбрд╝рддрд╛ рд╣реИ - рдкреБрд░рд╛рдиреА рдХреБрдВрдЬреА рдХрд╛ рднреА рдорд┐рд▓рд╛рди рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рджреЛрдиреЛрдВ рд╕рдорд╛рдзрд╛рди рд╕рд░рд▓ рд╣реИрдВ, рд▓реЗрдХрд┐рди 100% рд╕реБрд░рдХреНрд╖рд┐рдд рдФрд░ рдХрдо рдкреНрд░рджрд░реНрд╢рдирдХрд╛рд░реА рдирд╣реАрдВ рд╣реИрдВ (O(1 + log n) рдмрдирд╛рдо O(n + log n))ред

рдкрд░рд┐рджреГрд╢реНрдп 8
  • TKey TValue рднреАрддрд░ рд╕рдорд╛рд╣рд┐рдд рд╣реИред
var queue = new PriorityQueue<int, MyClass>(selector);

/* adding some elements */

queue.Update(handle);

рдпрд╣ рдкрд░рд┐рджреГрд╢реНрдп рд╡рд╣ рд╣реИ рдЬреЛ рд╣реИрдВрдбрд▓ рдЕрдиреБрднрд╛рдЧ рдореЗрдВ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред

рдЙрдкрд░реЛрдХреНрдд рдУ (рд▓реЙрдЧ рдПрди) рдореЗрдВ рд╣рд╛рд╕рд┐рд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рд╡реИрдХрд▓реНрдкрд┐рдХ рд░реВрдк рд╕реЗ, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдПрдХ рд╡рд┐рдзрд┐ Update(TValue) рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рдкрд╣рд▓реЗ рддрддреНрд╡ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХреЗ рдмрд░рд╛рдмрд░ рдкрд╛рддрд╛ рд╣реИ рдФрд░ рдЖрдВрддрд░рд┐рдХ рдкреБрдирд░реНрд╡реНрдпрд╡рд╕реНрдерд╛ рдХрд░рддрд╛ рд╣реИред рдмреЗрд╢рдХ, рдпрд╣ рдУ (рдПрди) рд╣реИред

рдкрд░рд┐рджреГрд╢реНрдп 9
  • TKey рдФрд░ TValue рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╡рд╕реНрддреБрдПрдВ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдПрдХ рд╣реА рдкреНрд░рдХрд╛рд░ рдХреА рд╣реИрдВред

рдПрдХ рд╣реИрдВрдбрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛, рд╣рдореЗрд╢рд╛ рдХреА рддрд░рд╣ рдХреЛрдИ рдЕрд╕реНрдкрд╖реНрдЯрддрд╛ рдирд╣реАрдВ рд╣реИред рдЕрдиреНрдп рддрд░реАрдХреЛрдВ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдЬреЛ рдЕрджреНрдпрддрди рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВ - рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рд╣реИред рдпрд╣ рд╕рд╛рджрдЧреА, рдкреНрд░рджрд░реНрд╢рди рдФрд░ рд╢реБрджреНрдзрддрд╛ рдХреЗ рдмреАрдЪ рдПрдХ рд╕рдордЭреМрддрд╛ рд╣реИ (рдЬреЛ рдЗрд╕ рдмрд╛рдд рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдбреЗрдЯрд╛ рдХреЛ рджреЛрд╣рд░рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВ)ред

рдкрд░рд┐рджреГрд╢реНрдп 10
  • рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдбреЗрдЯрд╛ рдПрдХ рдПрдХрд▓ рд╡рд╕реНрддреБ рд╣реИред

рдПрдХ рд╣реИрдВрдбрд▓ рдХреЗ рд╕рд╛рде, рдлрд┐рд░ рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реИред рдЕрдиреНрдп рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЕрджреНрдпрддрди рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реЛ рд╕рдХрддрд╛ рд╣реИ - рд▓реЗрдХрд┐рди рдлрд┐рд░ рд╕реЗ, рдХрдо рдкреНрд░рджрд░реНрд╢рди рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдФрд░ рд╣рдореЗрд╢рд╛ рд╕рд╣реА рдирд╣реАрдВ (рдмрд░рд╛рдмрд░ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐рдпрд╛рдВ)ред

рдПрдХ рддрддреНрд╡ рдХреЛ рд╣рдЯрд╛рдирд╛

рдПрдХ рд╣реИрдВрдбрд▓ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕рд░рд▓ рдФрд░ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд╡реИрдХрд▓реНрдкрд┐рдХ рд░реВрдк рд╕реЗ, рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ Remove(TValue) рдФрд░ Remove(TKey, TValue) ред рдкрд╣рд▓реЗ рдмрддрд╛рдП рдЧрдП рд╕рдорд╛рди рдореБрджреНрджреЗред

рджреЛ рд╕рдВрдЧреНрд░рд╣ рд╡рд┐рд▓рдп

var queue1 = new PriorityQueue<int, string>();
var queue2 = new PriorityQueue<int, string>();

/* add some elements to both */

queue1.Merge(queue2);

рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

  • рд╡рд┐рд▓рдп рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж, рдХрддрд╛рд░реЗрдВ рд╕рдорд╛рди рдЖрдВрддрд░рд┐рдХ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рд╕рд╛рдЭрд╛ рдХрд░рддреА рд╣реИрдВред рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рджреЛрдиреЛрдВ рдореЗрдВ рд╕реЗ рдХрд┐рд╕реА рдХрд╛ рднреА рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддрд╛ рд╣реИред
  • рдкреНрд░рдХрд╛рд░реЛрдВ рдХрд╛ рдорд┐рд▓рд╛рди рдХрд░рдирд╛ рд╣реЛрддрд╛ рд╣реИ (рд╕реНрдерд┐рд░ рд░реВрдк рд╕реЗ рдЬрд╛рдБрдЪ рдХреА рдЬрд╛рддреА рд╣реИ)ред
  • рддреБрд▓рдирд╛ рдХрд░рдиреЗ рд╡рд╛рд▓реЛрдВ рдХреЛ рдмрд░рд╛рдмрд░ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдЕрдиреНрдпрдерд╛ InvalidOperationException ред
  • рдЪрдпрдирдХрд░реНрддрд╛рдУрдВ рдХреЛ рд╕рдорд╛рди рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдЕрдиреНрдпрдерд╛ InvalidOperationException ред

рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдПрдкреАрдЖрдИ

public class PriorityQueue<TKey, TValue>
    : IEnumerable,
    IEnumerable<PriorityQueueHandle<TKey, TValue>>,
    IReadOnlyCollection<PriorityQueueHandle<TKey, TValue>>
    // ICollection not included on purpose
{
    public PriorityQueue();
    public PriorityQueue(IComparer<TKey> comparer);
    public PriorityQueue(Func<TValue, TKey> keySelector);
    public PriorityQueue(Func<TValue, TKey> keySelector, IComparer<TKey> comparer);

    IComparer<TKey> Comparer { get; }
    Func<TValue, TKey> KeySelector { get; }
    public int Count { get; }

    public void Clear();

    public bool Contains(PriorityQueueHandle<TKey, TValue> handle); // O(log n)
    public bool Contains(TValue value); // O(n)
    public bool Contains(TKey key, TValue value); // O(n)

    public PriorityQueueHandle<TKey, TValue> Enqueue(TKey key, TValue value); // O(log n)
    public PriorityQueueHandle<TKey, TValue> Enqueue(TValue value); // O(log n)

    public PriorityQueueHandle<TKey, TValue> Peek(); // O(1)
    public PriorityQueueHandle<TKey, TValue> Dequeue(); // O(log n)

    public void Update(PriorityQueueHandle<TKey, TValue> handle); // O(log n)
    public void Update(PriorityQueueHandle<TKey, TValue> handle, TKey newKey); // O(log n)
    public void Update(TValue value, TKey newKey); // O(n)
    public void Update(TKey oldKey, TValue value, TKey newKey); // O(n)

    public void Remove(PriorityQueueHandle<TKey, TValue> handle); // O(log n)
    public void Remove(TValue value); // O(n)
    public void Remove(TKey key, TValue value); // O(n)

    public void Merge(PriorityQueue<TKey, TValue> other); // O(1)

    public IEnumerator<PriorityQueueHandle<TKey, TValue>> GetEnumerator();
    IEnumerator IEnumerable.GetEnumerator();
}

public class PriorityQueueHandle<TKey, TValue>
{
    public TKey Key { get; }
    public TValue Value { get; }
}

рдкреНрд░рд╢реНрди рдЦреЛрд▓реЗрдВ

рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рднрд╡рд┐рд╖реНрдпрд╡рд╛рдгреА рдХрд░рддрд╛ рд╣реИ

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

  • UpdateFirst(Func<PriorityQueueHandle<TKey, TValue>, bool> predicate)
  • UpdateAll(Func<PriorityQueueHandle<TKey, TValue>, bool> predicate)

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

var queue = new PriorityQueue<int, string>();

/* add some elements */

queue.UpdateAll(x => x.Key < 15, 0);

// or for example

queue.UpdateFirst(x => x.Value.State == State.Idle, 100);

рдирдИ рдХреБрдВрдЬреА рд╕реЗрдЯ рдХрд░рдирд╛ рд╕рдВрднрд╛рд╡рд┐рдд рд░реВрдк рд╕реЗ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рднреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдЬреЛ рдкреБрд░рд╛рдиреА рдХреБрдВрдЬреА рд▓реЗрддрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рдХрд┐рд╕реА рднреА рддрд░рд╣ рдмрджрд▓ рджреЗрддрд╛ рд╣реИред

Contains рдФрд░ Remove ред

рдЕрджреНрдпрддрди рдХреБрдВрдЬреА

рдпрджрд┐ рдХреБрдВрдЬреА рдЪрдпрдирдХрд░реНрддрд╛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдирд╣реАрдВ рд╣реИ (рдФрд░ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХреБрдВрдЬреА рдФрд░ рдорд╛рди рдЕрд▓рдЧ-рдЕрд▓рдЧ рд░рдЦреЗ рдЬрд╛рддреЗ рд╣реИрдВ), рддреЛ рд╡рд┐рдзрд┐ рдХреЛ UpdateKey рдирд╛рдо рджрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рд╢рд╛рдпрдж рдЕрдзрд┐рдХ рдЕрднрд┐рд╡реНрдпрдВрдЬрдХ рд╣реИред рдЬрдм рдХреБрдВрдЬреА рдЪрдпрдирдХрд░реНрддрд╛ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ Update рдмреЗрд╣рддрд░ рд╣реЛрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдХреБрдВрдЬреА рдкрд╣рд▓реЗ рд╣реА рдЕрдкрдбреЗрдЯ рд╣реЛ рдЪреБрдХреА рд╣реЛрддреА рд╣реИ рдФрд░ рдЬреЛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рд╡рд╣ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрддрд╛рд░ рдХреЗ рднреАрддрд░ рдХреБрдЫ рддрддреНрд╡реЛрдВ рдХреА рдкреБрдирд░реНрд╡реНрдпрд╡рд╕реНрдерд╛ рд╣реИред

рд╕рд╛рдорд╛рдиреНрдп рдкреНрд░рд╢реНрди

рдХреНрдпрд╛ рд╣реИрдВрдбрд▓ рдЕрдХреНрд╖рдо рдирд╣реАрдВ рд╣реИрдВ?

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

рдлрд┐рд░ рдЖрдк рдЗрд╕реЗ рдХреИрд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВ?

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

рдпрд╣ рдХрд┐рддрдирд╛ рдкреНрд░рджрд░реНрд╢рдирдХрд╛рд░реА рд╣реЛрдЧрд╛?

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

рд╕рдВрджрд░реНрдн

  • рдорд╛рдЗрдХрд▓ рдПрд▓. рдлрд╝реНрд░реЗрдбрдореИрди, рд░реЙрдмрд░реНрдЯ рд╕реЗрдбрдЧреЗрд╡рд┐рдХ, рдбреЗрдирд┐рдпрд▓ рдбреА. рд╕реНрд▓реЗрдЯрд░, рдФрд░ рд░реЙрдмрд░реНрдЯ рдИ. рдЯрд╛рд░реНрдЬрди (1986), рдж рдкреЗрдпрд░рд┐рдВрдЧ рд╣реАрдк: рдП рдиреНрдпреВ рдлреЙрд░реНрдо рдСрдлрд╝ рд╕реЗрд▓реНрдл- рдПрдбрдЬрд╕реНрдЯрд┐рдВрдЧ рд╣реАрдк , рдПрд▓реНрдЧреЛрд░рд┐рдердо 1:111-129 ред
  • рдбреЗрдирд┐рдпрд▓ рдПрдЪ. рд▓рд╛рд░реНрдХрд┐рди, рд╕рд┐рджреНрдзрд╛рд░реНрде рд╕реЗрди, рдФрд░ рд░реЙрдмрд░реНрдЯ рдИ. рдЯрд╛рд░реНрдЬрди (2014), рдП рдмреИрдХ-рдЯреВ-рдмреЗрд╕рд┐рдХреНрд╕ рдПрдореНрдкрд┐рд░рд┐рдХрд▓ рд╕реНрдЯрдбреА рдСрдлрд╝ рдкреНрд░рд╛рдпреЛрд░рд┐рдЯреА рдХреНрдпреВрдИ ,

рдмреАрдЯреАрдбрдмреНрд▓реНрдпреВ, рдпрд╣ рдкрд╣рд▓реА рдПрдкреАрдЖрдИ рд╕рдореАрдХреНрд╖рд╛ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдХреЗ рд▓рд┐рдП рд╣реИред _open рдкреНрд░рд╢реНрдиреЛрдВ_ рд╡рд╛рд▓реЗ рдЕрдиреБрднрд╛рдЧ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ (рдореБрдЭреЗ рдЖрдкрдХреА рд░рд╛рдп рдЪрд╛рд╣рд┐рдП [рдФрд░ рдпрджрд┐ рд╕рдВрднрд╡ рд╣реЛ рддреЛ рдПрдкреАрдЖрдИ рд╕рдореАрдХреНрд╖рдХреЛрдВ рдХреА])ред рдпрджрд┐ рдкрд╣рд▓реА рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдХрдо рд╕реЗ рдХрдо рдЖрдВрд╢рд┐рдХ рд░реВрдк рд╕реЗ рдЧреБрдЬрд░рддреА рд╣реИ, рддреЛ рд╢реЗрд╖ рдЪрд░реНрдЪрд╛ рдХреЗ рд▓рд┐рдП рдореИрдВ рдПрдХ рдирдпрд╛ рдореБрджреНрджрд╛ рдмрдирд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ (рдЗрд╕реЗ рдмрдВрдж рдХрд░реЗрдВ рдФрд░ рд╕рдВрджрд░реНрдн рджреЗрдВ)ред

рдЬрд╣рд╛рдВ рддрдХ тАЛтАЛтАЛтАЛрдореИрдВ рдХрд╣ рд╕рдХрддрд╛ рд╣реВрдВ, рдПрдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдпрд╛ рдвреЗрд░ рдПрдкреАрдЖрдИ рд╕рдореАрдХреНрд╖рд╛ рдкрд╛рд╕ рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред

@pgolebiowski : рдлрд┐рд░ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдмрдВрдж рдХреНрдпреЛрдВ рди рдХрд░реЗрдВ? рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЗ рдмрд┐рдирд╛, рдпрд╣ рд╡рд░реНрдЧ рдмреЗрдХрд╛рд░ рдХреЗ рдХрд░реАрдм рд╣реИред рдПрдХрдорд╛рддреНрд░ рд╕реНрдерд╛рди рдЬрд┐рд╕рдХрд╛ рдореИрдВ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддрд╛ рдерд╛ рд╡рд╣ рдирд┐рдЬреА рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ рд╣реИред рдЬрд┐рд╕ рдмрд┐рдВрджреБ рдкрд░ рдореИрдВ рдЬрд░реВрд░рдд рдкрдбрд╝рдиреЗ рдкрд░ рдЕрдкрдиреА рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрддрд╛рд░ рдмрдирд╛ рд╕рдХрддрд╛ рд╣реВрдВ (рдпрд╛ рдлрд┐рд░ рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ)ред рдореИрдВ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдореЗрдВ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рд╛рде рдЕрдкрдиреЗ рдХреЛрдб рдореЗрдВ рдПрдХ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдПрдкреАрдЖрдИ рдХрд╛ рдЦреБрд▓рд╛рд╕рд╛ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рдХреНрдпреЛрдВрдХрд┐ рдЬреИрд╕реЗ рд╣реА рдореБрдЭреЗ рдЗрд╕реЗ рдХрд┐рд╕реА рдЕрдиреНрдп рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд▓рд┐рдП рд╕реНрд╡реИрдк рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА, рдпрд╣ рдЯреВрдЯ рдЬрд╛рдПрдЧрд╛ред

@ рдмреЗрдВрдбреЛрдиреЛ
рдареАрдХ рд╣реИ, Microsoft рдХрд╛ рдЕрдВрддрд┐рдо рд╢рдмреНрдж рдпрд╣рд╛рдБ рд╣реИ, рдХреБрдЫ рд▓реЛрдЧ рдереНрд░реЗрдб рдкрд░ рдЯрд┐рдкреНрдкрдгреА рдирд╣реАрдВ рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдФрд░ рд╣рдо рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐:

рдореБрдЭреЗ рдХреБрдЫ рд╣рдж рддрдХ рдпрдХреАрди рд╣реИ рдХрд┐ рдЕрдиреНрдп рдПрдкреАрдЖрдИ рд╕рдореАрдХреНрд╖рдХ/рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЯ рдЗрд╕реЗ рд╕рд╛рдЭрд╛ рдХрд░реЗрдВрдЧреЗ рдХреНрдпреЛрдВрдХрд┐ рдореИрдВрдиреЗ рдХреБрдЫ рд▓реЛрдЧреЛрдВ рдХреЗ рд╕рд╛рде рд░рд╛рдп рдХреА рдЬрд╛рдВрдЪ рдХреА рд╣реИ: рдирд╛рдо рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХреНрдпреВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдФрд░ рд╣рдореЗрдВ рдЖрдИрд╣реЗрдк рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдкреЗрд╢ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдмрд┐рд▓реНрдХреБрд▓ рдПрдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП (рд╕рдВрднрд╡рддрдГ рдХреБрдЫ рдвреЗрд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ)ред

рдЗрд╕реЗ @karelz , рд╕реЙрдлрд╝реНрдЯрд╡реЗрдпрд░ рдЗрдВрдЬреАрдирд┐рдпрд░ рдореИрдиреЗрдЬрд░, рдФрд░ @terrajobst , рдкреНрд░реЛрдЧреНрд░рд╛рдо рдореИрдиреЗрдЬрд░ рдФрд░ рдЗрд╕ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреЗ рдорд╛рд▓рд┐рдХ + рдХреБрдЫ API рд╕рдореАрдХреНрд╖рдХреЛрдВ рджреНрд╡рд╛рд░рд╛ рд╕рд╛рдЭрд╛ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

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

рдлрд┐рд░ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдмрдВрдж рдХреНрдпреЛрдВ рдирд╣реАрдВ рдХрд░ рджреЗрддреЗ? рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЗ рдмрд┐рдирд╛, рдпрд╣ рд╡рд░реНрдЧ рдмреЗрдХрд╛рд░ рдХреЗ рдХрд░реАрдм рд╣реИред

рдореИрдВрдиреЗ рдХрд╛рдлреА рдХреБрдЫ рдХрд┐рдпрд╛ рд╣реИ -- рдЕрдкрдиреЗ рдХрд╛рдо рд╕реЗ рдирдлрд░рдд рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп, рдХреБрдЫ рдХрд░реЛред рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдХрд╛рд░реНрдп рдХрд░реЗрдВред рддреБрдо рдореБрдЭреЗ рдХрд┐рд╕реА рднреА рдЪреАрдЬрд╝ рдХреЗ рд▓рд┐рдП рджреЛрд╖ рджреЗрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреНрдпреЛрдВ рдХрд░рддреЗ рд╣реЛ? рджреВрд╕рд░реЛрдВ рдХреЛ рдЕрдкрдиреА рдмрд╛рдд рдХреЗ рд▓рд┐рдП рд░рд╛рдЬреА рдХрд░рдиреЗ рдореЗрдВ рд╕рдлрд▓ рди рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдЦреБрдж рдХреЛ рджреЛрд╖ рджреЗрдВред

рдФрд░ рдХреГрдкрдпрд╛, рдореБрдЭреЗ рдЗрд╕ рддрд░рд╣ рдХреА рдмрдпрд╛рдирдмрд╛рдЬреА рд╕реЗ рдмрдЪрд╛рдПрдВред рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдмрдЪрдХрд╛рдирд╛ рд╣реИ - рдмреЗрд╣рддрд░ рдХрд░реЛред

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

@pgolebiowski рдмреЗрд╢рдХ рдпрд╣ Microsoft рдХрд╛ рдирд┐рд░реНрдгрдп рд╣реИред рд▓реЗрдХрд┐рди рдПрдХ рдПрдкреАрдЖрдИ рдкреЗрд╢ рдХрд░рдирд╛ рдмреЗрд╣рддрд░ рд╣реИ рдЬрд┐рд╕реЗ рдЖрдк рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдЬреЛ рдЖрдкрдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЛ рдкреВрд░рд╛ рдХрд░рддрд╛ рд╣реИред рдЕрдЧрд░ рдЗрд╕реЗ рдЦрд╛рд░рд┐рдЬ рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдРрд╕рд╛ рд╣реА рд╣реЛред рдореБрдЭреЗ рдкреНрд░рд╕реНрддрд╛рд╡ рд╕реЗ рд╕рдордЭреМрддрд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рджрд┐рдЦрддреАред

рдЕрдЧрд░ рдЖрдкрдиреЗ рдореЗрд░реА рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЛ рдЖрдкрдХреЛ рджреЛрд╖ рджреЗрдиреЗ рдХреЗ рд░реВрдк рдореЗрдВ рд╡реНрдпрд╛рдЦреНрдпрд╛рдпрд┐рдд рдХрд┐рдпрд╛ рддреЛ рдореИрдВ рдХреНрд╖рдорд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред рдпрд╣ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдореЗрд░рд╛ рдЗрд░рд╛рджрд╛ рдирд╣реАрдВ рдерд╛ред

@pgolebiowski рд╣реИрдВрдбрд▓ рдХреЗ рд▓рд┐рдП KeyValuePair<TKey,TValue> рдЙрдкрдпреЛрдЧ рдХреНрдпреЛрдВ рдирд╣реАрдВ рдХрд░рддреЗ?

@ рд╕реИрдореБрдПрд▓рдЗрдВрдЧреНрд▓рд╛рд░реНрдб

рд╣реИрдВрдбрд▓ рдХреЗ рд▓рд┐рдП KeyValuePair<TKey,TValue> рдЙрдкрдпреЛрдЧ рдХреНрдпреЛрдВ рди рдХрд░реЗрдВ?

  • рдЦреИрд░, PriorityQueueHandle рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ _ рдкреЗрдпрд░рд┐рдВрдЧ рд╣реАрдк рдиреЛрдб _ рд╣реИред рдпрд╣ рджреЛ рдЧреБрдгреЛрдВ рдХреЛ рдЙрдЬрд╛рдЧрд░ рдХрд░рддрд╛ рд╣реИ - TKey Key рдФрд░ TValue Value ред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЗрд╕рдХреЗ рдЕрдВрджрд░ рдмрд╣реБрдд рдЕрдзрд┐рдХ рддрд░реНрдХ рд╣реИ, рдЬреЛ рд╕рд┐рд░реНрдл рдЖрдВрддрд░рд┐рдХ рд╣реИред рдХреГрдкрдпрд╛ рдЗрд╕рдХреЗ рдореЗрд░реЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛ рд╕рдВрджрд░реНрдн рд▓реЗрдВред рдЗрд╕рдореЗрдВ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдкреЗрдбрд╝ рдореЗрдВ рдЕрдиреНрдп рдиреЛрдбреНрд╕ рдХреЗ рдкреЙрдЗрдВрдЯрд░реНрд╕ рднреА рд╢рд╛рдорд┐рд▓ рд╣реИрдВ (рдХреЛрд░рдПрдлрдПрдХреНрд╕ рдореЗрдВ рд╕рдм рдХреБрдЫ рдЖрдВрддрд░рд┐рдХ рд╣реЛрдЧрд╛)ред
  • KeyValuePair рдПрдХ рд╕рдВрд░рдЪрдирд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕реЗ рд╣рд░ рдмрд╛рд░ рдХреЙрдкреА рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ + рдЗрд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдирд╣реАрдВ рд▓рд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
  • рд▓реЗрдХрд┐рди рдореБрдЦреНрдп рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ PriorityQueueHandle рдПрдХ рдЬрдЯрд┐рд▓ рд╡рд░реНрдЧ рд╣реИ рдЬреЛ рдХреЗрд╡рд▓ рдЙрд╕реА рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдПрдкреАрдЖрдИ рдХреЛ KeyValuePair рд░реВрдк рдореЗрдВ рдмреЗрдирдХрд╛рдм рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реЛрддрд╛ рд╣реИред

@ рдмреЗрдВрдбреЛрдиреЛ

рд▓реЗрдХрд┐рди рдПрдХ рдПрдкреАрдЖрдИ рдкреЗрд╢ рдХрд░рдирд╛ рдмреЗрд╣рддрд░ рд╣реИ рдЬрд┐рд╕реЗ рдЖрдк рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдЬреЛ рдЖрдкрдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЛ рдкреВрд░рд╛ рдХрд░рддрд╛ рд╣реИред рдЕрдЧрд░ рдЗрд╕реЗ рдЦрд╛рд░рд┐рдЬ рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдРрд╕рд╛ рд╣реА рд╣реЛред рдореБрдЭреЗ рдкреНрд░рд╕реНрддрд╛рд╡ рд╕реЗ рд╕рдордЭреМрддрд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рджрд┐рдЦрддреАред

  • рдпрд╣ рд╕рдЪ рд╣реИ, рдореИрдВ рдЗрд╕реЗ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦреВрдВрдЧрд╛ рдФрд░ рджреЗрдЦреВрдВрдЧрд╛ рдХрд┐ рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИред @karelz , рдкреНрд░рд╕реНрддрд╛рд╡ рдХреЗ рд╕рд╛рде, рдХреНрдпрд╛ рдЖрдк рдкрд┐рдЫрд▓реА рдХреБрдЫ рдкреЛрд╕реНрдЯ рднреА рдкрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (рд╡реЗ рдкреНрд░рд╕реНрддрд╛рд╡ рд╕реЗ рдареАрдХ рдкрд╣рд▓реЗ рд╣реИрдВ), рдЬрд╣рд╛рдВ рд╣рдордиреЗ рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЗ рд▓рд┐рдП рдорддрджрд╛рди рдХрд┐рдпрд╛ рдерд╛? рдПрдкреАрдЖрдИ рд╕рдореАрдХреНрд╖рд╛ рдХреЗ рдкрд╣рд▓реЗ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдХреЗ рдмрд╛рдж, рд╣рдо рдмрд╛рдж рдореЗрдВ рдЗрд╕ рдкрд░ рд╡рд╛рдкрд╕ рдЖ рд╕рдХрддреЗ рд╣реИрдВред
  • рдлрд┐рд░ рднреА, рдХреЛрдИ рдлрд░реНрдХ рдирд╣реАрдВ рдкрдбрд╝рддрд╛ рдХрд┐ рд╣рдо рдХрд┐рд╕ рд╕рдорд╛рдзрд╛рди рдкрд░ рдЬрд╛рддреЗ рд╣реИрдВ, рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдмрд╣реБрдд рд╕рдорд╛рди рд╣реЛрдЧреА рдФрд░ рдЗрд╕рдХреА рд╕рдореАрдХреНрд╖рд╛ рдХрд░рдирд╛ рдорджрджрдЧрд╛рд░ рд╣реЛрдЧрд╛ред рдХреНрдпреЛрдВрдХрд┐ рдпрджрд┐ рд╣реИрдВрдбрд▓ рдХреЗ рд▓рд┐рдП рд╡рд┐рдЪрд╛рд░ рдЕрд╕реНрд╡реАрдХрд╛рд░ рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рд╣рдо рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рддрддреНрд╡реЛрдВ рдХреЛ рдареАрдХ рд╕реЗ рдЕрдкрдбреЗрдЯ / рд╣рдЯрд╛ рдирд╣реАрдВ рд╕рдХрддреЗ рд╣реИрдВ (рдпрд╛ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЕрд▓рдЧ TKey рдФрд░ TValue ), рддреЛ рдпрд╣ рд╡рд░реНрдЧ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдмреЗрдХрд╛рд░ рд╣реЛрдиреЗ рдХреЗ рдХрд░реАрдм рд╣реИ - - рдЬреИрд╕рд╛ рдХрд┐ рдЕрдм рдЬрд╛рд╡рд╛ рдореЗрдВ рд╣реИред
  • рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдпрджрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдирд╣реАрдВ рд╣реИ, рддреЛ рдореЗрд░реА AlgoKit рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдореЗрдВ CoreFX рдХреЗ рд╕рд╛рде рдвреЗрд░ рдХреЗ рд▓рд┐рдП рд╕рд╛рдорд╛рдиреНрдп рдХреЛрд░ рдирд╣реАрдВ рд╣реЛ рдкрд╛рдПрдЧрд╛, рдЬреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдореЗрд░реЗ рд▓рд┐рдП рджреБрдЦрдж рд╣реЛрдЧрд╛ред
  • рдФрд░ рд╣рд╛рдБ, рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЖрд╢реНрдЪрд░реНрдпрдЬрдирдХ рд╣реИ рдХрд┐ рдПрдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдЬреЛрдбрд╝рдирд╛ Microsoft рджреНрд╡рд╛рд░рд╛ рдПрдХ рдиреБрдХрд╕рд╛рди рдХреЗ рд░реВрдк рдореЗрдВ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИред

рдпрд╣ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдореЗрд░рд╛ рдЗрд░рд╛рджрд╛ рдирд╣реАрдВ рдерд╛ред

рдХреНрд╖рдорд╛ рдХрд░реЗрдВ, рддрдм рдореЗрд░реА рдЧрд▓рддреАред

рдбрд┐рдЬрд╛рдЗрди рдкрд░ рдореЗрд░реЗ рдкреНрд░рд╢реНрди (рдЕрд╕реНрд╡реАрдХрд░рдг: рдпреЗ рдкреНрд░рд╢реНрди рдФрд░ рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг, рдХреЛрдИ рдХрдард┐рди рдзрдХреНрдХрд╛ рдирд╣реАрдВ (рдЕрднреА рддрдХ)):

  1. рдХреНрдпрд╛ рд╣рдореЗрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ PriorityQueueHandle ? рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ рд╣рдо рдХрддрд╛рд░ рдореЗрдВ рдЕрджреНрд╡рд┐рддреАрдп рдореВрд▓реНрдпреЛрдВ рдХреА рдЕрдкреЗрдХреНрд╖рд╛ рдХрд░рддреЗ рд╣реИрдВ?

    • рдкреНрд░реЗрд░рдгрд╛: рдпрд╣ рдмрд▓реНрдХрд┐ рд╢рд╛рдорд┐рд▓ рдЕрд╡рдзрд╛рд░рдгрд╛ рд▓рдЧрддрд╛ рд╣реИред рдЕрдЧрд░ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╣реИ, рддреЛ рдореИрдВ рдпрд╣ рд╕рдордЭрдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ рдХрд┐ рд╣рдореЗрдВ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпреЛрдВ рд╣реИ? рдпрд╣ рдХреИрд╕реЗ рдорджрдж рдХрд░ рд░рд╣рд╛ рд╣реИ? рдпрд╛ рдпрд╣ рд╕рд┐рд░реНрдл рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╡рд┐рд╡рд░рдг рдПрдкреАрдЖрдИ рд╕рддрд╣ рдореЗрдВ рд▓реАрдХ рд╣реЛ рд░рд╣рд╛ рд╣реИ? рдХреНрдпрд╛ рдпрд╣ рд╣рдореЗрдВ рдПрдкреАрдЖрдИ рдореЗрдВ рдЬрдЯрд┐рд▓рддрд╛ рдХреЗ рд▓рд┐рдП рднреБрдЧрддрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрддрдирд╛ рдЕрдзрд┐рдХ рднреБрдЧрддрд╛рди рдХрд░рдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реИ?

  2. рдХреНрдпрд╛ рд╣рдореЗрдВ Merge ? рдХреНрдпрд╛ рдЕрдиреНрдп рд╕рдВрдЧреНрд░рд╣реЛрдВ рдореЗрдВ рдпрд╣ рд╣реИ? рд╣рдореЗрдВ рдПрдкреАрдЖрдИ рдирд╣реАрдВ рдЬреЛрдбрд╝рдирд╛ рдЪрд╛рд╣рд┐рдП, рд╕рд┐рд░реНрдл рдЗрд╕рд▓рд┐рдП рдХрд┐ рдЙрдиреНрд╣реЗрдВ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИ, рдПрдкреАрдЖрдИ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рд╕рд╛рдорд╛рдиреНрдп-рдИрд╢ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рд╣реЛрдиреЗ рдЪрд╛рд╣рд┐рдПред

    • рд╢рд╛рдпрдж IEnumerable<KeyValuePair<TKey, TValue>> рд╕реЗ рдХреБрдЫ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдЬреЛрдбрд╝рдирд╛ рдкрд░реНрдпрд╛рдкреНрдд рд╣реЛрдЧрд╛? + рд▓рд┐рдВрдХ рдкрд░ рднрд░реЛрд╕рд╛ рдХрд░реЗрдВ

  3. рдХреНрдпрд╛ рд╣рдореЗрдВ comparer рдЕрдзрд┐рднрд╛рд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ? рдХреНрдпрд╛ рд╣рдо рд╣рдореЗрд╢рд╛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдкрд░ рд╡рд╛рдкрд╕ рдЖ рд╕рдХрддреЗ рд╣реИрдВ? (рдЕрд╕реНрд╡реАрдХрд░рдг: рдореБрдЭреЗ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдЬреНрдЮрд╛рди/рд╡рд┐рд╢реЗрд╖рдЬреНрдЮрддрд╛ рдпрд╛рдж рдЖ рд░рд╣реА рд╣реИ, рдЗрд╕рд▓рд┐рдП рдмрд╕ рдкреВрдЫ рд░рд╣рд╛ рд╣реВрдВ)
  4. рдХреНрдпрд╛ рд╣рдореЗрдВ keySelector рдУрд╡рд░рд▓реЛрдб рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ? рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдореЗрдВ рдпрд╣ рддрдп рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдХреНрдпрд╛ рд╣рдо рдореВрд▓реНрдп рдХреЗ рд╣рд┐рд╕реНрд╕реЗ рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдпрд╛ рдПрдХ рдЕрд▓рдЧ рдЪреАрдЬред рдЕрд▓рдЧ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдореБрдЭреЗ рдХреБрдЫ рдЕрдзрд┐рдХ рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд▓рдЧрддреА рд╣реИ, рд▓реЗрдХрд┐рди рдореЗрд░реЗ рдкрд╛рд╕ рдордЬрдмреВрдд рд░рд╛рдп рдирд╣реАрдВ рд╣реИред рдХреНрдпрд╛ рд╣рдо рдкреЗрд╢реЗрд╡рд░реЛрдВ рдмрдирд╛рдо рд╡рд┐рдкрдХреНрд╖ рдХреЛ рдЬрд╛рдирддреЗ рд╣реИрдВ?

рдЕрд▓рдЧ/рд╕рдорд╛рдирд╛рдВрддрд░ рдирд┐рд░реНрдгрдп рдмрд┐рдВрджреБ:

  1. рдХрдХреНрд╖рд╛ рдХрд╛ рдирд╛рдо PriorityQueue рдмрдирд╛рдо Heap
  2. IHeap рдФрд░ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдЕрдзрд┐рднрд╛рд░ рдХрд╛ рдкрд░рд┐рдЪрдп рджреЗрдВ?

IHeap рдФрд░ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдЕрдзрд┐рднрд╛рд░ рдХрд╛ рдкрд░рд┐рдЪрдп рджреЗрдВ?

рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореЗрд░реЗ рд▓рд┐рдП рдореЗрд░реЗ 2 рд╕реЗрдВрдЯ рдореЗрдВ рдлреЗрдВрдХрдиреЗ рдХреЗ рд▓рд┐рдП рдЪреАрдЬреЗрдВ рдХрд╛рдлреА рд╡реНрдпрд╡рд╕реНрдерд┐рдд рд╣реЛ рдЧрдИ рд╣реИрдВ ... рдореБрдЭреЗ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдкрд╕рдВрдж рд╣реИред рдпрд╣ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╡рд┐рд╡рд░рдг рдХреЛ рдПрдкреАрдЖрдИ (рдФрд░ рдЙрд╕ рдПрдкреАрдЖрдИ рджреНрд╡рд╛рд░рд╛ рд╡рд░реНрдгрд┐рдд рдореБрдЦреНрдп рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛) рд╕реЗ рджреВрд░ рдЗрд╕ рддрд░рд╣ рд╕реЗ рд╕рд╛рд░рдЧрд░реНрднрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдореЗрд░реА рд░рд╛рдп рдореЗрдВ рд╕рдВрд░рдЪрдирд╛ рдХреЛ рд╕рд░рд▓ рдмрдирд╛рддрд╛ рд╣реИ рдФрд░ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдХреЛ рд╕рдХреНрд╖рдо рдмрдирд╛рддрд╛ рд╣реИред

рдЬрд┐рд╕ рдкрд░ рдореЗрд░реА рд░рд╛рдп рдЗрддрдиреА рдордЬрдмреВрдд рдирд╣реАрдВ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рд╣рдо рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рдЙрд╕реА рд╕рдордп PQueue/Heap/ILikeThisItemMoreThanThisItemList рдХреЗ рд░реВрдк рдореЗрдВ рдХрд░рддреЗ рд╣реИрдВ рдпрд╛ рдпрджрд┐ рд╣рдо рдЗрд╕реЗ рдмрд╛рдж рдореЗрдВ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВред рддрд░реНрдХ рд╣реИ рдХрд┐ рдПрдкреАрдЖрдИ "рдкреНрд░рд╡рд╛рд╣ рдореЗрдВ" рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдЗрд╕ рддрд░рд╣ рд╣рдореЗрдВ рдЗрд╕реЗ рдкрд╣рд▓реЗ рдХрдХреНрд╖рд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдЬрд╛рд░реА рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдЬрдм рддрдХ рдХрд┐ рд╣рдореЗрдВ рдлреАрдбрдмреИрдХ рди рдорд┐рд▓реЗ, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдПрдХ рдорд╛рдиреНрдп рд╣реИ рдЬрд┐рд╕рд╕реЗ рдореИрдВ рдЕрд╕рд╣рдордд рдирд╣реАрдВ рд╣реВрдВред рдкреНрд░рд╢реНрди рддрдм рдмрди рдЬрд╛рддрд╛ рд╣реИ рдЬрдм рдЗрд╕реЗ рдПрдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд "рд╕реНрдерд┐рд░" рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИред рдереНрд░реЗрдб рдореЗрдВ рдКрдкрд░ рдХрд╛ рд░рд╛рд╕реНрддрд╛ IList рдФрд░ IDictionary рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдЙрдирдХреЗ рд╡рд┐рд╣рд┐рдд рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди 'рдПрдкреАрдЖрдИ рд╕реЗ рдкрд┐рдЫрдбрд╝рдиреЗ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЬрд┐рд╕реЗ рд╣рдордиреЗ рдХреБрдЫ рд╕рдордп рдкрд╣рд▓реЗ рдЬреЛрдбрд╝рд╛ рдерд╛, рддреЛ рдХрд┐рд╕ рд╕рдордп рдХреА рдЕрд╡рдзрд┐ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░реНрдп рдЖрд░рд╛рдо рдЕрд╡рдзрд┐ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ?

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

рдФрд░ рд╣рд╛рдБ, рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЖрд╢реНрдЪрд░реНрдпрдЬрдирдХ рд╣реИ рдХрд┐ рдПрдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдЬреЛрдбрд╝рдирд╛ Microsoft рджреНрд╡рд╛рд░рд╛ рдПрдХ рдиреБрдХрд╕рд╛рди рдХреЗ рд░реВрдк рдореЗрдВ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИред

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

рдЗрдирдкреБрдЯ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, @karelz рдФрд░ @ianhays!

рдбреБрдкреНрд▓реАрдХреЗрдЯ рдХреА рдЕрдиреБрдорддрд┐

рдХреНрдпрд╛ рд╣рдореЗрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ PriorityQueueHandle ? рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ рд╣рдо рдХрддрд╛рд░ рдореЗрдВ рдЕрджреНрд╡рд┐рддреАрдп рдореВрд▓реНрдпреЛрдВ рдХреА рдЕрдкреЗрдХреНрд╖рд╛ рдХрд░рддреЗ рд╣реИрдВ?

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

рдирд╣реАрдВ, рд╣рдореЗрдВ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдКрдкрд░ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрддрд╛рд░ рдПрдкреАрдЖрдИ рдХрд╛рдлреА рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рдФрд░ рдмрд╣реБрдд рд▓рдЪреАрд▓реА рд╣реИред рдпрд╣ рдЗрд╕ рдзрд╛рд░рдгрд╛ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИ рдХрд┐ рддрддреНрд╡реЛрдВ рдФрд░ рдкреНрд░рд╛рдердорд┐рдХрддрд╛рдУрдВ рдХреЛ рджреЛрд╣рд░рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ ред рдЙрд╕ рдзрд╛рд░рдгрд╛ рдХреЗ рдХрд╛рд░рдг, рд╕рд╣реА рдиреЛрдб рдХреЛ рд╣рдЯрд╛рдиреЗ рдпрд╛ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╣реИрдВрдбрд▓ рд╣реЛрдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЕрдЧрд░ рд╣рдо рдПрдХ рдкреНрд░рддрд┐рдмрдВрдз рд▓рдЧрд╛рддреЗ рд╣реИрдВ рдХрд┐ рддрддреНрд╡реЛрдВ рдХреЛ рдЕрджреНрд╡рд┐рддреАрдп рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рддреЛ рд╣рдо рдПрдХ рд╕рд░рд▓ рдПрдкреАрдЖрдИ рдХреЗ рд╕рд╛рде рдФрд░ рдПрдХ рдЖрдВрддрд░рд┐рдХ рд╡рд░реНрдЧ ( PriorityQueueHandle ) рдХреЛ рдЙрдЬрд╛рдЧрд░ рдХрд┐рдП рдмрд┐рдирд╛ рдКрдкрд░ рдХреЗ рд╕рдорд╛рди рдкрд░рд┐рдгрд╛рдо рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЖрджрд░реНрд╢ рдирд╣реАрдВ рд╣реИред

рдЖрдЗрдП рдорд╛рди рд▓реЗрдВ рдХрд┐ рд╣рдо рдХреЗрд╡рд▓ рдЕрджреНрд╡рд┐рддреАрдп рддрддреНрд╡реЛрдВ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВред рд╣рдо рдЕрднреА рднреА рдкрд┐рдЫрд▓реЗ рд╕рднреА рдкрд░рд┐рджреГрд╢реНрдпреЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╖реНрдЯрддрдо рдкреНрд░рджрд░реНрд╢рди рд░рдЦ рд╕рдХрддреЗ рд╣реИрдВред рд╕рд░рд▓ рдПрдкреАрдЖрдИ:

public class PriorityQueue<TElement, TPriority>
    : IEnumerable,
    IEnumerable<(TElement element, TPriority priority)>,
    IReadOnlyCollection<(TElement element, TPriority priority)>
    // ICollection not included on purpose
{
    public PriorityQueue();
    public PriorityQueue(IComparer<TPriority> comparer);
    public PriorityQueue(Func<TElement, TPriority> prioritySelector);
    public PriorityQueue(Func<TElement, TPriority> prioritySelector, IComparer<TPriority> comparer);

    IComparer<TPriority> Comparer { get; }
    Func<TElement, TPriority> PrioritySelector { get; }
    public int Count { get; }

    public void Clear();
    public bool Contains(TElement element); // O(1)

    public (TElement element, TPriority priority) Peek(); // O(1)
    public (TElement element, TPriority priority) Dequeue(); // O(log n)

    public void Enqueue(TElement element, TPriority priority); // O(log n)
    public void Enqueue(TElement element); // O(log n)

    public void Update(TElement element); // O(log n)
    public void Update(TElement element, TPriority priority); // O(log n)

    public void Remove(TElement element); // O(log n)

    public IEnumerator<(TElement element, TPriority priority)> GetEnumerator();
    IEnumerator IEnumerable.GetEnumerator();
}

рд╢реАрдШреНрд░ рд╣реА, рдПрдХ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд Dictionary<TElement, InternalNode> ред рдпрд╣ рдЬрд╛рдВрдЪрдирд╛ рдХрд┐ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрддрд╛рд░ рдореЗрдВ рдХреЛрдИ рддрддреНрд╡ рд╣реИ рдпрд╛ рдирд╣реАрдВ, рдкрд┐рдЫрд▓реЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдФрд░ рднреА рддреЗрдЬрд╝реА рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рддрддреНрд╡реЛрдВ рдХреЛ рдЕрджреНрдпрддрди рдХрд░рдирд╛ рдФрд░ рд╣рдЯрд╛рдирд╛ рдХрд╛рдлреА рд╕рд░рд▓ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рд╣рдореЗрд╢рд╛ рдХрддрд╛рд░ рдореЗрдВ рдПрдХ рдкреНрд░рддреНрдпрдХреНрд╖ рддрддреНрд╡ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рд╕рдВрднрд╡рддрдГ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдирд╛ рдкрд░реЗрд╢рд╛рдиреА рдХреЗ рд▓рд╛рдпрдХ рдирд╣реАрдВ рд╣реИ рдФрд░ рдЙрдкрд░реЛрдХреНрдд рдкрд░реНрдпрд╛рдкреНрдд рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореИрдВ рдЗрд╕реЗ рдкрд╕рдВрдж рдХрд┐рдпрд╛ред рддреБрдо рдХреНрдпрд╛ рд╕реЛрдЪрддреЗ рд╣реЛ?

рдорд░реНрдЬ

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

рдЗрд╕ рдмрд╛рдд рд╕реЗ рд╕рд╣рдорддред рд╣рдореЗрдВ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рд╣рдо рд╣рдореЗрд╢рд╛ рдПрдкреАрдЖрдИ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ рд▓реЗрдХрд┐рди рдЗрд╕реЗ рд╣рдЯрд╛ рдирд╣реАрдВ рд╕рдХрддреЗред рдореИрдВ рдЗрд╕ рд╡рд┐рдзрд┐ рдХреЛ рд╣рдЯрд╛рдиреЗ рдФрд░ (рд╕рдВрднрд╛рд╡рд┐рдд рд░реВрдк рд╕реЗ) рдЗрд╕реЗ рдмрд╛рдж рдореЗрдВ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд╕рд╛рде рдареАрдХ рд╣реВрдВ (рдпрджрд┐ рдХреЛрдИ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ)ред

рддреБрд▓рдирд╛рдХрд░реНрддрд╛

рдХреНрдпрд╛ рд╣рдореЗрдВ рддреБрд▓рдирд┐рддреНрд░ рдЕрдзрд┐рднрд╛рд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ? рдХреНрдпрд╛ рд╣рдо рд╣рдореЗрд╢рд╛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдкрд░ рд╡рд╛рдкрд╕ рдЖ рд╕рдХрддреЗ рд╣реИрдВ? (рдЕрд╕реНрд╡реАрдХрд░рдг: рдореБрдЭреЗ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдЬреНрдЮрд╛рди/рд╡рд┐рд╢реЗрд╖рдЬреНрдЮрддрд╛ рдпрд╛рдж рдЖ рд░рд╣реА рд╣реИ, рдЗрд╕рд▓рд┐рдП рдмрд╕ рдкреВрдЫ рд░рд╣рд╛ рд╣реВрдВ)

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рджреЛ рдХрд╛рд░рдгреЛрдВ рд╕реЗ рдмрд╣реБрдд рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ:

  • рдПрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЕрдкрдиреЗ рддрддреНрд╡реЛрдВ рдХреЛ рдЖрд░реЛрд╣реА рдХреНрд░рдо рдпрд╛ рдЕрд╡рд░реЛрд╣реА рдХреНрд░рдо рдореЗрдВ рдХреНрд░рдордмрджреНрдз рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИред рд╕рд░реНрд╡реЛрдЪреНрдЪ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рд╣рдореЗрдВ рдпрд╣ рдирд╣реАрдВ рдмрддрд╛рддреА рдХрд┐ рдСрд░реНрдбрд░ рдХреИрд╕реЗ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред
  • рдпрджрд┐ рд╣рдо рдПрдХ рддреБрд▓рдирд╛рдХрд░реНрддрд╛ рдХреЛ рдЫреЛрдбрд╝ рджреЗрддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рд╣рдореЗрд╢рд╛ рд╣рдореЗрдВ рдПрдХ рд╡рд░реНрдЧ рд╡рд┐рддрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ IComparable ред

рд╕рд╛рде рд╣реА, рдпрд╣ рдореМрдЬреВрджрд╛ рдПрдкреАрдЖрдИ рдХреЗ рдЕрдиреБрд░реВрдк рд╣реИред SortedDictionary рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВред

рдЪрдпрдирдХрд░реНрддрд╛

рдХреНрдпрд╛ рд╣рдореЗрдВ keySelector рдЕрдзрд┐рднрд╛рд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ? рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдореЗрдВ рдпрд╣ рддрдп рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдХреНрдпрд╛ рд╣рдо рдореВрд▓реНрдп рдХреЗ рд╣рд┐рд╕реНрд╕реЗ рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдпрд╛ рдПрдХ рдЕрд▓рдЧ рдЪреАрдЬред рдЕрд▓рдЧ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдореБрдЭреЗ рдХреБрдЫ рдЕрдзрд┐рдХ рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд▓рдЧрддреА рд╣реИ, рд▓реЗрдХрд┐рди рдореЗрд░реЗ рдкрд╛рд╕ рдордЬрдмреВрдд рд░рд╛рдп рдирд╣реАрдВ рд╣реИред рдХреНрдпрд╛ рд╣рдо рдкреЗрд╢реЗрд╡рд░реЛрдВ рдмрдирд╛рдо рд╡рд┐рдкрдХреНрд╖ рдХреЛ рдЬрд╛рдирддреЗ рд╣реИрдВ?

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

рдЪрдпрдирдХрд░реНрддрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрднреА...

рдкреЗрд╢реЗрд╡рд░реЛрдВ

рдпрд╣ рд╡рд╣реА рд╣реИ рдЬреЛ рдЗрд╕ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрддрд╛рд░ рдХреЛ рд▓рдЪреАрд▓рд╛ рдмрдирд╛рддрд╛ рд╣реИред рдпрд╣ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдпрд╣ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ:

  • рддрддреНрд╡реЛрдВ рдФрд░ рдЙрдирдХреА рдкреНрд░рд╛рдердорд┐рдХрддрд╛рдУрдВ рдХреЛ рдЕрд▓рдЧ рддрддреНрд╡реЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ
  • рддрддреНрд╡ (рдЬрдЯрд┐рд▓ рд╡рд░реНрдЧ) рдЬрд┐рдирдХреЗ рдЕрдВрджрд░ рдХрд╣реАрдВ рдкреНрд░рд╛рдердорд┐рдХрддрд╛рдПрдВ рд╣реИрдВ
  • рдПрдХ рдмрд╛рд╣рд░реА рддрд░реНрдХ рдЬреЛ рдХрд┐рд╕реА рджрд┐рдП рдЧрдП рддрддреНрд╡ рдХреЗ рд▓рд┐рдП рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ
  • рддрддреНрд╡ рдЬреЛ IComparable

рдпрд╣ рдореЗрд░реЗ рджреНрд╡рд╛рд░рд╛ рд╕реЛрдЪреЗ рдЬрд╛ рд╕рдХрдиреЗ рд╡рд╛рд▓реЗ рд╣рд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреА рдмрд╣реБрдд рдЕрдзрд┐рдХ рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдореБрдЭреЗ рдпрд╣ рдЙрдкрдпреЛрдЧреА рд▓рдЧрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗрд╡рд▓ "рдкреНрд▓рдЧ рдПрди рдкреНрд▓реЗ" рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рдмрд▓реНрдХрд┐ рд╕рд╣рдЬ рдЬреНрдЮрд╛рди рдпреБрдХреНрдд рднреА рд╣реИред

рджреЛрд╖

  • рд╕реАрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдФрд░ рднреА рдХреБрдЫ рд╣реИред
  • рдЕрдзрд┐рдХ рдПрдкреАрдЖрдИред рджреЛ рдЕрддрд┐рд░рд┐рдХреНрдд рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░, рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд Enqueue рдФрд░ Update рд╡рд┐рдзрд┐ред
  • рдпрджрд┐ рд╣рдо рддрддреНрд╡ рдФрд░ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХреЛ рдЕрд▓рдЧ рдпрд╛ рд╢рд╛рдорд┐рд▓ рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓реЗрддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рдЗрд╕ рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ рдХреЛрдб рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ (рдЬрд┐рдирдХреЗ рдкрд╛рд╕ рдЙрдирдХрд╛ рдбреЗрдЯрд╛ рдПрдХ рдЕрд▓рдЧ рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рд╣реИ) рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВред

рдЕрд▓рдЧ/рд╕рдорд╛рдирд╛рдВрддрд░ рдирд┐рд░реНрдгрдп рдмрд┐рдВрджреБ

рд╡рд░реНрдЧ рдХрд╛ рдирд╛рдо PriorityQueue рдмрдирд╛рдо Heap

IHeap рдФрд░ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдУрд╡рд░рд▓реЛрдб рдХрд╛ рдкрд░рд┐рдЪрдп рджреЗрдВред

  • рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ PriorityQueue рдХреЛ Heap рдмрдЬрд╛рдп CoreFX рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред
  • IHeap рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ - рдХреНрдпреЛрдВрдХрд┐ рдПрдХ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрддрд╛рд░ рдХреЛ рдвреЗрд░ рд╕реЗ рдЕрд▓рдЧ рдХреБрдЫ рдХреЗ рд╕рд╛рде рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд╢рд╛рдпрдж рд╣рдо рдЗрд╕реЗ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдЙрдЬрд╛рдЧрд░ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣реЗрдВрдЧреЗред рд╣рд╛рд▓рд╛рдВрдХрд┐, рд╣рдореЗрдВ IPriorityQueue рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИред

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

рдкреВрд░реНрдгрддрдпрд╛ рд╕рд╣рдордд!

рддреБрд▓рдиреАрдп рддрддреНрд╡

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

рдкреЗрд╢реЗрд╡рд░реЛрдВ

  • IComparer рдХреА рдХреЛрдИ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред
  • рдЪрдпрдирдХрд░реНрддрд╛ рдХреА рдХреЛрдИ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред
  • рдПрдХ Enqueue рдФрд░ Update рд╡рд┐рдзрд┐ред
  • рджреЛ рдХреЗ рдмрдЬрд╛рдп рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдкреНрд░рдХрд╛рд░ред

рджреЛрд╖

  • рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд░реВрдк рдореЗрдВ рддрддреНрд╡ рдФрд░ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддреА рд╣реИред рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдПрдХ рдирдпрд╛ рд░реИрдкрд░-рд╡рд░реНрдЧ рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдпрджрд┐ рдЙрдирдХреЗ рдкрд╛рд╕ рдЙрд╕ рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рд╣реИред
  • рдЗрд╕ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрддрд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рд╣рдореЗрд╢рд╛ IComparable рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред
  • рдпрджрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рддрддреНрд╡ рдФрд░ рдкреНрд░рд╛рдердорд┐рдХрддрд╛рдПрдВ рдЕрд▓рдЧ рд╣реИрдВ, рддреЛ рд╣рдо рдмреЗрд╣рддрд░ рдкреНрд░рджрд░реНрд╢рди рдФрд░ рдореЗрдореЛрд░реА рдЙрдкрдпреЛрдЧ рдХреЗ рд╕рд╛рде рдЗрд╕реЗ рдЖрд╕рд╛рди рддрд░реАрдХреЗ рд╕реЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд░ рд╕рдХрддреЗ рдереЗ - рдЖрдВрддрд░рд┐рдХ рд╢рдмреНрджрдХреЛрд╢ <TElement, InternalNode> рдФрд░ InternalNode рдореЗрдВ TPriority ред
public class PriorityQueue<T> : IEnumerable, IEnumerable<T>, IReadOnlyCollection<T>
    where T : IComparable<T>
    // ICollection not included on purpose
{
    public PriorityQueue();
    // some other constructors like building it from a collection, or initial capacity if we have an array beneath

    public int Count { get; }

    public void Clear();
    public bool Contains(T element);

    public T Peek();
    public T Dequeue();

    public void Enqueue(T element);
    public void Update(T element);
    public void Remove(T element);

    public IEnumerator<T> GetEnumerator();
    IEnumerator IEnumerable.GetEnumerator();
}

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

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

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

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

рдареАрдХ рд╣реИ, рдореИрдВ рддреБрд▓рдирд╛рдХрд░реНрддрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЖрд╢реНрд╡рд╕реНрдд рд╣реВрдВ, рдпрд╣ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ рдФрд░ рдпрд╣ рд╕реБрд╕рдВрдЧрдд рд╣реИред
рдореИрдВ рдЕрднреА рднреА рдЪрдпрдирдХрд░реНрддрд╛ рдкрд░ рдлрдЯрд╛ рд╣реБрдЖ рд╣реВрдВ - рдЖрдИрдПрдордУ рд╣рдореЗрдВ рдЗрд╕рдХреЗ рдмрд┐рдирд╛ рдЬрд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рдиреА рдЪрд╛рд╣рд┐рдП - рдЖрдЗрдП рдЗрд╕реЗ 2 рдкреНрд░рдХрд╛рд░реЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░реЗрдВред

```рд╕реА#
рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╡рд░реНрдЧ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрддрд╛рд░
: рдЖрдИрдиреЗрдорд░реЗрдмрд▓,
IEnumerable<(TElement рддрддреНрд╡, TP рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдкреНрд░рд╛рдердорд┐рдХрддрд╛)>,
IReadOnlyCollection<(TElement рддрддреНрд╡, TP рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдкреНрд░рд╛рдердорд┐рдХрддрд╛)>
// рдЖрдИрд╕реАрдУрд▓реЗрдХреНрд╢рди рдЙрджреНрджреЗрд╢реНрдп рдкрд░ рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рд╣реИ
{
рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрддрд╛рд░ ();
рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрддрд╛рд░ (IComparer .)рддреБрд▓рдирд╛рдХрд░реНрддрд╛);

public IComparer<TPriority> Comparer { get; }
public int Count { get; }

public void Clear();
public bool Contains(TElement element); // O(1)

public (TElement element, TPriority priority) Peek(); // O(1)
public (TElement element, TPriority priority) Dequeue(); // O(log n)

public void Enqueue(TElement element, TPriority priority); // O(log n)
public void Update(TElement element, TPriority priority); // O(log n)

public void Remove(TElement element); // O(log n)

public IEnumerator<(TElement element, TPriority priority)> GetEnumerator();
IEnumerator IEnumerable.GetEnumerator();

//
// рдЪрдпрдирдХрд░реНрддрд╛ рднрд╛рдЧ
//
рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрддрд╛рд░ (Func .)рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдЪрдпрдирдХрд░реНрддрд╛);
рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрддрд╛рд░ (Func .)рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдЪрдпрдирдХрд░реНрддрд╛, рдЖрдИрд╕реАрдУрдПрдордкреЗрдпрд░рддреБрд▓рдирд╛рдХрд░реНрддрд╛);

public Func<TElement, TPriority> PrioritySelector { get; }

public void Enqueue(TElement element); // O(log n)
public void Update(TElement element); // O(log n)

}
````

рдкреНрд░рд╢реНрди рдЦреЛрд▓реЗрдВ:

  1. рд╡рд░реНрдЧ рдХрд╛ рдирд╛рдо PriorityQueue рдмрдирд╛рдо Heap
  2. IHeap рдФрд░ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдЕрдзрд┐рднрд╛рд░ рдХрд╛ рдкрд░рд┐рдЪрдп рджреЗрдВ? (рдХреНрдпрд╛ рд╣рдореЗрдВ рдмрд╛рдж рдореЗрдВ рдЗрдВрддрдЬрд╛рд░ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП?)
  3. рдкрд░рд┐рдЪрдп IPriorityQueue ? (рдХреНрдпрд╛ рд╣рдореЗрдВ рдмрд╛рдж рдореЗрдВ рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рдиреА рдЪрд╛рд╣рд┐рдП - IDictionary рдЙрджрд╛рд╣рд░рдг)
  4. рдЪрдпрдирдХрд░реНрддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ (рдореВрд▓реНрдп рдХреЗ рдЕрдВрджрд░ рд╕рдВрдЧреНрд░рд╣реАрдд рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрд╛) рдпрд╛ рдирд╣реАрдВ (5 рдПрдкреАрдЖрдИ рдЕрдВрддрд░)
  5. рдЯреБрдкрд▓реНрд╕ рдХрд╛ рдкреНрд░рдпреЛрдЧ рдХрд░реЗрдВ (TElement element, TPriority priority) рдмрдирд╛рдо KeyValuePair<TPriority, TElement>

    • рдХреНрдпрд╛ Peek рдФрд░ Dequeue рдмрдЬрд╛рдп рдЯрдкрд▓ рдХреЗ рдмрдЬрд╛рдп out рддрд░реНрдХ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП?

рдореИрдВ рдЬрд▓реНрджреА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЗ рд▓рд┐рдП рдХрд▓ рдЗрд╕реЗ рдПрдкреАрдЖрдИ рд╕рдореАрдХреНрд╖рд╛ рд╕рдореВрд╣ рджреНрд╡рд╛рд░рд╛ рдЪрд▓рд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реВрдВрдЧрд╛ред

рдлрд┐рдХреНрд╕реНрдб Peek рдФрд░ Dequeue tuple рдлрд╝реАрд▓реНрдб рдирд╛рдо priority (рдзрдиреНрдпрд╡рд╛рдж @pgolebiowski рдЗрд╕реЗ рдЗрдВрдЧрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП)ред
рд╢реАрд░реНрд╖ рдкреЛрд╕реНрдЯ рдКрдкрд░ рдирд╡реАрдирддрдо рдкреНрд░рд╕реНрддрд╛рд╡ рдХреЗ рд╕рд╛рде рдЕрджреНрдпрддрди рдХрд┐рдпрд╛ рдЧрдпрд╛ред

рдореИрдВ рджреВрд╕рд░реА @safern рдХреА рдЯрд┐рдкреНрдкрдгреА - рдЗрд╕реЗ рдЖрдЧреЗ рдмрдврд╝рд╛рдиреЗ рдХреЗ рд▓рд┐рдП @pgolebiowski рдХреЛ рдмрд╣реБрдд-рдмрд╣реБрдд рдзрдиреНрдпрд╡рд╛рдж!

рдкреНрд░рд╢реНрди рдЦреЛрд▓реЗрдВ:

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдорд╛рд░реЗ рдпрд╣рд╛рдВ рдПрдХ рдФрд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ:

  1. рдЕрдкрдиреЗ рдЖрдк рдХреЛ рдХреЗрд╡рд▓ рдЕрджреНрд╡рд┐рддреАрдп рддрддреНрд╡реЛрдВ рддрдХ рд╕реАрдорд┐рдд рд░рдЦреЗрдВ (рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдХреА рдЕрдиреБрдорддрд┐ рди рджреЗрдВ)ред

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

рдХреНрдпрд╛ рд╣рдореЗрдВ bool рд╕реЗ Remove рд╡рд╛рдкрд╕ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП? рдФрд░ out priority рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рднреА рдкреНрд░рд╛рдердорд┐рдХрддрд╛? (рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛтАЛтАЛрд╣реИ рдХрд┐ рд╣рдордиреЗ рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдЕрдиреНрдп рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛рдУрдВ рдореЗрдВ рд╕рдорд╛рди рдЕрдзрд┐рднрд╛рд░ рдЬреЛрдбрд╝реЗ рд╣реИрдВ)

Contains - рдореБрдЭреЗ рдпрдХреАрди рд╣реИ рдХрд┐ рдХреЛрдИ рдЗрд╕рдореЗрдВ рд╕реЗ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдЪрд╛рд╣рддрд╛ рд╣реИред рд╣рдо out priority рд╕рд╛рде рдПрдХ рдЕрдзрд┐рднрд╛рд░ рдЬреЛрдбрд╝рдирд╛ рдЪрд╛рд╣ рд╕рдХрддреЗ рд╣реИрдВред

рдореЗрд░реА рд░рд╛рдп рдмрдиреА рд╣реБрдИ рд╣реИ (рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореИрдВрдиреЗ рдЕрднреА рддрдХ рдЗрд╕реЗ рдЖрд╡рд╛рдЬ рдирд╣реАрдВ рджреА рд╣реИ) рдХрд┐ рд╣реАрдк рдПрдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛ рд╕рдВрдХреЗрдд рджреЗрдЧрд╛, рдФрд░ рдЗрд╕ PriorityQueue рдХреЙрд▓ рдХрд░рдиреЗ рдХрд╛ рд╡рд┐рдзрд┐рд╡рдд рд╕рдорд░реНрдерди рдХрд░реЗрдЧрд╛ред (рдореИрдВ рдПрдХ рд╕реНрд▓рд┐рдорд░ Heap рд╡рд░реНрдЧ рдХреЗ рдкреНрд░рд╕реНрддрд╛рд╡ рдХрд╛ рднреА рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реВрдВ рдЬреЛ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рддрддреНрд╡реЛрдВ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдФрд░ рдЕрджреНрдпрддрди рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИ, рдЖрджрд┐ред (рдореВрд▓ рдкреНрд░рд╕реНрддрд╛рд╡ рдХреЗ рдЕрдиреБрд░реВрдк рдЕрдзрд┐рдХ) рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдЗрд╕рдХреА рдЙрдореНрдореАрдж рдирд╣реАрдВ рд╣реИ рд╣реЛрдирд╛)ред

KeyValuePair<TPriority, TElement> рд╕рдмрд╕реЗ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдХреНрдпреЛрдВрдХрд┐ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдкреНрд░рд╛рдердорд┐рдХрддрд╛рдУрдВ рдХреА рдЕрдкреЗрдХреНрд╖рд╛ рдХреА рдЬрд╛рддреА рд╣реИ, рдФрд░ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ KeyValuePair<TElement, TPriority> рднреА рднреНрд░рдорд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВ KeyValuePair рдХрд╛ рдЙрдкрдпреЛрдЧ рдмрд┐рд▓реНрдХреБрд▓ рднреА рдирд╣реАрдВ рдХрд░рдиреЗ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░реВрдВрдЧрд╛, рдФрд░ рдпрд╛ рддреЛ рдкреНрд░рд╛рдердорд┐рдХрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рд╕рд╛рджреЗ рдЯреБрдкрд▓реНрд╕, рдпрд╛ рдЖрдЙрдЯ рдкреИрд░рд╛рдореАрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ (рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рдореБрдЭреЗ рдкреИрд░рд╛рдо рдкрд╕рдВрдж рд╣реИрдВ, рд▓реЗрдХрд┐рди рдореИрдВ рдкрд░реЗрд╢рд╛рди рдирд╣реАрдВ рд╣реВрдВ)ред

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

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

рдЪрдпрдирдХрд░реНрддрд╛ рд╕реНрд╡рдпрдВ рдкрд░рд┐рд╡рд░реНрддрди рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЗ рд▓рд┐рдП рдЙрддреНрддрд░рджрд╛рдпреА рд╣реИ, рдЬреЛ рдПрдХ рдФрд░ рддрд░реАрдХрд╛ рд╣реИ рдЬрд┐рд╕рд╕реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдмрд┐рдирд╛ рд╕реЛрдЪреЗ рд╕рдордЭреЗ рд╕рдм рдХреБрдЫ рддреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдкреНрд░рд╛рдердорд┐рдХрддрд╛рдПрдВ рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдмрд╣реБрдд рдмреЗрд╣рддрд░ рд╣реИред рдореИрдВ рдЗрд╕рдХреЗ рд╕рд╛рде рдЬреЛ рдмрдбрд╝рд╛ рдореБрджреНрджрд╛ рджреЗрдЦрддрд╛ рд╣реВрдВ, рд╡рд╣ рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐рдпреЛрдВ рдХреА рдЕрдиреБрдорддрд┐ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рдПрдХ рдЬреЛрдбрд╝реА рдШреЛрд╖рд┐рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рди рдХрд┐ рдПрдХ рддрддреНрд╡ред рд╣рд╛рд▓рд╛рдВрдХрд┐, рд╕рдордЭрджрд╛рд░ рдЗрдирд▓рд╛рдЗрди рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдФрд░ bool рдкрд░ Enqueue рд╡рд╛рдкрд╕реА рдореВрд▓реНрдп рдХреЛ рдорд╛рдореВрд▓реА рд░реВрдк рд╕реЗ рдЗрд╕рдХрд╛ рд╕рдорд╛рдзрд╛рди рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдПрдХ рдмреВрд▓рд┐рдпрди рд╕реЗ рдмреЗрд╣рддрд░ рд╢рд╛рдпрдж рддрддреНрд╡ рдХреА рдкреБрд░рд╛рдиреА/рдирдИ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рд╡рд╛рдкрд╕ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдпрджрд┐ Enqueue рдирдИ рдкреНрд░рджрд╛рди рдХреА рдЧрдИ рдкреНрд░рд╛рдердорд┐рдХрддрд╛, рдпрд╛ рдиреНрдпреВрдирддрдо рджреЛ, рдпрд╛ рдкреБрд░рд╛рдиреА рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ), рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ Enqueue рдпрджрд┐ рдЖрдк рдХреБрдЫ рдлрд┐рд░ рд╕реЗ рдЬреЛрдбрд╝рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ рддреЛ bool рд▓реМрдЯрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрд╣ Enqueue рдФрд░ Update рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрд▓рдЧ рдФрд░ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рд░рдЦрддрд╛ рд╣реИред

рдореИрдВ KeyValuePair рдХрд╛ рдмрд┐рд▓реНрдХреБрд▓ рднреА рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рдиреЗ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реВрдВ, рдФрд░ рдпрд╛ рддреЛ рд╕рд╛рджреЗ рдЯреБрдкрд▓реНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ

рдореИрдВ рдЖрдкрдХреЗ рд╕рд╛рде рдЯреБрдкрд▓реНрд╕ рдкрд░ рд╣реВрдВред

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

  • рдореБрдЭреЗ рдЗрдВрдбреЗрдХреНрд╕рд░ рдХреЗ рд╕рд╛рде Dictionary рднреАрддрд░ рд╕рдорд╛рдирддрд╛ рджрд┐рдЦрд╛рдИ рджреЗрддреА рд╣реИред рд╡рд╣рд╛рдВ, рдЬрдм рдЖрдк dictionary["something"] = 5 рддреЛ рдпрд╣ рдЕрдкрдбреЗрдЯ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдпрджрд┐ "something" рдкрд╣рд▓реЗ рд╡рд╣рд╛рдВ рдПрдХ рдХреБрдВрдЬреА рдереАред рдЕрдЧрд░ рдпрд╣ рд╡рд╣рд╛рдВ рдирд╣реАрдВ рдерд╛, рддреЛ рдпрд╣ рдмрд╕ рдЬреБрдбрд╝ рдЬрд╛рддрд╛ рд╣реИред
  • рд╣рд╛рд▓рд╛рдБрдХрд┐, Enqueue рдкрджреНрдзрддрд┐ рдореЗрд░реЗ рд▓рд┐рдП рд╢рдмреНрджрдХреЛрд╢ рдореЗрдВ Add рдкрджреНрдзрддрд┐ рдХреЗ рд╕рдорд╛рди рд╣реИред рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдЗрд╕реЗ рдЕрдкрд╡рд╛рдж рдлреЗрдВрдХрдирд╛ рдЪрд╛рд╣рд┐рдПред
  • рдЙрдкрд░реЛрдХреНрдд рдмрд┐рдВрджреБрдУрдВ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрддреЗ рд╣реБрдП, рд╣рдо рдЖрдкрдХреЗ рдорди рдореЗрдВ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрддрд╛рд░ рдореЗрдВ рдПрдХ рдЕрдиреБрдХреНрд░рдордгрд┐рдХрд╛ рдЬреЛрдбрд╝рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
  • рд▓реЗрдХрд┐рди рдмрджрд▓реЗ рдореЗрдВ, рдПрдХ рдЕрдиреБрдХреНрд░рдордгрд┐рдХрд╛ рдХреБрдЫ рдРрд╕рд╛ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рдХрддрд╛рд░реЛрдВ рдХреА рдЕрд╡рдзрд╛рд░рдгрд╛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реЛред
  • рдЬреЛ рд╣рдореЗрдВ рдЗрд╕ рдирд┐рд╖реНрдХрд░реНрд╖ рдкрд░ рд▓реЗ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдЕрдЧрд░ рдХреЛрдИ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рддрддреНрд╡ рдЬреЛрдбрд╝рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИ рддреЛ Enqueue рд╡рд┐рдзрд┐ рдХреЛ рдЕрдкрд╡рд╛рдж рдлреЗрдВрдХрдирд╛ рдЪрд╛рд╣рд┐рдПред рдЗрд╕реА рддрд░рд╣, Update рд╡рд┐рдзрд┐ рдХреЛ рдПрдХ рдЕрдкрд╡рд╛рдж рдлреЗрдВрдХрдирд╛ рдЪрд╛рд╣рд┐рдП рдпрджрд┐ рдХреЛрдИ рдХрд┐рд╕реА рдРрд╕реЗ рддрддреНрд╡ рдХреА рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХреЛ рдЕрджреНрдпрддрди рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИ рдЬреЛ рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реИред
  • рдЬреЛ рд╣рдореЗрдВ рдПрдХ рдирдП рд╕рдорд╛рдзрд╛рди рдХреА рдУрд░ рд▓реЗ рдЬрд╛рддрд╛ рд╣реИ -- TryUpdate рд╡рд┐рдзрд┐ рдЬреЛрдбрд╝реЗрдВ рдЬреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ bool рд▓реМрдЯрд╛рддреА рд╣реИред

рдореИрдВ рдЪрдпрдирдХрд░реНрддрд╛ рдХреЗ рдкреНрд░рд╕реНрддрд╛рд╡ рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддрд╛, рд╕рд╛рдзрд╛рд░рдг рдХрд╛рд░рдг рд╕реЗ рдХрд┐ рдпрд╣ рдЕрддрд┐рд░реЗрдХ рдХрд╛ рддрд╛рддреНрдкрд░реНрдп рд╣реИ

рдХреНрдпрд╛ рдРрд╕рд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдХреБрдВрдЬреА рдХреЛ рднреМрддрд┐рдХ рд░реВрдк рд╕реЗ рдХреЙрдкреА рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ (рдпрджрд┐ рдпрд╣ рдореМрдЬреВрдж рд╣реИ), рд▓реЗрдХрд┐рди рдЪрдпрдирдХрд░реНрддрд╛ рдХреЗрд╡рд▓ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдмрдирд╛ рд░рд╣рддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдкреНрд░рд╛рдердорд┐рдХрддрд╛рдУрдВ рдХрд╛ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдиреЗ рдкрд░ рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ? рдЕрддрд┐рд░реЗрдХ рдХрд╣рд╛рдБ рд╣реИ?

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдФрд░ рддрддреНрд╡ рдХреЛ рдЕрд▓рдЧ рдХрд░рдиреЗ рд╕реЗ рд╕рдВрднрд╛рд╡рд┐рдд рд╕рдорд╕реНрдпрд╛ рд╕реЗ рдмрдЪрдиреЗ рдореЗрдВ рдорджрдж рдорд┐рд▓реЗрдЧреА

рдПрдХрдорд╛рддреНрд░ рд╕рдорд╕реНрдпрд╛ рддрдм рд╣реЛрддреА рд╣реИ рдЬрдм рдЧреНрд░рд╛рд╣рдХ рдХреЗ рдкрд╛рд╕ рднреМрддрд┐рдХ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИред рддрдм рд╡рд╣ рдмрд╣реБрдд рдХреБрдЫ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдкреНрд░рд╛рдердорд┐рдХрддрд╛рдПрдВ рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдмрд╣реБрдд рдмреЗрд╣рддрд░ рд╣реИред рдореИрдВ рдЗрд╕рдХреЗ рд╕рд╛рде рдЬреЛ рдмрдбрд╝рд╛ рдореБрджреНрджрд╛ рджреЗрдЦрддрд╛ рд╣реВрдВ, рд╡рд╣ рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐рдпреЛрдВ рдХреА рдЕрдиреБрдорддрд┐ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рдПрдХ рдЬреЛрдбрд╝реА рдШреЛрд╖рд┐рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рди рдХрд┐ рдПрдХ рддрддреНрд╡ред

рдореИрдВ рдЙрд╕ рд╕рдорд╛рдзрд╛рди рдХреЗ рд╕рд╛рде рдХреБрдЫ рдореБрджреНрджреЛрдВ рдХреЛ рджреЗрдЦрддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдЬрд░реВрд░реА рдирд╣реАрдВ рдХрд┐ рдпрд╣ рдХреНрдпреЛрдВ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐рдпреЛрдВ рдХреА рдЕрдиреБрдорддрд┐ рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ "рдиреЛ-рдбреБрдкреНрд▓рд┐рдХреЗрдЯ" рддрд░реНрдХ рдХреЗрд╡рд▓ TElement рдкрд░ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП - рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдпрд╣рд╛рдВ рдХреЗрд╡рд▓ рдПрдХ рдореВрд▓реНрдп рд╣реИред

var queue = new PriorityQueue<string, double>();

queue.Enqueue("first", 0.1);
queue.Enqueue("first", 0.5); // should be unsuccessful IMO

@VisualMelon рдХреНрдпрд╛

@pgolebiowski

рдореИрдВ TryUpdate рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд╕рд╛рде рдкреВрд░реА рддрд░рд╣ рд╕рд╣рдордд рд╣реВрдВ, рдФрд░ Update рдлреЗрдВрдХрдирд╛ рдореБрдЭреЗ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИред рдореИрдВ ISet рдХреА рддрд░реНрдЬ рдкрд░ Enqueue (рдмрдЬрд╛рдп IDictionary ) рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪ рд░рд╣рд╛ рдерд╛ред рдлреЗрдВрдХрдирд╛ рднреА рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ, рдореИрдВрдиреЗ рдЙрд╕ рдмрд┐рдВрджреБ рдХреЛ рдпрд╛рдж рдХрд┐рдпрд╛ рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╡рд╛рдкрд╕реА bool рдкреНрд░рдХрд╛рд░ рдХреА 'рд╕реЗрдЯрдиреЗрд╕' рдмрддрд╛рддреА рд╣реИред рд╢рд╛рдпрдж рдПрдХ TryEnqueue рдХреНрд░рдо рдореЗрдВ рднреА рд╣реЛрдЧрд╛ ( Add рдлреЗрдВрдХрдиреЗ рдХреЗ рд╕рд╛рде)? рдПрдХ TryRemove рдХреА рднреА рд╕рд░рд╛рд╣рдирд╛ рдХреА рдЬрд╛рдПрдЧреА (рдЦрд╛рд▓реА рд╣реЛрдиреЗ рдкрд░ рд╡рд┐рдлрд▓)ред рдЖрдкрдХреЗ рдЕрдВрддрд┐рдо рдмрд┐рдВрджреБ рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ, рд╣рд╛рдБ, рдпрд╣реА рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрд░реЗ рдорди рдореЗрдВ рднреА рдерд╛ред рдореИрдВ рдХреЗ рд╕рд╛рде рдПрдХ рд╕рд╛рджреГрд╢реНрдп рд▓рдЧрддрд╛ рд╣реИ IDictionary рддреБрд▓рдирд╛ рдореЗрдВ рдмреЗрд╣рддрд░ рд╣реИ ISet рдкреНрд░рддрд┐рдмрд┐рдВрдм рдкрд░, рдФрд░ рдХрд╣рд╛ рдХрд┐ рд╕реНрдкрд╖реНрдЯ рдкрд░реНрдпрд╛рдкреНрдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред (рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ: рдореИрдВ рдЖрдкрдХреЗ рд╕реБрдЭрд╛рд╡ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рд╕рдм рдХреБрдЫ рдлреЗрдВрдХрдиреЗ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдпрджрд┐ рдРрд╕рд╛ рд╣реИ рддреЛ Try* рд╣реЛрдирд╛ рдЬрд░реВрд░реА рд╣реИ; рдореИрдВ рд╡рд┐рдлрд▓рддрд╛ рдХреА рд╕реНрдерд┐рддрд┐ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЖрдкрдХреЗ рдмрдпрд╛рдиреЛрдВ рд╕реЗ рднреА рд╕рд╣рдордд рд╣реВрдВ)ред

рдЗрдВрдбреЗрдХреНрд╕рд░ рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рд╕рд╣реА рд╣реИрдВ рдХрд┐ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХрддрд╛рд░ рдЕрд╡рдзрд╛рд░рдгрд╛ рдХреЛ 'рдлрд┐рдЯ' рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдореИрдВ рдЗрд╕рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддрд╛ред рдпрджрд┐ рдХреБрдЫ рднреА, рдХрддрд╛рд░ рдпрд╛ рдЕрджреНрдпрддрди рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдирд╛рдорд┐рдд рд╡рд┐рдзрд┐ рдХреНрд░рдо рдореЗрдВ рд╣реЛрдЧреАред

рдХреНрдпрд╛ рдРрд╕рд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдХреБрдВрдЬреА рдХреЛ рднреМрддрд┐рдХ рд░реВрдк рд╕реЗ рдХреЙрдкреА рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ (рдпрджрд┐ рдпрд╣ рдореМрдЬреВрдж рд╣реИ), рд▓реЗрдХрд┐рди рдЪрдпрдирдХрд░реНрддрд╛ рдХреЗрд╡рд▓ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдмрдирд╛ рд░рд╣рддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдкреНрд░рд╛рдердорд┐рдХрддрд╛рдУрдВ рдХрд╛ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдиреЗ рдкрд░ рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ? рдЕрддрд┐рд░реЗрдХ рдХрд╣рд╛рдБ рд╣реИ?

рдЖрдк рд╕рд╣реА рдХрд╣ рд░рд╣реЗ рд╣реИрдВ, рдореИрдВрдиреЗ рдкреНрд░рд╕реНрддрд╛рд╡ рдЕрджреНрдпрддрди (рддрддреНрд╡ рдореЗрдВ рдЗрд╕реЗ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдереЛрдбрд╝рд╛ рд╕рд╛) рдХреЛ рдЧрд▓рдд рддрд░реАрдХреЗ рд╕реЗ рдкрдврд╝рд╛ред рдЗрд╕реЗ рд▓реЗрддреЗ рд╣реБрдП рдХрд┐ рдЪрдпрдирдХрд░реНрддрд╛ рдХреЛ рдорд╛рдВрдЧ рдкрд░ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рдЬрд┐рд╕реЗ рдХрд┐рд╕реА рднреА рджрд╕реНрддрд╛рд╡реЗрдЬ рдореЗрдВ рд╕реНрдкрд╖реНрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдореЗрдВ рдкреНрд░рджрд░реНрд╢рди рдкреНрд░рднрд╛рд╡ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ), рдмрд┐рдВрджреБ рдЕрднреА рднреА рдЦрдбрд╝реЗ рд╣реИрдВ рдХрд┐ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдкрд░рд┐рдгрд╛рдо рдбреЗрдЯрд╛-рд╕рдВрд░рдЪрдирд╛ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЗ рдмрд┐рдирд╛ рдмрджрд▓ рд╕рдХрддрд╛ рд╣реИ, рдЫреЛрдбрд╝рдХрд░ рджреЛ рдЖрдЙрдЯ-рдСрдл-рд╕рд┐рдВрдХ рдЬрдм рддрдХ рдХрд┐ Update рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕рд╕реЗ рднреА рдмрджрддрд░, рдпрджрд┐ рдХреЛрдИ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХрдИ рддрддреНрд╡реЛрдВ рдХреА рдкреНрд░рднрд╛рд╡реА рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХреЛ рдмрджрд▓рддрд╛ рд╣реИ, рдФрд░ рдЙрдирдореЗрдВ рд╕реЗ рдХреЗрд╡рд▓ рдПрдХ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рддрд╛ рд╣реИ, рддреЛ рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛ 'рдЕрдирдХрдорд┐рдЯреЗрдб' рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд╕рдорд╛рдкреНрдд рд╣реЛ рдЬрд╛рдПрдЧреА, рдЬрдм рдЙрдиреНрд╣реЗрдВ 'рдЕрдкрдбреЗрдЯреЗрдб' рддрддреНрд╡реЛрдВ рд╕реЗ рдЪреБрдирд╛ рдЬрд╛рдПрдЧрд╛ (рдореИрдВрдиреЗ рдирд╣реАрдВ рджреЗрдЦрд╛ рд╣реИ) рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдбреЗрдЯрд╛рд╕реНрдЯреНрд░рдХреНрдЪрд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХрд┐рд╕реА рднреА рдЕрдкрдбреЗрдЯ O(<n) рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд░реВрдк рд╕реЗ рдПрдХ рдореБрджреНрджрд╛ рд╣реИ)ред рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдХрд┐рд╕реА рднреА рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЕрджреНрдпрддрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд░рдирд╛, рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рд░реВрдк рд╕реЗ рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛ рдХреЛ рдПрдХ рд╕реБрд╕рдВрдЧрдд рд╕реНрдерд┐рддрд┐ рд╕реЗ рджреВрд╕рд░реА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд▓реЗ рдЬрд╛рддрд╛ рд╣реИред

рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдЪрдпрдирдХрд░реНрддрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рдХреЗ рд╕рд╛рде рдЕрдм рддрдХ рдореЗрд░реА рд╕рднреА рдШреЛрд╖рд┐рдд рдкрдХрдбрд╝ рдПрдкреАрдЖрдИ рдХреА рдордЬрдмреВрддреА рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИрдВ: рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЪрдпрдирдХрд░реНрддрд╛ рдЧрд▓рдд рддрд░реАрдХреЗ рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЖрд╕рд╛рди рдмрдирд╛рддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдПрдХ рддрд░рдл, рдЕрд╡рдзрд╛рд░рдгрд╛рддреНрдордХ рд░реВрдк рд╕реЗ, рдХрддрд╛рд░ рдореЗрдВ рддрддреНрд╡реЛрдВ рдХреЛ рдЙрдирдХреА рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдирд╣реАрдВ рдЬрд╛рдирдиреА рдЪрд╛рд╣рд┐рдПред рдпрд╣ рдЙрдирдХреЗ рд▓рд┐рдП рд╕рдВрднрд╛рд╡рд┐рдд рд░реВрдк рд╕реЗ рдЕрдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рд╣реИ, рдФрд░ рдпрджрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЕрдкрдиреЗ рддрддреНрд╡реЛрдВ рдХреЛ struct Queable<T>{} рдпрд╛ рдХреБрдЫ рдФрд░ рдореЗрдВ рд▓рдкреЗрдЯрддрд╛ рд╣реИ рддреЛ рдпрд╣ рдПрдХ рдШрд░реНрд╖рдг рд░рд╣рд┐рдд рдПрдкреАрдЖрдИ рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдореЗрдВ рд╡рд┐рдлрд▓рддрд╛ рдХреА рддрд░рд╣ рд▓рдЧрддрд╛ рд╣реИ (рдЬрд┐рддрдирд╛ рдореБрдЭреЗ рдЗрд╕ рд╢рдмреНрдж рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рджрд░реНрдж рд╣реЛрддрд╛ рд╣реИ)ред

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

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

_рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рдФрд░ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рд╡рдЬреВрдж, рд╕реНрд╡рдпрдВ рдирд┐рд╣рд┐рдд PriorityQueue s рд╣реЛрдирд╛ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛, рдЬрд┐рд╕реЗ рдЖрдк рдХреЗрд╡рд▓ рддрддреНрд╡реЛрдВ рдХреЛ рдлреЗрдВрдХ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛтАЛтАЛрд╣реИ рдХрд┐ рдЗрд╕рдХреЗ рдЖрд╕рдкрд╛рд╕ рдХрд╛рдо рдХрд░рдиреЗ рдХреА рд▓рд╛рдЧрдд рдмрд╣реБрдд рдЕрдЪреНрдЫреА рд╣реЛрдЧреА, рдЬрдмрдХрд┐ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреА рд▓рд╛рдЧрдд рдХрд╛рдлреА рдХрдо рд╣реЛрдЧреАред_

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

рдЙрдкрдпреЛрдЧ 1: рд░реЛрд╕рд▓рд┐рди рдЕрдзрд┐рд╕реВрдЪрдирд╛ рд╕реЗрд╡рд╛
https://github.com/dotnet/roslyn/
рд░реЛрд╕рд▓рд┐рди рдХрдВрдкрд╛рдЗрд▓рд░ рдореЗрдВ рдПрдХ рдирд┐рдЬреА рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрддрд╛рд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╢рд╛рдорд┐рд▓ рд╣реИ рдЬрд┐рд╕реЗ "рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХреНрдпреВ" рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬреЛ рдЗрд╕рдореЗрдВ рдПрдХ рдмрд╣реБрдд рд╣реА рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЕрдиреБрдХреВрд▓рди рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ - рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдХрддрд╛рд░ рдЬреЛ рдХрддрд╛рд░ рдореЗрдВ рд╡рд╕реНрддреБрдУрдВ рдХрд╛ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдЪрд░рд╛ рдПрдХрддреНрд░ рд╣реЛрдиреЗ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИред Enqueue_NoLock рд╡рд┐рдзрд┐ current.Value.MinimumRunPointInMS < entry.Value.MinimumRunPointInMS рдкрд░ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд░рддреА рд╣реИ рддрд╛рдХрд┐ рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗ рдХрд┐ рдирдпрд╛ рдиреЛрдб рдХрд╣рд╛рдВ рд░рдЦрд╛ рдЬрд╛рдПред рдпрд╣рд╛рдВ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рджреЛ рдореБрдЦреНрдп рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрддрд╛рд░ рдбрд┐рдЬрд╛рдЗрдиреЛрдВ рдореЗрдВ рд╕реЗ рдХреЛрдИ рднреА (рддреБрд▓рдирд╛рддреНрдордХ рдХрд╛рд░реНрдп/рдкреНрд░рддрд┐рдирд┐рдзрд┐ рдмрдирд╛рдо рд╕реНрдкрд╖реНрдЯ рдкреНрд░рд╛рдердорд┐рдХрддрд╛) рдЗрд╕ рдЙрдкрдпреЛрдЧ рдкрд░рд┐рджреГрд╢реНрдп рдореЗрдВ рдлрд┐рдЯ рд╣реЛрдЧрд╛ред

рдЙрдкрдпреЛрдЧ 2: Lucene.net
https://github.com/apache/lucenenet
рдпрд╣ рдпрдХреАрдирди .NET рдореЗрдВ рдорд┐рд▓рдиреЗ рд╡рд╛рд▓реА рдкреНрд░рд╛рдпреЛрд░рд┐рдЯреА рдХреНрдпреВ рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рдмрдбрд╝рд╛ рдЙрдкрдпреЛрдЧ рдЙрджрд╛рд╣рд░рдг рд╣реИред Apache Lucene.net рд▓реЛрдХрдкреНрд░рд┐рдп Lucene рд╕рд░реНрдЪ рдЗрдВрдЬрди рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдПрдХ рдкреВрд░реНрдг .net рдкреЛрд░реНрдЯ рд╣реИред рд╣рдо рдЕрдкрдиреА рдХрдВрдкрдиреА рдореЗрдВ рдЬрд╛рд╡рд╛ рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдЕрдкрд╛рдЪреЗ рдХреА рд╡реЗрдмрд╕рд╛рдЗрдЯ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдХреБрдЫ рдмрдбрд╝реЗ рдирд╛рдо .NET рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред Github рдореЗрдВ .NET рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдХрд╛рдВрдЯреЗ рд╣реИрдВред

рд▓реНрдпреВрд╕реАрди рдореЗрдВ рдЕрдкрдирд╛ рд╕реНрд╡рдпрдВ рдХрд╛ рдкреНрд░рд╛рдпреЛрд░рд┐рдЯреА рдХреНрдпреВ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╢рд╛рдорд┐рд▓ рд╣реИ рдЬреЛ рдХрдИ "рд╡рд┐рд╢рд┐рд╖реНрдЯ" рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрддрд╛рд░реЛрдВ рджреНрд╡рд╛рд░рд╛ рдЙрдкрд╡рд░реНрдЧрд┐рдд рд╣реИ: HitQueue, TopOrdAndFloatQueue, PhraseQueue, рдФрд░ рд╕реБрдЭрд╛рд╡WordQueueред рд╕рд╛рде рд╣реА, рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХрдИ рдЬрдЧрд╣реЛрдВ рдкрд░ рдкреНрд░рд╛рдпреЛрд░рд┐рдЯреА рдХреНрдпреВ рдХреЛ рд╕реАрдзреЗ рдЗрдВрд╕реНрдЯреЗрдВрдЯ рдХрд░рддрд╛ рд╣реИред

рд▓реНрдпреВрд╕реАрди рдХрд╛ рдкреНрд░рд╛рдпреЛрд░рд┐рдЯреАрдХреНрдпреВ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди, рдКрдкрд░ рд╕реЗ рдЬреБрдбрд╝рд╛ рд╣реБрдЖ рд╣реИ, рдЗрд╕ рдореБрджреНрджреЗ рдореЗрдВ рдкреЛрд╕реНрдЯ рдХреА рдЧрдИ рдореВрд▓ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрддрд╛рд░ рдПрдкреАрдЖрдИ рдХреЗ рд╕рдорд╛рди рд╣реИред рдЗрд╕реЗ "рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрддрд╛рд░" рдХреЗ рд░реВрдк рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ"рдФрд░ рдПрдХ рдЖрдИрд╕реАрдУрдПрдордкреЗрдпрд░ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИрдЗрд╕рдХреЗ рдирд┐рд░реНрдорд╛рддрд╛ рдореЗрдВ рдкреИрд░рд╛рдореАрдЯрд░ред рд╡рд┐рдзрд┐рдпреЛрдВ рдФрд░ рдЧреБрдгреЛрдВ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ рдХрд╛рдЙрдВрдЯ, рдХреНрд▓рд┐рдпрд░, рдСрдлрд╝рд░ (рдПрдирдХреНрдпреВ/рдкреБрд╢), рдкреЛрд▓ (рдбреЗрдХреНрдпреВ/рдкреЙрдк), рдкреАрдХ, рд░рд┐рдореВрд╡ (рдХрддрд╛рд░ рдореЗрдВ рдкрд╛рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдкрд╣рд▓реЗ рдореЗрд▓ рдЦрд╛рдиреЗ рд╡рд╛рд▓реЗ рдЖрдЗрдЯрдо рдХреЛ рд╣рдЯрд╛рддрд╛ рд╣реИ), рдРрдб (рдСрдлрд╝рд░ рдХрд╛ рдкрд░реНрдпрд╛рдпрд╡рд╛рдЪреА)ред рджрд┐рд▓рдЪрд╕реНрдк рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рд╡реЗ рдХрддрд╛рд░ рдХреЗ рд▓рд┐рдП рдЧрдгрдирд╛ рд╕рд╣рд╛рдпрддрд╛ рднреА рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВред

рд▓реНрдпреВрд╕реАрди рдХреА рдкреНрд░рд╛рдпреЛрд░рд┐рдЯреА рдХреНрдпреВ рдореЗрдВ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдореЗрдВ рдкрд╛рд░рд┐рдд рддреБрд▓рдирд╛рдХрд░реНрддрд╛ рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХреА рдЬрд╛рддреА рд╣реИ, рдФрд░ рдпрджрд┐ рдХреЛрдИ рднреА рдкрд╛рд░рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рддреЛ рдпрд╣ рдорд╛рдирддрд╛ рд╣реИ рдХрд┐ рддреБрд▓рдирд╛ рдХреА рдЧрдИ рд╡рд╕реНрддреБрдПрдВ IComparable рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреА рд╣реИрдВрдФрд░ рддреБрд▓рдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрд╕ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рдпрд╣рд╛рдВ рдкреЛрд╕реНрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдореВрд▓ рдПрдкреАрдЖрдИ рдбрд┐рдЬрд╝рд╛рдЗрди рд╕рдорд╛рди рд╣реИ, рд╕рд┐рд╡рд╛рдп рдЗрд╕рдХреЗ рдХрд┐ рдпрд╣ рдореВрд▓реНрдп рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд╕рд╛рде рднреА рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

рдЙрдирдХреЗ рдХреЛрдб рдЖрдзрд╛рд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХреЗ рдЙрджрд╛рд╣рд░рдг рд╣реИрдВ, рдЙрдирдореЗрдВ рд╕реЗ рдПрдХ

SloppyPhraseScorer рдХрд╛ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдПрдХ рдирдП PhraseQueue (pq) рдХреЛ рдЗрдВрд╕реНрдЯреЗрдВрдЯ рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдХрд┐ рдЙрдирдХреЗ рдЕрдкрдиреЗ рдкреНрд░рд╛рдпреЛрд░рд┐рдЯреА рдХреНрдпреВ рдХреЗ рдХрд╕реНрдЯрдо рдЙрдкрд╡рд░реНрдЧреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИред PhrasePositions рдХрд╛ рдПрдХ рд╕рдВрдЧреНрд░рд╣ рдЙрддреНрдкрдиреНрди рд╣реЛрддрд╛ рд╣реИ, рдЬреЛ рдкреЛрд╕реНрдЯрд┐рдВрдЧ рдХреЗ рдПрдХ рд╕реЗрдЯ, рдПрдХ рд╕реНрдерд┐рддрд┐ рдФрд░ рд╢рд░реНрддреЛрдВ рдХреЗ рдПрдХ рд╕реЗрдЯ рдХреЗ рд▓рд┐рдП рдПрдХ рдЖрд╡рд░рдг рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИред рдлрд┐рд▓рдХреНрдпреВ рд╡рд┐рдзрд┐ рд╡рд╛рдХреНрдпрд╛рдВрд╢ рдкрджреЛрдВ рдкрд░ рдЧрдгрдирд╛ рдХрд░рддреА рд╣реИ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдХрддрд╛рд░рдмрджреНрдз рдХрд░рддреА рд╣реИред PharseFreq() рдПрдХ AdvancePP рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИ рдФрд░, рдЙрдЪреНрдЪ рд╕реНрддрд░ рдкрд░, рдПрдХ рдЖрдЗрдЯрдо рдХреА рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХреЛ рдЕрджреНрдпрддрди рдХрд░рдиреЗ, рдФрд░ рдлрд┐рд░ рдлрд┐рд░ рд╕реЗ рдХрддрд╛рд░рдмрджреНрдз рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИред рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХреА рдЬрд╛рддреА рд╣реИ (рдПрдХ рддреБрд▓рдирд╛рдХрд░реНрддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ) рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ (рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдПрдирдХреНрдпреВ рдХреЗ рджреМрд░рд╛рди рджреВрд╕рд░реЗ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ "рдкрд╛рд╕" рдирд╣реАрдВ рд╣реЛрддреА рд╣реИ)ред

рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ PhraseQueue рдХреЗ рдЙрдирдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ (рдЬреИрд╕реЗ рдкреВрд░реНрдгрд╛рдВрдХ) рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкрд╛рд░рд┐рдд рдПрдХ рддреБрд▓рдирд╛ рдореВрд▓реНрдп рдЗрд╕реЗ рдХрд╛рдЯ рдирд╣реАрдВ рд╕рдХрддрд╛ рд╣реИред рдЙрдирдХрд╛ рддреБрд▓рдирд╛ рдлрд╝рдВрдХреНрд╢рди ("рд▓реЗрд╕рдерд╛рди") рддреАрди рдЕрд▓рдЧ-рдЕрд▓рдЧ рдХреНрд╖реЗрддреНрд░реЛрдВ рдХрд╛ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд░рддрд╛ рд╣реИ: PhrasePositions.doc, PhrasePositions.position, рдФрд░ PhrasePositions.offsetред

рдЙрдкрдпреЛрдЧ 3: рдЦреЗрд▓ рд╡рд┐рдХрд╛рд╕
рдореИрдВрдиреЗ рдЗрд╕ рд╕реНрдерд╛рди рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХреЗ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЦреЛрдЬ рд╕рдорд╛рдкреНрдд рдирд╣реАрдВ рдХреА рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ рдХрд╕реНрдЯрдо .NET рдкреНрд░рд╛рдпреЛрд░рд┐рдЯреА рдХреНрдпреВ рдХреЗ рдХреБрдЫ рдЙрджрд╛рд╣рд░рдг рдЧреЗрдо рд╡рд┐рдХрд╛рд╕ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛ рд░рд╣реЗ рд╣реИрдВред рдПрдХ рдмрд╣реБрдд рд╣реА рд╕рд╛рдорд╛рдиреНрдп рдЕрд░реНрде рдореЗрдВ рдЗрдиреНрд╣реЗрдВ рдореБрдЦреНрдп рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ (рджрд┐рдЬреНрдХреНрд╕реНрдЯреНрд░рд╛) рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рдердлрд╛рдЗрдВрдбрд┐рдВрдЧ рдХреЗ рдЖрд╕рдкрд╛рд╕ рдХреНрд▓рд╕реНрдЯрд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЖрдк рдмрд╣реБрдд рд╕реЗ рд▓реЛрдЧреЛрдВ рдХреЛ рдпрд╣ рдкреВрдЫрддреЗ рд╣реБрдП рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдпреВрдирд┐рдЯреА 3рдбреА рдХреЗ рдХрд╛рд░рдг .NET рдореЗрдВ рдкрд╛рдердлрд╛рдЗрдВрдбрд┐рдВрдЧ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреЛ рдХреИрд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рдПред

рдЕрднреА рднреА рдЗрд╕ рдХреНрд╖реЗрддреНрд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЦреЛрджрдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ; рд╕реНрдкрд╖реНрдЯ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХреЗ рд╕рд╛рде рдХреБрдЫ рдЙрджрд╛рд╣рд░рдг рджреЗрдЦреЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВ рдФрд░ рдХреБрдЫ рдЙрджрд╛рд╣рд░рдг рддреБрд▓рдирд┐рддреНрд░/IComparable рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВред

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

рдХрддрд╛рд░реЗрдВ, рдПрдХ рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛ рдХреЗ рд░реВрдк рдореЗрдВ, рдЖрдо рддреМрд░ рдкрд░ рдПрдирдХреНрдпреВрдЗрдВрдЧ рдФрд░ рдбреАрдХреНрдпреВрдЗрдВрдЧ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддреА рд╣реИрдВред рдпрджрд┐ рд╣рдо рдЕрдиреНрдп рд╕реЗрдЯ/рд╕реВрдЪреА-рдЬреИрд╕реЗ рд╕рдВрдЪрд╛рд▓рди рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреЗ рдорд╛рд░реНрдЧ рдкрд░ рдЖрдЧреЗ рдмрдврд╝рддреЗ рд╣реИрдВ, рддреЛ рдореБрдЭреЗ рдЖрд╢реНрдЪрд░реНрдп рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рд╣рдо рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рдЕрд▓рдЧ рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛ рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдбрд┐рдЬрд╛рдЗрди рдХрд░ рд░рд╣реЗ рд╣реИрдВ - рдЯреБрдкрд▓реНрд╕ рдХреА рдХреНрд░рдордмрджреНрдз рд╕реВрдЪреА рдХреЗ рд╕рдорд╛рди рдХреБрдЫред рдпрджрд┐ рдХрд┐рд╕реА рдХреЙрд▓рд░ рдХреЛ Enqueue, Dequeue, Peek рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдХрд┐рд╕реА рдЕрдиреНрдп рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рд╢рд╛рдпрдж рдЙрдиреНрд╣реЗрдВ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрддрд╛рд░ рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдХреБрдЫ рдФрд░ рдЪрд╛рд╣рд┐рдП? рдХрддрд╛рд░, рдкрд░рд┐рднрд╛рд╖рд╛ рдХреЗ рдЕрдиреБрд╕рд╛рд░, рдХрддрд╛рд░ рдореЗрдВ рд╕рдореНрдорд┐рд▓рди рдФрд░ рдХрддрд╛рд░ рд╕реЗ рд╣рдЯрд╛рдиреЗ рдХрд╛ рдЖрджреЗрд╢ рджреЗрддреА рд╣реИ; рдЬреНрдпрд╛рджрд╛ рдирд╣реАрдВред

@ рдПрдмрд┐рдХрд▓реЗ

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

рдХрддрд╛рд░реЗрдВ [...] рдЖрдо рддреМрд░ рдкрд░ рдПрдирдХреНрдпреВрдЗрдВрдЧ рдФрд░ рдбреАрдХреНрдпреВрдЗрдВрдЧ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддреА рд╣реИрдВред [...] рдЕрдЧрд░ рдПрдХ рдХреЙрд▓рд░ рдХреЛ рдПрдирдХреНрдпреВ, рдбреЗрдХреНрдпреВ, рдкреАрдХ рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдЕрдиреНрдп рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рд╢рд╛рдпрдж рдЙрдиреНрд╣реЗрдВ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрддрд╛рд░ рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдХреБрдЫ рдФрд░ рдЪрд╛рд╣рд┐рдП? рдХрддрд╛рд░, рдкрд░рд┐рднрд╛рд╖рд╛ рдХреЗ рдЕрдиреБрд╕рд╛рд░, рдХрддрд╛рд░ рдореЗрдВ рд╕рдореНрдорд┐рд▓рди рдФрд░ рдХрддрд╛рд░ рд╕реЗ рд╣рдЯрд╛рдиреЗ рдХрд╛ рдЖрджреЗрд╢ рджреЗрддреА рд╣реИ; рдЬреНрдпрд╛рджрд╛ рдирд╣реАрдВред

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

рдмрдврд╝рд┐рдпрд╛ рдЪрд░реНрдЪрд╛ред @ebicle рдХрд╛ рд╢реЛрдз рдмреЗрд╣рдж рдЙрдкрдпреЛрдЧреА рдЖрдИрдПрдордУ рд╣реИ!
@ebickle рдХреНрдпрд╛ рдЖрдкрдиреЗ [2] lucene.net рдкрд░ рдирд┐рд╖реНрдХрд░реНрд╖ рдирд┐рдХрд╛рд▓рд╛ рд╣реИ - рдХреНрдпрд╛ рд╣рдорд╛рд░рд╛ рдирд╡реАрдирддрдо рдкреНрд░рд╕реНрддрд╛рд╡ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рд╣реИ рдпрд╛ рдирд╣реАрдВ? (рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдореИрдВрдиреЗ рдЗрд╕реЗ рдЖрдкрдХреЗ рд╡рд┐рд╕реНрддреГрдд рд╡рд┐рд╡рд░рдг рдореЗрдВ рдпрд╛рдж рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ)

рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдореЗрдВ рдКрдкрд░ рд╕реЗ Try* рд╡реЗрд░рд┐рдПрдВрдЯ рдЪрд╛рд╣рд┐рдП + IsEmpty + TryPeek / TryDequeue + EnqueueOrUpdate ? рд╡рд┐рдЪрд╛рд░?
```рд╕реА#
рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдмреВрд▓ IsEmpty ();

public bool TryPeek(ref TElement element, ref TPriority priority); // false if empty
public bool TryDequeue(ref TElement element, ref TPriority priority); // false if empty

public bool TryEnqueue(TElement element, TPriority priority); // false if it is duplicate (doe NOT update it)
public void EnqueueOrUpdate(TElement element, TPriority priority); // TODO: Should return bool status for enqueued vs. updated?
public bool TryUpdate(TElement element, TPriority priority); // false if element does not exist (does NOT add it)

public bool TryRemove(TElement element); // false if element does not exist

```

@ рдХрд░реЗрд▓реНрдЬрд╝

рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдореЗрдВ рдКрдкрд░ рд╕реЗ Try* рд╡реЗрд░рд┐рдПрдВрдЯ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ

рд╣рд╛рдБ рдмрд┐рд▓реНрдХреБрд▓ред

рд╕рдВрд▓рдЧреНрди рдмрдирд╛рдо рдЕрджреНрдпрддрди рдХреЗ рд▓рд┐рдП рдмреВрд▓ рд╕реНрдерд┐рддрд┐ рд╡рд╛рдкрд╕ рдХрд░рдиреА рдЪрд╛рд╣рд┐рдП?

рдЕрдЧрд░ рд╣рдо рд╣рд░ рдЬрдЧрд╣ рд╕реНрдЯреЗрдЯрд╕ рд╡рд╛рдкрд╕ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рд╣рд░ рдЬрдЧрд╣ред рдЗрд╕ рд╡рд┐рд╢реЗрд╖ рд╡рд┐рдзрд┐ рдХреЗ рд▓рд┐рдП, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╕рдЪ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдпрджрд┐ рдХреЛрдИ рднреА рдСрдкрд░реЗрд╢рди рд╕рдлрд▓ рд╣реБрдЖ ( Enqueue рдпрд╛ Update )ред

рдмрд╛рдХреА рдХреЗ рд▓рд┐рдП - рдореИрдВ рдмрд╕ рд╕рд╣рдордд рд╣реВрдВ: рдореБрд╕реНрдХрд╛рди:

рд╕рд┐рд░реНрдл рдПрдХ рд╕рд╡рд╛рд▓ -- рдХреНрдпреЛрдВ ref рдмрдЬрд╛рдп out ? рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ:

  • рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд╣рдореЗрдВ рдЗрд╕реЗ рдкреНрд░рд╛рд░рдВрдн рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред
  • рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рд╡рд┐рдзрд┐ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рдпрд╣ рдмрд╕ рдирд┐рдХрд▓ рдЬрд╛рддрд╛ рд╣реИ)ред

рдЕрдЧрд░ рд╣рдо рд╣рд░ рдЬрдЧрд╣ рд╕реНрдЯреЗрдЯрд╕ рд╡рд╛рдкрд╕ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рд╣рд░ рдЬрдЧрд╣ред рдЗрд╕ рд╡рд┐рд╢реЗрд╖ рд╡рд┐рдзрд┐ рдХреЗ рд▓рд┐рдП, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╕рдЪ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдпрджрд┐ рдХреЛрдИ рднреА рдСрдкрд░реЗрд╢рди рд╕рдлрд▓ рд╣реБрдЖ ( Enqueue рдпрд╛ Update )ред

рдпрд╣ рд╣рдореЗрд╢рд╛ рд╕рдЪ рд╣реЛрдЧрд╛, рдпрд╣ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдЪрд╛рд░ рдирд╣реАрдВ рд╣реИред рд╣рдореЗрдВ void рдРрд╕реЗ рдорд╛рдорд▓реЗ рдореЗрдВ IMO рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЕрдиреНрдпрдерд╛ рд▓реЛрдЧ рднреНрд░рдорд┐рдд рд╣реЛрдВрдЧреЗ рдФрд░ рд╡рд╛рдкрд╕реА рдореВрд▓реНрдп рдХреА рдЬрд╛рдВрдЪ рдХрд░реЗрдВрдЧреЗ рдФрд░ рдмреЗрдХрд╛рд░-рд╕реЗ-рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХреЛрдб рдЬреЛрдбрд╝ рджреЗрдВрдЧреЗред (рдЬрдм рддрдХ рдореБрдЭреЗ рдХреБрдЫ рдпрд╛рдж рдирд╣реАрдВ рдЖрдпрд╛)

рд░реЗрдлрд░реА рдмрдирд╛рдо рдЖрдЙрдЯ рд╕рд╣рдордд, рдореИрдВрдиреЗ рдЦреБрдж рдЗрд╕ рдкрд░ рдмрд╣рд╕ рдХреАред рдореЗрд░реЗ рдкрд╛рд╕ рд╕реНрд╡рдпрдВ рдирд┐рд░реНрдгрдп рд▓реЗрдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрдд рд░рд╛рдп/рдкрд░реНрдпрд╛рдкреНрдд рдЕрдиреБрднрд╡ рдирд╣реАрдВ рд╣реИред рд╣рдо рдПрдкреАрдЖрдИ рд╕рдореАрдХреНрд╖рдХреЛрдВ рд╕реЗ рдкреВрдЫ рд╕рдХрддреЗ рд╣реИрдВ / рдЕрдзрд┐рдХ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдпрд╣ рд╣рдореЗрд╢рд╛ рд╕рдЪ рд▓реМрдЯреЗрдЧрд╛

рддреБрдо рд╕рд╣реА рд╣реЛ, рдореЗрд░реЗ рдмреБрд░реЗред рдорд╛рдлрд╝ рдХрд░рдирд╛ред

рдореЗрд░реЗ рдкрд╛рд╕ рд╕реНрд╡рдпрдВ рдирд┐рд░реНрдгрдп рд▓реЗрдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрдд рд░рд╛рдп/рдкрд░реНрдпрд╛рдкреНрдд рдЕрдиреБрднрд╡ рдирд╣реАрдВ рд╣реИред

рд╢рд╛рдпрдж рдореБрдЭреЗ рдХреБрдЫ рдпрд╛рдж рдЖ рд░рд╣рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдпрд╣ рдмрд╣реБрдд рдЖрд╕рд╛рди рд▓рдЧрддрд╛ рд╣реИред рдпрджрд┐ рд╣рдо ref рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рдореВрд▓ рд░реВрдк рд╕реЗ рдХрд╣ рд░рд╣реЗ рд╣реИрдВ рдХрд┐ Peek рдФрд░ Dequeue рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ TElement рдФрд░ TPriority рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ ( рдореЗрд░рд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдЙрди рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЛ рдкрдврд╝реЗрдВ )ред рдЬреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдорд╛рдорд▓рд╛ рдирд╣реАрдВ рд╣реИ - рд╣рдорд╛рд░реЗ рддрд░реАрдХреЛрдВ рдХреЛ рдХреЗрд╡рд▓ рдЙрди рдЪрд░реЛрдВ рдХреЛ рдорд╛рди рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП (рдФрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЙрдиреНрд╣реЗрдВ рд╕рдВрдХрд▓рдХ рджреНрд╡рд╛рд░рд╛ рдРрд╕рд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ)ред

рдЯреЙрдк-рдкреЛрд╕реНрдЯ рдореЗрд░реЗ Try* рдПрдкреАрдЖрдИ рдХреЗ рд╕рд╛рде рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛
2 рдЦреБрд▓реЗ рдкреНрд░рд╢реНрди рдЬреЛрдбрд╝реЗ рдЧрдП:

  • [6] рдХреНрдпрд╛ Peek рдФрд░ Dequeue рдлреЗрдВрдХрдирд╛ рдЙрдкрдпреЛрдЧреА рд╣реИ?
  • [7] TryPeek рдФрд░ TryDequeue - ref рдпрд╛ out args рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП?

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

6: рдореБрдЭреЗ рдХреБрдЫ рдпрд╛рдж рдЖ рд░рд╣рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдХреЛрдИ рдЕрдкрд╡рд╛рдж рдирд╣реАрдВ рдлреЗрдВрдХ рд░рд╣рд╛ рд╣реИ, рддреЛ рдХрддрд╛рд░ рдЦрд╛рд▓реА рд╣реЛрдиреЗ рдкрд░ Peek рдпрд╛ Dequeue рдХреНрдпрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП? рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╕рд╡рд╛рд▓ рдкреВрдЫрдирд╛ рд╢реБрд░реВ рдХрд░ рджреЗрддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛ рдХреЛ null рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП (рдореИрдВ рдкрд╕рдВрдж рдирд╣реАрдВ рдХрд░реВрдВрдЧрд╛, рд▓реЗрдХрд┐рди рдХреЛрдИ рджреГрдврд╝ рд░рд╛рдп рдирд╣реАрдВ)ред рднрд▓реЗ рд╣реА рд╣рдо null рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВ, рдорд╛рди рдкреНрд░рдХрд╛рд░реЛрдВ рдореЗрдВ рдХреЛрдИ null ( default рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЧрд┐рдирддреА рдирд╣реАрдВ рд╣реИ), рдЗрд╕рд▓рд┐рдП Peek рдФрд░ Dequeue рд╣реИ рдПрдХ рдЕрд░реНрдерд╣реАрди рдкрд░рд┐рдгрд╛рдо рд╡реНрдпрдХреНрдд рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИ, рдФрд░ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╡рд┐рдзрд┐рд╡рдд рдПрдХ рдЕрдкрд╡рд╛рдж рдлреЗрдВрдХрдирд╛ рдЪрд╛рд╣рд┐рдП (рдЗрд╕ рдкреНрд░рдХрд╛рд░ out рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХрд┐рд╕реА рднреА рдЪрд┐рдВрддрд╛ рдХреЛ рджреВрд░ рдХрд░рдирд╛!)ред рдореБрдЭреЗ рдореМрдЬреВрджрд╛ Queue.Dequeue . рдХреЗ рдЙрджрд╛рд╣рд░рдг рдХрд╛ рдЕрдиреБрд╕рд░рдг рди рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рдХрд╛рд░рдг рдирд╣реАрдВ рджрд┐рдЦрддрд╛

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

рдпрджрд┐ рдХреЛрдИ рдЕрдкрд╡рд╛рдж рдирд╣реАрдВ рдлреЗрдВрдХ рд░рд╣рд╛ рд╣реИ, рддреЛ рдХрддрд╛рд░ рдЦрд╛рд▓реА рд╣реЛрдиреЗ рдкрд░ рдкреАрдХ рдпрд╛ рдбреЗрдХреНрдпреВ рдХреЛ рдХреНрдпрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП?

рд╕рддреНрдпред

рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдЖрдЙрдЯ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХрд┐рд╕реА рднреА рдЪрд┐рдВрддрд╛ рдХреЛ рджреВрд░ рдХрд░рдирд╛!

рдХреИрд╕реЗ? рдЦреИрд░, out рдкреИрд░рд╛рдореАрдЯрд░ TryPeek рдФрд░ TryDequeue рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рд╣реИрдВред рдЕрдкрд╡рд╛рдж рдлреЗрдВрдХрдиреЗ рд╡рд╛рд▓реЗ Peek рдФрд░ Dequeue ред

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

рдореИрдВ рдЧрд▓рдд рд╣реЛ рд╕рдХрддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдореЗрд░реА рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рдЕрдиреБрд╕рд╛рд░, рдбрд┐рдЬрд╕реНрдЯреНрд░рд╛ рдХрд╛ рдПрд▓реНрдЧреЛрд░рд┐рджрдо DecreaseKey рдСрдкрд░реЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдпрд╣ рджреЗрдЦреЗрдВред рдпрд╣ рдХреБрд╢рд▓ рд╣реИ рдпрд╛ рдирд╣реАрдВ рдпрд╣ рдПрдХ рдЕрд▓рдЧ рдкрд╣рд▓реВ рд╣реИред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдлрд╛рдЗрдмреЛрдиреИрдЪрд┐ рд╣реАрдк рдХреЛ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдбрд┐рдЬрд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдЬреЛ DecreaseKey рдСрдкрд░реЗрд╢рди рдХреЛ O(1) (рджрд┐рдЬреНрдХреНрд╕реНрдЯреНрд░рд╛ рдХреЛ рдмреЗрд╣рддрд░ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП) рдореЗрдВ рдЕрд╕рдореНрдмрджреНрдз рд░реВрдк рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИред

рд▓реЗрдХрд┐рди рдлрд┐рд░ рднреА, рд╣рдорд╛рд░реА рдЪрд░реНрдЪрд╛ рдореЗрдВ рдХреНрдпрд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ - рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрддрд╛рд░ рдореЗрдВ рдХрд┐рд╕реА рддрддреНрд╡ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдмрд╣реБрдд рдорджрджрдЧрд╛рд░ рд╣реИ рдФрд░ рдРрд╕реЗ рд▓реЛрдЧ рд╣реИрдВ рдЬреЛ рдРрд╕реА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреА рдЦреЛрдЬ рдХрд░рддреЗ рд╣реИрдВ (рд╕реНрдЯреИрдХ рдУрд╡рд░рдлреНрд▓реЛ рдкрд░ рдкрд╣рд▓реЗ рд╕реЗ рдЬреБрдбрд╝реЗ рдкреНрд░рд╢реНрди рджреЗрдЦреЗрдВ)ред рдореИрдВрдиреЗ рдЗрд╕реЗ рдЦреБрдж рднреА рдХрдИ рдмрд╛рд░ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рд╣реИред

рдХреНрд╖рдорд╛ рдХрд░реЗрдВ, рд╣рд╛рдБ, рдореБрдЭреЗ рдЕрдм out рдкреИрд░рд╛рдореНрд╕ рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛ рджрд┐рдЦрд╛рдИ рджреЗ рд░рд╣реА рд╣реИ, рдЪреАрдЬреЛрдВ рдХреЛ рдлрд┐рд░ рд╕реЗ рдЧрд▓рдд рддрд░реАрдХреЗ рд╕реЗ рдкрдврд╝рд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИред рдФрд░ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдбрд┐рдЬрд╕реНрдЯреНрд░рд╛ рдХрд╛ рдПрдХ рдкреНрд░рдХрд╛рд░ (рдПрдХ рдирд╛рдо рдЬреЛ рдореЗрд░реЗ рд╡рд┐рд╢реНрд╡рд╛рд╕ рд╕реЗ рдЕрдзрд┐рдХ рд╡реНрдпрд╛рдкрдХ рд░реВрдк рд╕реЗ рд▓рд╛рдЧреВ рд╣реЛрддрд╛ рд╣реИ ...) рдХреЛ рд╢рд╛рдпрдж рдЕрдзрд┐рдХ рдХреБрд╢рд▓рддрд╛ рд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ (рдпрджрд┐ рдЖрдкрдХреА рдХрддрд╛рд░ рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рддрддреНрд╡ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ, рддреЛ рд╕рдВрднрд╡рддрдГ рджреЛрд╣рд░рд╛рдиреЗ рдпреЛрдЧреНрдп рдЦреЛрдЬреЛрдВ рдХреЗ рд▓рд┐рдП рд▓рд╛рдн рд╣реИ) рдЕрджреНрдпрддрди рдХрд░рдиреЗ рдпреЛрдЧреНрдп рдкреНрд░рд╛рдердорд┐рдХрддрд╛рдПрдБред рдореБрдЭреЗ рд▓рдВрдмреЗ рд╢рдмреНрджреЛрдВ рдФрд░ рдирд╛рдореЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣реА рдорд┐рд▓рддрд╛ рд╣реИред рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдореИрдВ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рд╣рдо Update , рдпрд╣ рдХреЗрд╡рд▓ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдПрдХ рд╕реНрд▓рд┐рдорд░ Heap рдпрд╛ рдЕрдиреНрдп (рдпрд╛рдиреА рдореВрд▓ рдкреНрд░рд╕реНрддрд╛рд╡) рдЗрд╕ рдХреНрд╖рдорддрд╛ рдХреЛ рд▓рдЧрд╛рдП рдмрд┐рдирд╛ рдкреНрд░рддрд┐рдмрдВрдз рдХреЗ (рд╢рд╛рдирджрд╛рд░ рдХреЗ рд░реВрдк рдореЗрдВ) рдПрдХ рдХреНрд╖рдорддрд╛ рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВ рдЗрд╕рдХреА рд╕рд░рд╛рд╣рдирд╛ рдХрд░рддрд╛ рд╣реВрдВ)ред

7: рдпреЗ out рд╣реЛрдиреЗ рдЪрд╛рд╣рд┐рдПред рдХрд┐рд╕реА рднреА рдЗрдирдкреБрдЯ рдХрд╛ рдХрднреА рдХреЛрдИ рдЕрд░реНрде рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП (рдпрд╛рдиреА рд╣рдореЗрдВ ref рд╕рд╛рде рдирд╣реАрдВ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП)ред out рдкреИрд░рд╛рдореНрд╕ рдХреЗ рд╕рд╛рде, рд╣рдо default рдорд╛рди рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдкрд░ рд╕реБрдзрд╛рд░ рдирд╣реАрдВ рдХрд░рдиреЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВред рдпрд╣ рд╡рд╣реА рд╣реИ рдЬреЛ Dictionary.TryGetValue рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдореБрдЭреЗ рдЕрдиреНрдпрдерд╛ рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рдХрд╛рд░рдг рдирд╣реАрдВ рджрд┐рдЦрддрд╛ред _рдЙрд╕ рдиреЗ рдХрд╣рд╛, рдЖрдк ref рдХреЛ рдорд╛рди рдпрд╛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдорд╛рди рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдХреЛрдИ рд╕рд╛рд░реНрдердХ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдирд╣реАрдВ рд╣реИ рддреЛ рдпрд╣ рдорд╛рдорд▓реЛрдВ рдХреЛ рдирд┐рд░рд╛рд╢ рдХрд░рддрд╛ рд╣реИред_

рдПрдкреАрдЖрдИ рд╕рдореАрдХреНрд╖рд╛ рдЪрд░реНрдЪрд╛:

  • рд╣рдореЗрдВ рд╕рднреА рдкреЗрд╢реЗрд╡рд░реЛрдВ / рд╡рд┐рдкрдХреНрд╖реЛрдВ рдкрд░ рдЪрд░реНрдЪрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЙрдЪрд┐рдд рдбрд┐рдЬрд╛рдЗрди рдореАрдЯрд┐рдВрдЧ (2h) рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА, рдЖрдЬ рд╣рдордиреЗ рдЬреЛ 30 рдорд┐рдирдЯ рдХрд╛ рдирд┐рд╡реЗрд╢ рдХрд┐рдпрд╛, рд╡рд╣ рдЦреБрд▓реЗ рдкреНрд░рд╢реНрдиреЛрдВ рдкрд░ рдЖрдо рд╕рд╣рдорддрд┐ / рдмрдВрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рдерд╛ред

    • рд╣рдо рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рдирд┐рд╡реЗрд╢рд┐рдд рд╕рдореБрджрд╛рдп рдХреЗ рд╕рджрд╕реНрдпреЛрдВ рдХреЛ рдЖрдордВрддреНрд░рд┐рдд рдХрд░реЗрдВрдЧреЗ - @pgolebiowski , рдХрд┐рд╕реА рдФрд░ рдХреЛ?

рдпрд╣рд╛рдБ рдкреНрд░рдореБрдЦ рдХрдЪреНрдЪреЗ рдиреЛрдЯ рд╣реИрдВ:

  • рдкреНрд░рдпреЛрдЧ - рд╣рдореЗрдВ

    • рд╣рдордиреЗ рдЕрддреАрдд рдореЗрдВ ImmutableCollections рд▓рд┐рдП рднреА рдРрд╕рд╛ рд╣реА рдХрд┐рдпрд╛ рдерд╛ (рддреЗрдЬреА рд╕реЗ рдкреВрд░реНрд╡рд╛рд╡рд▓реЛрдХрди рд░рд┐рд▓реАрдЬ рдЪрдХреНрд░ рдПрдкреАрдЖрдИ рдХреЛ рдЖрдХрд╛рд░ рджреЗрдиреЗ рдореЗрдВ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдФрд░ рд╕рд╣рд╛рдпрдХ рдерд╛)ред

    • рд╣рдо рдЗрд╕ рдкреНрд░рдпреЛрдЧ рдХреЛ MultiValueDictionary рд╕рд╛рде рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдкрд╣рд▓реЗ рд╕реЗ CoreFxLab рдореЗрдВ рд╣реИред TODO: рдЬрд╛рдВрдЪреЗрдВ рдХрд┐ рдХреНрдпрд╛ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЕрдзрд┐рдХ рдЙрдореНрдореАрджрд╡рд╛рд░ рд╣реИрдВ, рд╣рдо рдЙрдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдХреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдмреНрд▓реЙрдЧ рдкреЛрд╕реНрдЯ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред

    • рдкреНрд░рдпреЛрдЧ рд╕рдорд╛рдкреНрдд рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рдкреНрд░рдпреЛрдЧрд╛рддреНрдордХ NuGet рдкреИрдХреЗрдЬ рдХреЛ рдмрдВрдж рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдФрд░ рд╣рдо рд╕реНрд░реЛрдд рдХреЛрдб рдХреЛ CoreFX рдпрд╛ CoreFXExtensions (рдмрд╛рдж рдореЗрдВ рддрдп рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛) рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рджреЗрдВрдЧреЗред

  • рд╡рд┐рдЪрд╛рд░: Peek рдФрд░ Dequeue TElement рд╕реЗ рдХреЗрд╡рд▓ TPriority рд╡рд╛рдкрд╕ рди рдХрд░реЗрдВ (рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрд╕рдХреЗ рд▓рд┐рдП Try* рд╡рд┐рдзрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ)ред
  • рд╕реНрдерд┐рд░рддрд╛ (рд╕рдорд╛рди рдкреНрд░рд╛рдердорд┐рдХрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП) - рд╕рдорд╛рди рдкреНрд░рд╛рдердорд┐рдХрддрд╛рдУрдВ рд╡рд╛рд▓реА рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдЙрд╕реА рдХреНрд░рдо рдореЗрдВ рд╡рд╛рдкрд╕ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдЬрд┐рд╕ рдХреНрд░рдо рдореЗрдВ рдЙрдиреНрд╣реЗрдВ рдХрддрд╛рд░ рдореЗрдВ рдбрд╛рд▓рд╛ рдЧрдпрд╛ рдерд╛ (рд╕рд╛рдорд╛рдиреНрдп рдХрддрд╛рд░ рд╡реНрдпрд╡рд╣рд╛рд░)
  • рд╣рдо рдбреБрдкреНрд▓реАрдХреЗрдЯ рд╕рдХреНрд╖рдо рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ (рдЕрдиреНрдп рд╕рдВрдЧреНрд░рд╣реЛрдВ рдХреЗ рд╕рдорд╛рди):

    • Update рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛рдПрдВ - рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ Remove рдФрд░ рдлрд┐рд░ Enqueue рдЖрдЗрдЯрдо рдХреЛ рдЕрд▓рдЧ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХреЗ рд╕рд╛рде рд╡рд╛рдкрд╕ рдХрд░ рд╕рдХрддрд╛ рд╣реИред

    • Remove рдХреЗрд╡рд▓ рдкрд╣рд▓реА рдорд┐рд▓реА рд╡рд╕реНрддреБ рдХреЛ рд╣рдЯрд╛ рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдП (рдЬреИрд╕рд╛ рдХрд┐ List рдХрд░рддрд╛ рд╣реИ)ред

  • рд╡рд┐рдЪрд╛рд░: рдХреНрдпрд╛ рд╣рдо IQueue рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рдЕрдореВрд░реНрдд Queue рдФрд░ PriorityQueue ( Peek рдФрд░ Dequeue рдХреЗрд╡рд▓ TElement рд▓реМрдЯрд╛рдиреЗ рдореЗрдВ рдорджрдж рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдпрд╣рд╛рдВ)

    • рдиреЛрдЯ: рдпрд╣ рдЕрд╕рдВрднрд╡ рд╕рд╛рдмрд┐рдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╣рдореЗрдВ рдПрдкреАрдЖрдИ рдкрд░ рдмрд╕рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЗрд╕рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП

рд╣рдордиреЗ рдЪрдпрдирдХрд░реНрддрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд▓рдВрдмреА рдЪрд░реНрдЪрд╛ рдХреА - рд╣рдо рдЕрднреА рднреА рддрдп рдирд╣реАрдВ рд╣реИрдВ (рдКрдкрд░ IQueue рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИ?) рдЕрдзрд┐рдХрд╛рдВрд╢ рд▓реЛрдЧреЛрдВ рдХреЛ рдЪрдпрдирдХрд░реНрддрд╛ рдкрд╕рдВрдж рдирд╣реАрдВ рдЖрдпрд╛, рд▓реЗрдХрд┐рди рднрд╡рд┐рд╖реНрдп рдХреА рдПрдкреАрдЖрдИ рд╕рдореАрдХреНрд╖рд╛ рдмреИрдардХ рдореЗрдВ рдЪреАрдЬреЗрдВ рдмрджрд▓ рд╕рдХрддреА рд╣реИрдВред

рдЕрдиреНрдп рдЦреБрд▓реЗ рдкреНрд░рд╢реНрдиреЛрдВ рдкрд░ рдЪрд░реНрдЪрд╛ рдирд╣реАрдВ рдХреА рдЧрдИред

рдирд╡реАрдирддрдо рдкреНрд░рд╕реНрддрд╛рд╡ рдореБрдЭреЗ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд▓рдЧ рд░рд╣рд╛ рд╣реИред рдореЗрд░реА рд░рд╛рдп/рдкреНрд░рд╢реНрди:

  1. рдпрджрд┐ Peek рдФрд░ Dequeue рдиреЗ out рдкреИрд░рд╛рдореАрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ priority , рддреЛ рдЙрдирдХреЗ рдкрд╛рд╕ рдУрд╡рд░рд▓реЛрдб рднреА рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдмрд┐рд▓реНрдХреБрд▓ рдирд╣реАрдВ рд▓реМрдЯрд╛рддреЗ рд╣реИрдВ, рдЬреЛ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╕рд░рд▓ рд╣реЛрдЧрд╛ рд╕рд╛рдорд╛рдиреНрдп рдЙрдкрдпреЛрдЧред рд╣рд╛рд▓рд╛рдВрдХрд┐ рдПрдХ рддреНрдпрд╛рдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХреЛ рднреА рдЕрдирджреЗрдЦрд╛ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬреЛ рдЗрд╕реЗ рдХрдо рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрдирд╛рддрд╛ рд╣реИред
  2. рдореБрдЭреЗ рдпрд╣ рдкрд╕рдВрдж рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЪрдпрдирдХрд░реНрддрд╛ рд╕рдВрд╕реНрдХрд░рдг рдПрдХ рдЕрд▓рдЧ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрд▓рдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рддрд░реАрдХреЛрдВ рдХреЗ рдПрдХ рдЕрд▓рдЧ рд╕реЗрдЯ рдХреЛ рд╕рдХреНрд╖рдо рдХрд░рддрд╛ рд╣реИред рд╢рд╛рдпрдж рдПрдХ рдЕрд▓рдЧ PriorityQueue<T> рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП? рдпрд╛ PriorityQueue<T, T> рд╕рд╛рде рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╕реНрдерд┐рд░ рдФрд░ рд╡рд┐рд╕реНрддрд╛рд░ рд╡рд┐рдзрд┐рдпреЛрдВ рдХрд╛ рдПрдХ рд╕реЗрдЯ?
  3. рдХреНрдпрд╛ рдпрд╣ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдХрд┐ рдЧрдгрдирд╛ рдХрд░рддреЗ рд╕рдордп рддрддреНрд╡реЛрдВ рдХреЛ рдХрд┐рд╕ рдХреНрд░рдо рдореЗрдВ рд▓реМрдЯрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ? рдореЗрд░рд╛ рдЕрдиреБрдорд╛рди рд╣реИ рдХрд┐ рдЗрд╕реЗ рдХреБрд╢рд▓ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣ рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рд╣реИред
  4. рдХреНрдпрд╛ рдкреНрд░рд╛рдердорд┐рдХрддрд╛рдУрдВ рдХреЛ рдЕрдирджреЗрдЦрд╛ рдХрд░рддреЗ рд╣реБрдП, рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрддрд╛рд░ рдореЗрдВ рдХреЗрд╡рд▓ рд╡рд╕реНрддреБрдУрдВ рдХреА рдЧрдгрдирд╛ рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП? рдпрд╛ priorityQueue.Select(t => t.element) рд╕реНрд╡реАрдХрд╛рд░реНрдп рдЬреИрд╕реА рдХрд┐рд╕реА рдЪреАрдЬрд╝ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдкрдбрд╝ рд░рд╣рд╛ рд╣реИ?
  5. рдпрджрд┐ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрддрд╛рд░ рдЖрдВрддрд░рд┐рдХ рд░реВрдк рд╕реЗ рддрддреНрд╡ рдкреНрд░рдХрд╛рд░ рдкрд░ Dictionary рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реА рд╣реИ, рддреЛ рдХреНрдпрд╛ IEqualityComparer<TElement> рдкрд╛рд╕ рдХрд░рдиреЗ рдХрд╛ рд╡рд┐рдХрд▓реНрдк рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП?
  6. Dictionary рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рддрддреНрд╡реЛрдВ рдХреЛ рдЯреНрд░реИрдХ рдХрд░рдирд╛ рдЕрдирд╛рд╡рд╢реНрдпрдХ рдУрд╡рд░рд╣реЗрдб рд╣реИ рдпрджрд┐ рдореБрдЭреЗ рдХрднреА рднреА рдкреНрд░рд╛рдердорд┐рдХрддрд╛рдУрдВ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдХреНрдпрд╛ рдЗрд╕реЗ рдирд┐рд╖реНрдХреНрд░рд┐рдп рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рд╡рд┐рдХрд▓реНрдк рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП? рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЗрд╕реЗ рдмрд╛рдж рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЕрдЧрд░ рдпрд╣ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЙрдкрдпреЛрдЧреА рд╣реИред

@ рдХрд░реЗрд▓реНрдЬрд╝

рд╕реНрдерд┐рд░рддрд╛ (рд╕рдорд╛рди рдкреНрд░рд╛рдердорд┐рдХрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП) - рд╕рдорд╛рди рдкреНрд░рд╛рдердорд┐рдХрддрд╛рдУрдВ рд╡рд╛рд▓реА рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдЙрд╕реА рдХреНрд░рдо рдореЗрдВ рд╡рд╛рдкрд╕ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдЬрд┐рд╕ рдХреНрд░рдо рдореЗрдВ рдЙрдиреНрд╣реЗрдВ рдХрддрд╛рд░ рдореЗрдВ рдбрд╛рд▓рд╛ рдЧрдпрд╛ рдерд╛ (рд╕рд╛рдорд╛рдиреНрдп рдХрддрд╛рд░ рд╡реНрдпрд╡рд╣рд╛рд░)

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реЛрдЧрд╛ рдХрд┐ рдЖрдВрддрд░рд┐рдХ рд░реВрдк рд╕реЗ, рдкреНрд░рд╛рдердорд┐рдХрддрд╛ (priority, version) рдХреА рдПрдХ рдЬреЛрдбрд╝реА рдХреА рддрд░рд╣ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП, рдЬрд╣рд╛рдВ рдкреНрд░рддреНрдпреЗрдХ рдЬреЛрдбрд╝ рдХреЗ рд▓рд┐рдП version рдореЗрдВ рд╡реГрджреНрдзрд┐ рдХреА рдЬрд╛рддреА рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрддрд╛рд░ рдХреЗ рд╕реНрдореГрддрд┐ рдЙрдкрдпреЛрдЧ рдореЗрдВ рдХрд╛рдлреА рдХрдореА рдЖрдПрдЧреА, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдпрд╣ рджреЗрдЦрддреЗ рд╣реБрдП рдХрд┐ version 64 рдмрд┐рдЯреНрд╕ рд╣реЛрдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИред рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рдЗрд╕рдХреЗ рд▓рд╛рдпрдХ рд╣реЛрдЧрд╛ред

рд╣рдо рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдорд╛рдиреЛрдВ рдХреЛ рд░реЛрдХрдирд╛ рдирд╣реАрдВ рдЪрд╛рд╣рддреЗ (рдЕрдиреНрдп рд╕рдВрдЧреНрд░рд╣реЛрдВ рдХреЗ рд╕рдорд╛рди):
Update рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛рдПрдВ - рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ Remove рдФрд░ рдлрд┐рд░ Enqueue рдЖрдЗрдЯрдо рдХреЛ рдЕрд▓рдЧ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХреЗ рд╕рд╛рде рд╡рд╛рдкрд╕ рдХрд░ рд╕рдХрддрд╛ рд╣реИред

рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рдЖрдзрд╛рд░ рдкрд░, Update Remove рдмрд╛рдж Enqueue рддреБрд▓рдирд╛ рдореЗрдВ рдХрд╣реАрдВ рдЕрдзрд┐рдХ рдХреБрд╢рд▓ рд╣реЛрдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рджреНрд╡рд┐рдЖрдзрд╛рд░реА рдвреЗрд░ рдХреЗ рд╕рд╛рде (рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЪрддреБрд░реНрдзрд╛рддреБрдХ рдвреЗрд░ рдореЗрдВ рдПрдХ рд╣реА рд╕рдордп рдЬрдЯрд┐рд▓рддрд╛рдПрдВ рд╣реИрдВ), Update (рдЕрджреНрд╡рд┐рддреАрдп рдореВрд▓реНрдпреЛрдВ рдФрд░ рдПрдХ рд╢рдмреНрджрдХреЛрд╢ рдХреЗ рд╕рд╛рде) рдУ (рд▓реЙрдЧ рдПрди ) рд╣реИ, рдЬрдмрдХрд┐ Remove (рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдорд╛рдиреЛрдВ рдХреЗ рд╕рд╛рде) рдФрд░ рдХреЛрдИ рд╢рдмреНрджрдХреЛрд╢ рдирд╣реАрдВ) рдУ ( рдПрди ) рд╣реИред

@pgolebiowski
рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рд╣рдордд рд╣реИрдВ рдХрд┐ рд╣рдореЗрдВ рдпрд╣рд╛рдВ рдкреНрд░рд╕реНрддрд╛рд╡реЛрдВ рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ; рдореИрдВрдиреЗ рдореВрд▓ рдПрдкреАрдЖрдИ рдкреНрд░рд╕реНрддрд╛рд╡ рдФрд░ рдореВрд▓ рдкреЛрд╕реНрдЯ рдмрдирд╛рдпрд╛ рд╣реИред рдЬрдирд╡рд░реА рдореЗрдВ рд╡рд╛рдкрд╕ @karelz рдиреЗ рдХреБрдЫ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЙрдкрдпреЛрдЧ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП рдХрд╣рд╛; рдЗрд╕рдиреЗ рдкреНрд░рд╛рдпреЛрд░рд┐рдЯреА рдХреНрдпреВ рдПрдкреАрдЖрдИ рдХреА рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдФрд░ рдЙрдкрдпреЛрдЧ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╣реБрдд рд╡реНрдпрд╛рдкрдХ рдкреНрд░рд╢реНрди рдЦреЛрд▓рд╛ред рдореЗрд░рд╛ рдЕрдкрдирд╛ рдкреНрд░рд╛рдпреЛрд░рд┐рдЯреА рдХреНрдпреВ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдерд╛ рдФрд░ рдЗрд╕реЗ рдХреБрдЫ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдФрд░ рдорд╣рд╕реВрд╕ рдХрд┐рдпрд╛ рдХрд┐ рдмреАрд╕реАрдПрд▓ рдореЗрдВ рдХреБрдЫ рдРрд╕рд╛ рд╣реА рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧрд╛ред

рдореВрд▓ рдкреЛрд╕реНрдЯ рдореЗрдВ рдЬреЛ рдХрдореА рдереА, рд╡рд╣ рдореМрдЬреВрджрд╛ рдХрддрд╛рд░ рдХреЗ рдЙрдкрдпреЛрдЧ рдХрд╛ рдПрдХ рд╡реНрдпрд╛рдкрдХ рд╕рд░реНрд╡реЗрдХреНрд╖рдг рдерд╛; рд╡рд╛рд╕реНрддрд╡рд┐рдХ рджреБрдирд┐рдпрд╛ рдХреЗ рдЙрджрд╛рд╣рд░рдг рдбрд┐рдЬрд╛рдЗрди рдХреЛ рдЬрдореАрдиреА рдмрдирд╛рдП рд░рдЦрдиреЗ рдореЗрдВ рдорджрдж рдХрд░реЗрдВрдЧреЗ рдФрд░ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВрдЧреЗ рдХрд┐ рдЗрд╕рдХрд╛ рд╡реНрдпрд╛рдкрдХ рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗред

@ рдХрд░реЗрд▓реНрдЬрд╝
Lucene.net рдореЗрдВ рдХрдо рд╕реЗ рдХрдо рдПрдХ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрддрд╛рд░ рддреБрд▓рдирд╛ рдлрд╝рдВрдХреНрд╢рди рд╣реЛрддрд╛ рд╣реИ (рддреБрд▓рдирд╛ рдХреЗ рд╕рдорд╛рди) рдЬреЛ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдИ рдХреНрд╖реЗрддреНрд░реЛрдВ рдХрд╛ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд░рддрд╛ рд╣реИред рд▓реНрдпреВрд╕реАрди рдХрд╛ "рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд" рддреБрд▓рдирд╛ рдкреИрдЯрд░реНрди рд╡рд░реНрддрдорд╛рди рдПрдкреАрдЖрдИ рдкреНрд░рд╕реНрддрд╛рд╡ рдХреЗ рд╕реНрдкрд╖реНрдЯ рдЯреАрдкреАрдЖрд░рдУрд░рд┐рдЯреА рдкреИрд░рд╛рдореАрдЯрд░ рдореЗрдВ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдореИрдк рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХреЗ рдорд╛рдирдЪрд┐рддреНрд░рдг рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА - рдПрдХрд╛рдзрд┐рдХ рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЛ рдПрдХ рдпрд╛ рдПрдХ 'рддреБрд▓рдиреАрдп' рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛ рдореЗрдВ рд╕рдВрдпреЛрдЬрд┐рдд рдХрд░рдирд╛ рдЬрд┐рд╕реЗ TP рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдкреНрд░рд╕реНрддрд╛рд╡:
1) рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрддрд╛рд░рдЙрдкрд░реЛрдХреНрдд рдореЗрд░реЗ рдореВрд▓ рдкреНрд░рд╕реНрддрд╛рд╡ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд╡рд░реНрдЧ (рдореВрд▓ рдкреНрд░рд╕реНрддрд╛рд╡ рд╢реАрд░реНрд╖рдХ рдХреЗ рддрд╣рдд рд╕реВрдЪреАрдмрджреНрдз)ред рд╕рдВрднрд╛рд╡рд┐рдд рд░реВрдк рд╕реЗ рдЕрдкрдбреЗрдЯ (рдЯреА), рдирд┐рдХрд╛рд▓реЗрдВ (рдЯреА), рдФрд░ рдХрдВрдЯреЗрдиреНрд╕ (рдЯреА) рд╕реБрд╡рд┐рдзрд╛ рдлрд╝рдВрдХреНрд╢рди рдЬреЛрдбрд╝реЗрдВред рдУрдкрди рд╕реЛрд░реНрд╕ рд╕рдореБрджрд╛рдп рд╕реЗ рдореМрдЬреВрджрд╛ рдЙрдкрдпреЛрдЧ рдХреЗ рдЕрдзрд┐рдХрд╛рдВрд╢ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЛ рдлрд┐рдЯ рдХрд░рддрд╛ рд╣реИред
2) рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрддрд╛рд░рдбреЙрдЯрдиреЗрдЯ/рдХреЛрд░рдПрдлрдПрдХреНрд╕#1 рдХрд╛ рд╕рдВрд╕реНрдХрд░рдгред Dequeue () рдФрд░ Peek () рдЯрдкрд▓ рдХреЗ рдмрдЬрд╛рдп TElement рд▓реМрдЯрд╛рддреЗ рд╣реИрдВред рдХреЛрдИ рдХреЛрд╢рд┐рд╢ рдирд╣реАрдВ * рдлрд╝рдВрдХреНрд╢рди, рдирд┐рдХрд╛рд▓реЗрдВ () рд╕реВрдЪреА рдореЗрдВ рдлрд┐рдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдлреЗрдВрдХрдиреЗ рдХреЗ рдмрдЬрд╛рдп рдмреВрд▓ рд▓реМрдЯрд╛рддрд╛ рд╣реИрдкреИрдЯрд░реНрдиред рдПрдХ 'рд╕реБрд╡рд┐рдзрд╛ рдкреНрд░рдХрд╛рд░' рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЬрд┐рди рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рдкрд╛рд╕ рдПрдХ рд╕реНрдкрд╖реНрдЯ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдореВрд▓реНрдп рд╣реИ, рдЙрдиреНрд╣реЗрдВ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рддреБрд▓рдиреАрдп рдкреНрд░рдХрд╛рд░ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред

рджреЛрдиреЛрдВ рдкреНрд░рдХрд╛рд░ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рддрддреНрд╡реЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддреЗ рд╣реИрдВред рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рд╕рдорд╛рди рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рд╡рд╛рд▓реЗ рддрддреНрд╡реЛрдВ рдХреЗ рд▓рд┐рдП рдлреАрдлреЛ рдХреА рдЧрд╛рд░рдВрдЯреА рджреЗрддреЗ рд╣реИрдВ рдпрд╛ рдирд╣реАрдВ; рдпрджрд┐ рд╣рдо рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдЕрджреНрдпрддрдиреЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддреЗ рд╣реИрдВ рддреЛ рд╕рдВрднрд╡рдд: рдирд╣реАрдВред

CoreFxLabs рдореЗрдВ @karelz рдХреЗ рд╕реБрдЭрд╛рд╡ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рджреЛрдиреЛрдВ рдкреНрд░рдХрд╛рд░реЛрдВ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░реЗрдВ рдФрд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛

рдкреНрд░рд╢рди:

public void Enqueue(TElement element, TPriority priority); // Throws if it is duplicate`
public bool TryEnqueue(TElement element, TPriority priority); // Returns false if it is duplicate (does NOT update it)

рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдХреНрдпреЛрдВ рдирд╣реАрдВ?

public (TElement element, TPriority priority) Peek(); // Throws if empty
public (TElement element, TPriority priority) Dequeue(); // Throws if empty
public void Remove(TElement element); // Throws if element does not exist

рдпрджрд┐ рдпреЗ рд╡рд┐рдзрд┐рдпрд╛рдБ рд╡рд╛рдВрдЫрдиреАрдп рд╣реИрдВ, рддреЛ рдХреНрдпрд╛ рдЗрдиреНрд╣реЗрдВ рд╡рд┐рд╕реНрддрд╛рд░ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рд▓реЗрдВ?

public void Enqueue(TElement element);
public void Update(TElement element);

рдлреЗрдВрдХрдирд╛ рдЪрд╛рд╣рд┐рдП; рд▓реЗрдХрд┐рди рдХреНрдпреЛрдВ рдирд╣реАрдВ рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ, рд╡рд┐рд╕реНрддрд╛рд░ рд╡рд┐рдзрд┐рдпрд╛рдВ рднреА?

рд╕рдВрд░рдЪрдирд╛ рдЖрдзрд╛рд░рд┐рдд рдЧрдгрдХ?

рдмрджрд╕реВрд░рдд рд╣реИрдВрдбрд▓ рдкреНрд░рдХрд╛рд░ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдореВрд▓ рд░реВрдк рд╕реЗ (рдореЗрд░реЗ рджреНрд╡рд╛рд░рд╛) рдбреБрдкреНрд▓реА рдкрд░ рдлреЗрдВрдХрдиреЗ рд╡рд╛рд▓реЗ

рдЬрдм рд╣рдо рдЙрдиреНрд╣реЗрдВ рдкреНрд░рдХрд╛рд░ рдкрд░ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ рддреЛ рд╣рдореЗрдВ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рд╡рд┐рд╕реНрддрд╛рд░ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдирд╣реАрдВ рдЬреЛрдбрд╝рдирд╛ рдЪрд╛рд╣рд┐рдПред рдПрдХреНрд╕рдЯреЗрдВрд╢рди рд╡рд┐рдзрд┐рдпрд╛рдВ рдмреИрдХрдЕрдк рд╣реИрдВ рдпрджрд┐ рд╣рдо рдЙрдиреНрд╣реЗрдВ рдкреНрд░рдХрд╛рд░ рдкрд░ рдирд╣реАрдВ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдпрд╣ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╣реИ, рдпрд╛ рд╣рдо рдЗрд╕реЗ .NET Framework рдкрд░ рддреЗрдЬрд╝реА рд╕реЗ рд╡рд┐рддрд░рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ)ред

рдбреБрдкреНрд╕: рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдХрдИ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐рдпрд╛рдВ рд╣реИрдВ рдЬреЛ рд╕рдорд╛рди рд╣реИрдВ рддреЛ рдЖрдкрдХреЛ рдХреЗрд╡рд▓ рдПрдХ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ? рддрдм рд╡реЗ рдЕрд▓рдЧ рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВ?

рдлреЗрдВрдХрдиреЗ рдХреЗ рддрд░реАрдХреЗ: рдореВрд▓ рд░реВрдк рд╕реЗ рд░реИрдкрд░ рд╣реИрдВ рдФрд░ рд╡реЗ рд╣реЛрдВрдЧреЗ?

public void Remove(TElement element)
{
    if (!TryRemove(element))
    {
        throw new Exception();
    }
}

рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЗрд╕рдХрд╛ рдирд┐рдпрдВрддреНрд░рдг рдЕрдкрд╡рд╛рджреЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреНрд░рд╡рд╛рд╣рд┐рдд рд╣реЛрддрд╛ рд╣реИ?

@benadams рдПрдкреАрдЖрдИ рд╕рдореАрдХреНрд╖рд╛ рдиреЛрдЯреНрд╕ рдХреЗ рд╕рд╛рде рдореЗрд░реЗ рдЙрддреНрддрд░ рдХреА рдЬрд╛рдВрдЪ рдХрд░реЗрдВ: https://github.com/dotnet/corefx/issues/574#issuecomment -308206064

  • рд╣рдо рдбреБрдкреНрд▓реАрдХреЗрдЯ рд╕рдХреНрд╖рдо рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ (рдЕрдиреНрдп рд╕рдВрдЧреНрд░рд╣реЛрдВ рдХреЗ рд╕рдорд╛рди):

    • Update рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛рдПрдВ - рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ Remove рдФрд░ рдлрд┐рд░ Enqueue рдЖрдЗрдЯрдо рдХреЛ рдЕрд▓рдЧ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХреЗ рд╕рд╛рде рд╡рд╛рдкрд╕ рдХрд░ рд╕рдХрддрд╛ рд╣реИред

    • Remove рдХреЗрд╡рд▓ рдкрд╣рд▓реА рдорд┐рд▓реА рд╡рд╕реНрддреБ рдХреЛ рд╣рдЯрд╛ рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдП (рдЬреИрд╕рд╛ рдХрд┐ List рдХрд░рддрд╛ рд╣реИ)ред

рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЗрд╕рдХрд╛ рдирд┐рдпрдВрддреНрд░рдг рдЕрдкрд╡рд╛рджреЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреНрд░рд╡рд╛рд╣рд┐рдд рд╣реЛрддрд╛ рд╣реИ?

рдкрдХреНрдХрд╛ рдирд╣реАрдВ рдЖрдкрдХрд╛ рдХреНрдпрд╛ рдорддрд▓рдм рд╣реИред рдпрд╣ рдмреАрд╕реАрдПрд▓ рдореЗрдВ рдПрдХ рдмрд╣реБрдд рд╣реА рд╕рд╛рдорд╛рдиреНрдп рдкреИрдЯрд░реНрди рдХреА рддрд░рд╣ рд▓рдЧрддрд╛ рд╣реИред

рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЗрд╕рдХрд╛ рдирд┐рдпрдВрддреНрд░рдг рдЕрдкрд╡рд╛рджреЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреНрд░рд╡рд╛рд╣рд┐рдд рд╣реЛрддрд╛ рд╣реИ?

рдкрдХреНрдХрд╛ рдирд╣реАрдВ рдЖрдкрдХрд╛ рдХреНрдпрд╛ рдорддрд▓рдм рд╣реИред

рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рд╕рд┐рд░реНрдл TryX рд╡рд┐рдзрд┐рдпрд╛рдВ рд╣реИрдВ

  • рдпрджрд┐ рдЖрдк рдкрд░рд┐рдгрд╛рдо рдХреА рдкрд░рд╡рд╛рд╣ рдХрд░рддреЗ рд╣реИрдВ; рдЖрдк рдЗрд╕реЗ рдЬрд╛рдВрдЪреЗрдВ
  • рдпрджрд┐ рдЖрдк рдкрд░рд┐рдгрд╛рдо рдХреА рдкрд░рд╡рд╛рд╣ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдЖрдк рдЗрд╕рдХреА рдЬрд╛рдВрдЪ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ

рдХреЛрдИ рдЕрдкрд╡рд╛рдж рднрд╛рдЧреАрджрд╛рд░реА рдирд╣реАрдВ; рд▓реЗрдХрд┐рди рдирд╛рдо рдЖрдкрдХреЛ рд░рд┐рдЯрд░реНрди рдХреЛ рдлреЗрдВрдХрдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓реЗрдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░реЛрддреНрд╕рд╛рд╣рд┐рдд рдХрд░рддрд╛ рд╣реИред

рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдЧреИрд░-рдХреЛрд╢рд┐рд╢ рдЕрдкрд╡рд╛рдж рдлреЗрдВрдХрдиреЗ рдХреЗ рддрд░реАрдХреЗ рд╣реИрдВ

  • рдпрджрд┐ рдЖрдк рдкрд░рд┐рдгрд╛рдо рдХреА рдкрд░рд╡рд╛рд╣ рдХрд░рддреЗ рд╣реИрдВ; рдЖрдкрдХреЛ рдпрд╛ рддреЛ рдкреВрд░реНрд╡-рдЬрд╛рдВрдЪ рдХрд░рдиреА рд╣реЛрдЧреА рдпрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрд╢рд┐рд╢/рдкрдХрдбрд╝ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реЛрдЧрд╛
  • рдпрджрд┐ рдЖрдк рдкрд░рд┐рдгрд╛рдо рдХреА рдкрд░рд╡рд╛рд╣ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ; рдЖрдкрдХреЛ рдпрд╛ рддреЛ рд╡рд┐рдзрд┐ рдХреЛ рдЦрд╛рд▓реА рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдпрд╛ рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рдЕрдкрд╡рд╛рдж рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛

рддреЛ рдЖрдк рдкреНрд░рд╡рд╛рд╣-рдирд┐рдпрдВрддреНрд░рдг рдХреЗ рд▓рд┐рдП рдЕрдкрд╡рд╛рдж рд╣реИрдВрдбрд▓рд┐рдВрдЧ рдХрд╛

рдпрд╣ рдмреАрд╕реАрдПрд▓ рдореЗрдВ рдПрдХ рдмрд╣реБрдд рд╣реА рд╕рд╛рдорд╛рдиреНрдп рдкреИрдЯрд░реНрди рдХреА рддрд░рд╣ рд▓рдЧрддрд╛ рд╣реИред

рдЯреНрд░рд╛рдИрдПрдХреНрд╕ рд╡рд┐рдзрд┐рдпрд╛рдВ рдореВрд▓ рдмреАрд╕реАрдПрд▓ рдореЗрдВ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдкреИрдЯрд░реНрди рдирд╣реАрдВ рдереАрдВ; рд╕рдорд╡рд░реНрддреА рдкреНрд░рдХрд╛рд░реЛрдВ рддрдХ (рд╣рд╛рд▓рд╛рдВрдХрд┐ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ 2.0 рдореЗрдВ Dictionary.TryGetValue рдкрд╣рд▓рд╛ рдЙрджрд╛рд╣рд░рдг рд╣реЛ рд╕рдХрддрд╛ рд╣реИ?)

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП TryX рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рдХреЗрд╡рд▓ рдХреНрдпреВ рдФрд░ рд╕реНрдЯреИрдХ рдХреЗ рд▓рд┐рдП рдХреЛрд░ рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдЕрднреА рддрдХ рдлреНрд░реЗрдорд╡рд░реНрдХ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рдирд╣реАрдВ рд╣реИрдВред

рд╕реНрдерд┐рд░рддрд╛

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

IQueue

рддрдм рдПрдкреАрдЖрдИ рд╕рдВрдШрд░реНрд╖ рд╣реИрдВред рдЖрдЗрдП рдЕрдм рдПрдХ рд╕рд╛рдзрд╛рд░рдг IQueue<T> рддрд╛рдХрд┐ рдпрд╣ рдореМрдЬреВрджрд╛ Queue<T> :

public interface IQueue<T> :
    IEnumerable,
    IEnumerable<T>,
    IReadOnlyCollection<T>
{
    void Enqueue(T element);

    T Peek();
    T Dequeue();

    bool TryPeek(out T element);
    bool TryDequeue(out T element);
}

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

  1. IQueue<TElement> ред
  2. IQueue<(TElement, TPriority)> ред

рдореИрдВ рдХреЗрд╡рд▓ рд╕рдВрдЦреНрдпрд╛ (1) рдФрд░ (2) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рджреЛрдиреЛрдВ рдкрдереЛрдВ рдХреЗ рдирд┐рд╣рд┐рддрд╛рд░реНрде рд▓рд┐рдЦреВрдВрдЧрд╛ред

рдХрддрд╛рд░рдмрджреНрдз рдХрд░реЗрдВ

рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрддрд╛рд░ рдореЗрдВ, рд╣рдореЗрдВ рдПрдХ рддрддреНрд╡ рдФрд░ рдЙрд╕рдХреА рдкреНрд░рд╛рдердорд┐рдХрддрд╛ (рд╡рд░реНрддрдорд╛рди рд╕рдорд╛рдзрд╛рди) рджреЛрдиреЛрдВ рдХреЛ рдХрддрд╛рд░рдмрджреНрдз рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд╕рд╛рдзрд╛рд░рдг рдвреЗрд░ рдореЗрдВ, рд╣рдо рдХреЗрд╡рд▓ рдПрдХ рддрддреНрд╡ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВред

  1. рдкрд╣рд▓реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдо Enqueue(TElement) рдкрд░реНрджрд╛рдлрд╛рд╢ рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрддрд╛рд░ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЕрдЬреАрдм рд╣реИ рдЕрдЧрд░ рд╣рдо рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХреЗ рдмрд┐рдирд╛ рддрддреНрд╡ рдбрд╛рд▓ рд░рд╣реЗ рд╣реИрдВред рд╣рдо рдордЬрдмреВрд░ рд╣реИрдВ рддреЛ рдХреНрдпрд╛ рдХрд░реЗрдВ... рдХреНрдпрд╛? рдорд╛рди рд▓реЗрдВ default(TPriority) ? рдирд╣реАрдВ...
  2. рджреВрд╕рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдо Enqueue((TElement, TPriority) element) рдкрд░реНрджрд╛рдлрд╛рд╢ рдХрд░рддреЗ рд╣реИрдВред рд╣рдо рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ рдЙрдирдореЗрдВ рд╕реЗ рдмрдирд╛рдП рдЧрдП рдЯрдкрд▓ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдХреЗ рджреЛ рддрд░реНрдХ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВред рд╢рд╛рдпрдж рдЖрджрд░реНрд╢ рдПрдкреАрдЖрдИ рдирд╣реАрдВред

рдкреАрдХ рдФрд░ Dequeue

рдЖрдк рдЪрд╛рд╣рддреЗ рдереЗ рдХрд┐ рд╡реЗ рд╡рд┐рдзрд┐рдпрд╛рдВ рдХреЗрд╡рд▓ TElement рд▓реМрдЯрд╛рдПрдВред

  1. рдЖрдк рдЬреЛ рд╣рд╛рд╕рд┐рд▓ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдЙрд╕рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред
  2. рдЖрдк рдЬреЛ рд╣рд╛рд╕рд┐рд▓ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдЙрд╕рдХреЗ рд╕рд╛рде рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ - (TElement, TPriority) ред

рдХреА рдЧрдгрдирд╛

  1. рдЧреНрд░рд╛рд╣рдХ рдХреЛрдИ рднреА LINQ рдХреНрд╡реЗрд░реА рдирд╣реАрдВ рд▓рд┐рдЦ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рддрддреНрд╡реЛрдВ рдХреА рдкреНрд░рд╛рдердорд┐рдХрддрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рдпреЗ рдЧрд▓рдд рд╣реИред
  2. рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

рд╣рдо PriorityQueue<T> рдкреНрд░рджрд╛рди рдХрд░рдХреЗ рдХреБрдЫ рдореБрджреНрджреЛрдВ рдХреЛ рдХрдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд╣рд╛рдВ рдХреЛрдИ рднреМрддрд┐рдХ рдЕрд▓рдЧ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдирд╣реАрдВ рд╣реИред

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

рджреЛ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрддрд╛рд░

рдпрджрд┐ рд╣рдо рджреЛ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рд╡рд╛рд▓реА рдХрддрд╛рд░реЗрдВ рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╕рдордЧреНрд░ рд╕рдорд╛рдзрд╛рди рдЕрдзрд┐рдХ рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рдФрд░ рд▓рдЪреАрд▓рд╛ рд╣реЛрдЧрд╛ред рд▓реЗрдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдиреЛрдЯ рд╣реИрдВ:

  • рд╣рдо рд╕рдорд╛рди рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рджреЛ рд╡рд░реНрдЧреЛрдВ рдХрд╛ рдЦреБрд▓рд╛рд╕рд╛ рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдХреЗрд╡рд▓ рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рдХрд╛рд░ рдХреЗ рдЗрдирдкреБрдЯ рдкреНрд░рд╛рд░реВрдк рдХреЗ рд▓рд┐рдПред рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рдирд╣реАрдВ рд▓рдЧрддрд╛ред
  • PriorityQueue<T> рд╕рдВрднрд╛рд╡рд┐рдд рд░реВрдк рд╕реЗ IQueue<T> рд▓рд╛рдЧреВ рдХрд░ рд╕рдХрддрд╛ рд╣реИред
  • PriorityQueue<TElement, TPriority> рдПрдХ рдЕрдЬреАрдм рдПрдкреАрдЖрдИ рдХреЛ рдЙрдЬрд╛рдЧрд░ рдХрд░реЗрдЧрд╛ рдпрджрд┐ рд╡рд╣ IQueue рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддрд╛ рд╣реИред

рдЕрдЪреНрдЫрд╛ ... рдпрд╣ рдХрд╛рдо рдХрд░реЗрдЧрд╛ ред рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЖрджрд░реНрд╢ рдирд╣реАрдВ рд╣реИред

рдЕрдкрдбреЗрдЯ рдХрд░рдирд╛ рдФрд░ рд╣рдЯрд╛рдирд╛

рдЗрд╕ рдзрд╛рд░рдгрд╛ рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП рдХрд┐ рд╣рдо рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдФрд░ рд╣рдо рд╣реИрдВрдбрд▓ рдХреА рдЕрд╡рдзрд╛рд░рдгрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ:

  • рддрддреНрд╡реЛрдВ рдХреА рдкреНрд░рд╛рдердорд┐рдХрддрд╛рдУрдВ рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдЕрджреНрдпрддрди рдХрд░рдиреЗ рдХреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдкреНрд░рджрд╛рди рдХрд░рдирд╛ рдЕрд╕рдВрднрд╡
  • рдЗрд╕рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд, рджреЛрдиреЛрдВ рдСрдкрд░реЗрд╢рди рдУ (рдПрди) рдореЗрдВ рдХрд┐рдП рдЬрд╛рдиреЗ рд╣реИрдВ, рдЬреЛ рдмрд╣реБрдд рджреБрдЦрдж рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдУ (рд▓реЙрдЧ рдПрди) рджреЛрдиреЛрдВ рдореЗрдВ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИред

рдпрд╣ рдореВрд▓ рд░реВрдк рд╕реЗ рдЬрд╛рд╡рд╛ рдореЗрдВ рд╣реЛрддрд╛ рд╣реИ, рдЬрд╣рд╛рдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рд╕рдВрдкреВрд░реНрдг рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛ рдХрд╛ рдЕрдкрдирд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкреНрд░рджрд╛рди рдХрд░рдирд╛ рд╣реЛрддрд╛ рд╣реИ рдпрджрд┐ рд╡реЗ рд╣рд░ рдмрд╛рд░ рдкреВрд░реЗ рд╕рдВрдЧреНрд░рд╣ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдХрд┐рдП рдмрд┐рдирд╛ рдЕрдкрдиреА рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрддрд╛рд░реЛрдВ рдореЗрдВ рдкреНрд░рд╛рдердорд┐рдХрддрд╛рдУрдВ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред

рд╡реИрдХрд▓реНрдкрд┐рдХ рд╕рдВрднрд╛рд▓

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

void Enqueue(TElement element, TPriority priority, out object handle);

void Update(object handle, TPriority priority);

void Remove(object handle);

рдпреЗ рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рддрд░реАрдХреЗ рд╣реЛрдВрдЧреЗ рдЬреЛ рддрддреНрд╡реЛрдВ рдХреЛ рдЕрджреНрдпрддрди рдХрд░рдиреЗ рдФрд░ рд╣рдЯрд╛рдиреЗ рдкрд░ рдЙрдЪрд┐рдд рдирд┐рдпрдВрддреНрд░рдг рд░рдЦрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ (рдФрд░ рдЗрд╕реЗ рдУ (рдПрди) рдореЗрдВ рди рдХрд░реЗрдВ, рдЬреИрд╕реЗ рдХрд┐ рдпрд╣ List :stuck_out_tongue_winking_eye :)ред

рд▓реЗрдХрд┐рди рдмреЗрд╣рддрд░ рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЖрдЗрдП рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ ...

рд╡реИрдХрд▓реНрдкрд┐рдХ рджреГрд╖реНрдЯрд┐рдХреЛрдг

рд╡реИрдХрд▓реНрдкрд┐рдХ рд░реВрдк рд╕реЗ, рд╣рдо рдЗрд╕ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрддрд╛рд░ рд╕реЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╣рдЯрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдЗрд╕реЗ рд╣реАрдк рдореЗрдВ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕рдХреЗ рдХрдИ рдлрд╛рдпрджреЗ рд╣реИрдВ:

  • Heap рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрдзрд┐рдХ рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рдФрд░ рдХреБрд╢рд▓ рд╕рдВрдЪрд╛рд▓рди рдЙрдкрд▓рдмреНрдз рд╣реИрдВред
  • рд╕рд░рд▓ API рдФрд░ рд╕реАрдзрд╛ рдЙрдкрдпреЛрдЧ PriorityQueue рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЙрдкрд▓рдмреНрдз рд╣реИ -- рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЬреЛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рдЙрдирдХрд╛ рдХреЛрдб рдХреЗрд╡рд▓ рдХрд╛рдо рдХрд░реЗ .
  • рд╣рдо рдЬрд╛рд╡рд╛ рдХреА рд╕рдорд╕реНрдпрд╛рдУрдВ рдореЗрдВ рдирд╣реАрдВ рдЖрддреЗ рд╣реИрдВред
  • рд╣рдо рдЕрдм PriorityQueue рд╕реНрдерд┐рд░ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ -- рдпрд╣ рдЕрдм рдХреЛрдИ рд╕рдордЭреМрддрд╛ рдирд╣реАрдВ рд╣реИред
  • рд╕рдорд╛рдзрд╛рди рдЗрд╕ рднрд╛рд╡рдирд╛ рдХреЗ рдЕрдиреБрд░реВрдк рд╣реИ рдХрд┐ рдордЬрдмреВрдд рдХрдВрдкреНрдпреВрдЯрд░ рд╡рд┐рдЬреНрдЮрд╛рди рдкреГрд╖реНрдарднреВрдорд┐ рд╡рд╛рд▓реЗ рд▓реЛрдЧ Heap рдХреЗ рдЕрд╕реНрддрд┐рддреНрд╡ рд╕реЗ рдЕрд╡рдЧрдд рд╣реЛрдВрдЧреЗред рд╡реЗ PriorityQueue рдХреА рд╕реАрдорд╛рдУрдВ рд╕реЗ рднреА рдЕрд╡рдЧрдд рд╣реЛрдВрдЧреЗ рдФрд░ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп Heap рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдпрджрд┐ рд╡реЗ рддрддреНрд╡реЛрдВ рдХреЛ рдЕрджреНрдпрддрди/рдирд┐рдХрд╛рд▓рдиреЗ рдкрд░ рдЕрдзрд┐рдХ рдирд┐рдпрдВрддреНрд░рдг рд░рдЦрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдпрд╛ рдбреЗрдЯрд╛ рдирд╣реАрдВ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рд╕рдВрд░рдЪрдирд╛ рдЧрддрд┐ рдФрд░ рд╕реНрдореГрддрд┐ рдЙрдкрдпреЛрдЧ рдХреА рдХреАрдордд рдкрд░ рд╕реНрдерд┐рд░ рд╣реЛ)ред
  • рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрддрд╛рд░ рдФрд░ рдвреЗрд░ рджреЛрдиреЛрдВ рдЖрд╕рд╛рдиреА рд╕реЗ рдбреБрдкреНрд▓реАрдХреЗрдЯ рдХреА рдЕрдиреБрдорддрд┐ рджреЗ рд╕рдХрддреЗ рд╣реИрдВ рдЬрдмрдХрд┐ рдЙрдирдХреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдкрд░ рд╕рдордЭреМрддрд╛ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ (рдХреНрдпреЛрдВрдХрд┐ рдЙрдирдХреЗ рдЙрджреНрджреЗрд╢реНрдп рдЕрд▓рдЧ рд╣реИрдВ)ред
  • рдПрдХ рд╕рд╛рдорд╛рдиреНрдп IQueue рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдмрдирд╛рдирд╛ рдЖрд╕рд╛рди рд╣реЛрдЧрд╛ - рдХреНрдпреЛрдВрдХрд┐ рд╢рдХреНрддрд┐ рдФрд░ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рдвреЗрд░ рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рдлреЗрдВрдХ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред PriorityQueue рдПрдкреАрдЖрдИ рдХреЛ рдЕрдореВрд░реНрдд рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ Queue рдХреЗ рд╕рд╛рде рд╕рдВрдЧрдд рдмрдирд╛рдиреЗ рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
  • рд╣рдореЗрдВ рдЕрдм IPriorityQueue рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ (рд╣рдо рдЗрд╕рдХреЗ рдмрдЬрд╛рдп PriorityQueue рдФрд░ Queue рдХреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рд╕рдорд╛рди рд░рдЦрдиреЗ рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ)ред рдЗрд╕рдХреЗ рдмрдЬрд╛рдп, рд╣рдо рдЗрд╕реЗ рдвреЗрд░ рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ - рдФрд░ рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ рд╡рд╣рд╛рдВ IHeap рд╣реИред рдпрд╣ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд▓реЛрдЧреЛрдВ рдХреЛ рдорд╛рдирдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ рддреАрд╕рд░реЗ рдкрдХреНрд╖ рдХреЗ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдмрдирд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдФрд░ рдпрд╣ рд╕рд╣реА рд▓рдЧрддрд╛ рд╣реИ - рдХреНрдпреЛрдВрдХрд┐ рдлрд┐рд░ рд╕реЗ, рд╣рдо рдвреЗрд░ рдХреЛ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рд╡рд╛рд▓реА рдХрддрд╛рд░реЛрдВ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЕрдзрд┐рдХ рдЙрдиреНрдирдд рдорд╛рдирддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдЙрд╕ рдХреНрд╖реЗрддреНрд░ рджреНрд╡рд╛рд░рд╛ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдкреНрд░рджрд╛рди рдХрд┐рдП рдЬрд╛рдПрдВрдЧреЗред рдРрд╕реЗ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдЙрди рд╡рд┐рдХрд▓реНрдкреЛрдВ рд╕реЗ рднреА рдкреНрд░рднрд╛рд╡рд┐рдд рдирд╣реАрдВ рд╣реЛрдВрдЧреЗ рдЬреЛ рд╣рдо PriorityQueue , рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЕрд▓рдЧ рд╣реЛрдЧрд╛ред
  • рд╣рдореЗрдВ рдЕрдм PriorityQueue рд▓рд┐рдП IHeap рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред
  • рдХреЛрд░рдПрдлрдПрдХреНрд╕ рдореЗрдВ рдЖрдВрддрд░рд┐рдХ рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрддрд╛рд░ рдПрдХ рд╕рд╣рд╛рдпрдХ рд╡рд░реНрдЧ рд╣реЛрдЧреАред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЕрдЧрд░ рд╣рдо рд╕реНрдерд┐рд░рддрд╛ рдЬреИрд╕реА рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЛ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ рдФрд░ рдХреБрдЫ рдЕрдиреНрдп рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛рдУрдВ рдХреЛ рдЫреЛрдбрд╝ рджреЗрддреЗ рд╣реИрдВ, рддреЛ рд╣рдореЗрдВ рдЙрд╕ рд╕рдорд╛рдзрд╛рди рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЕрдзрд┐рдХ рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рдХреБрдЫ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЗ рд╕рд╛рде рд╕рдорд╛рдкреНрдд рд╣реЛрдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИред рд╕реМрднрд╛рдЧреНрдп рд╕реЗ, рд╣рдорд╛рд░реЗ рдЖрджреЗрд╢ рдореЗрдВ рдЕрдзрд┐рдХ рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рдФрд░ рдкреНрд░рджрд░реНрд╢рди рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ Heap !

рдореВрд▓ рд░реВрдк рд╕реЗ, рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрддрд╛рд░ рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧ рдореЗрдВ рдЖрд╕рд╛рдиреА рдкрд░ рдХреЗрдВрджреНрд░рд┐рдд рд╣реЛрдЧреА: рдкреНрд░рджрд░реНрд╢рди, рд╢рдХреНрддрд┐ рдФрд░ рд▓рдЪреАрд▓реЗрдкрди рдХреА рдХреАрдордд рдкрд░ред рдвреЗрд░ рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рд╣реЛрдЧрд╛ рдЬреЛ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрддрд╛рд░ рдореЗрдВ рд╣рдорд╛рд░реЗ рдирд┐рд░реНрдгрдпреЛрдВ рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдФрд░ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдкреНрд░рднрд╛рд╡реЛрдВ рд╕реЗ рдЕрд╡рдЧрдд рд╣реИрдВред рд╣рдо рдЯреНрд░реЗрдб-рдСрдл рдХреЗ рд╕рд╛рде рдХрдИ рдореБрджреНрджреЛрдВ рдХреЛ рдХрдо рдХрд░рддреЗ рд╣реИрдВред

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

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

IQueue рд╡рд┐рддрд░рд┐рдд рдХрд░рдирд╛ рддрдм

рдКрдкрд░ рдкреНрд░рд╕реНрддреБрдд рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рд╕рд╛рде, рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрддрд╛рд░ рдХреЗ рд▓рд┐рдП IQueue<T> (рддрд╛рдХрд┐ рдпрд╣ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ) рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдФрд░ рдпрд╣ рдорд╛рдирддреЗ рд╣реБрдП рдХрд┐ рд╣рдо рд╡рд╣рд╛рдВ рдЪрдпрдирдХрд░реНрддрд╛ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рдЫреЛрдбрд╝ рджреЗрддреЗ рд╣реИрдВ, рдЗрд╕рдореЗрдВ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдкреНрд░рдХрд╛рд░ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реЛрдЧрд╛ рдХрд┐ рдпрджрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рдкрд╛рд╕ рдЕрд▓рдЧ рд╕реЗ (user data, priority) рддреЛ рдЙрдиреНрд╣реЗрдВ рдПрдХ рд░реИрдкрд░ рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА, рдРрд╕рд╛ рд╕рдорд╛рдзрд╛рди рдЕрднреА рднреА рд╕рд╣рдЬ рд╣реИред рдФрд░ рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рд╕рднреА рдЗрдирдкреБрдЯ рдкреНрд░рд╛рд░реВрдкреЛрдВ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ (рдЗрд╕реАрд▓рд┐рдП рдЕрдЧрд░ рд╣рдо рдЪрдпрдирдХрд░реНрддрд╛ рдХреЛ рдЫреЛрдбрд╝ рджреЗрддреЗ рд╣реИрдВ рддреЛ рдЗрд╕реЗ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП)ред рдЪрдпрдирдХрд░реНрддрд╛ рдХреЗ рдмрд┐рдирд╛, Enqueue(TElement, TPriority) рдкрд╣рд▓реЗ рд╕реЗ рддреБрд▓рдиреАрдп рдкреНрд░рдХрд╛рд░реЛрдВ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрдЧрд╛ред рдЧрдгрдирд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рдПрдХрд▓ рд╕рд╛рдорд╛рдиреНрдп рдкреНрд░рдХрд╛рд░ рднреА рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ -- рддрд╛рдХрд┐ рдЗрд╕ рдкрджреНрдзрддрд┐ рдХреЛ IQueue<T> рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗред

рд╡рд┐рд╡рд┐рдз

@svick

рдХреНрдпрд╛ рдпрд╣ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдХрд┐ рдЧрдгрдирд╛ рдХрд░рддреЗ рд╕рдордп рддрддреНрд╡реЛрдВ рдХреЛ рдХрд┐рд╕ рдХреНрд░рдо рдореЗрдВ рд▓реМрдЯрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ? рдореЗрд░рд╛ рдЕрдиреБрдорд╛рди рд╣реИ рдХрд┐ рдЗрд╕реЗ рдХреБрд╢рд▓ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣ рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рд╣реИред

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

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

@pgolebiowski
рдпрд╣ рд╕рдм рдмрд╣реБрдд рд╕рдордЭрджрд╛рд░ рд▓рдЧрддрд╛ рд╣реИред рдХреНрдпрд╛ рдЖрдк Delivering IQueue then рдЕрдиреБрднрд╛рдЧ рдореЗрдВ рд╕реНрдкрд╖реНрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдХреНрдпрд╛ рдЖрдк рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рддрддреНрд╡реЛрдВ рдХреА рдЫреВрдЯ рджрд┐рдП рдЧрдП рдЪрдпрдирдХрд░реНрддрд╛ рдХреЗ рд╡рд┐рдХрд▓реНрдк рдХреЗ рд░реВрдк рдореЗрдВ "рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдкреНрд░рдХрд╛рд░" рдХреЗ рд▓рд┐рдП T : IComparable<T> рд╕реБрдЭрд╛рд╡ рджреЗ рд░рд╣реЗ рд╣реИрдВ?

рдореИрдВ рджреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╣реЛрдиреЗ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реВрдВред

рдореИрдВ рд╣реИрдВрдбрд▓ рдкреНрд░рдХрд╛рд░ рдХреЗ рд░реВрдк рдореЗрдВ object рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдкреАрдЫреЗ рддрд░реНрдХ рдХреЛ рд╕рдордЭ рдирд╣реАрдВ рдкрд╛ рд░рд╣рд╛ рд╣реВрдВ: рдХреНрдпрд╛ рдпрд╣ рд╕рд┐рд░реНрдл рдПрдХ рдирдпрд╛ рдкреНрд░рдХрд╛рд░ рдмрдирд╛рдиреЗ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИ? рдПрдХ рдирдП рдкреНрд░рдХрд╛рд░ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдирд╛ рдиреНрдпреВрдирддрдо рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдУрд╡рд░рд╣реЗрдб рдкреНрд░рджрд╛рди рдХрд░реЗрдЧрд╛, рдЬрдмрдХрд┐ рдПрдкреАрдЖрдИ рдХрд╛ рджреБрд░реБрдкрдпреЛрдЧ рдХрд░рдирд╛ рдХрдард┐рди рд╣реЛрдЧрд╛ (рдЬреЛ рдореБрдЭреЗ string рд╕реЗ Remove(object) рдкрд╛рд╕ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реИ?), рдФрд░ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдореЗрдВ рдЖрд╕рд╛рди (рдЬреЛ рдореБрдЭреЗ рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реИ рд░реЛрдХ рд░рд╣рд╛ рд╣реИ) рддрддреНрд╡ рдХреЛ рд╕реНрд╡рдпрдВ рдкрд╛рд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП Remove(object) , рдФрд░ рдХреЛрд╢рд┐рд╢ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореБрдЭреЗ рдХреМрди рджреЛрд╖реА рдард╣рд░рд╛ рд╕рдХрддрд╛ рд╣реИ?)

рдореИрдВ рдЕрдзрд┐рдХ рдЕрднрд┐рд╡реНрдпрдВрдЬрдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рд╣рд┐рдд рдореЗрдВ, рд╣реИрдВрдбрд▓ рд╡рд┐рдзрд┐рдпреЛрдВ рдореЗрдВ object рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЙрдкрдпреБрдХреНрдд рдирд╛рдорд┐рдд рдбрдореА рдкреНрд░рдХрд╛рд░ рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд рдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рдХрд░рддрд╛ рд╣реВрдВред

рдпрджрд┐ рдбрд┐рдмрдЧрдмрд┐рд▓рд┐рдЯреА рдореЗрдореЛрд░реА рдУрд╡рд░рд╣реЗрдб рдХреЛ рд░реМрдВрдж рджреЗрддреА рд╣реИ, рддреЛ рд╣реИрдВрдбрд▓ рдкреНрд░рдХрд╛рд░ рдореЗрдВ рдпрд╣ рдЬрд╛рдирдХрд╛рд░реА рднреА рд╢рд╛рдорд┐рд▓ рд╣реЛ рд╕рдХрддреА рд╣реИ рдХрд┐ рдпрд╣ рдХрд┐рд╕ рдХрддрд╛рд░ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИ (рдЬреЗрдиреЗрд░рд┐рдХ рдмрдирдирд╛ рд╣реЛрдЧрд╛, рдЬреЛ рдЖрдЧреЗ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреА рд╕реБрд░рдХреНрд╖рд╛ рдХреЛ рдЖрдЧреЗ рдмрдврд╝рд╛рдПрдЧрд╛), рдХреА рддрд░реНрдЬ рдкрд░ рдЙрдкрдпреЛрдЧреА рдЕрдкрд╡рд╛рдж рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ ("рд╣реИрдВрдбрд▓ рд╕рдкреНрд▓рд╛рдИ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛) рдПрдХ рдЕрд▓рдЧ рдХрддрд╛рд░ рджреНрд╡рд╛рд░рд╛"), рдпрд╛ рдХреНрдпрд╛ рдпрд╣ рдкрд╣рд▓реЗ рд╣реА рдЙрдкрднреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рдЪреБрдХрд╛ рд╣реИ ("рд╣реИрдВрдбрд▓ рджреНрд╡рд╛рд░рд╛ рд╕рдВрджрд░реНрднрд┐рдд рддрддреНрд╡ рдкрд╣рд▓реЗ рд╣реА рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ")ред

рдпрджрд┐ рд╣реИрдВрдбрд▓ рд╡рд┐рдЪрд╛рд░ рдЖрдЧреЗ рдмрдврд╝рддрд╛ рд╣реИ, рддреЛ рдореИрдВ рдпрд╣ рдкреНрд░рд╕реНрддрд╛рд╡ рджреВрдВрдЧрд╛ рдХрд┐ рдпрджрд┐ рдЗрд╕ рдЬрд╛рдирдХрд╛рд░реА рдХреЛ рдЙрдкрдпреЛрдЧреА рд╕рдордЭрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЗрди рдЕрдкрд╡рд╛рджреЛрдВ рдХрд╛ рдПрдХ рд╕рдмрд╕реЗрдЯ рднреА рд╕рдВрдмрдВрдзрд┐рдд TryRemove рдФрд░ TryUpdate рд╡рд┐рдзрд┐рдпреЛрдВ рджреНрд╡рд╛рд░рд╛ рдлреЗрдВрдХрд╛ рдЬрд╛рдПрдЧрд╛, рд╕рд┐рд╡рд╛рдп рдЗрд╕рдХреЗ рдХрд┐ рдЬрд╣рд╛рдВ рддрддреНрд╡ рдЕрдм рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реИ, рдпрд╛ рддреЛ рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕реЗ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдпрд╛ рд╣реИрдВрдбрд▓ рд╕реЗ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдпрд╣ рдПрдХ рдХрдо рдЙрдмрд╛рдК, рд╕рд╛рдорд╛рдиреНрдп, рдЙрдкрдпреБрдХреНрдд рдирд╛рдорд┐рдд рд╣реИрдВрдбрд▓ рдкреНрд░рдХрд╛рд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред

@рд╡рд┐рдЬреБрдЕрд▓рдореЗрд▓рди

рдХреНрдпрд╛ рдЖрдк Delivering IQueue then рдЕрдиреБрднрд╛рдЧ рдореЗрдВ рд╕реНрдкрд╖реНрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдХреНрдпрд╛ рдЖрдк рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рддрддреНрд╡реЛрдВ рдХреА рдЫреВрдЯ рджрд┐рдП рдЧрдП рдЪрдпрдирдХрд░реНрддрд╛ рдХреЗ рд╡рд┐рдХрд▓реНрдк рдХреЗ рд░реВрдк рдореЗрдВ "рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдкреНрд░рдХрд╛рд░" рдХреЗ рд▓рд┐рдП T : IComparable<T> рд╕реБрдЭрд╛рд╡ рджреЗ рд░рд╣реЗ рд╣реИрдВ?

рдЗрд╕реЗ рд╕реНрдкрд╖реНрдЯ рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЦреЗрдж рд╣реИред

  • рдореЗрд░рд╛ рдорддрд▓рдм рдерд╛ PriorityQueue<T> рд╡рд┐рддрд░рд┐рдд рдХрд░рдирд╛, рдмрд┐рдирд╛ рдХрд┐рд╕реА рдмрд╛рдзрд╛ рдХреЗ T ред
  • рдпрд╣ рдЕрднреА рднреА IComparer<T> ред
  • рдпрджрд┐ рдРрд╕рд╛ рд╣реЛрддрд╛ рд╣реИ рдХрд┐ T рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рддреБрд▓рдиреАрдп рд╣реИ, рддреЛ рдмрд╕ Comparer<T>.Default рдорд╛рди рд▓рд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ (рдФрд░ рдЖрдк рдмрд┐рдирд╛ рдХрд┐рд╕реА рддрд░реНрдХ рдХреЗ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрддрд╛рд░ рдХреЗ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХреЛ рдХреЙрд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ)ред
  • рдЪрдпрдирдХрд░реНрддрд╛ рдХрд╛ рдПрдХ рдЕрд▓рдЧ рдЙрджреНрджреЗрд╢реНрдп рдерд╛ - рд╕рднреА рдкреНрд░рдХрд╛рд░ рдХреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдбреЗрдЯрд╛ рдХрд╛ рдЙрдкрднреЛрдЧ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ред рдХрдИ рд╡рд┐рдиреНрдпрд╛рд╕ рд╣реИрдВ:

    1. рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдбреЗрдЯрд╛ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ (рджреЛ рднреМрддрд┐рдХ рдЙрджрд╛рд╣рд░рдг) рд╕реЗ рдЕрд▓рдЧ рд╣реИред
    2. рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдбреЗрдЯрд╛ рдореЗрдВ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рд╣реЛрддреА рд╣реИред
    3. рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдбреЗрдЯрд╛ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рд╣реИред
    4. рджреБрд░реНрд▓рдн рдорд╛рдорд▓рд╛: рдХрд┐рд╕реА рдЕрдиреНрдп рддрд░реНрдХ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдкреНрд░рд╛рдкреНрдд рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИ (рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдбреЗрдЯрд╛ рд╕реЗ рдЕрд▓рдЧ рд╡рд╕реНрддреБ рдореЗрдВ рд░рд╣рддрд╛ рд╣реИ)ред

    рджреБрд░реНрд▓рдн рдорд╛рдорд▓рд╛ рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реЛрдЧрд╛ PriorityQueue<T> , рд▓реЗрдХрд┐рди рдпрд╣ рдЬреНрдпрд╛рджрд╛ рдорд╛рдпрдиреЗ рдирд╣реАрдВ рд░рдЦрддрд╛ред рдорд╣рддреНрд╡рдкреВрд░реНрдг рдпрд╣ рд╣реИ рдХрд┐ рдЕрдм рд╣рдо (1), (2), рдФрд░ (3) рдХреЛ рд╕рдВрднрд╛рд▓ рд╕рдХрддреЗ рд╣реИрдВред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЕрдЧрд░ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рджреЛ рд╕рд╛рдорд╛рдиреНрдп рдкреНрд░рдХрд╛рд░ рдереЗ, рддреЛ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ Enqueue(TElement, TPrioriity) рдЬреИрд╕реА рд╡рд┐рдзрд┐ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред рдпрд╣ рд╣рдореЗрдВ рдХреЗрд╡рд▓ (1) рддрдХ рд╕реАрдорд┐рдд рдХрд░ рджреЗрдЧрд╛ред (2) рдЕрддрд┐рд░реЗрдХ рдХреА рдУрд░ рд▓реЗ рдЬрд╛рдПрдЧрд╛ред (3) рдЕрд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рд░реВрдк рд╕реЗ рдмрджрд╕реВрд░рдд рд╣реЛрдЧрд╛ред рдКрдкрд░ IQueue > Enqueue рдЕрдиреБрднрд╛рдЧ рдореЗрдВ рдЗрд╕ рдкрд░ рдХреБрдЫ рдФрд░ рд╣реИ (рджреВрд╕рд░рд╛ Enqueue рд╡рд┐рдзрд┐ рдФрд░ default(TPriority )ред

рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЕрдм рд╕реНрдкрд╖реНрдЯ рд╣реЛ рдЧрдпрд╛ рд╣реИред

рдмреАрдЯреАрдбрдмреНрд▓реВ, рдЗрд╕ рддрд░рд╣ рдХреЗ рд╕рдорд╛рдзрд╛рди рдХреЛ рдорд╛рдирддреЗ рд╣реБрдП, PriorityQueue<T> рдФрд░ IQueue<T> рдХреЗ рдПрдкреАрдЖрдИ рдХреЛ рдбрд┐рдЬрд╛рдЗрди рдХрд░рдирд╛ рдорд╛рдореВрд▓реА рд╣реЛрдЧрд╛ред рдмрд╕ рдХреБрдЫ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ Queue<T> , рдЙрдиреНрд╣реЗрдВ IQueue<T> рдореЗрдВ рдлреЗрдВрдХ рджреЗрдВ рдФрд░ PriorityQueue<T> рд▓рд╛рдЧреВ рдХрд░реЗрдВред рдЯрд╛рдбрд╛! рдореИрдВ

рдореИрдВ рд╣реИрдВрдбрд▓ рдкреНрд░рдХрд╛рд░ рдХреЗ рд░реВрдк рдореЗрдВ object рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдкреАрдЫреЗ рддрд░реНрдХ рдХреЛ рд╕рдордЭ рдирд╣реАрдВ рдкрд╛ рд░рд╣рд╛ рд╣реВрдВ: рдХреНрдпрд╛ рдпрд╣ рд╕рд┐рд░реНрдл рдПрдХ рдирдпрд╛ рдкреНрд░рдХрд╛рд░ рдмрдирд╛рдиреЗ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИ?

  • рд╣рд╛рдБ, рдареАрдХред рдЗрд╕ рдзрд╛рд░рдгрд╛ рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП рдХрд┐ рд╣рдо рдЗрд╕ рддрд░рд╣ рдХреЗ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЦреБрд▓рд╛рд╕рд╛ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдпрд╣ рдЕрднреА рднреА рдПрдХ рд╣реИрдВрдбрд▓ рдХреА рдЕрд╡рдзрд╛рд░рдгрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдПрдХрдорд╛рддреНрд░ рд╕рдорд╛рдзрд╛рди рд╣реИ (рдФрд░ рдЗрд╕ рддрд░рд╣ рдЕрдзрд┐рдХ рд╢рдХреНрддрд┐ рдФрд░ рдЧрддрд┐ рд╣реИ)ред рдореИрдВ рдорд╛рдирддрд╛ рд╣реВрдВ рдХрд┐ рдпрд╣ рдЖрджрд░реНрд╢ рдирд╣реАрдВ рд╣реИ - рдмрд▓реНрдХрд┐ рдпрд╣ рдПрдХ рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рдерд╛ рдХрд┐ рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ рд╣рдо рд╡рд░реНрддрдорд╛рди рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ рдЪрд┐рдкрдХреЗ рд░рд╣рддреЗ рд╣реИрдВ рдФрд░ рдЕрдзрд┐рдХ рд╢рдХреНрддрд┐ рдФрд░ рджрдХреНрд╖рддрд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ (рдЬрд┐рд╕рдХреЗ рдЦрд┐рд▓рд╛рдл рдореИрдВ рд╣реВрдВ)ред
  • рдпрд╣ рджреЗрдЦрддреЗ рд╣реБрдП рдХрд┐ рд╣рдо рд╡реИрдХрд▓реНрдкрд┐рдХ рджреГрд╖реНрдЯрд┐рдХреЛрдг (рдЕрд▓рдЧ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрддрд╛рд░ рдФрд░ рдвреЗрд░) рдХреЗ рд╕рд╛рде рдЬрд╛рдПрдВрдЧреЗ, рдпрд╣ рдЖрд╕рд╛рди рд╣реИред рд╣рдо PriorityQueue<T> рдХреЛ System.Collections.Generic рдореЗрдВ рд░рд╣рдиреЗ рджреЗ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрдмрдХрд┐ рд╣реАрдк рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ System.Collections.Specialized ред рд╡рд╣рд╛рдВ, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЗрд╕ рддрд░рд╣ рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЛ рдкреЗрд╢ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдЙрдЪреНрдЪ рдореМрдХрд╛ рд╣реЛрдЧрд╛, рдЕрдВрддрддрдГ рдЕрджреНрднреБрдд рд╕рдВрдХрд▓рди-рд╕рдордп рддреНрд░реБрдЯрд┐ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдирд╛ рд╣реЛрдЧрд╛ред
  • рд▓реЗрдХрд┐рди рдПрдХ рдмрд╛рд░ рдлрд┐рд░ - рдЕрдЧрд░ рд╣рдо рдРрд╕рд╛ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд░рдЦрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рддреЛ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрддрд╛рд░ рдФрд░ рдвреЗрд░ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рдПрдХ рд╕рд╛рде рдбрд┐рдЬрд╛рдЗрди рдХрд░рдирд╛ рдмрд╣реБрдд рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред рдХреНрдпреЛрдВрдХрд┐ рдПрдХ рд╕рдорд╛рдзрд╛рди рд╡рд╣ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ рдЬреЛ рджреВрд╕рд░рд╛ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред

рдпрджрд┐ рдбрд┐рдмрдЧрдмрд┐рд▓рд┐рдЯреА рдореЗрдореЛрд░реА рдУрд╡рд░рд╣реЗрдб рдХреЛ рд░реМрдВрдж рджреЗрддреА рд╣реИ, рддреЛ рд╣реИрдВрдбрд▓ рдкреНрд░рдХрд╛рд░ рдореЗрдВ рдпрд╣ рдЬрд╛рдирдХрд╛рд░реА рднреА рд╢рд╛рдорд┐рд▓ рд╣реЛ рд╕рдХрддреА рд╣реИ рдХрд┐ рдпрд╣ рдХрд┐рд╕ рдХрддрд╛рд░ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИ (рдЬреЗрдиреЗрд░рд┐рдХ рдмрдирдирд╛ рд╣реЛрдЧрд╛, рдЬреЛ рдЖрдЧреЗ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреА рд╕реБрд░рдХреНрд╖рд╛ рдХреЛ рдЖрдЧреЗ рдмрдврд╝рд╛рдПрдЧрд╛), рдХреА рддрд░реНрдЬ рдкрд░ рдЙрдкрдпреЛрдЧреА рдЕрдкрд╡рд╛рдж рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ ("рд╣реИрдВрдбрд▓ рд╕рдкреНрд▓рд╛рдИ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛) рдПрдХ рдЕрд▓рдЧ рдХрддрд╛рд░ рджреНрд╡рд╛рд░рд╛"), рдпрд╛ рдХреНрдпрд╛ рдпрд╣ рдкрд╣рд▓реЗ рд╣реА рдЙрдкрднреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рдЪреБрдХрд╛ рд╣реИ ("рд╣реИрдВрдбрд▓ рджреНрд╡рд╛рд░рд╛ рд╕рдВрджрд░реНрднрд┐рдд рддрддреНрд╡ рдкрд╣рд▓реЗ рд╣реА рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ")ред

рдпрджрд┐ рд╣реИрдВрдбрд▓ рд╡рд┐рдЪрд╛рд░ рдЖрдЧреЗ рдмрдврд╝рддрд╛ рд╣реИ, рддреЛ рдореИрдВ рдкреНрд░рд╕реНрддрд╛рд╡ рджреВрдВрдЧрд╛ рдХрд┐ рдпрджрд┐ рдпрд╣ рдЬрд╛рдирдХрд╛рд░реА рдЙрдкрдпреЛрдЧреА рд╕рдордЭреА рдЬрд╛рддреА рд╣реИ...

рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдФрд░ рдЕрдзрд┐рдХ рд╕рдВрднрд╡ рд╣реИ: рдкрд▓рдХ:ред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рд╣рдорд╛рд░реЗ рд╕рдореБрджрд╛рдп рджреНрд╡рд╛рд░рд╛ рдЙрди рд╕рднреА рдХреЛ рддреГрддреАрдп-рдкрдХреНрд╖ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдореЗрдВ рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред

@karelz @safern @ianhays @terrajobst @bendono @svick @ @SamuelEnglard @xied75 рдФрд░ рдЕрдиреНрдп - рдХреНрдпрд╛ рдЖрдкрдХреЛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рддрд░рд╣ рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ рдХреЛрдИ рдорддрд▓рдм рд╣реЛрдЧрд╛ (рдЬреИрд╕рд╛ рдХрд┐ рдЗрд╕ рдФрд░ рдЗрд╕ рдкреЛрд╕реНрдЯ рдореЗрдВ рд╡рд░реНрдгрд┐рдд рд╣реИ)? рдХреНрдпрд╛ рдпрд╣ рдЖрдкрдХреА рд╕рднреА рдЕрдкреЗрдХреНрд╖рд╛рдУрдВ рдФрд░ рдЬрд░реВрд░рддреЛрдВ рдХреЛ рдкреВрд░рд╛ рдХрд░реЗрдЧрд╛?

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рджреЛ рд╡рд░реНрдЧ рдмрдирд╛рдиреЗ рдХрд╛ рд╡рд┐рдЪрд╛рд░ рдмрд╣реБрдд рдорд╛рдпрдиреЗ рд░рдЦрддрд╛ рд╣реИ рдФрд░ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдореБрджреНрджреЛрдВ рдХреЛ рд╣рд▓ рдХрд░рддрд╛ рд╣реИред рдХреЗрд╡рд▓ рдореЗрд░реЗ рдкрд╛рд╕ рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ PriorityQueue<T> рд▓рд┐рдП рдЖрдВрддрд░рд┐рдХ рд░реВрдк рд╕реЗ Heap<T> рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдФрд░ рдЗрд╕рдХреА рдЙрдиреНрдирдд рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ "рдЫрд┐рдкрд╛рдиреЗ" рдХреЗ рд▓рд┐рдП рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИред

рддреЛ рдореВрд▓ рд░реВрдк рд╕реЗ...

IQueue<T>

public interface IQueue<T> :
    IEnumerable,
    IEnumerable<T>,
    IReadOnlyCollection<T>
{
    int Count { get; }

    void Clear();
    bool Contains(T element);
    bool IsEmpty();

    void Enqueue(T element);

    T Peek();
    T Dequeue();

    bool TryPeek(out T element);
    bool TryDequeue(out T element);
}

рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

  • System.Collections.Generic ред
  • рд╡рд┐рдЪрд╛рд░: рд╣рдо рдпрд╣рд╛рдВ рддрддреНрд╡реЛрдВ рдХреЛ рд╣рдЯрд╛рдиреЗ рдХреЗ рддрд░реАрдХреЗ рднреА рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ ( Remove рдФрд░ TryRemove )ред рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ Queue<T> рдирд╣реАрдВ рд╣реИред рд▓реЗрдХрд┐рди рдпрд╣ рдЬрд░реВрд░реА рдирд╣реАрдВ рд╣реИред

PriorityQueue<T>

public class PriorityQueue<T> : IQueue<T>
{
    public PriorityQueue();
    public PriorityQueue(IComparer<T> comparer);
    public PriorityQueue(IEnumerable<T> collection);
    public PriorityQueue(IEnumerable<T> collection, IComparer<T> comparer);

    public IComparer<T> Comparer { get; }
    public int Count { get; }

    public bool IsEmpty();
    public void Clear();
    public bool Contains(T element);

    public void Enqueue(T element);

    public T Peek();
    public T Dequeue();

    public bool TryPeek(out T element);
    public bool TryDequeue(out T element);

    public void Remove(T element);
    public bool TryRemove(T element);

    public IEnumerator<T> GetEnumerator();
    IEnumerator IEnumerable.GetEnumerator();
}

рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

  • System.Collections.Generic ред
  • рдпрджрд┐ IComparer<T> рд╡рд┐рддрд░рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ Comparer<T>.Default рдХреЛ рд╕рдорди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
  • рдпрд╣ рд╕реНрдерд┐рд░ рд╣реИред
  • рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
  • Remove рдФрд░ TryRemove рдХреЗрд╡рд▓ рдкрд╣рд▓реА рдШрдЯрдирд╛ рдХреЛ рд╣рдЯрд╛ рджреЗрдВ (рдпрджрд┐ рд╡реЗ рдЗрд╕реЗ рдвреВрдВрдврддреЗ рд╣реИрдВ)ред
  • рдЧрдгрдирд╛ рдХрд╛ рдЖрджреЗрд╢ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

рдвреЗрд░

рдЕрднреА рдпрд╣рд╛рдБ рд╕рдм рдХреБрдЫ рдирд╣реАрдВ рд▓рд┐рдЦ рд░рд╣рд╛ рд╣реВрдБ, рд▓реЗрдХрд┐рди:

  • System.Collections.Specialized ред
  • рдпрд╣ рд╕реНрдерд┐рд░ рдирд╣реАрдВ рд╣реЛрдЧрд╛ (рдФрд░ рд╕реНрдореГрддрд┐ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдЗрддрдирд╛ рддреЗрдЬрд╝ рдФрд░ рдЕрдзрд┐рдХ рдХреБрд╢рд▓)ред
  • рд╕рдорд░реНрдерди рд╕рдВрднрд╛рд▓рдирд╛, рдЙрдЪрд┐рдд рдЕрджреНрдпрддрди рдХрд░рдирд╛ рдФрд░ рд╣рдЯрд╛рдирд╛

    • рдУ (рдПрди) рдХреЗ рдмрдЬрд╛рдп рдУ (рд▓реЙрдЧ рдПрди) рдореЗрдВ рдЬрд▓реНрджреА рд╕реЗ рдХрд┐рдпрд╛ рдЧрдпрд╛

    • рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдХрд┐рдпрд╛

  • рдЧрдгрдирд╛ рдХрд╛ рдЖрджреЗрд╢ рдирд╣реАрдВ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ (рддреЗрдЬрд╝)ред
  • рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред

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

  • IQueue рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢рд┐рд╖реНрдЯрддрд╛рдЕрдЪреНрдЫрд╛ рд▓рдЧ рд░рд╣рд╛ рд╣реИред

  • IQueue рдореЗрдВ "int рдХрд╛рдЙрдВрдЯ {get; }" рдЬреЛрдбрд╝рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВрддрд╛рдХрд┐ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реЛ рдХрд┐ IReadOnlyCollection рд╕реЗ рд╣рдореЗрдВ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓рд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВ, рдЗрд╕ рдкрд░ рдзреНрдпрд╛рди рджрд┐рдП рдмрд┐рдирд╛ рдЧрдгрдирд╛ рд╡рд╛рдВрдЫрд┐рдд рд╣реИ.

  • TryPeek рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдбрд╝ рдкрд░, IQueue рдореЗрдВ TryDequeueрдпрд╣ рджреЗрдЦрддреЗ рд╣реБрдП рдХрд┐ рд╡реЗ рдХрддрд╛рд░ рдореЗрдВ рдирд╣реАрдВ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЙрди рд╕рд╣рд╛рдпрдХреЛрдВ рдХреЛ рд╢рд╛рдпрдж рдХреНрдпреВ рдФрд░ рд╕реНрдЯреИрдХ рдореЗрдВ рднреА рдЬреЛрдбрд╝рд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

  • IsEmpty рдПрдХ рдмрд╛рд╣рд░реА рдХреА рддрд░рд╣ рд▓рдЧрддрд╛ рд╣реИ; рдмреАрд╕реАрдПрд▓ рдореЗрдВ рдХрдИ рдЕрдиреНрдп рд╕рдВрдЧреНрд░рд╣ рдкреНрд░рдХрд╛рд░ рдирд╣реАрдВ рд╣реИрдВред рдЗрд╕реЗ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдореЗрдВ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдореЗрдВ рдпрд╣ рдорд╛рди рд▓реЗрдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдЗрд╕реЗ рдХрддрд╛рд░ рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рдПрдЧрд╛, рдФрд░ рдЗрд╕реЗ рдХреНрдпреВ рдореЗрдВ рдЬреЛрдбрд╝рдирд╛ рдереЛрдбрд╝рд╛ рдЕрдЬреАрдм рд▓рдЧрддрд╛ рд╣реИрдФрд░ рдмрд╛рдХреА рдХреБрдЫ рднреА рдирд╣реАрдВред рдпрд╣ рдЕрдиреБрд╢рдВрд╕рд╛ рдХрд░рддреЗ рд╣реБрдП рдХрд┐ рд╣рдо рдЗрд╕реЗ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╕реЗ рдЫреЛрдбрд╝ рджреЗрдВ, рдФрд░ рд╢рд╛рдпрдж рдХрдХреНрд╖рд╛ рднреАред

  • TryRemove рдбреНрд░реЙрдк рдХрд░реЗрдВ рдФрд░ рдирд┐рдХрд╛рд▓реЗрдВ рдХреЛ "рдмреВрд▓ рд░рд┐рдореВрд╡" рдореЗрдВ рдмрджрд▓реЗрдВред рдЕрдиреНрдп рд╕рдВрдЧреНрд░рд╣ рд╡рд░реНрдЧреЛрдВ рдХреЗ рд╕рд╛рде рд╕рдВрд░реЗрдЦрдг рдореЗрдВ рд░рдЦрдирд╛ рдпрд╣рд╛рдВ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реЛрдЧрд╛ - рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рдкрд╛рд╕ рдмрд╣реБрдд рд╕рд╛рд░реА рдорд╛рдВрд╕рдкреЗрд╢реА-рд╕реНрдореГрддрд┐ рд╣реЛрдЧреА рдЬреЛ рдХрд╣рддреА рд╣реИ рдХрд┐ "рдПрдХ рд╕рдВрдЧреНрд░рд╣ рдореЗрдВ рд╣рдЯрд╛рдПрдВ() рдлреЗрдВрдХрддрд╛ рдирд╣реАрдВ рд╣реИ"ред рдпрд╣ рдПрдХ рдРрд╕рд╛ рдХреНрд╖реЗрддреНрд░ рд╣реИ рдЬрд╣рд╛рдВ рдХрдИ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдкрд░реАрдХреНрд╖рдг рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗ рдФрд░ рдпрджрд┐ рд╕рд╛рдорд╛рдиреНрдп рд╡реНрдпрд╡рд╣рд╛рд░ рдмрджрд▓ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рддреЛ рдмрд╣реБрдд рдЖрд╢реНрдЪрд░реНрдп рд╣реЛрдЧрд╛ред

рдЖрдкрдХреЗ рдкрд╣рд▓реЗ рдХреЗ рдЙрджреНрдзрд░рдг @pgolebiowski . рд╕реЗ

  1. рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдбреЗрдЯрд╛ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ (рджреЛ рднреМрддрд┐рдХ рдЙрджрд╛рд╣рд░рдг) рд╕реЗ рдЕрд▓рдЧ рд╣реИред
  2. рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдбреЗрдЯрд╛ рдореЗрдВ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рд╣реЛрддреА рд╣реИред
  3. рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдбреЗрдЯрд╛ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рд╣реИред
  4. рджреБрд░реНрд▓рдн рдорд╛рдорд▓рд╛: рдХрд┐рд╕реА рдЕрдиреНрдп рддрд░реНрдХ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдкреНрд░рд╛рдкреНрдд рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИ (рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдбреЗрдЯрд╛ рд╕реЗ рдЕрд▓рдЧ рд╡рд╕реНрддреБ рдореЗрдВ рд░рд╣рддрд╛ рд╣реИ)ред

5 рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рдиреЗ рдХреА рднреА рд╕рд┐рдлрд╛рд░рд┐рд╢ рдХрд░реЗрдВред рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдбреЗрдЯрд╛ рдореЗрдВ рдХрдИ рдХреНрд╖реЗрддреНрд░реЛрдВ рдореЗрдВ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рд╣реЛрддреА рд╣реИ (рдЬреИрд╕рд╛ рдХрд┐ рд╣рдордиреЗ Lucene.net рдореЗрдВ рджреЗрдЦрд╛ рдерд╛)

TryPeek рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдбрд╝ рдкрд░, IQueue рдореЗрдВ TryDequeue рдпрд╣ рджреЗрдЦрддреЗ рд╣реБрдП рдХрд┐ рд╡реЗ рдХрддрд╛рд░ рдореЗрдВ рдирд╣реАрдВ рд╣реИрдВ

рд╡реЗ рд╕рд┐рд╕реНрдЯрдо/рд╕рдВрдЧреНрд░рд╣/рдЬреЗрдиреЗрд░рд┐рдХ/Queue.cs#L253-L295 . рд╣реИрдВ

рджреВрд╕рд░реА рдУрд░ рдХрддрд╛рд░ рдирд╣реАрдВ рд╣реИ
c# public void Remove(T element); public bool TryRemove(T element);

IQueue рдореЗрдВ "int Count {get; }" рдЬреЛрдбрд╝рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ рддрд╛рдХрд┐ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реЛ рдХрд┐ IReadOnlyCollection рд╕реЗ рд╣рдореЗрдВ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓рд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВ, рдЗрд╕ рдкрд░ рдзреНрдпрд╛рди рджрд┐рдП рдмрд┐рдирд╛ рдХрд╛рдЙрдВрдЯ рд╡рд╛рдВрдЫрд┐рдд рд╣реИред

рдареАрдХ рд╣реИред рдЗрд╕реЗ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░реЗрдВрдЧреЗред

IsEmpty рдПрдХ рдмрд╛рд╣рд░реА рдХреА рддрд░рд╣ рд▓рдЧрддрд╛ рд╣реИ; рдмреАрд╕реАрдПрд▓ рдореЗрдВ рдХрдИ рдЕрдиреНрдп рд╕рдВрдЧреНрд░рд╣ рдкреНрд░рдХрд╛рд░ рдирд╣реАрдВ рд╣реИрдВред

рдЗрд╕реЗ @karelz рджреНрд╡рд╛рд░рд╛ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рдерд╛, рдореИрдВрдиреЗ рдЕрднреА рдЗрд╕реЗ рдХреЙрдкреА рдХрд┐рдпрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореБрдЭреЗ рдпрд╣ рдкрд╕рдВрдж рд╣реИ, рдПрдкреАрдЖрдИ рд╕рдореАрдХреНрд╖рд╛ рдореЗрдВ рд╡рд┐рдЪрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ :)

TryRemove рдбреНрд░реЙрдк рдХрд░реЗрдВ рдФрд░ рдирд┐рдХрд╛рд▓реЗрдВ рдХреЛ "рдмреВрд▓ рд░рд┐рдореВрд╡" рдореЗрдВ рдмрджрд▓реЗрдВред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ Remove рдФрд░ TryRemove рдЗрд╕ рддрд░рд╣ рдХреЗ рдЕрдиреНрдп рддрд░реАрдХреЛрдВ рдХреЗ рдЕрдиреБрд░реВрдк рд╣реИ ( Peek рдФрд░ TryPeek рдпрд╛ Dequeue рдФрд░ TryDequeue )

  1. рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдбреЗрдЯрд╛ рдореЗрдВ рдХрдИ рдХреНрд╖реЗрддреНрд░реЛрдВ рдореЗрдВ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рд╣реЛрддреА рд╣реИ

рдпрд╣ рдПрдХ рд╡реИрдз рдмрд┐рдВрджреБ рд╣реИ, рд▓реЗрдХрд┐рди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕реЗ рдЪрдпрдирдХрд░реНрддрд╛ рдХреЗ рд╕рд╛рде рднреА рд╕рдВрднрд╛рд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ (рдпрд╣ рд╕рдм рдХреЗ рдмрд╛рдж рдХреЛрдИ рднреА рдХрд╛рд░реНрдп рд╣реИ) - рд▓реЗрдХрд┐рди рдпрд╣ рдвреЗрд░ рдХреЗ рд▓рд┐рдП рд╣реИред

IsEmpty рдПрдХ рдмрд╛рд╣рд░реА рдХреА рддрд░рд╣ рд▓рдЧрддрд╛ рд╣реИ; рдмреАрд╕реАрдПрд▓ рдореЗрдВ рдХрдИ рдЕрдиреНрдп рд╕рдВрдЧреНрд░рд╣ рдкреНрд░рдХрд╛рд░ рдирд╣реАрдВ рд╣реИрдВред

рдПрдлрдбрдмреНрд▓реНрдпреВрдЖрдИрдбрдмреНрд▓реНрдпреВ, bool IsEmpty { get; } рдХреБрдЫ рдРрд╕рд╛ рд╣реИ рдЬреЛ рдореЗрд░реА рдЗрдЪреНрдЫрд╛ рд╣реИ рдХрд┐ рд╣рдо IProducerConsumerCollection<T> рдЬреЛрдбрд╝ рджреЗрдВ, рдФрд░ рдореБрдЭреЗ рдЦреЗрдж рд╣реИ рдХрд┐ рдпрд╣ рдХрдИ рдореМрдХреЛрдВ рдкрд░ рд╡рд╣рд╛рдВ рдирд╣реАрдВ рд░рд╣рд╛ рд╣реИред рдЗрд╕рдХреЗ рдмрд┐рдирд╛, рд░реИрдкрд░ рдХреЛ рдЕрдХреНрд╕рд░ Count == 0 рдХреЗ рдмрд░рд╛рдмрд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдЬреЛ рдХреБрдЫ рд╕рдВрдЧреНрд░рд╣реЛрдВ рдХреЗ рд▓рд┐рдП рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╛рдлреА рдХрдо рдХреБрд╢рд▓ рд╣реИ, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЕрдзрд┐рдХрд╛рдВрд╢ рд╕рдорд╡рд░реНрддреА рд╕рдВрдЧреНрд░рд╣реЛрдВ рдкрд░ред

@pgolebiowski рд╡рд░реНрддрдорд╛рди рдПрдкреАрдЖрдИ рдЕрдиреБрдмрдВрдзреЛрдВ рдХреЛ рд╣реЛрд╕реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЬреАрдердм рд░рд┐рдкреЛрдЬрд┐рдЯрд░реА рдмрдирд╛рдиреЗ рдХреЗ рд╡рд┐рдЪрд╛рд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЖрдк рдХреИрд╕рд╛ рдорд╣рд╕реВрд╕ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдПрдХ .md рдлрд╝рд╛рдЗрд▓ рдпрд╛ рджреЛ рдбрд┐рдЬрд╝рд╛рдЗрди рддрд░реНрдХ рдпреБрдХреНрддред рдПрдХ рдмрд╛рд░ рдЬрдм рдпрд╣ рд╕реНрдерд┐рд░ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЗрд╕реЗ рддреИрдпрд╛рд░ рд╣реЛрдиреЗ рдкрд░ CoreFxLabs рддрдХ рдкреАрдЖрд░ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЗ рд▓рд┐рдП рдПрдХ рдЬрдЧрд╣ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ?

@svick

рдпрджрд┐ Peek рдФрд░ Dequeue рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХреЗ рд▓рд┐рдП out рдкреИрд░рд╛рдореАрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЙрдирдХреЗ рдкрд╛рд╕ рдУрд╡рд░рд▓реЛрдб рднреА рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рд╡рд╛рдкрд╕ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╕рд╛рдорд╛рдиреНрдп рдЙрдкрдпреЛрдЧ рдХреЛ рд╕рд░рд▓ рдХрд░реЗрдЧрд╛

рдорд╛рдирд╛ред рдЖрдЗрдП рдЙрдиреНрд╣реЗрдВ рдЬреЛрдбрд╝реЗрдВред

рдХреНрдпрд╛ рдкреНрд░рд╛рдердорд┐рдХрддрд╛рдУрдВ рдХреЛ рдЕрдирджреЗрдЦрд╛ рдХрд░рддреЗ рд╣реБрдП, рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрддрд╛рд░ рдореЗрдВ рдХреЗрд╡рд▓ рд╡рд╕реНрддреБрдУрдВ рдХреА рдЧрдгрдирд╛ рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП?

рдЕрдЪреНрдЫрд╛ рдкреНрд░рд╢реНрдиред рдЖрдк рдХреНрдпрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рджреЗрдВрдЧреЗ? IEnumerable<TElement> Elements { get; } ?

рд╕реНрдерд┐рд░рддрд╛ - рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реЛрдЧрд╛ рдХрд┐ рдЖрдВрддрд░рд┐рдХ рд░реВрдк рд╕реЗ, рдкреНрд░рд╛рдердорд┐рдХрддрд╛ (priority, version) рдЬреЛрдбрд╝реА рдХреА рддрд░рд╣ рдХреБрдЫ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдо Update рдХреЛ рддрд╛рд░реНрдХрд┐рдХ Remove + Enqueue рдорд╛рдирдХрд░ рдЗрд╕рд╕реЗ рдмрдЪ рд╕рдХрддреЗ рд╣реИрдВред рд╣рдо рд╣рдореЗрд╢рд╛ рд╕рдорд╛рди-рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рд╡рд╛рд▓реЗ рдЖрдЗрдЯрдо рдХреЗ рдЕрдВрдд рдореЗрдВ рдЖрдЗрдЯрдо рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ (рдореВрд▓ рд░реВрдк рд╕реЗ рддреБрд▓рдирд╛рдХрд░реНрддрд╛ рдкрд░рд┐рдгрд╛рдо 0 рдХреЛ -1 рдХреЗ рд░реВрдк рдореЗрдВ рдорд╛рдирддреЗ рд╣реИрдВ)ред рдЖрдИрдПрдордУ рдЬреЛ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред


@рдмреЗрдирд╛рджрдореНрд╕

рдЯреНрд░рд╛рдИрдПрдХреНрд╕ рд╡рд┐рдзрд┐рдпрд╛рдВ рдореВрд▓ рдмреАрд╕реАрдПрд▓ рдореЗрдВ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдкреИрдЯрд░реНрди рдирд╣реАрдВ рдереАрдВ; рд╕рдорд╡рд░реНрддреА рдкреНрд░рдХрд╛рд░реЛрдВ рддрдХ (рд╣рд╛рд▓рд╛рдВрдХрд┐ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ Dictionary.TryGetValue 2.0 рдореЗрдВ рдкрд╣рд▓рд╛ рдЙрджрд╛рд╣рд░рдг рд╣реЛ рд╕рдХрддрд╛ рд╣реИ?)
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП TryX рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рдХреЗрд╡рд▓ рдХреНрдпреВ рдФрд░ рд╕реНрдЯреИрдХ рдХреЗ рд▓рд┐рдП рдХреЛрд░ рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдЕрднреА рддрдХ рдлреНрд░реЗрдорд╡рд░реНрдХ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рдирд╣реАрдВ рд╣реИрдВред

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


@pgolebiowski

рд╡реИрдХрд▓реНрдкрд┐рдХ рд░реВрдк рд╕реЗ, рд╣рдо рдЗрд╕ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрддрд╛рд░ рд╕реЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╣рдЯрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдЗрд╕реЗ рд╣реАрдк рдореЗрдВ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕рдХреЗ рдХрдИ рдлрд╛рдпрджреЗ рд╣реИрдВ

рд╣рдореНрдо, рдХреБрдЫ рдореБрдЭреЗ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдХрд╛ рдпрд╣рд╛рдВ рдХреЛрдИ рдПрдЬреЗрдВрдбрд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ
рдЕрдм рдЧрдВрднреАрд░рддрд╛ рд╕реЗ, рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЕрдЪреНрдЫреА рджрд┐рд╢рд╛ рд╣реИ рдЬрд┐рд╕рдХрд╛ рд╣рдо рд╣рд░ рд╕рдордп рд▓рдХреНрд╖реНрдп рдХрд░ рд░рд╣реЗ рдереЗ - PriorityQueue рдХрднреА рднреА Heap рди рдХрд░рдиреЗ рдХрд╛ рдХрд╛рд░рдг рдирд╣реАрдВ рдерд╛ред рдпрджрд┐ рд╣рдо рдЗрд╕ рддрдереНрдп рдХреЗ рд╕рд╛рде рдареАрдХ рд╣реИрдВ рдХрд┐ Heap рдЗрд╕реЗ CoreFX рдореЗрдВ рдирд╣реАрдВ рдмрдирд╛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ PowerCollections рдХреЗ рд╕рд╛рде рдЙрдиреНрдирдд рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛ рдХреЗ рд░реВрдк рдореЗрдВ CoreFXExtensions рд░реЗрдкреЛ рдореЗрдВ "рдмрд╕" рд░рд╣ рд╕рдХрддрд╛ рд╣реИ, рддреЛ рдореИрдВ рдЗрд╕рдХреЗ рд╕рд╛рде рдареАрдХ рд╣реВрдВ,

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

рдореИрдВ рдирд╣реАрдВ рджреЗрдЦрддрд╛ рдХрд┐ рд╣рдореЗрдВ рдЗрд╕реЗ рдПрдХ рд╕рд╛рде рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпреЛрдВ рд╣реИред рдЖрдИрдПрдордУ рд╣рдо PriorityQueue рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рд╕рдорд╛рдирд╛рдВрддрд░/рдмрд╛рдж рдореЗрдВ "рдЙрдЪрд┐рдд" Heap рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред рдореБрдЭреЗ рдХреЛрдИ рдЖрдкрддреНрддрд┐ рдирд╣реАрдВ рд╣реИ рдЕрдЧрд░ рдХреЛрдИ рдЙрдиреНрд╣реЗрдВ рдПрдХ рд╕рд╛рде рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдХреЛрдИ рдордЬрдмреВрдд рдХрд╛рд░рдг рдирд╣реАрдВ рджрд┐рдЦрддрд╛ рд╣реИ рдХрд┐ рдЙрдкрдпреЛрдЧ рдореЗрдВ рдЖрд╕рд╛рди PriorityQueue рдЕрд╕реНрддрд┐рддреНрд╡ рдХреЛ "рдЙрдЪрд┐рдд/рдЙрдЪреНрдЪ-рдкрд░рдл" рдЙрдиреНрдирдд Heap рдбрд┐рдЬрд╛рдЗрди рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред

IQueue

рдЕрджреНрдпрддрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред рдЖрдкрдХреА рдмрд╛рддреЛрдВ рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП, рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рд╣рдореЗрдВ IQueue рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ рд░рд╛рд╕реНрддреЗ рд╕реЗ рд╣рдЯ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЖрдИрдПрдордУ рдпрд╣ рдЕрдЪреНрдЫрд╛ рд╣реИред рдЕрдЧрд░ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЪрдпрдирдХрд░реНрддрд╛ рд╣реЛрддрд╛, рддреЛ рдпрд╣ рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд╣реЛрддрд╛ред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдореБрдЭреЗ рдЪрдпрдирдХрд░реНрддрд╛ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдкрд╕рдВрдж рдирд╣реАрдВ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдореЗрдВ рдЕрдЬреАрдмрддрд╛ рдФрд░ рдЬрдЯрд┐рд▓рддрд╛ рд▓рд╛рддрд╛ рд╣реИ рдЬрдм рдЪрдпрдирдХрд░реНрддрд╛ рдХреЛ PriorityQueue (рдХреЗрд╡рд▓ Enqueue рдФрд░ Update рдкрд░ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рд╡реИрдХрд▓реНрдкрд┐рдХ (рд╡рд╕реНрддреБ) рд╕рдВрднрд╛рд▓

рдЗрд╕ рддрд░рд╣ рдХреЗ рдУрд╡рд░рд▓реЛрдб рдЖрдИрдПрдордУ рдХреЗ рд▓рд┐рдП рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдпрд╣ рдПрдХ рдмреБрд░рд╛ рд╡рд┐рдЪрд╛рд░ рдирд╣реАрдВ рд╣реИ (рд╣рд╛рд▓рд╛рдВрдХрд┐ рдереЛрдбрд╝рд╛ рдмрджрд╕реВрд░рдд)ред рд╣рдореЗрдВ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рд╣реИрдВрдбрд▓ рдЧрд▓рдд PriorityQueue , рдЬреЛ рдУ (рд▓реЙрдЧ рдПрди) рд╣реИред
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдПрдкреАрдЖрдИ рд╕рдореАрдХреНрд╖рдХ рдЗрд╕реЗ рдЕрд╕реНрд╡реАрдХрд╛рд░ рдХрд░ рджреЗрдВрдЧреЗ, рд▓реЗрдХрд┐рди рдЖрдИрдПрдордУ рдЗрд╕рдХреЗ рд╕рд╛рде рдкреНрд░рдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╢реЙрдЯ рдХреЗ рд▓рд╛рдпрдХ рд╣реИ ...

рд╕реНрдерд┐рд░рддрд╛

рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рд╕реНрдерд┐рд░рддрд╛ рдХрд┐рд╕реА рднреА рдкреВрд░реНрдг/рдореЗрдореЛрд░реА рдУрд╡рд░рд╣реЗрдб рдХреЗ рд╕рд╛рде рдЖрддреА рд╣реИ (рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рд╣рдордиреЗ Update рдкрд╣рд▓реЗ рд╣реА рдЧрд┐рд░рд╛ рджрд┐рдпрд╛ рд╣реИ рдпрд╛ рд╣рдо Update рдХреЛ рддрд╛рд░реНрдХрд┐рдХ Remove + Enqueue рдорд╛рдирддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд╣рдо рдореВрд▓ рд░реВрдк рд╕реЗ рддрддреНрд╡ рдХреА рдЖрдпреБ рдХреЛ рд░реАрд╕реЗрдЯ рдХрд░рддреЗ рд╣реИрдВ)ред рдмрд╕ рддреБрд▓рдирд╛рдХрд░реНрддрд╛ рдкрд░рд┐рдгрд╛рдо 0 рдХреЛ -1 рдХреЗ рд░реВрдк рдореЗрдВ рдорд╛рдиреЗрдВ рдФрд░ рд╕рдм рдХреБрдЫ рдЕрдЪреНрдЫрд╛ рд╣реИ ... рдпрд╛ рдХреНрдпрд╛ рдореБрдЭреЗ рдХреБрдЫ рдпрд╛рдж рдЖ рд░рд╣рд╛ рд╣реИ?

рдЪрдпрдирдХрд░реНрддрд╛ рдФрд░ IQueue<T>

2 рдкреНрд░рд╕реНрддрд╛рд╡реЛрдВ рдХрд╛ рд╣реЛрдирд╛ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдЪрд╛рд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ (рдФрд░ рд╣рдо рд╕рдВрднрд╛рд╡рд┐рдд рд░реВрдк рд╕реЗ рджреЛрдиреЛрдВ рдХреЛ рд▓реЗ рд╕рдХрддреЗ рд╣реИрдВ):

  • PriorityQueue<T,U> рдмрд┐рдирд╛ рдЪрдпрдирдХрд░реНрддрд╛ рдХреЗ рдФрд░ рдмрд┐рдирд╛ IQueue (рдЬреЛ рдмреЛрдЭрд┐рд▓ рд╣реЛрдЧрд╛)
  • PriorityQueue<T> рдЪрдпрдирдХрд░реНрддрд╛ рдХреЗ рд╕рд╛рде рдФрд░ IQueue

рдХрд╛рдлреА рдХреБрдЫ рд▓реЛрдЧреЛрдВ рдиреЗ рд╕рдВрдХреЗрдд рджрд┐рдпрд╛ рдХрд┐ рдКрдкрд░ред

рдкреБрди: @pgolebiowski рд╕реЗ рдирд╡реАрдирддрдо рдкреНрд░рд╕реНрддрд╛рд╡ - https://github.com/dotnet/corefx/issues/574#issuecomment -308427321

IQueue<T> - рд╣рдо Remove рдФрд░ TryRemove рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди Queue<T> рд╡реЗ рдирд╣реАрдВ рд╣реИрдВред

рдХреНрдпрд╛ рдЙрдиреНрд╣реЗрдВ Queue<T> рдЬреЛрдбрд╝рдиреЗ рдХрд╛ рдХреЛрдИ рдорддрд▓рдм рд╣реЛрдЧрд╛? ( @ebickle рд╕рд╣рдордд рд╣реИрдВ) рдпрджрд┐ рд╣рд╛рдВ, рддреЛ рд╣рдореЗрдВ рдЕрддрд┐рд░рд┐рдХреНрдд рднреА рдмрдВрдбрд▓ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдЖрдЗрдП рдЗрд╕реЗ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ рдФрд░ рдХреЙрд▓ рдХрд░реЗрдВ рдХрд┐ рд╡реЗ рд╕рдВрджрд┐рдЧреНрдз рд╣реИрдВ / Queue<T> рдЕрддрд┐рд░рд┐рдХреНрдд рднреА рдЪрд╛рд╣рд┐рдПред
IsEmpty рднреА - рдЬреЛ рдХреБрдЫ рднреА Queue<T> рдФрд░ Stack<T> рдЕрддрд┐рд░рд┐рдХреНрдд рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЖрдЗрдП рдЗрд╕реЗ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░реЗрдВ (рдЗрд╕рдХреА рд╕рдореАрдХреНрд╖рд╛ рдХрд░рдирд╛ рдФрд░ рдкрдЪрд╛рдирд╛ рдЖрд╕рд╛рди рд╣реЛрдЧрд╛)ред
@pgolebiowski рдХреНрдпрд╛ рдЖрдк рдХреГрдкрдпрд╛ IQueue<T> рдЯрд┐рдкреНрдкрдгреА рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ, рдЙрди рдХрдХреНрд╖рд╛рдУрдВ рдХреА рд╕реВрдЪреА рдХреЗ рд╕рд╛рде рдЬреЛ рд╣рдореЗрдВ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕реЗ рдХрд┐рд╕рдХреЗ рджреНрд╡рд╛рд░рд╛ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛?

PriorityQueue<T>

рдЖрдЗрдП рд╕реНрдЯреНрд░рдХреНрдЪрд░ рдПрдиреНрдпреВрдорд░реЗрдЯрд░ рдЬреЛрдбрд╝реЗрдВ (рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╣рд╛рд▓ рд╣реА рдореЗрдВ рд╕рд╛рдорд╛рдиреНрдп рдмреАрд╕реАрдПрд▓ рдкреИрдЯрд░реНрди рд╣реИ)ред рдЗрд╕реЗ рдзрд╛рдЧреЗ рдкрд░ рджреЛ рдмрд╛рд░ рдмреБрд▓рд╛рдпрд╛ рдЧрдпрд╛, рдлрд┐рд░ рдЧрд┐рд░рд╛/рднреВрд▓ рдЧрдпрд╛ред

рдвреЗрд░

рдиреЗрдорд╕реНрдкреЗрд╕ рдкрд╕рдВрдж: рдЖрдЗрдП рдЕрднреА рддрдХ рдиреЗрдорд╕реНрдкреЗрд╕ рдирд┐рд░реНрдгрдп рдкрд░ рд╕рдордп рдмрд░реНрдмрд╛рдж рди рдХрд░реЗрдВред рдпрджрд┐ Heap CoreFxExtensions рдореЗрдВ рд╕рдорд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИ, рддреЛ рд╣рдо рдЕрднреА рддрдХ рдирд╣реАрдВ рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рд╣рдо рд╡рд╣рд╛рдВ рдХрд┐рд╕ рдкреНрд░рдХрд╛рд░ рдХреЗ рдиреЗрдорд╕реНрдкреЗрд╕ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдВрдЧреЗред рд╢рд╛рдпрдж Community.* рдпрд╛ рдРрд╕рд╛ рд╣реА рдХреБрдЫред рдпрд╣ CoreFxExtensions рдЙрджреНрджреЗрд╢реНрдп/рдСрдкрд░реЗрд╢рди рдореЛрдб рдЪрд░реНрдЪрд╛ рдкрд░рд┐рдгрд╛рдо рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИред
рдиреЛрдЯ: CoreFxExtensions рд░реЗрдкреЛ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рдЪрд╛рд░ рдпрд╣ рд╣реИ рдХрд┐ рд╕рд┐рджреНрдз рд╕рдореБрджрд╛рдп рдХреЗ рд╕рджрд╕реНрдпреЛрдВ рдХреЛ рд▓рд┐рдЦрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреА рдЬрд╛рдП, рдФрд░ рдЗрд╕реЗ рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рд╕рдореБрджрд╛рдп рджреНрд╡рд╛рд░рд╛ рд╕рдВрдЪрд╛рд▓рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдП, рдЬрд┐рд╕рдореЗрдВ .NET рдЯреАрдо рдХреЗрд╡рд▓ рд╕рд▓рд╛рд╣ рдкреНрд░рджрд╛рди рдХрд░реЗ (рдПрдкреАрдЖрдИ рд╕рдореАрдХреНрд╖рд╛ рд╡рд┐рд╢реЗрд╖рдЬреНрдЮрддрд╛ рд╕рд╣рд┐рдд) рдФрд░ .NET рдЯреАрдо / рдПрдордПрд╕ рдЬрд░реВрд░рдд рдкрдбрд╝рдиреЗ рдкрд░ рдордзреНрдпрд╕реНрде рд╣реЛред рдЕрдЧрд░ рд╣рдо рдпрд╣реАрдВ рдЙрддрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рдЗрд╕реЗ System.* рдпрд╛ Microsoft.* рдиреЗрдорд╕реНрдкреЗрд╕ рдореЗрдВ рдирд╣реАрдВ рдЪрд╛рд╣рддреЗред (рдЕрд╕реНрд╡реАрдХрд░рдг: рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд╕реЛрдЪ, рдХреГрдкрдпрд╛ рдЕрднреА рддрдХ рдирд┐рд╖реНрдХрд░реНрд╖ рдкрд░ рди рдЬрд╛рдПрдВ, рдЙрдбрд╝рд╛рди рдореЗрдВ рдЕрдиреНрдп рд╡реИрдХрд▓реНрдкрд┐рдХ рд╢рд╛рд╕рди рд╡рд┐рдЪрд╛рд░ рд╣реИрдВ)

TryRemove рдбреНрд░реЙрдк рдХрд░реЗрдВ рдФрд░ Remove рдХреЛ bool Remove рдмрджрд▓реЗрдВред рдЕрдиреНрдп рд╕рдВрдЧреНрд░рд╣ рд╡рд░реНрдЧреЛрдВ рдХреЗ рд╕рд╛рде рд╕рдВрд░реЗрдЦрдг рдореЗрдВ рд░рдЦрдирд╛ рдпрд╣рд╛рдВ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реЛрдЧрд╛ - рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рдкрд╛рд╕ рдмрд╣реБрдд рд╕рд╛рд░реА рдорд╛рдВрд╕рдкреЗрд╢реА-рд╕реНрдореГрддрд┐ рд╣реЛрдЧреА рдЬреЛ рдХрд╣рддреА рд╣реИ рдХрд┐ "рдПрдХ рд╕рдВрдЧреНрд░рд╣ рдореЗрдВ рд╣рдЯрд╛рдПрдВ() рдлреЗрдВрдХрддрд╛ рдирд╣реАрдВ рд╣реИ"ред рдпрд╣ рдПрдХ рдРрд╕рд╛ рдХреНрд╖реЗрддреНрд░ рд╣реИ рдЬрд╣рд╛рдВ рдХрдИ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдкрд░реАрдХреНрд╖рдг рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗ рдФрд░ рдпрджрд┐ рд╕рд╛рдорд╛рдиреНрдп рд╡реНрдпрд╡рд╣рд╛рд░ рдмрджрд▓ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рддреЛ рдмрд╣реБрдд рдЖрд╢реНрдЪрд░реНрдп рд╣реЛрдЧрд╛ред

рд╣рдореЗрдВ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдХрдо рд╕реЗ рдХрдо рдЗрд╕реЗ рдЕрдиреНрдп рд╕рдВрдЧреНрд░рд╣реЛрдВ рдХреЗ рд╕рд╛рде рд╕рдВрд░реЗрдЦрд┐рдд рдХрд░рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдХреНрдпрд╛ рдХреЛрдИ рдЕрдиреНрдп рд╕рдВрдЧреНрд░рд╣реЛрдВ рдХреЛ рд╕реНрдХреИрди рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЙрдирдХрд╛ Remove рдкреИрдЯрд░реНрди рдХреНрдпрд╛ рд╣реИ?

@ebicle рд╡рд░реНрддрдорд╛рди рдПрдкреАрдЖрдИ рдЕрдиреБрдмрдВрдзреЛрдВ рдХреЛ рд╣реЛрд╕реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЬреАрдердм рд░рд┐рдкреЛрдЬрд┐рдЯрд░реА рдмрдирд╛рдиреЗ рдХреЗ рд╡рд┐рдЪрд╛рд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЖрдк рдХреИрд╕рд╛ рдорд╣рд╕реВрд╕ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдПрдХ .md рдлрд╝рд╛рдЗрд▓ рдпрд╛ рджреЛ рдбрд┐рдЬрд╝рд╛рдЗрди рддрд░реНрдХ рдпреБрдХреНрддред

рдЖрдЗрдП рдЗрд╕реЗ рд╕реАрдзреЗ CoreFxLabs рдореЗрдВ

@ рдХрд░реЗрд▓реНрдЬрд╝

рдХреНрдпрд╛ рдкреНрд░рд╛рдердорд┐рдХрддрд╛рдУрдВ рдХреЛ рдЕрдирджреЗрдЦрд╛ рдХрд░рддреЗ рд╣реБрдП, рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрддрд╛рд░ рдореЗрдВ рдХреЗрд╡рд▓ рд╡рд╕реНрддреБрдУрдВ рдХреА рдЧрдгрдирд╛ рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП?

рдЕрдЪреНрдЫрд╛ рдкреНрд░рд╢реНрдиред рдЖрдк рдХреНрдпрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рджреЗрдВрдЧреЗ? IEnumerable<TElement> Elements { get; } ?

рд╣рд╛рдБ, рдпрд╛ рддреЛ рд╡рд╣ рдпрд╛ рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХреА ElementsCollection рд▓реМрдЯрд╛рдиреЗ рд╡рд╛рд▓реА рд╕рдВрдкрддреНрддрд┐ рд╢рд╛рдпрдж рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдХрд▓реНрдк рд╣реИред рдЦрд╛рд╕рдХрд░ рдЬрдм рд╕реЗ рдпрд╣ Dictionary<K, V>.Values рдХреЗ рд╕рдорд╛рди рд╣реИред

рд╣рдо рд╣рдореЗрд╢рд╛ рд╕рдорд╛рди-рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рд╡рд╛рд▓реЗ рдЖрдЗрдЯрдо рдХреЗ рдЕрдВрдд рдореЗрдВ рдЖрдЗрдЯрдо рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ (рдореВрд▓ рд░реВрдк рд╕реЗ рддреБрд▓рдирд╛рдХрд░реНрддрд╛ рдкрд░рд┐рдгрд╛рдо 0 рдХреЛ -1 рдХреЗ рд░реВрдк рдореЗрдВ рдорд╛рдирддреЗ рд╣реИрдВ)ред рдЖрдИрдПрдордУ рдЬреЛ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдРрд╕рд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдвреЗрд░ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, "рд╕рдорд╛рди-рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рд╡рд╛рд▓реА рд╡рд╕реНрддреБрдУрдВ рдХрд╛ рдЕрдВрдд" рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред рд╕рдорд╛рди рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рд╡рд╛рд▓реА рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдкреВрд░реЗ рдвреЗрд░ рдореЗрдВ рдлреИрд▓рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ (рдЬрдм рддрдХ рдХрд┐ рд╡реЗ рд╡рд░реНрддрдорд╛рди рдиреНрдпреВрдирддрдо рд╣реЛрдиреЗ рдХреЗ рдХрд░реАрдм рди рд╣реЛрдВ)ред

рдпрд╛, рдПрдХ рдФрд░ рддрд░реАрдХрд╛ рд░рдЦреЗрдВ, рд╕реНрдерд┐рд░рддрд╛ рдмрдирд╛рдП рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ 0 рд╕реЗ -1 рдХреЗ рддреБрд▓рдирд╛ рдкрд░рд┐рдгрд╛рдо рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рди рдХреЗрд╡рд▓ рд╕рдореНрдорд┐рд▓рд┐рдд рдХрд░рддреЗ рд╕рдордп, рдмрд▓реНрдХрд┐ рддрдм рднреА рдЬрдм рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдвреЗрд░ рдореЗрдВ рдЗрдзрд░-рдЙрдзрд░ рд▓реЗ рдЬрд╛рдпрд╛ рдЬрд╛рдПред рдФрд░ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рдЗрд╕реЗ рдареАрдХ рд╕реЗ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП version рдХреЗ рд╕рд╛рде priority рдЬреИрд╕реЗ рдХреБрдЫ рд╕реНрдЯреЛрд░ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред

IQueue- рд╣рдо рд╣рдЯрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВ рд╣рдЯрд╛ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдХрддрд╛рд░рдЙрдирдХреЗ рдкрд╛рд╕ рдирд╣реАрдВ рд╣реИред

рдХреНрдпрд╛ рдЙрдиреНрд╣реЗрдВ рдХрддрд╛рд░ рдореЗрдВ рдЬреЛрдбрд╝реЗ рдЬрд╛рдиреЗ рдХрд╛ рдХреЛрдИ рдорддрд▓рдм рд╣реЛрдЧрд╛?? ( @ebickle рд╕рд╣рдордд рд╣реИрдВ) рдпрджрд┐ рд╣рд╛рдВ, рддреЛ рд╣рдореЗрдВ рдЕрддрд┐рд░рд┐рдХреНрдд рднреА рдмрдВрдбрд▓ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ Remove рдХреЛ IQueue<T> рдЬреЛрдбрд╝рд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП; рдФрд░ рдореИрдВ рдпрд╣ рднреА рд╕реБрдЭрд╛рд╡ рджреВрдВрдЧрд╛ рдХрд┐ Contains рдмреЗрдХрд╛рд░ рд╣реИ; рдпрд╣ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреА рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдХреЛ рд╕реАрдорд┐рдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рд╕ рдкреНрд░рдХрд╛рд░ рдХреА рдХрддрд╛рд░ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдЬрдм рддрдХ рдХрд┐ рдЖрдк NotSupportedExceptions рдХреЛ рдлреЗрдВрдХрдирд╛ рд╢реБрд░реВ рдирд╣реАрдВ рдХрд░рддреЗред рдпрд╛рдиреА рдЧреБрдВрдЬрд╛рдЗрд╢ рдХреНрдпрд╛ рд╣реИ?

рдХреНрдпрд╛ рдпрд╣ рд╕рд┐рд░реНрдл рд╡реИрдирд┐рд▓рд╛ рдХрддрд╛рд░реЛрдВ, рд╕рдВрджреЗрд╢ рдХрддрд╛рд░реЛрдВ, рд╡рд┐рддрд░рд┐рдд рдХрддрд╛рд░реЛрдВ, рд╕рд░реНрд╡рд┐рд╕рдмрд╕ рдХрддрд╛рд░реЛрдВ, рдПрдЬрд╝реНрдпреЛрд░ рд╕реНрдЯреЛрд░реЗрдЬ рдХрддрд╛рд░реЛрдВ, рд╕рд░реНрд╡рд┐рд╕рдлреИрдмреНрд░рд┐рдХ рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рдХрддрд╛рд░реЛрдВ рдЖрджрд┐ рдХреЗ рд▓рд┐рдП рд╣реИ ... (рдЙрдирдореЗрдВ рд╕реЗ рдХреБрдЫ рдкрд░ async рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рджреЗрдирд╛)

рдРрд╕рд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдвреЗрд░ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, "рд╕рдорд╛рди-рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рд╡рд╛рд▓реА рд╡рд╕реНрддреБрдУрдВ рдХрд╛ рдЕрдВрдд" рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред рд╕рдорд╛рди рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рд╡рд╛рд▓реА рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдкреВрд░реЗ рдвреЗрд░ рдореЗрдВ рдлреИрд▓рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ (рдЬрдм рддрдХ рдХрд┐ рд╡реЗ рд╡рд░реНрддрдорд╛рди рдиреНрдпреВрдирддрдо рд╣реЛрдиреЗ рдХреЗ рдХрд░реАрдм рди рд╣реЛрдВ)ред

рдирд┐рд╖реНрдкрдХреНрд╖ рдмрд┐рдВрджреБред рдореИрдВ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдЗрдирд░реА рд╕рд░реНрдЪ рдЯреНрд░реА рдХреЗ рд░реВрдк рдореЗрдВ рд╕реЛрдЪ рд░рд╣рд╛ рдерд╛ред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореЗрд░реЗ рдбреАрдПрд╕ рдореВрд▓ рдмрд╛рддреЗрдВ рдмреНрд░рд╢ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ :)
рдареАрдХ рд╣реИ, рдпрд╛ рддреЛ рд╣рдо рдЗрд╕реЗ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдбреАрдПрд╕ (рд╕рд░рдгреА, рдмрд╛рдЗрдирд░реА рд╕рд░реНрдЪ рдЯреНрд░реА (рдпрд╛ рдЬреЛ рднреА рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рдирд╛рдо рд╣реИ) рдХреЗ рд╕рд╛рде рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВ - @stephentoub рдореЗрдВ рд╡рд┐рдЪрд╛рд░/рд╕реБрдЭрд╛рд╡ рд╣реИрдВ), рдпрд╛ рд╣рдо рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдХреНрд░рдо рдХреЗ рд▓рд┐рдП рд╡реНрдпрд╡рд╕реНрдерд┐рдд рд╣реЛрддреЗ рд╣реИрдВред рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ version рдпрд╛ age рдлрд╝реАрд▓реНрдб рдХреЛ рдмрдирд╛рдП рд░рдЦрдирд╛ рд╕реНрдерд┐рд░рддрд╛ рдХреА рдЧрд╛рд░рдВрдЯреА рдХреЗ рд▓рд╛рдпрдХ рд╣реИред

@ebicle рд╡рд░реНрддрдорд╛рди рдПрдкреАрдЖрдИ рдЕрдиреБрдмрдВрдзреЛрдВ рдХреЛ рд╣реЛрд╕реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЬреАрдердм рд░рд┐рдкреЛрдЬрд┐рдЯрд░реА рдмрдирд╛рдиреЗ рдХреЗ рд╡рд┐рдЪрд╛рд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЖрдк рдХреИрд╕рд╛ рдорд╣рд╕реВрд╕ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдПрдХ .md рдлрд╝рд╛рдЗрд▓ рдпрд╛ рджреЛ рдбрд┐рдЬрд╝рд╛рдЗрди рддрд░реНрдХ рдпреБрдХреНрддред

@karelz рдЪрд▓рд┐рдП рдЗрд╕реЗ рд╕реАрдзреЗ CoreFxLabs рдореЗрдВ рд╣реЛрд╕реНрдЯ рдХрд░рддреЗ рд╣реИрдВред

рдХреГрдкрдпрд╛ рдЗрд╕ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВред

2 рдкреНрд░рд╕реНрддрд╛рд╡реЛрдВ рдХрд╛ рд╣реЛрдирд╛ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдЪрд╛рд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ (рдФрд░ рд╣рдо рд╕рдВрднрд╛рд╡рд┐рдд рд░реВрдк рд╕реЗ рджреЛрдиреЛрдВ рдХреЛ рд▓реЗ рд╕рдХрддреЗ рд╣реИрдВ):

  • рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрддрд╛рд░рдЪрдпрдирдХрд░реНрддрд╛ рдХреЗ рдмрд┐рдирд╛ рдФрд░ IQueue рдХреЗ рдмрд┐рдирд╛ (рдЬреЛ рдмреЛрдЭрд┐рд▓ рд╣реЛрдЧрд╛)
  • рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрддрд╛рд░рдЪрдпрдирдХрд░реНрддрд╛ рдФрд░ IQueue рдХреЗ рд╕рд╛рде

рдореИрдВрдиреЗ рдЪрдпрдирдХрд░реНрддрд╛ рд╕реЗ рдкреВрд░реА рддрд░рд╣ рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛ рд▓рд┐рдпрд╛ред рдпрд╣ рддрднреА рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдЬрдм рд╣рдо рдПрдХ рдПрдХреАрдХреГрдд PriorityQueue<T, U> ред рдпрджрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рджреЛ рд╡рд░реНрдЧ рд╣реИрдВ - рдареАрдХ рд╣реИ, рдПрдХ рддреБрд▓рдирд╛рдХрд░реНрддрд╛ рдкрд░реНрдпрд╛рдкреНрдд рд╣реИред


рдХреГрдкрдпрд╛ рдореБрдЭреЗ рдмрддрд╛рдПрдВ рдХрд┐ рдХреНрдпрд╛ рдЖрдкрдХреЛ рдХреБрдЫ рдЬреЛрдбрд╝рдиреЗ/рдмрджрд▓рдиреЗ/рд╣рдЯрд╛рдиреЗ рдпреЛрдЧреНрдп рд▓рдЧрддрд╛ рд╣реИред

@pgolebiowski

рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдЕрдЪреНрдЫрд╛ рд▓рдЧ рд░рд╣рд╛ рд╣реИред рдПрдХ рдареЛрд╕ рд╕рдорд╛рдзрд╛рди рдХреА рддрд░рд╣ рдорд╣рд╕реВрд╕ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░рдирд╛ рдореИрдВ .NET рдХреЛрд░ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдореЗрдВ рджреЗрдЦрдиреЗ рдХреА рдЙрдореНрдореАрдж рдХрд░рддрд╛ рд╣реВрдВ :)

  • рдПрдХ рдиреЗрд╕реНрдЯреЗрдб рдЧрдгрдХ рд╡рд░реНрдЧ рдЬреЛрдбрд╝рдирд╛ рдЪрд╛рд╣рд┐рдПред рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реИ рдХрд┐ рд╕реНрдерд┐рддрд┐ рдмрджрд▓ рдЧрдИ рд╣реИ, рд▓реЗрдХрд┐рди рд╡рд░реНрд╖реЛрдВ рдкрд╣рд▓реЗ рдмрд╛рд▓ рд╕рдВрд░рдЪрдирд╛ рд╣реЛрдиреЗ рд╕реЗ GetEnumerator() рдХреЗ рдкрд░рд┐рдгрд╛рдо рдмреЙрдХреНрд╕рд┐рдВрдЧ рдХреЗ рдХрд╛рд░рдг рдХрдЪрд░рд╛ рдХрд▓реЗрдХреНрдЯрд░ рдЖрд╡рдВрдЯрди рд╕реЗ рдмрдЪрд╛ рдЧрдпрд╛ рдерд╛ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП https://github.com/dotnet/coreclr/issues/1579 рджреЗрдЦреЗрдВред
    public class PriorityQueue<T> // ... { public struct Enumerator : IEnumerator<T> { public T Current { get; } object IEnumerator.Current { get; } public bool MoveNext(); public void Reset(); public void Dispose(); } }

  • рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрддрд╛рд░рдПрдХ рдиреЗрд╕реНрдЯреЗрдб рдПрдиреНрдпреВрдорд░реЗрдЯрд░ рд╕реНрдЯреНрд░рдХреНрдЪрд░ рднреА рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

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

  • рдХреНрдпрд╛ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдореЗрдВ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдХреНрд╖рдорддрд╛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдпрд╛ TrimExcess рдлрд╝рдВрдХреНрд╢рди рд╣реЛрдиреЗ рдХрд╛ рдХреЛрдИ рдореВрд▓реНрдп рд╣реИ, рдпрд╛ рдпрд╣ рдЕрднреА рдПрдХ рдорд╛рдЗрдХреНрд░реЛ-рдСрдкреНрдЯрд┐рдорд╛рдЗрдЬрд╝реЗрд╢рди рд╣реИ - рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ IEnumerable рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рддреЗ рд╣реБрдПрдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдкреИрд░рд╛рдореАрдЯрд░?

рдореИрдВ bool Remove(T element) рд╕рд╣рдордд рд╣реВрдВ рдФрд░ рдХреЛрдИ TryRemove ред рд╕реА рдПрдл https://github.com/dotnet/corefx/blob/master/src/System.Collections/src/System/Collections/Generic/CollectionExtensions.cs#L41

@pgolebiowski рдЗрд╕реЗ рдПрдХ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдореЗрдВ рдбрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред рдХреНрдпрд╛ рдЖрдк рдХреГрдкрдпрд╛ CoreFxLab рдорд╛рд╕реНрдЯрд░ рд╢рд╛рдЦрд╛ рдХреЗ рд╡рд┐рд░реБрджреНрдз рдкреАрдЖрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдЕрдкрдирд╛ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдЬрдорд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ? рдЯреИрдЧ @ianhays @safern рд╡реЗ
рдлрд┐рд░ рд╣рдо рд╡рд┐рд╢реЗрд╖ рдбрд┐рдЬрд╛рдЗрди рдмрд┐рдВрджреБрдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдФрд░ рдЪрд░реНрдЪрд╛ рдХреЗ рд▓рд┐рдП CoreFxLab рдореБрджреНрджреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ - рдпрд╣ рдЗрд╕ рдореЗрдЧрд╛-рдЗрд╢реНрдпреВ рд╕реЗ рдЖрд╕рд╛рди рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП (рдореИрдВрдиреЗ рдЕрднреА-рдЕрднреА рдХреНрд╖реЗрддреНрд░-рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХреНрдпреВ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдИрдореЗрд▓ рдХреЛ рд▓рд╛рдд рдорд╛рд░реА)ред

рдХреГрдкрдпрд╛ рдпрд╣рд╛рдБ CoreFxLab рдкреБрд▓ рдЕрдиреБрд░реЛрдз рдХрд╛ рд▓рд┐рдВрдХ рдбрд╛рд▓реЗрдВ?

  • @ebicle @jnm2 -- рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛
  • @karelz @SamuelEnglard -- рд╕рдВрджрд░реНрднрд┐рдд

рдпрджрд┐ рдПрдкреАрдЖрдИ рдЕрдкрдиреЗ рд╡рд░реНрддрдорд╛рди рд╕реНрд╡рд░реВрдк (рджреЛ рд╡рд░реНрдЧреЛрдВ) рдореЗрдВ рд╕реНрд╡реАрдХреГрдд рд╣реИ, рддреЛ рдореИрдВ рдПрдХ рдЪрддреБрд░реНрдзрд╛рддреБрдХ рдвреЗрд░ ( рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рджреЗрдЦреЗрдВ ) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рджреЛрдиреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд╕рд╛рде CoreFXLab рдХреЗ рд▓рд┐рдП рдПрдХ рдФрд░ рдкреАрдЖрд░ рдмрдирд╛рдКрдВрдЧрд╛ред PriorityQueue<T> рдиреАрдЪреЗ рдХреЗрд╡рд▓ рдПрдХ рд╕рд░рдгреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдЧрд╛, рдЬрдмрдХрд┐ PriorityQueue<TElement, TPriority> рджреЛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдЧрд╛ - рдФрд░ рдЙрдирдХреЗ рддрддреНрд╡реЛрдВ рдХреЛ рдПрдХ рд╕рд╛рде рдкреБрдирд░реНрд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░реЗрдЧрд╛ред рдпрд╣ рд╣рдореЗрдВ рдЕрддрд┐рд░рд┐рдХреНрдд рдЖрд╡рдВрдЯрди рд╕реЗ рдмрдЪрд╛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдЬрд┐рддрдирд╛ рд╣реЛ рд╕рдХреЗ рдЙрддрдирд╛ рдХреБрд╢рд▓ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдПрдХ рдмрд╛рд░ рд╣рд░реА рдмрддреНрддреА рдЖрдиреЗ рдкрд░ рдореИрдВ рдЗрд╕реЗ рдЬреЛрдбрд╝ рджреВрдВрдЧрд╛ред

рдХреНрдпрд╛ рд╕рдорд╡рд░реНрддреА рдХреНрдпреВ рдХреА рддрд░рд╣ рдереНрд░реЗрдб-рд╕реБрд░рдХреНрд╖рд┐рдд рд╕рдВрд╕реНрдХрд░рдг рдмрдирд╛рдиреЗ рдХреА рдХреЛрдИ рдпреЛрдЬрдирд╛ рд╣реИ?

рдореИрдВ :heart: рдЗрд╕рдХрд╛ рдПрдХ рд╕рдорд╡рд░реНрддреА рд╕рдВрд╕реНрдХрд░рдг рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП, IProducerConsumerCollection<T> рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рддрд╛рдХрд┐ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ BlockingCollection<T> рдЖрджрд┐ рдХреЗ рд╕рд╛рде рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗред

@aobatact @khellang рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрд▓рдЧ рдзрд╛рдЧреЗ рдХреА рддрд░рд╣ рд▓рдЧрддрд╛ рд╣реИ:

рдореИрдВ рдорд╛рдирддрд╛ рд╣реВрдБ рдХрд┐ рдпрд╣ рдмрд╣реБрдд рдореВрд▓реНрдпрд╡рд╛рди рд╣реИ рд╣рд╛рд▓рд╛рдВрдХрд┐ :рдкрд▓рдХ :!

public bool IsEmpty();

рдпрд╣ рдПрдХ рддрд░реАрдХрд╛ рдХреНрдпреЛрдВ рд╣реИ? рдврд╛рдВрдЪреЗ рдкрд░ рд╣рд░ рджреВрд╕рд░реЗ рд╕рдВрдЧреНрд░рд╣ рдореЗрдВ IsEmpty рд╣реИ рдЬреЛ рдЗрд╕реЗ рдПрдХ рд╕рдВрдкрддреНрддрд┐ рдХреЗ рд░реВрдк рдореЗрдВ рд░рдЦрддрд╛ рд╣реИред

рдореИрдВрдиреЗ рд╢реАрд░реНрд╖-рдкреЛрд╕реНрдЯ рдореЗрдВ рдкреНрд░рд╕реНрддрд╛рд╡ рдХреЛ IsEmpty { get; } рд╕рд╛рде рдЕрджреНрдпрддрди рдХрд┐рдпрд╛ред
рдореИрдВрдиреЗ corefxlab рд░реЗрдкреЛ рдореЗрдВ рдирд╡реАрдирддрдо рдкреНрд░рд╕реНрддрд╛рд╡ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХрд╛ рд▓рд┐рдВрдХ рднреА рдЬреЛрдбрд╝рд╛ рд╣реИред

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

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

рдореБрдЭреЗ рдХреБрдЫ рдпрд╛рдж рдЖрдпрд╛?

рдареАрдХ рд╣реИ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдПрдХ рдФрд░ рдерд╛ - рдпрд╣ рджрд╛рд╡рд╛ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдХрд┐ рд╢рдмреНрджрд╛рд░реНрде рдХреЛ рдЕрджреНрдпрддрди/рдирд┐рдХрд╛рд▓реЗрдВ рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ 'рдЕрдкрдбреЗрдЯрдлрд░реНрд╕реНрдЯ' рдпрд╛ 'рдирд┐рдХрд╛рд▓реЗрдВрдлрд░реНрд╕реНрдЯ' рдЕрдЬреАрдм рд╣реЛ рд╕рдХрддрд╛ рд╣реИред :)

.рдиреЗрдЯ рдХреЛрд░ рдХреЗ рдХрд┐рд╕ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рд╣рдо рдкреНрд░рд╛рдпреЛрд░рд┐рдЯреА рдХреНрдпреВ рдХрд╛ рдЙрдкрдпреЛрдЧ рд╢реБрд░реВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ?

@memoryfraction .NET рдХреЛрд░ рдХреЗ рдкрд╛рд╕ рдЕрднреА рддрдХ рдкреНрд░рд╛рдпреЛрд░рд┐рдЯреА

@memoryfraction .NET рдХреЛрд░ рдХреЗ рдкрд╛рд╕ рдЕрднреА рддрдХ рдкреНрд░рд╛рдпреЛрд░рд┐рдЯреА

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

рдЗрд╕ рдореБрджреНрджреЗ рдХреА рд╡рд░реНрддрдорд╛рди рд╕реНрдерд┐рддрд┐ рдХреНрдпрд╛ рд╣реИ? рдореИрдВрдиреЗ рдЕрднреА рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдЦреБрдж рдХреЛ рдПрдХ рдкреНрд░рд╛рдпреЛрд░рд┐рдЯреА рдХреНрдпреВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рдпрд╛ рд╣реИ

рдпрд╣ рдкреНрд░рд╕реНрддрд╛рд╡ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рд╕рдВрдЧреНрд░рд╣ рдЖрд░рдВрднреАрдХрд░рдг рдХреЛ рд╕рдХреНрд╖рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред PriorityQueue<T> Add рд╡рд┐рдзрд┐ рдирд╣реАрдВ рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдПрдХ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рд╡рд┐рдзрд┐ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрдЧреНрд░рд╣ рдЖрд░рдВрднреАрдХрд░рдг рдПрдХ рдмрдбрд╝реА рдкрд░реНрдпрд╛рдкреНрдд рднрд╛рд╖рд╛ рд╕реБрд╡рд┐рдзрд╛ рд╣реИред

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

@SunnyWar рдореИрдВ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдБ: https://github.com/BlueRaja/High-Speed-Priority-Queue-for-C-Sharp
рдЬрд┐рд╕рдХрд╛ рдЕрдЪреНрдЫрд╛ рдкреНрд░рджрд░реНрд╢рди рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ GenericPriorityQueue рдХреЗ рдЦрд┐рд▓рд╛рдл рдЖрдкрдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдирд╛ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ

рдХреГрдкрдпрд╛ рдореЗрд░реА рдкрд┐рдЫрд▓реА рдкреЛрд╕реНрдЯ рдкрд░ рдзреНрдпрд╛рди рди рджреЗрдВред рдореБрдЭреЗ рдкрд░реАрдХреНрд╖рдг рдореЗрдВ рддреНрд░реБрдЯрд┐ рдорд┐рд▓реАред рдПрдХ рдмрд╛рд░ рддрдп рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рдмрд╛рдЗрдирд░реА рд╣реАрдк рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рдкреНрд░рджрд░реНрд╢рди рдХрд░рддрд╛ рд╣реИред

@karelz рдпрд╣ рдкреНрд░рд╕реНрддрд╛рд╡ рд╡рд░реНрддрдорд╛рди рдореЗрдВ ICollection<T> рдХрд╣рд╛рдВ рд╣реИ? рдореБрдЭреЗ рдирд╣реАрдВ рдорд┐рд▓рд╛ рдХрд┐ рдЗрд╕рдХрд╛ рд╕рдорд░реНрдерди рдХреНрдпреЛрдВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рдерд╛, рднрд▓реЗ рд╣реА рд╕рдВрдЧреНрд░рд╣ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рд╣реИ?

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

@karelz рдлрд┐рд░ рд╕реЗ рдЧрдгрдирд╛ рдЖрджреЗрд╢ ... рдкреНрд░рдХрд╛рд░ рдкрд░ Sort() рд╡рд┐рдзрд┐ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬреЛ рд╕рдВрдЧреНрд░рд╣ рдХреЗ рдЖрдВрддрд░рд┐рдХ рдбреЗрдЯрд╛ рдвреЗрд░ рдХреЛ рдХреНрд░рдордмрджреНрдз рдХреНрд░рдо рдореЗрдВ рдЬрдЧрд╣ рдореЗрдВ рд░рдЦреЗрдЧрд╛ (рдУ (рдПрди рд▓реЙрдЧ рдПрди) рдореЗрдВ)ред рдФрд░ рдмреБрд▓рд╛ Enumerate() рдХреЗ рдмрд╛рдж Sort() рдореЗрдВ рд╣реЗ (рдПрди) рд╕рдВрдЧреНрд░рд╣ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рддрд╛ рд╣реИред рдФрд░ рдЕрдЧрд░ рд╕реЙрд░реНрдЯ () рдирд╣реАрдВ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдУ (рдПрди) рдореЗрдВ рдЧреИрд░-рдХреНрд░рдордмрджреНрдз рдХреНрд░рдо рдореЗрдВ рддрддреНрд╡ рд▓реМрдЯрд╛рддрд╛ рд╣реИ?

рдЯреНрд░рд╛рдЗрдПрдЬ: рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдЖрдЧреЗ рдмрдврд╝рдирд╛ рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕ рдкрд░ рдЖрдо рд╕рд╣рдорддрд┐ рдирд╣реАрдВ рд▓рдЧрддреА рд╣реИ рдХрд┐ рд╣рдореЗрдВ рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдпрд╛ рдирд╣реАрдВред

рдпрд╣ рд╕реБрдирдХрд░ рдмрд╣реБрдд рдирд┐рд░рд╛рд╢рд╛ рд╣реБрдИред рдореБрдЭреЗ рдЕрднреА рднреА рдЗрд╕рдХреЗ рд▓рд┐рдП рддреГрддреАрдп рдкрдХреНрд╖ рд╕рдорд╛рдзрд╛рдиреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реИред

рддреАрд╕рд░реЗ рдкрдХреНрд╖ рдХреЗ рд╕рдорд╛рдзрд╛рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЖрдкрдХреЛ рдкрд╕рдВрдж рдирд╣реАрдВ рдЖрдиреЗ рдХреЗ рдкреНрд░рд╛рдердорд┐рдХ рдХрд╛рд░рдг рдХреНрдпрд╛ рд╣реИрдВ?

рд▓реЗрдЯрдХреЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдвреЗрд░ рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛ рдПрдХ рдЬрд░реВрд░реА рд╣реИ
рдЕрдзрд┐рдХ рд▓реЗрдЯрдХреЛрдб, рдЕрдзрд┐рдХ рд╕реА # рдХреЛрдб рд╕рд╛рдХреНрд╖рд╛рддреНрдХрд╛рд░ рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдЕрдзрд┐рдХ рд╕реА # рдбреЗрд╡рд▓рдкрд░реНрд╕ред
рдЕрдзрд┐рдХ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХрд╛ рдЕрд░реНрде рд╣реИ рдмреЗрд╣рддрд░ рдкрд╛рд░рд┐рд╕реНрдерд┐рддрд┐рдХреА рддрдВрддреНрд░ред
рдмреЗрд╣рддрд░ рдкрд╛рд░рд┐рд╕реНрдерд┐рддрд┐рдХреА рддрдВрддреНрд░ рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдЕрдЧрд░ рд╣рдо рдХрд▓ рднреА рд╕реА # рдореЗрдВ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ: рдпрд╣ рди рдХреЗрд╡рд▓ рдПрдХ рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реИ, рдмрд▓реНрдХрд┐ рднрд╡рд┐рд╖реНрдп рднреА рд╣реИред рдЗрд╕рд▓рд┐рдП рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ 'рднрд╡рд┐рд╖реНрдп' рдХрд╛ рд▓реЗрдмрд▓ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

рддреАрд╕рд░реЗ рдкрдХреНрд╖ рдХреЗ рд╕рдорд╛рдзрд╛рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЖрдкрдХреЛ рдкрд╕рдВрдж рдирд╣реАрдВ рдЖрдиреЗ рдХреЗ рдкреНрд░рд╛рдердорд┐рдХ рдХрд╛рд░рдг рдХреНрдпрд╛ рд╣реИрдВ?

рдХреНрдпреЛрдВрдХрд┐ рдЬрдм рдХреЛрдИ рдорд╛рдирдХ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ, рддреЛ рд╣рд░ рдХреЛрдИ рдЕрдкрдирд╛ рдЦреБрдж рдХрд╛ рдЖрд╡рд┐рд╖реНрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИ, рдкреНрд░рддреНрдпреЗрдХ рдХреЗ рдЕрдкрдиреЗ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╕реЗрдЯ рд╣реЛрддреЗ рд╣реИрдВред

рдХрдИ рдмрд╛рд░ рдореИрдВрдиреЗ System.Collections.Generic.PriorityQueue<T> рдХрд╛рдордирд╛ рдХреА рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЙрд╕ рдЪреАрдЬрд╝ рдХреЗ рд▓рд┐рдП рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рд╣реИ рдЬрд┐рд╕ рдкрд░ рдореИрдВ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рдпрд╣ рдкреНрд░рд╕реНрддрд╛рд╡ рдЕрдм рд▓рдЧрднрдЧ 5 рд╕рд╛рд▓ рд╕реЗ рд╣реИред рдпрд╣ рдЕрднреА рддрдХ рдХреНрдпреЛрдВ рдирд╣реАрдВ рд╣реБрдЖ рд╣реИ?

рдпрд╣ рдЕрднреА рддрдХ рдХреНрдпреЛрдВ рдирд╣реАрдВ рд╣реБрдЖ рд╣реИ?

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

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

рдХреНрдпреЛрдВрдХрд┐ рдЬрдм рдХреЛрдИ рдорд╛рдирдХ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ, рддреЛ рд╣рд░ рдХреЛрдИ рдЕрдкрдирд╛ рдЦреБрдж рдХрд╛ рдЖрд╡рд┐рд╖реНрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИ, рдкреНрд░рддреНрдпреЗрдХ рдХреЗ рдЕрдкрдиреЗ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╕реЗрдЯ рд╣реЛрддреЗ рд╣реИрдВред

@masonwheeler рдпрд╣ рд╡рд╣реА рд╣реИ рдЬреЛ рдЖрдкрдиреЗ PriorityQueue<T> ? рдХрд┐ рдХрдИ рддреГрддреАрдп рдкрдХреНрд╖ рд╡рд┐рдХрд▓реНрдк рд╣реИрдВ рдЬреЛ рд╡рд┐рдирд┐рдореЗрдп рдирд╣реАрдВ рд╣реИрдВ рдФрд░ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ "рдЕрдзрд┐рдХрд╛рдВрд╢ рдХреЗ рд▓рд┐рдП рд╕рд░реНрд╡рд╢реНрд░реЗрд╖реНрда рдкреБрд╕реНрддрдХрд╛рд▓рдп" рд╕реНрд╡реАрдХрд╛рд░ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ? (рдореИрдВрдиреЗ рд╢реЛрдз рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рдЬрд╡рд╛рдм рдирд╣реАрдВ рдкрддрд╛)

@eiriktsarpalis рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЖрдо рд╕рд╣рдорддрд┐ рдХреИрд╕реЗ рдирд╣реАрдВ рд╣реИ?

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

рддреАрд╕рд░реЗ рдкрдХреНрд╖ рдХреЗ рд╕рдорд╛рдзрд╛рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЖрдкрдХреЛ рдкрд╕рдВрдж рдирд╣реАрдВ рдЖрдиреЗ рдХреЗ рдкреНрд░рд╛рдердорд┐рдХ рдХрд╛рд░рдг рдХреНрдпрд╛ рд╣реИрдВ?

@terrajobst
рдореИрдВрдиреЗ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рдЕрдиреБрднрд╡ рдХрд┐рдпрд╛ рд╣реИ рдХрд┐ рддреГрддреАрдп рдкрдХреНрд╖ рд╕рдорд╛рдзрд╛рди рд╣рдореЗрд╢рд╛ рдЕрдкреЗрдХреНрд╖рд┐рдд рдкреНрд░рджрд░реНрд╢рди рдирд╣реАрдВ рдХрд░рддреЗ/рд╡рд░реНрддрдорд╛рди рднрд╛рд╖рд╛ рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред рдПрдХ рдорд╛рдирдХреАрдХреГрдд рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд╕рд╛рде рдореИрдВ (рдПрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ) рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдирд┐рд╢реНрдЪрд┐рдд рд╣реЛ рд╕рдХрддрд╛ рд╣реВрдВ рдХрд┐ рдкреНрд░рджрд░реНрд╢рди рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╣реИ рдЬреЛ рдЖрдк рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

@danmosemsft

@masonwheeler рдпрд╣ рд╡рд╣реА рд╣реИ рдЬреЛ рдЖрдкрдиреЗ PriorityQueue<T> ? рдХрд┐ рдХрдИ рддреГрддреАрдп рдкрдХреНрд╖ рд╡рд┐рдХрд▓реНрдк рд╣реИрдВ рдЬреЛ рд╡рд┐рдирд┐рдореЗрдп рдирд╣реАрдВ рд╣реИрдВ рдФрд░ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ "рдЕрдзрд┐рдХрд╛рдВрд╢ рдХреЗ рд▓рд┐рдП рд╕рд░реНрд╡рд╢реНрд░реЗрд╖реНрда рдкреБрд╕реНрддрдХрд╛рд▓рдп" рд╕реНрд╡реАрдХрд╛рд░ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ? (рдореИрдВрдиреЗ рд╢реЛрдз рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рдЬрд╡рд╛рдм рдирд╣реАрдВ рдкрддрд╛)

рд╣рд╛рдВред рдмрд╕ рдЧреВрдЧрд▓ "рд╕реА # рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрддрд╛рд░"; рдкрд╣рд▓рд╛ рдкреГрд╖реНрда рднрд░рд╛ рд╣реБрдЖ рд╣реИ:

  1. рдЬреАрдердм рдФрд░ рдЕрдиреНрдп рд╣реЛрд╕реНрдЯрд┐рдВрдЧ рд╕рд╛рдЗрдЯреЛрдВ рдкрд░ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрддрд╛рд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди
  2. рд▓реЛрдЧ рдкреВрдЫ рд░рд╣реЗ рд╣реИрдВ рдХрд┐ рджреБрдирд┐рдпрд╛ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣ рдореЗрдВ рдХреЛрдИ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрддрд╛рд░ рдХреНрдпреЛрдВ рдирд╣реАрдВ рд╣реИред рд╕рд╛рдорд╛рдиреНрдп
  3. рдЕрдкрдиреА рдЦреБрдж рдХреА рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрддрд╛рд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ рдкрд░ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓

@terrajobst рдХреНрдпрд╛ рдЖрдкрдХреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдирд╛рдпрдХ рдкрд░рд┐рджреГрд╢реНрдп рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬрдм рдпрд╣ рдкреНрд░рд╕рд┐рджреНрдз рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдкреНрд░рд╕рд┐рджреНрдз рдкреИрдЯрд░реНрди рд╣реИ? рдпрд╣рд╛рдВ рдмрд╣реБрдд рдХрдо рдирд╡рд╛рдЪрд╛рд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред

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

рдЬрд╛рд╣рд┐рд░ рддреМрд░ рдкрд░ рд╣рдореЗрдВ рдПрдХ рд╣реАрд░реЛ рдХреА рдЬрд░реВрд░рдд рд╣реИред рдореИрдВ

@masonwheeler рдореБрдЭреЗ рд▓рдЧрд╛ рдХрд┐ рдЖрдкрдХрд╛ рд▓рд┐рдВрдХ рдЗрд╕ рд╕реЗ рд╣реЛрдЧрд╛ рдЕрдм рдпрд╣ рдореЗрд░реЗ рджрд┐рдорд╛рдЧ рдореЗрдВ рд╣реИред

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

[рд╕реНрдкрд╖реНрдЯрддрд╛ рдХреЗ рд▓рд┐рдП рд╕рдВрдкрд╛рджрд┐рдд]

@danmosemsft рдирд╛рд╣, рдЕрдЧрд░ рдореИрдВ рдЙрд╕ рдЧрд╛рдиреЗ рдХреЛ рдЪреБрдирдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реЛрддрд╛ рддреЛ рдореИрдВ рд╢реНрд░реЗрдХ 2 рд╕рдВрд╕реНрдХрд░рдг рдХрд░рддрд╛ред

рд╣реАрд░реЛ рдРрдк рдЙрдореНрдореАрджрд╡рд╛рд░ # 1: TimerQueue.Portable рдореЗрдВ рдПрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреИрд╕реЗ?

https://github.com/dotnet/runtime/blob/4f9ae42d861fcb4be2fcd5d3d55d5f227d30e723/src/libraries/System.Private.CoreLib/src/System/Threading/TimerQueue.Portable.cs

рд╣реАрд░реЛ рдРрдк рдЙрдореНрдореАрджрд╡рд╛рд░ # 1: TimerQueue.Portable рдореЗрдВ рдПрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреИрд╕реЗ?

рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ, рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рддреНрдпрд╛рдЧ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рдПрдХ рдЯрд╛рдЗрдорд░ рдХреЗ рдмрд╣реБрдд рд╣реА рд╕рд╛рдорд╛рдиреНрдп рдорд╛рдорд▓реЗ рдХреЛ рдЬрд▓реНрджреА рд╕реЗ рдмрдирд╛рдпрд╛ рдФрд░ рдирд╖реНрдЯ рдХрд░ рджреЗрддрд╛ рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдПрдХ рдЯрд╛рдЗрдордЖрдЙрдЯ рдХреЗ рд▓рд┐рдП) рдХрдо рдХреБрд╢рд▓ред

@stephentoub рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдХреБрдЫ рдкрд░рд┐рджреГрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдпрд╣ рдХрдо рдХреБрд╢рд▓ рд╣реИ рдЬрд╣рд╛рдВ рдХрдо рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдЯрд╛рдЗрдорд░ рд╣реИрдВред рд▓реЗрдХрд┐рди рдпрд╣ рдХреИрд╕реЗ рд╕реНрдХреЗрд▓ рдХрд░рддрд╛ рд╣реИ?

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдХреБрдЫ рдкрд░рд┐рджреГрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдпрд╣ рдХрдо рдХреБрд╢рд▓ рд╣реИ рдЬрд╣рд╛рдВ рдХрдо рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдЯрд╛рдЗрдорд░ рд╣реИрдВред рд▓реЗрдХрд┐рди рдпрд╣ рдХреИрд╕реЗ рд╕реНрдХреЗрд▓ рдХрд░рддрд╛ рд╣реИ?

рдирд╣реАрдВ, рдореЗрд░рд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рд╕рд╛рдорд╛рдиреНрдп рдорд╛рдорд▓рд╛ рдпрд╣ рд╣реИ рдХрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдХрд┐рд╕реА рднреА рд╕рдордп рдмрд╣реБрдд рд╕рд╛рд░реЗ рдЯрд╛рдЗрдорд░ рд╣реЛрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдмрд╣реБрдд рдХрдо рд▓реЛрдЧ рдлрд╛рдпрд░рд┐рдВрдЧ рдХрд░ рд░рд╣реЗ рд╣реЛрддреЗ рд╣реИрдВред рдЬрдм рдЯрд╛рдЗрдордЖрдЙрдЯ рдХреЗ рд▓рд┐рдП рдЯрд╛рдЗрдорд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рддреЛ рдпрд╣реА рдкрд░рд┐рдгрд╛рдо рд╣реЛрддрд╛ рд╣реИред рдФрд░ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд╛рдд рд╡рд╣ рдЧрддрд┐ рд╣реИ рдЬрд┐рд╕ рдкрд░ рдЖрдк рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛ рд╕реЗ рдЬреЛрдбрд╝ рдФрд░ рд╣рдЯрд╛ рд╕рдХрддреЗ рд╣реИрдВ ... рдЖрдк рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ 0 (1) рд╣реЛ рдФрд░ рдмрд╣реБрдд рдХрдо рдУрд╡рд░рд╣реЗрдб рд╣реЛред рдЕрдЧрд░ рд╡рд╣ рдУ (рд▓реЙрдЧ рдПрди) рдмрди рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдПрдХ рд╕рдорд╕реНрдпрд╛ рд╣реИред

рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрддрд╛рд░ рд╣реЛрдиреЗ рд╕реЗ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ C# рдЕрдзрд┐рдХ рд╕рд╛рдХреНрд╖рд╛рддреНрдХрд╛рд░ рдХреЗ рдЕрдиреБрдХреВрд▓ рд╣реЛ рдЬрд╛рдПрдЧрд╛ред

рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрддрд╛рд░ рд╣реЛрдиреЗ рд╕реЗ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ C# рдЕрдзрд┐рдХ рд╕рд╛рдХреНрд╖рд╛рддреНрдХрд╛рд░ рдХреЗ рдЕрдиреБрдХреВрд▓ рд╣реЛ рдЬрд╛рдПрдЧрд╛ред

рд╣рд╛рдБ рдпрд╣ рд╕рдЪ рд╣реИред
рдореИрдВ рдЗрд╕реЗ рдЙрд╕реА рдХрд╛рд░рдг рд╕реЗ рдвреВрдВрдв рд░рд╣рд╛ рд╣реВрдВред

@stephentoub рдЯрд╛рдЗрдордЖрдЙрдЯ рдХреЗ рд▓рд┐рдП рдЬреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХрднреА рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ, рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рд╕рд╣реА рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдЖрд╢реНрдЪрд░реНрдп рд╣реИ рдХрд┐ рд╕рд┐рд╕реНрдЯрдо рдХрд╛ рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИ рдЬрдм рдЕрдЪрд╛рдирдХ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдЯрд╛рдЗрдордЖрдЙрдЯ рд╣реЛрдиреЗ рд▓рдЧрддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдЕрдЪрд╛рдирдХ рдкреИрдХреЗрдЯ рдиреБрдХрд╕рд╛рди рд╣реЛрддрд╛ рд╣реИ рдпрд╛ рдПрдХ рдЕрдиреБрддреНрддрд░рджрд╛рдпреА рд╕рд░реНрд╡рд░ рдпрд╛ рдЬреЛ рдХреБрдЫ рднреА рд╣реЛрддрд╛ рд╣реИ? рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдЖрд╡рд░реНрддреА рдЯрд╛рдЗрдорд░ рдПрд▓рд╛ рд╕рд┐рд╕реНрдЯрдоред рдЯрд╛рдЗрдорд░ рдПрдХ рд╣реА рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ? рд╡рд╣рд╛рдВ, рд╕рдордп рд╕рдорд╛рдкреНрдд рд╣реЛрдиреЗ рд╡рд╛рд▓рд╛ рд╕рдордп 'рдЦреБрд╢ рдкрде' рд╣реЛрдЧрд╛ред

рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдЖрд╢реНрдЪрд░реНрдп рд╣реИ рдХрд┐ рд╕рд┐рд╕реНрдЯрдо рдХрд╛ рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИ рдЬрдм рдЕрдЪрд╛рдирдХ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдЯрд╛рдЗрдордЖрдЙрдЯ рд╣реЛрдиреЗ рд▓рдЧрддреЗ рд╣реИрдВ

рдЗрд╕реЗ рдЕрдЬрдорд╛рдПрдВред :)

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

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдЖрд╡рд░реНрддреА рдЯрд╛рдЗрдорд░ рдПрд▓рд╛ рд╕рд┐рд╕реНрдЯрдоред рдЯрд╛рдЗрдорд░ рдПрдХ рд╣реА рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ?

рд╣рд╛рдВред рд▓реЗрдХрд┐рди рд╡реЗ рдЖрдо рддреМрд░ рдкрд░ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рджреБрдирд┐рдпрд╛ рдХреЗ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдореЗрдВ рд╡реНрдпрд╛рдкрдХ рд░реВрдк рд╕реЗ рд╕рдорд╛рди рд░реВрдк рд╕реЗ рдлреИрд▓реЗ рд╣реБрдП рд╣реИрдВред

5 рд╕рд╛рд▓ рдмрд╛рдж, рдЕрднреА рднреА рдХреЛрдИ рдкреНрд░рд╛рдпреЛрд░рд┐рдЯреА рдХреНрдпреВ рдирд╣реАрдВ рд╣реИред

Rx рдореЗрдВ рдЕрддреНрдпрдзрд┐рдХ рдЙрддреНрдкрд╛рджрди-рдкрд░реАрдХреНрд╖рдг рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрддрд╛рд░ рд╡рд░реНрдЧ рд╣реИ:

https://github.com/Reactive-Extensions/Rx.NET/blob/master/Rx.NET/Source/System.Reactive.Core/Reactive/Internal/PriorityQueue.cs

image

5 рд╕рд╛рд▓ рдмрд╛рдж, рдЕрднреА рднреА рдХреЛрдИ рдкреНрд░рд╛рдпреЛрд░рд┐рдЯреА рдХреНрдпреВ рдирд╣реАрдВ рд╣реИред

рдкрд░реНрдпрд╛рдкреНрдд рдЙрдЪреНрдЪ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдирд╣реАрдВ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП...

рд╡реЗ рд░реЗрдкреЛ рд▓реЗрдЖрдЙрдЯ рдХреЗ рдЖрд╕рдкрд╛рд╕ рдмрджрд▓ рдЧрдПред рдирдпрд╛ рд╕реНрдерд╛рди рд╣реИ https://github.com/dotnet/reactive/blob/master/Rx.NET/Source/src/System.Reactive/Internal/PriorityQueue.cs

@stephentoub рд▓реЗрдХрд┐рди рд╢рд╛рдпрдж рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ @eiriktsarpalis рд╣рдо рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕ рдкрд░ рдХрд┐рд╕реА рднреА рдХрд░реНрд╖рдг рдЕрднреА рдХреНрдпрд╛ рдЬрд╝рд░реВрд░рдд рд╣реИ? рдпрджрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдЕрдВрддрд┐рдо рдПрдкреАрдЖрдИ рдбрд┐рдЬрд╛рдЗрди рд╣реИ рддреЛ рдореИрдВ рдЗрд╕ рдкрд░ рдХрд╛рдо рдХрд░рдиреЗ рдХреЛ рддреИрдпрд╛рд░ рд╣реВрдВ

рдореИрдВрдиреЗ рдПрдХ рдШреЛрд╖рдгрд╛ рдирд╣реАрдВ рджреЗрдЦреА рд╣реИ рдЬреЛ рдЕрднреА рддрдХ рддрдп рд╣реЛ рдЧрдИ рд╣реИ рдФрд░ рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдирд╛рдорд┐рдд рд╣рддреНрдпрд╛рд░рд╛ рдРрдк рдХреЗ рдмрд┐рдирд╛ рдЕрдВрддрд┐рдо рдПрдкреАрдЖрдИ рдбрд┐рдЬрд╝рд╛рдЗрди рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВред рдкрд░рдВрддреБ...
рдпрд╣ рдорд╛рдирддреЗ рд╣реБрдП рдХрд┐ рд╢реАрд░реНрд╖ рд╣рддреНрдпрд╛рд░рд╛ рдРрдк рдЙрдореНрдореАрджрд╡рд╛рд░ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдкреНрд░рддрд┐рдпреЛрдЧрд┐рддрд╛/рд╢рд┐рдХреНрд╖рдг/рд╕рд╛рдХреНрд╖рд╛рддреНрдХрд╛рд░ рд╣реИ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╢реАрд░реНрд╖ рдкрд░ рдПрд░рд┐рдХ рдХрд╛ рдбрд┐рдЬрд╝рд╛рдЗрди рдкрд░реНрдпрд╛рдкреНрдд рд╕реЗрд╡рд╛ рдпреЛрдЧреНрдп рджрд┐рдЦрддрд╛ рд╣реИ ... рдФрд░ рдореЗрд░реЗ рдкрд╛рд╕ рдЕрднреА рднреА рдореЗрд░рд╛ рдХрд╛рдЙрдВрдЯрд░рдкреНрд░рдкреЛрдЬрд▓ рдмреИрдард╛ рд╣реИ (рдирдпрд╛ рд╕рдВрд╢реЛрдзрд┐рдд, рдЕрднреА рднреА рд╡рд╛рдкрд╕ рдирд╣реАрдВ рд▓рд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ!)

https://github.com/TimLovellSmith/corefxlab/blob/priorityQueueSpecSold/docs/specs/priority-queue.md

рдореИрдВ рдЙрдирдХреЗ рдмреАрдЪ рдЬреЛ рдореБрдЦреНрдп рдЕрдВрддрд░ рджреЗрдЦ рд░рд╣рд╛ рд╣реВрдВ, рд╡рд╣ рдпрд╣ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдЗрд╕реЗ рдПрдХ рд╢рдмреНрджрдХреЛрд╢ рдХреА рддрд░рд╣ рдмрд╛рдд рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рдиреА рдЪрд╛рд╣рд┐рдП, рдФрд░ рдХреНрдпрд╛ рдЪрдпрдирдХрд░реНрддрд╛рдУрдВ рдХреЛ рдПрдХ рдЪреАрдЬ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред

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

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

@TimLovellSmith рдореИрдВ рдЗрд╕ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреА рдЗрдЪреНрдЫрд╛ рдХреЛ рд╕рдордЭрддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ 5 рд╕рд╛рд▓ рдХрд╛ Queue.cs рд░реВрдк рдореЗрдВ рд╕рд╛рдЭрд╛ рдХрд░рдирд╛ рдЙрдЪрд┐рдд рдирд╣реАрдВ рд╣реЛрдЧрд╛ред PriorityQueue рдмрдирд╛ рд░рд╣реЗ рд╣реИрдВ рддреЛ рдореБрдЭреЗ рд╡рд┐рд╢реНрд╡рд╛рд╕ рд╣реИ рдХрд┐ рд╣рдореЗрдВ Queue рдХреЗ рдПрдкреАрдЖрдИ рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд╛ рдЕрдиреБрдХрд░рдг рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред

@Jlalond рдЗрд╕рд▓рд┐рдП рдпрд╣рд╛рдБ рдкреНрд░рд╕реНрддрд╛рд╡, рд╣реБрд╣? рдореБрдЭреЗ рдвреЗрд░ рдЖрдзрд╛рд░рд┐рдд рд╕рд░рдгреА рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкрд░ рдХреЛрдИ рдЖрдкрддреНрддрд┐ рдирд╣реАрдВ рд╣реИред рдЕрдм рдореБрдЭреЗ рдпрд╛рдж рд╣реИ рдХрд┐ рдЪрдпрдирдХрд░реНрддрд╛рдУрдВ рдХреЗ рдЦрд┐рд▓рд╛рдл рдореЗрд░реА рд╕рдмрд╕реЗ рдмрдбрд╝реА рдЖрдкрддреНрддрд┐ рдпрд╣ рдереА рдХрд┐ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХреЗ рдЕрдкрдбреЗрдЯ рдХреЛ рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рдХрд░рдирд╛ рдЗрддрдирд╛ рдЖрд╕рд╛рди рдирд╣реАрдВ рдерд╛ред рдПрдХ рд╕рд╛рджреЗ рдкреБрд░рд╛рдиреА рдХрддрд╛рд░ рдореЗрдВ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдЕрджреНрдпрддрди рд╕рдВрдЪрд╛рд▓рди рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рддрддреНрд╡ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдЕрджреНрдпрддрди рдХрд░рдирд╛ рдХрдИ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрддрд╛рд░ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреЗ рд▓рд┐рдП рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╕рдВрдЪрд╛рд▓рди рд╣реИред
рд▓реЛрдЧреЛрдВ рдХреЛ рд╣рдореЗрд╢рд╛ рдХреЗ рд▓рд┐рдП рдЖрднрд╛рд░реА рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдЕрдЧрд░ рд╣рдо рдПрдХ рдПрдкреАрдЖрдИ рдХреЗ рд╕рд╛рде рдЬрд╛рддреЗ рд╣реИрдВ рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдЙрдиреНрд╣реЗрдВ рджреВрд╖рд┐рдд рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрддрд╛рд░ рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреЛ рдбреАрдмрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИред

@TimLovellSmith рдХреНрд╖рдорд╛ рдХрд░реЗрдВ рдЯрд┐рдо, рдореБрдЭреЗ рд╡рд┐рд░рд╛рд╕рдд рдХреЛ IDictionary рд╕реЗ рд╕реНрдкрд╖реНрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдерд╛ред

рдХреНрдпрд╛ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЙрдкрдпреЛрдЧ рдХрд╛ рдорд╛рдорд▓рд╛ рд╣реИ рдЬрд╣рд╛рдВ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдмрджрд▓ рдЬрд╛рдПрдЧреА?

рдореБрдЭреЗ рдЖрдкрдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкрд╕рдВрдж рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдо IDictionary рд╡реНрдпрд╡рд╣рд╛рд░ рдХреА рдкреНрд░рддрд┐рдХреГрддрд┐ рдХреЛ рдХрдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдореЗрдВ IDictionary<> рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдирд╣реАрдВ рдорд┐рд▓рдирд╛ рдЪрд╛рд╣рд┐рдП, рд▓реЗрдХрд┐рди рдХреЗрд╡рд▓ рдЖрдИрд╕реАрдУрд▓реЗрдХреНрд╢рди, рдХреНрдпреЛрдВрдХрд┐ рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдбрд┐рдХреНрд╢рдирд░реА рдПрдХреНрд╕реЗрд╕ рдкреИрдЯрд░реНрди рд╕рд╣рдЬ рд╣реИрдВ,

рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореБрдЭреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЯреА рд▓реМрдЯрдиреЗ рдФрд░ рдЗрд╕рдХреА рд╕рдВрдмрдВрдзрд┐рдд рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рд╕рдордЭ рдореЗрдВ рдЖрддреА рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдПрдХ рдЙрдкрдпреЛрдЧ рдХреЗрд╕ рдирд╣реАрдВ рдкрддрд╛ рд╣реИ рдЬрд╣рд╛рдВ рдореБрдЭреЗ рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛ рдХреЗ рднреАрддрд░ рдХрд┐рд╕реА рддрддреНрд╡ рдХреА рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдЬрд╛рдирдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА рдЬрдм рдЗрд╕реЗ рдПрдирдХреНрдпреВрдЗрдВрдЧ рдпрд╛ рдбреАрдХреНрдпреВрдЗрдВрдЧ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред

@Jlalond
рдпрджрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрддрд╛рд░ рд╣реИ, рддреЛ рдЗрд╕реЗ рдЙрди рд╕рднреА рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдЬреЛ рдпрд╣ рд╕рд░рд▓ рдФрд░ рдХреБрд╢рд▓рддрд╛ рд╕реЗ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, _рдФрд░_ рдЬреЛ рд╣реИрдВ
рдЗрд╕ рддрд░рд╣ рдХреА рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛/рдПрдХ рдХреЗ рдЕрдореВрд░реНрддрди рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рд▓реЛрдЧреЛрдВ рджреНрд╡рд╛рд░рд╛ 'рдЕрдкреЗрдХреНрд╖рд┐рдд' рд╣реЛрдиреЗ рдХреА рдЙрдореНрдореАрдж рд╣реИред

рдЕрджреНрдпрддрди рдХрд░рдирд╛ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдПрдкреАрдЖрдИ рдореЗрдВ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЙрди рджреЛрдиреЛрдВ рд╢реНрд░реЗрдгрд┐рдпреЛрдВ рдореЗрдВ рдЖрддрд╛ рд╣реИред рдХрдИ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдореЗрдВ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХреЛ рдЕрджреНрдпрддрди рдХрд░рдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХрд┐ рдвреЗрд░ рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреЗ рд╕рд╛рде рдСрдкрд░реЗрд╢рди рдХрд░рдиреЗ рдХреА рдЬрдЯрд┐рд▓рддрд╛ рд╕рдордЧреНрд░ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреА рдЬрдЯрд┐рд▓рддрд╛ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рддреА рд╣реИ, рдФрд░ рдЗрд╕реЗ рдирд┐рдпрдорд┐рдд рд░реВрдк рд╕реЗ рдорд╛рдкрд╛ рдЬрд╛рддрд╛ рд╣реИ, рджреЗрдЦреЗрдВ:
https://en.wikipedia.org/wiki/Priority_queue#Specialized_heaps

рдЯреАрдмреАрдПрдЪ рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рдЗрд╕рдХреА рдХрдореА_рдХреА рд╣реИ рдЬреЛ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдФрд░ рджрдХреНрд╖рддрд╛ рдХреЗ рд▓рд┐рдП рджрд┐рд▓рдЪрд╕реНрдк рд╣реИ, рдФрд░ рдорд╛рдкрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдПрдкреАрдЖрдИ рдХреЗ рд▓рд┐рдП рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рдареАрдХ рд╣реВрдВ, рдХреЗрд╡рд▓ рдШрдЯрд╛рд╡ рдкреНрд░рд╛рдердорд┐рдХрддрд╛() рд╣реИ, рдФрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЕрджреНрдпрддрди рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдирд╣реАрдВ рд╣реИред
рд▓реЗрдХрд┐рди рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП рдпрд╣ рдЕрдЪреНрдЫрд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдПрдкреАрдЖрдИ рдХреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдЗрд╕ рдЪрд┐рдВрддрд╛ рд╕реЗ рдкрд░реЗрд╢рд╛рди рди рдХрд░реЗрдВ рдХрд┐ рд╣рд░ рдмрджрд▓рд╛рд╡ рдореЗрдВ рд╡реГрджреНрдзрд┐ рдпрд╛ рдХрдореА рд╣реИ рдпрд╛ рдирд╣реАрдВред рддрд╛рдХрд┐ рдЬреЛ рдбреЗрд╡рд▓рдкрд░ рдХреЗ рдкрд╛рд╕ рдмреЙрдХреНрд╕ рдХреЗ рдмрд╛рд╣рд░ 'рдЕрдкрдбреЗрдЯ' рд╣реЛ, рдпрд╣ рдЖрд╢реНрдЪрд░реНрдп рдХрд┐рдП рдмрд┐рдирд╛ рдХрд┐ рдпрд╣ рдХреЗрд╡рд▓ рдХрдореА рдХрд╛ рд╕рдорд░реНрдерди рдХреНрдпреЛрдВ рдХрд░рддрд╛ рд╣реИ рдФрд░ рд╡реГрджреНрдзрд┐ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, (рдФрд░ рдХрдм рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реИ), рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╕рд╛рдорд╛рдиреНрдп рдЕрдкрдбреЗрдЯ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдПрдкреАрдЖрдИ рд╣реЛрдирд╛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХрдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рдЗрд╕рдХреА рд▓рд╛рдЧрдд X рд╣реЛрддреА рд╣реИ, рдЬрдм рдЗрд╕реЗ рд╡реГрджреНрдзрд┐ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдЗрд╕рдХреА рд▓рд╛рдЧрдд Y рд╣реЛрддреА рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕реЗ рдирд┐рдХрд╛рд▓реЗрдВ + рдЬреЛрдбрд╝реЗрдВ рдХреЗ рд╕рдорд╛рди рд╣реА рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдЖрд░рдИ рд╢рдмреНрджрдХреЛрд╢ рдореИрдВ рд╕рд╣рдордд рд╣реВрдБред рд╕рд░рд▓ рдХреЗ рдирд╛рдо рдкрд░ рдЗрд╕реЗ рдореЗрд░реЗ рдкреНрд░рд╕реНрддрд╛рд╡ рд╕реЗ рд╣рдЯрд╛ рджреЗрдирд╛ рд╣реА рдмреЗрд╣рддрд░ рд╣реИред
https://github.com/TimLovellSmith/corefxlab/blob/priorityQueueSpecSold/docs/specs/priority-queue.md

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

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

@TimLovellSmith

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

рдХреНрд╖рдорд╛ рдХрд░реЗрдВ, рдореИрдВрдиреЗ рдЧрд▓рдд рд╕рдордЭрд╛ рдХрд┐ рдЖрдкрдХреЗ рдкреНрд░рдореБрдЦ рдореВрд▓реНрдп рдпреБрдЧреНрдо рдореЗрдВ TPriorty рдХрд╛ рдХреНрдпрд╛ рдЕрд░реНрде рд╣реИред

рдареАрдХ рд╣реИ, рдкрд┐рдЫрд▓реЗ рджреЛ рдкреНрд░рд╢реНрди, рдХреНрдпреЛрдВ рд╡реЗ TP рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХреЗ рд╕рд╛рде KeyValuePair рд╣реИрдВ, рдФрд░ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╕рдордп рдЬреЛ рдореИрдВ рдкреБрди: рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХреЗ рд▓рд┐рдП рджреЗрдЦ рд╕рдХрддрд╛ рд╣реВрдВ рд╡рд╣ рд╣реИ рдПрди рд▓реЙрдЧ рдПрди, рдореИрдВ рдорд╛рдирддрд╛ рд╣реВрдВ рдХрд┐ рдпрд╣ рдореВрд▓реНрдпрд╡рд╛рди рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рднреА рдХрд┐ рдПрдкреАрдЖрдИ рдХреИрд╕рд╛ рджрд┐рдЦреЗрдЧрд╛?

рдкреБрди: рдкреНрд░рд╛рдердорд┐рдХрддрд╛рдХрд░рдг рдХреЗ рд▓рд┐рдП рдореИрдВ рдЬреЛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╕рдордп рджреЗрдЦ рд╕рдХрддрд╛ рд╣реВрдВ рд╡рд╣ рд╣реИ рдПрди рд▓реЙрдЧ рдПрди,

рдпрд╣ рдПрдХ рдЖрдЗрдЯрдо рдХреЗ рд╡рд┐рдкрд░реАрдд рдПрди рдЖрдЗрдЯрдо рдХреЗ рдкреБрдирд░реНрдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╕рдордп рд╣реИ, рд╣реИ рдирд╛?
рдореИрдВ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХреЛ рд╕реНрдкрд╖реНрдЯ рдХрд░ рджреВрдВрдЧрд╛: "рдЕрдкрдбреЗрдЯ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ | рдУ (рд▓реЙрдЧ рдПрди)" рдХреЛ "рдЕрдкрдбреЗрдЯ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ (рдПрдХрд▓ рдЖрдЗрдЯрдо) | рдУ (рд▓реЙрдЧ рдПрди)" рдкрдврд╝рдирд╛ рдЪрд╛рд╣рд┐рдПред

@TimLovellSmith рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрд╛ рдХреЛрдИ рдЕрдкрдбреЗрдЯ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ ne O2 * (рд▓реЙрдЧ n) рдирд╣реАрдВ рд╣реЛрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рд╣рдореЗрдВ рддрддреНрд╡ рдХреЛ рд╣рдЯрд╛рдиреЗ рдФрд░ рдлрд┐рд░ рдЗрд╕реЗ рдлрд┐рд░ рд╕реЗ рдбрд╛рд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА? рдореЗрд░реА рдзрд╛рд░рдгрд╛ рдХреЛ рдЖрдзрд╛рд░ рдмрдирд╛рдХрд░ рдпрд╣ рдПрдХ рджреНрд╡рд┐рдЖрдзрд╛рд░реА рдвреЗрд░ рд╣реИ

@TimLovellSmith рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрд╛ рдХреЛрдИ рдЕрдкрдбреЗрдЯ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ ne O2 * (рд▓реЙрдЧ n) рдирд╣реАрдВ рд╣реЛрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рд╣рдореЗрдВ рддрддреНрд╡ рдХреЛ рд╣рдЯрд╛рдиреЗ рдФрд░ рдлрд┐рд░ рдЗрд╕реЗ рдлрд┐рд░ рд╕реЗ рдбрд╛рд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА? рдореЗрд░реА рдзрд╛рд░рдгрд╛ рдХреЛ рдЖрдзрд╛рд░ рдмрдирд╛рдХрд░ рдпрд╣ рдПрдХ рджреНрд╡рд┐рдЖрдзрд╛рд░реА рдвреЗрд░ рд╣реИ

рдЬрдЯрд┐рд▓рддрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдореЗрдВ рдЙрд╕ 2 рдЬреИрд╕реЗ рд╕реНрдерд┐рд░ рдХрд╛рд░рдХреЛрдВ рдХреЛ рдЖрдо рддреМрд░ рдкрд░ рдирдЬрд░рдЕрдВрджрд╛рдЬ рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдПрди рдХреЗ рдЖрдХрд╛рд░ рдХреЗ рдмрдврд╝рдиреЗ рдХреЗ рд╕рд╛рде-рд╕рд╛рде рд╡реЗ рдЬреНрдпрд╛рджрд╛рддрд░ рдЕрдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВред

рд╕рдордЭ рдЧрдпрд╛, рдЬреНрдпрд╛рджрд╛рддрд░ рдЬрд╛рдирдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ рдХрд┐ рдХреНрдпрд╛ рдЯрд┐рдо рдХреЗ рдкрд╛рд╕ рдХреЗрд╡рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рд░реЛрдорд╛рдВрдЪрдХ рд╡рд┐рдЪрд╛рд░ рд╣реИ
рдПрдХ рдСрдкрд░реЗрд╢рди :)

рдордВрдЧрд▓, 18 рдЕрдЧрд╕реНрдд, 2020 рдкрд░, 23:51 masonwheeler [email protected] рд▓рд┐рдЦрд╛ рд╣реИ:

@TimLovellSmith https://github.com/TimLovellSmith рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди
рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрд╛ рдХреЛрдИ рдЕрджреНрдпрддрди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ ne O2 * (рд▓реЙрдЧ n) рдирд╣реАрдВ рд╣реЛрдЧрд╛, рдЬреИрд╕рд╛ рдХрд┐ рд╣рдореЗрдВ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА
рддрддреНрд╡ рдХреЛ рд╣рдЯрд╛ рджреЗрдВ рдФрд░ рдлрд┐рд░ рдЗрд╕реЗ рджреЛрдмрд╛рд░рд╛ рдбрд╛рд▓реЗрдВ? рдореЗрд░реА рдзрд╛рд░рдгрд╛ рдХреЛ рдЖрдзрд╛рд░ рдмрдирд╛рдХрд░
рдПрдХ рджреНрд╡рд┐рдЖрдзрд╛рд░реА рдвреЗрд░ рд╣реЛрдиреЗ рдХреЗ рдирд╛рддреЗ

рдЬрдЯрд┐рд▓рддрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдореЗрдВ рдЖрдо рддреМрд░ рдкрд░ рдЙрд╕ рддрд░рд╣ рдХреЗ 2 рдХрд╛рд░рдХреЛрдВ рдХреА рдЕрдирджреЗрдЦреА рдХреА рдЬрд╛рддреА рд╣реИ
рдХреНрдпреЛрдВрдХрд┐ N рдХрд╛ рдЖрдХрд╛рд░ рдмрдврд╝рдиреЗ рдкрд░ рд╡реЗ рдЕрдзрд┐рдХрддрд░ рдЕрдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВред

-
рдЖрдк рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рд╕реАрдзреЗ рдЙрддреНрддрд░ рджреЗрдВ, рдЗрд╕реЗ GitHub рдкрд░ рджреЗрдЦреЗрдВ
https://github.com/dotnet/runtime/issues/14032#issuecomment-675887763 ,
рдпрд╛ рд╕рджрд╕реНрдпрддрд╛ рд╕рдорд╛рдкреНрдд рдХрд░реЗрдВ
https://github.com/notifications/unsubscribe-auth/AF76XTI3YK4LRUVTOIQMVHLSBNZARanCNFSM4LTSQI6Q
.

@Jlalond
рдХреЛрдИ рдЙрдкрдиреНрдпрд╛рд╕ рд╡рд┐рдЪрд╛рд░ рдирд╣реАрдВ, рдореИрдВ рд╕рд┐рд░реНрдл рдПрдХ рд╕реНрдерд┐рд░ рдХрд╛рд░рдХ рдХреА рдЕрдирджреЗрдЦреА рдХрд░ рд░рд╣рд╛ рдерд╛, рд▓реЗрдХрд┐рди рдШрдЯрддреЗ рднреА рд╡реГрджреНрдзрд┐ рд╕реЗ рдЕрд▓рдЧ рд╣реИрдВ

рдпрджрд┐ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдЕрджреНрдпрддрди рдореЗрдВ рдХрдореА рд╣реИ, рддреЛ рдЖрдкрдХреЛ рдЗрд╕реЗ рд╣рдЯрд╛рдиреЗ рдФрд░ рдЗрд╕реЗ рдлрд┐рд░ рд╕реЗ рдЬреЛрдбрд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдпрд╣ рдмрд╕ рдмреБрд▓рдмреБрд▓реЗ рдмрди рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕рдХрд╛ 1 * O (рд▓реЙрдЧ рдПрди) = рдУ (рд▓реЙрдЧ рдПрди)ред
рдпрджрд┐ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдЕрджреНрдпрддрди рдПрдХ рд╡реГрджреНрдзрд┐ рд╣реИ, рддреЛ рдЖрдкрдХреЛ рд╢рд╛рдпрдж рдЗрд╕реЗ рд╣рдЯрд╛рдирд╛ рд╣реЛрдЧрд╛ рдФрд░ рдЗрд╕реЗ рдлрд┐рд░ рд╕реЗ рдЬреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛, рдЗрд╕рд▓рд┐рдП рдЗрд╕рдХрд╛ 2 * рдУ (рд▓реЙрдЧ рдПрди) = рдЕрднреА рднреА рдУ (рд▓реЙрдЧ рдПрди)ред

рдХрд┐рд╕реА рдФрд░ рдиреЗ рд╣рдЯрд╛рдиреЗ + рдкрдврд╝рдиреЗ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдмрдврд╝рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдмреЗрд╣рддрд░ рдбреЗрдЯрд╛рд╕реНрдЯреНрд░рдХреНрдЪрд░/рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХрд╛ рдЖрд╡рд┐рд╖реНрдХрд╛рд░ рдХрд┐рдпрд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ рдЗрд╕реЗ рдЦреЛрдЬрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдирд╣реАрдВ рдХреА рд╣реИ, рдУ (рд▓реЙрдЧ рдПрди) рдХрд╛рдлреА рдЕрдЪреНрдЫрд╛ рд▓рдЧрддрд╛ рд╣реИред

KeyValuePair рдПрдХ рд╢рдмреНрджрдХреЛрд╢ рд╣реЛрдиреЗ рдХреЗ рджреМрд░рд╛рди рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдореЗрдВ рдШреБрд╕ рдЧрдпрд╛, рд▓реЗрдХрд┐рди рд╢рдмреНрджрдХреЛрд╢ рдХреЛ рд╣рдЯрд╛рдиреЗ рд╕реЗ рдмрдЪ рдЧрдпрд╛, рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рддрд╛рдХрд┐ _рддрддреНрд╡реЛрдВ рдХреЗ рд╕рдВрдЧреНрд░рд╣ рдХреЛ рдЙрдирдХреА рдкреНрд░рд╛рдердорд┐рдХрддрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдкреБрдирд░рд╛рд╡реГрддреНрдд рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реЛред рдФрд░ рдпрд╣ рднреА рдХрд┐ рдЖрдк рддрддреНрд╡реЛрдВ рдХреЛ рдЙрдирдХреА рдкреНрд░рд╛рдердорд┐рдХрддрд╛рдУрдВ рд╕реЗ рд╣рдЯрд╛ рд╕рдХрддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рд╢рд╛рдпрдж рд╕рд╛рджрдЧреА рдХреЗ рд▓рд┐рдП рдлрд┐рд░ рд╕реЗ, рдкреНрд░рд╛рдердорд┐рдХрддрд╛рдУрдВ рдХреЗ рд╕рд╛рде dequeue рдХреЗрд╡рд▓ Dequeue API рдХреЗ 'рдЙрдиреНрдирдд' рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред (рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВ: рдбреА)

рдореИрдВ рд╡рд╣ рдмрджрд▓рд╛рд╡ рдХрд░реВрдВрдЧрд╛ред

@TimLovellSmith Cool, рдореБрдЭреЗ рдЖрдкрдХреЗ рд╕рдВрд╢реЛрдзрд┐рдд рдкреНрд░рд╕реНрддрд╛рд╡ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рд╣реИред рдХреНрдпрд╛ рд╣рдо рдЗрд╕реЗ рд╕рдореАрдХреНрд╖рд╛ рдХреЗ рд▓рд┐рдП рдкреНрд░рд╕реНрддреБрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рдореИрдВ рдЗрд╕ рдкрд░ рдХрд╛рдо рд╢реБрд░реВ рдХрд░ рд╕рдХреВрдВ? рдЗрд╕рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд, рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рдорд░реНрдЬ рд╕рдордп рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЬреЛрдбрд╝реА рдХрддрд╛рд░ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдкреНрд░реЛрддреНрд╕рд╛рд╣рди рдерд╛, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдЕрднреА рднреА рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдПрдХ рд╕рд░рдгреА рдЖрдзрд╛рд░рд┐рдд рдмрд╛рдЗрдирд░реА рдвреЗрд░ рд╕рдмрд╕реЗ рд╕рдордЧреНрд░ рдкреНрд░рджрд░реНрд╢рди рд╣реЛрдЧрд╛ред рд╡рд┐рдЪрд╛рд░?

@Jlalond
рдореИрдВрдиреЗ рдЙрд╕ рдкреАрдХ + рдбреЗрдХреНрдпреВ рдПрдкреАрдЖрдИ рдХреЛ рд╕рд░рд▓ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдорд╛рдореВрд▓реА рдмрджрд▓рд╛рд╡ рдХрд┐рдП рд╣реИрдВред
рдХреБрдЫ ICollectionKeyValuePair рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдПрдкреАрдЖрдИ рдЕрднреА рднреА рдмрдиреА рд╣реБрдИ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдореБрдЭреЗ рдЙрдиреНрд╣реЗрдВ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рднреА рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдмреЗрд╣рддрд░ рдирд╣реАрдВ рджрд┐рдЦ рд░рд╣рд╛ рд╣реИред
рд╡рд╣реА рдкреАрдЖрд░ рд▓рд┐рдВрдХред рдХреНрдпрд╛ рдХреЛрдИ рдФрд░ рддрд░реАрдХрд╛ рд╣реИ рдЬрд┐рд╕рд╕реЗ рдореБрдЭреЗ рдЗрд╕реЗ рд╕рдореАрдХреНрд╖рд╛ рдХреЗ рд▓рд┐рдП рд╕рдмрдорд┐рдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП?

https://github.com/TimLovellSmith/corefxlab/blob/priorityQueueSpecSold/docs/specs/priority-queue.md

рдореБрдЭреЗ рдХреЛрдИ рдлрд░реНрдХ рдирд╣реАрдВ рдкрдбрд╝рддрд╛ рдХрд┐ рдпрд╣ рдХрд┐рд╕ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛ рдЙрдкрдпреЛрдЧ рддрдм рддрдХ рдХрд░рддрд╛ рд╣реИ рдЬрдм рддрдХ рдпрд╣ рд╕рд░рдгреА рдЖрдзрд╛рд░рд┐рдд рдвреЗрд░ рдпрд╛ рдмреЗрд╣рддрд░ рдЬрд┐рддрдирд╛ рддреЗрдЬрд╝ рд╣реЛред

@TimLovellSmith рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдкреАрдЖрдИ рд╕рдореАрдХреНрд╖рд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рдирд╣реАрдВ рдЬрд╛рдирддрд╛, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ @danmosemsft рд╣рдореЗрдВ рд╕рд╣реА рджрд┐рд╢рд╛ рдореЗрдВ рдЗрдВрдЧрд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИред

рдореЗрд░рд╛ рдкрд╣рд▓рд╛ рд╕рд╡рд╛рд▓ рдпрд╣ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рд╣реЛрдЧрд╛рд╣реЛрдирд╛? рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рдЗрдВрдЯ, рдпрд╛ рдПрдХ рдлреНрд▓реЛрдЯрд┐рдВрдЧ рдкреЙрдЗрдВрдЯ рдирдВрдмрд░ рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдореЗрд░реЗ рд▓рд┐рдП рдХрддрд╛рд░ рдореЗрдВ "рдЖрдВрддрд░рд┐рдХ" рд╕рдВрдЦреНрдпрд╛ рдХреА рдШреЛрд╖рдгрд╛ рдХрд░рдирд╛ рдореЗрд░реЗ рд▓рд┐рдП рдЕрдЬреАрдм рд▓рдЧрддрд╛ рд╣реИ

рдФрд░ рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рджреНрд╡рд┐рдЖрдзрд╛рд░реА рдвреЗрд░ рдкрд╕рдВрдж рдХрд░рддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ рдХрд┐ рд╣рдо рдареАрдХ рдЙрд╕реА рджрд┐рд╢рд╛ рдореЗрдВ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВ

@eiriktsarpalis @layomia рдХреНрд╖реЗрддреНрд░ рдХреЗ рдорд╛рд▓рд┐рдХ рд╣реИрдВ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдПрдкреАрдЖрдИ рд╕рдореАрдХреНрд╖рд╛ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЗрд╕рдХреА рджреЗрдЦрднрд╛рд▓ рдХрд░рдиреА рд╣реЛрдЧреАред рдореИрдВ рдЪрд░реНрдЪрд╛ рдХрд╛ рдкрд╛рд▓рди рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рдХреНрдпрд╛ рд╣рдо рдЖрдо рд╕рд╣рдорддрд┐ рдХреЗ рдмрд┐рдВрджреБ рдкрд░ рдкрд╣реБрдВрдЪ рдЧрдП рд╣реИрдВ?

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

@Jlalond рдХреНрд╖рдорд╛ рдХрд░реЗрдВ, рдореБрдЭреЗ рд╡рд╣ рдирд╣реАрдВ рдорд┐рд▓рд╛ рдЬреЛ рдкрд╣рд▓рд╛ рдкреНрд░рд╢реНрди рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИред рдХреНрдпрд╛ рдЖрдк рдкреВрдЫ рд░рд╣реЗ рдереЗ рдХрд┐ TP рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рд╕рд╛рдорд╛рдиреНрдп рдХреНрдпреЛрдВ рд╣реИ? рдпрд╛ рдПрдХ рдирдВрдмрд░ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП? рдореБрдЭреЗ рд╕рдВрджреЗрд╣ рд╣реИ рдХрд┐ рдмрд╣реБрдд рд╕реЗ рд▓реЛрдЧ рдЧреИрд░-рд╕рдВрдЦреНрдпрд╛рддреНрдордХ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдкреНрд░рдХрд╛рд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред рд▓реЗрдХрд┐рди рд╡реЗ рдмрд╛рдЗрдЯ, рдЗрдВрдЯ, рд▓реЙрдиреНрдЧ, рдлреНрд▓реЛрдЯ, рдбрдмрд▓ рдпрд╛ рдПрдирдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдкрд╕рдВрдж рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

@TimLovellSmith рд╣рд╛рдБ, рдмрд╕ рдпрд╣ рдЬрд╛рдирдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ рдХрд┐ рдХреНрдпрд╛ рдпрд╣ рд╕рд╛рдорд╛рдиреНрдп рдерд╛

@danmosemsft рдзрдиреНрдпрд╡рд╛рдж рджрд╛рдиред рдореЗрд░реЗ рджреНрд╡рд╛рд░рд╛ рдЕрдкрдиреЗ рдкреНрд░рд╕реНрддрд╛рд╡ [1] рдкрд░ рджреЗрдЦреА рдЧрдИ рдЖрдкрддреНрддрд┐рдпреЛрдВ/рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рд▓рдЧрднрдЧ рд╢реВрдиреНрдп рд╣реИ, рдФрд░ рдпрд╣ рдХрд┐рд╕реА рднреА рдорд╣рддреНрд╡рдкреВрд░реНрдг рдкреНрд░рд╢реНрди рдХреЛ рд╕рдВрдмреЛрдзрд┐рдд рдХрд░рддрд╛ рд╣реИ рдЬреЛ рд╢реАрд░реНрд╖ рдкрд░ @ebicle рдХреЗ рдкреНрд░рд╕реНрддрд╛рд╡ рджреНрд╡рд╛рд░рд╛ рдЦреБрд▓рд╛ рдЫреЛрдбрд╝ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ (рдЬреЛ рдХрд┐ рдпрд╣ рддреЗрдЬреА рд╕реЗ рд╕рдорд╛рди рд╣реЛрддрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ)ред

рдЗрд╕рд▓рд┐рдП рдореЗрд░рд╛ рджрд╛рд╡рд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЕрдм рддрдХ рд╡рд┐рд╡реЗрдХ рдЬрд╛рдВрдЪ рдкрд╛рд╕ рдХрд░ рд░рд╣рд╛ рд╣реИред рдЕрднреА рднреА рдХреБрдЫ рд╕рдореАрдХреНрд╖рд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП, рд╣рдо рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХреНрдпрд╛ рдпрд╣ IReadOnlyCollection рдХрд╛ рдЙрддреНрддрд░рд╛рдзрд┐рдХрд╛рд░реА рд╣реИ (рдмрд╣реБрдд рдЙрдкрдпреЛрдЧреА рдирд╣реАрдВ рд▓рдЧрддрд╛ рд╣реИ рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд╡рд┐рд╢реЗрд╖рдЬреНрдЮреЛрдВ рдХреЛ рд╕реНрдердЧрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП) рдФрд░ рдЗрд╕реА рддрд░рд╣ - рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдПрдкреАрдЖрдИ рд╕рдореАрдХреНрд╖рд╛ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдпрд╣реА рд╣реИ! @eiriktsarpalis @layomia рдХреНрдпрд╛ рдореИрдВ рдЖрдкрд╕реЗ рдЗрд╕реЗ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣ рд╕рдХрддрд╛ рд╣реВрдВ?

[1] https://github.com/TimLovellSmith/corefxlab/blob/priorityQueueSpecSolved/docs/specs/priority-queue.md

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

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

  • TElement рдПрдХ рджреЛ рдмрд╛рд░ рдкреНрд░рдХрдЯ рд╣реЛрддрд╛ рд╣реИ рдЬрд╣рд╛рдВ рдпрд╣ TKey рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП
  • рдореЗрд░реЗ рдЕрдкрдиреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ рдЕрдХреНрд╕рд░ рдЙрдкрдпреЛрдЧ рдореЗрдВ рдЖрд╕рд╛рдиреА (рдФрд░ рдХреБрдЫ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рджрдХреНрд╖рддрд╛) рдХреЗ рд▓рд┐рдП bool EnqueueOrUpdateIfHigherPriority рд╣реЛрддрд╛ рд╣реИ, рдЬреЛ рдЕрдХреНрд╕рд░ рдЙрдкрдпреЛрдЧ рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рдПрдХрдорд╛рддреНрд░ рдПрдирдХреНрдпреВрдЗрдВрдЧ/рдЕрдкрдбреЗрдЯрд┐рдВрдЧ рд╡рд┐рдзрд┐ рд╣реЛрддреА рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдЧреНрд░рд╛рдл рдЦреЛрдЬ рдореЗрдВ)ред рдЬрд╛рд╣рд┐рд░ рд╣реИ рдХрд┐ рдпрд╣ рдЧреИрд░-рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдФрд░ рдПрдкреАрдЖрдИ рдореЗрдВ рдЕрддрд┐рд░рд┐рдХреНрдд рдЬрдЯрд┐рд▓рддрд╛ рдЬреЛрдбрд╝ рджреЗрдЧрд╛, рд▓реЗрдХрд┐рди рдпрд╣ рдПрдХ рдмрд╣реБрдд рдЕрдЪреНрдЫреА рдмрд╛рдд рд╣реИред
  • Enqueue рдХреА рджреЛ рдкреНрд░рддрд┐рдпрд╛рдВ рд╣реИрдВ (рдореЗрд░рд╛ рдорддрд▓рдм Add ): рдХреНрдпрд╛ рдПрдХ рдХрд╛ рдорддрд▓рдм bool TryEnqueue ?
  • "// рд╕рдВрдЧреНрд░рд╣ рдХреЛ рдордирдорд╛рдиреЗ рдХреНрд░рдо рдореЗрдВ рдмрддрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдкрд╣рд▓реЗ рдХрдо рд╕реЗ рдХрдо рддрддреНрд╡ рдХреЗ рд╕рд╛рде": рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдЕрдВрддрд┐рдо рдмрд┐рдЯ рдЙрдкрдпреЛрдЧреА рд╣реИ; рдореИрдВ рдкрд╕рдВрдж рдХрд░реВрдВрдЧрд╛ рдХрд┐ рдПрдиреНрдпреВрдорд░реЗрдЯрд░ рдХреЛ рдХреЛрдИ рддреБрд▓рдирд╛ рдирд╣реАрдВ рдХрд░рдиреА рдкрдбрд╝реЗ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ 'рдлреНрд░реА' рд╣реЛрдЧрд╛ рдЗрд╕рд▓рд┐рдП рдпрд╣ рдореБрдЭреЗ рдкрд░реЗрд╢рд╛рди рдирд╣реАрдВ рдХрд░реЗрдЧрд╛
  • EqualityComparer рдХрд╛ рдирд╛рдордХрд░рдг рдереЛрдбрд╝рд╛ рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рд╣реИ: рдореБрдЭреЗ KeyComparer рдХреЗ рд╕рд╛рде рдЬрд╛рдиреЗ рдХреА рдЙрдореНрдореАрдж PriorityComparer ред
  • рдореИрдВ CopyTo рдФрд░ ToArray рдХреА рдЬрдЯрд┐рд▓рддрд╛ рдкрд░ рдиреЛрдЯреНрд╕ рдирд╣реАрдВ рд╕рдордЭрддрд╛ред

@рд╡рд┐рдЬреБрдЕрд▓рдореЗрд▓рди
рд╕рдореАрдХреНрд╖рд╛ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд-рдмрд╣реБрдд рдзрдиреНрдпрд╡рд╛рдж!

рдореБрдЭреЗ KeyComparer рдХрд╛ рдирд╛рдордХрд░рдг рд╕реБрдЭрд╛рд╡ рдкрд╕рдВрдж рд╣реИред рдХрдореА рдкреНрд░рд╛рдердорд┐рдХрддрд╛ API рдмрд╣реБрдд рдЙрдкрдпреЛрдЧреА рд▓рдЧрддрд╛ рд╣реИред рд╣рдо рдЙрди рджреЛрдиреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдпрд╛ рджреЛрдиреЛрдВ рдПрдкреАрдЖрдИ рдХреИрд╕реЗ рдЬреЛрдбрд╝реЗрдВрдЧреЗред рдЪреВрдВрдХрд┐ рд╣рдо 'рдХрдо рд╕реЗ рдХрдо рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдкрд╣рд▓реЗ рдЖрддрд╛ рд╣реИ' рдореЙрдбрд▓ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдХреНрдпрд╛ рдЖрдк рдХреЗрд╡рд▓ рдХрдореА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ? рдпрд╛ рдЖрдк рднреА рдмрдврд╝рд╛рдирд╛ рдЪрд╛рд╣реЗрдВрдЧреЗ?

    public void EnqueueOrIncreasePriority(TKey key, TPriority priority); // doesn't throw, only updates priority of keys already in the collection if new priority is higher
    public void EnqueueOrDeccreasePriority(TKey key, TPriority priority); // doesn't throw, only updates priority of keys already in the collection new priroity is lower

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

рджреЛ рдПрдирдХреНрдпреВ рдЖрдХрд╕реНрдорд┐рдХ рдереЗред рд╣рдорд╛рд░реЗ рдкрд╛рд╕ EnqueueOrUpdate рд╣реИ, рдЬрд╣рд╛рдВ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рд╣рдореЗрд╢рд╛ рдЕрдкрдбреЗрдЯ рд╣реЛрддреА рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ TryUpdate рдЗрд╕рдХрд╛ рддрд╛рд░реНрдХрд┐рдХ рдЙрд▓рдЯрд╛ рд╣реИ, рдЬрд╣рд╛рдВ рд╕рдВрдЧреНрд░рд╣ рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рдореМрдЬреВрдж рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд▓рд┐рдП рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХреЛ рдХрднреА рднреА рдЕрдкрдбреЗрдЯ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдореИрдВ рджреЗрдЦ рд╕рдХрддрд╛ рд╣реВрдВ рдХрд┐ рдпрд╣ рдЙрд╕ рддрд╛рд░реНрдХрд┐рдХ рдЕрдВрддрд░ рдХреЛ рднрд░рддрд╛ рд╣реИ рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рдПрдкреАрдЖрдИ рд╣реИ рдЬрд┐рд╕реЗ рд▓реЛрдЧ рдЕрднреНрдпрд╛рд╕ рдореЗрдВ рдЪрд╛рд╣реЗрдВрдЧреЗред

рдореИрдВ рдХреЗрд╡рд▓ рдШрдЯрддреЗ рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдХрд▓реНрдкрдирд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ: рдпрд╣ рдорд╛рд░реНрдЧ рдореЗрдВ рдПрдХ рдкреНрд░рд╛рдХреГрддрд┐рдХ рдСрдкрд░реЗрд╢рди рд╣реИ рдЬреЛ рдПрдХ рдиреЛрдб рдХреЛ рдПрдирдХреНрдпреВ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИ рдпрд╛ рдореМрдЬреВрджрд╛ рдиреЛрдб рдХреЛ рдХрдо рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рд╡рд╛рд▓реЗ рдПрдХ рдХреЗ рд╕рд╛рде рдмрджрд▓рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИ; рдореИрдВ рддреБрд░рдВрдд рд╡рд┐рдкрд░реАрдд рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд╛ рд╕реБрдЭрд╛рд╡ рдирд╣реАрдВ рджреЗ рд╕рдХрд╛ред рдПрдХ boolean рд╡рд╛рдкрд╕реА рдкреИрд░рд╛рдореАрдЯрд░ рдЖрд╕рд╛рди рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдЬрдм рдЖрдЗрдЯрдо рдХрддрд╛рд░рдмрджреНрдз/рдХрддрд╛рд░ рдирд╣реАрдВ рд╣реЛрдиреЗ рдкрд░ рдЖрдкрдХреЛ рдХреЛрдИ рдСрдкрд░реЗрд╢рди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред

рдореИрдВ рдПрдХ рдмрд╛рдЗрдирд░реА рдвреЗрд░ рдирд╣реАрдВ рдорд╛рди рд░рд╣рд╛ рдерд╛, рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдпрд╣ рдореБрдлрд╝реНрдд рд╣реИ рддреЛ рдореБрдЭреЗ рдкрд╣рд▓реЗ рддрддреНрд╡ рдХреЗ рд╕рд╛рде рд╣рдореЗрд╢рд╛ рдиреНрдпреВрдирддрдо рд╣реЛрдиреЗ рдореЗрдВ рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реИ, рдпрд╣ рд╕рд┐рд░реНрдл рдПрдХ рдЕрдЬреАрдм рдмрд╛рдзрд╛ рд▓рдЧ рд░рд╣рд╛ рдерд╛ред

@VisualMelon @TimLovellSmith рдХреНрдпрд╛ рдПрдХ рдПрдкреАрдЖрдИ рдареАрдХ рд░рд╣реЗрдЧрд╛?
EnqueueOrUpdatePriority ? рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХрддрд╛рд░ рдХреЗ рднреАрддрд░ рдПрдХ рдиреЛрдб рдХреЛ рдкреБрдирд░реНрд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдЯреНрд░реИрд╡рд░реНрд╕рд▓ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреЗ рд▓рд┐рдП рдореВрд▓реНрдпрд╡рд╛рди рд╣реИ, рднрд▓реЗ рд╣реА рдпрд╣ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХреЛ рдмрдврд╝рд╛рддрд╛ рдпрд╛ рдШрдЯрд╛рддрд╛ рд╣реЛ

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

EnqueueOrIncreasePriority рдХреЛ рд╣рдЯрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛, EnqueueOrUpdate рдФрд░ EnqueueOrDecrease рд░рдЦрддреЗ рд╣реБрдПред рдЬрдм рдХреЛрдИ рдЖрдЗрдЯрдо рд╕рдВрдЧреНрд░рд╣ рдореЗрдВ рдирдпрд╛ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреИрд╕реЗ рд╣реИрд╢рд╕реЗрдЯред рдЬреЛрдбрд╝реЗрдВ ()ред

@Jlalond рдореИрдВ рдЙрдкрд░реЛрдХреНрдд рддреНрд░реБрдЯрд┐ рдХреЗ рд▓рд┐рдП рдХреНрд╖рдорд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ (рдЖрдкрдХреА рдирд╡реАрдирддрдо рдЯрд┐рдкреНрдкрдгреА рдХреЛ

рдореИрдВ рд╕рд┐рд░реНрдл рдпрд╣ рдЙрд▓реНрд▓реЗрдЦ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ рдХрд┐ @eiriktsarpalis рдЕрдЧрд▓реЗ рд╕рдкреНрддрд╛рд╣ рд╡рд╛рдкрд╕ рдЖ рдЬрд╛рдПрдЧрд╛ рдФрд░ рд╣рдо рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХреЛ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рджреЗрдиреЗ рдФрд░ рдлрд┐рд░ рдПрдкреАрдЖрдИ рдХреА рд╕рдореАрдХреНрд╖рд╛ рдХрд░рдиреЗ рдкрд░ рдЪрд░реНрдЪрд╛ рдХрд░реЗрдВрдЧреЗред

рдпрд╣ рдХреБрдЫ рдРрд╕рд╛ рд╣реИ рдЬрд┐рд╕ рдкрд░ рд╣рдо рд╡рд┐рдЪрд╛рд░ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рд▓реЗрдХрд┐рди рдЕрднреА рддрдХ .NET 6 рдХреЗ рд▓рд┐рдП рдкреНрд░рддрд┐рдмрджреНрдз рдирд╣реАрдВ рд╣реИрдВред

рдореИрдВ рджреЗрдЦрддрд╛ рд╣реВрдВ рдХрд┐ рдпрд╣ рдзрд╛рдЧрд╛ рдЦрд░реЛрдВрдЪ рдФрд░ рдлреЛрд░реНрдХрд┐рдВрдЧ рд╕реЗ рд╢реБрд░реВ рд╣реЛрдХрд░ рдкреБрдирд░реНрдЬреАрд╡рд┐рдд рд╣реЛ рдЧрдпрд╛, рднрд▓реЗ рд╣реА рд╣рдордиреЗ 2017 рдореЗрдВ рдЗрд╕ рд╡рд┐рд╖рдп рдкрд░ рдХрдИ рдорд╣реАрдиреЛрдВ рддрдХ рдЧрд╣рди рдЪрд░реНрдЪрд╛ рдХреА рдереА (рдЗрд╕ рд╡рд┐рд╢рд╛рд▓ рдзрд╛рдЧреЗ рдХрд╛ рдмрд╣реБрдордд) рдФрд░ рд╕рд╛рдореВрд╣рд┐рдХ рд░реВрдк рд╕реЗ рдЗрд╕ рдкреНрд░рд╕реНрддрд╛рд╡ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд┐рдпрд╛ - рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдКрдкрд░ рд╕реНрдХреНрд░реЙрд▓ рдХрд░реЗрдВред рдпрд╣ рднреА рдкреНрд░рд╕реНрддрд╛рд╡ рд╣реИ рдХрд┐ @karelz рджреГрд╢реНрдпрддрд╛ рдХреЗ рд▓рд┐рдП рдкрд╣рд▓реА рдкреЛрд╕реНрдЯ рдХреА рдкрд╣рд▓реА рдкрдВрдХреНрддрд┐ рдореЗрдВ рдЬреБрдбрд╝рд╛ рд╣реБрдЖ рд╣реИ:

Corefxlab рд░реЗрдкреЛ рдореЗрдВ рдирд╡реАрдирддрдо рдкреНрд░рд╕реНрддрд╛рд╡ рджреЗрдЦреЗрдВред

2017-06-16 рддрдХ, рд╣рдо рдПрдХ рдПрдкреАрдЖрдИ рд╕рдореАрдХреНрд╖рд╛ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░ рд░рд╣реЗ рдереЗ рдЬреЛ рдХрднреА рдирд╣реАрдВ рд╣реБрдИ рдФрд░ рд╕реНрдерд┐рддрд┐ рдпрд╣ рдереА:

рдпрджрд┐ рдПрдкреАрдЖрдИ рдЕрдкрдиреЗ рд╡рд░реНрддрдорд╛рди рд╕реНрд╡рд░реВрдк (рджреЛ рд╡рд░реНрдЧреЛрдВ) рдореЗрдВ рд╕реНрд╡реАрдХреГрдд рд╣реИ, рддреЛ рдореИрдВ рдПрдХ рдЪрддреБрд░реНрдзрд╛рддреБрдХ рдвреЗрд░ ( рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рджреЗрдЦреЗрдВ ) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рджреЛрдиреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд╕рд╛рде CoreFXLab рдХреЗ рд▓рд┐рдП рдПрдХ рдФрд░ рдкреАрдЖрд░ рдмрдирд╛рдКрдВрдЧрд╛ред PriorityQueue<T> рдиреАрдЪреЗ рдХреЗрд╡рд▓ рдПрдХ рд╕рд░рдгреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдЧрд╛, рдЬрдмрдХрд┐ PriorityQueue<TElement, TPriority> рджреЛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдЧрд╛ - рдФрд░ рдЙрдирдХреЗ рддрддреНрд╡реЛрдВ рдХреЛ рдПрдХ рд╕рд╛рде рдкреБрдирд░реНрд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░реЗрдЧрд╛ред рдпрд╣ рд╣рдореЗрдВ рдЕрддрд┐рд░рд┐рдХреНрдд рдЖрд╡рдВрдЯрди рд╕реЗ рдмрдЪрд╛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдЬрд┐рддрдирд╛ рд╣реЛ рд╕рдХреЗ рдЙрддрдирд╛ рдХреБрд╢рд▓ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдПрдХ рдмрд╛рд░ рд╣рд░реА рдмрддреНрддреА рдЖрдиреЗ рдкрд░ рдореИрдВ рдЗрд╕реЗ рдЬреЛрдбрд╝ рджреВрдВрдЧрд╛ред

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

@pgolebiowski рдЪрд░реНрдЪрд╛ рдореЗрдВ рд╡рд╛рдкрд╕ рдЖрдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред рдореИрдВ рдкреНрд░рд╕реНрддрд╛рд╡реЛрдВ рдХреЛ рдЖрдЧреЗ рднреА рдкреНрд░рднрд╛рд╡реА рдврдВрдЧ рд╕реЗ рдЖрдЧреЗ рдмрдврд╝рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХреНрд╖рдорд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рдЬреЛ рд╕рд╣рдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рдкреНрд░рднрд╛рд╡реА рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИред рдпрд╣ рдореЗрд░реА рдУрд░ рд╕реЗ рдПрдХ рдЖрд╡реЗрдЧрдкреВрд░реНрдг рдХрджрдо рдерд╛ред (рдореБрдЭреЗ рдпрд╣ рдЖрднрд╛рд╕ рдерд╛ рдХрд┐ рдкреНрд░рд╕реНрддрд╛рд╡реЛрдВ рдореЗрдВ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдЦреБрд▓реЗ рдкреНрд░рд╢реНрди рд╣реЛрдиреЗ рдХреЗ рдХрд╛рд░рдг рдЪрд░реНрдЪрд╛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдардк рд╣реЛ рдЧрдИ рдереА, рдФрд░ рдмрд╕ рдПрдХ рдЕрдзрд┐рдХ рд╕реБрд╡рд┐рдЪрд╛рд░рд┐рдд рдкреНрд░рд╕реНрддрд╛рд╡ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереАред)

рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдЕрдЧрд░ рд╣рдо рдЕрдкрдиреЗ рдкреАрдЖрд░ рдХреА рдХреЛрдб рд╕рд╛рдордЧреНрд░реА рдХреЛ рдХрдо рд╕реЗ рдХрдо рдЕрд╕реНрдерд╛рдпреА рд░реВрдк рд╕реЗ рднреВрд▓рдХрд░ рдЗрд╕ рдкрд░ рдЖрдЧреЗ рдмрдврд╝рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдпрд╣рд╛рдВ рдкрд╣рдЪрд╛рдиреЗ рдЧрдП 'рдЦреБрд▓реЗ рдореБрджреНрджреЛрдВ' рдкрд░ рдЪрд░реНрдЪрд╛ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ? рдореИрдВ рдЙрди рд╕рднреА рдкрд░ рдЕрдкрдиреА рд░рд╛рдп рджреЗрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред

  1. рдХреНрд▓рд╛рд╕ рдХрд╛ рдирд╛рдо рдкреНрд░рд╛рдпреЛрд░рд┐рдЯреА рдХреНрдпреВ рдмрдирд╛рдо рд╣реАрдк <- рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рдкрд░ рдкрд╣рд▓реЗ рд╣реА рдЪрд░реНрдЪрд╛ рд╣реЛ рдЪреБрдХреА рд╣реИ рдФрд░ рд╕рд░реНрд╡рд╕рдореНрдорддрд┐ рдпрд╣ рд╣реИ рдХрд┐ рдкреНрд░рд╛рдпреЛрд░рд┐рдЯреА рдХреНрдпреВ рдмреЗрд╣рддрд░ рд╣реИред

  2. IHeap рдФрд░ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдЕрдзрд┐рднрд╛рд░ рдХрд╛ рдкрд░рд┐рдЪрдп рджреЗрдВ? <-- рдореБрдЭреЗ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдореВрд▓реНрдп рдХреА рдЙрдореНрдореАрдж рдирд╣реАрдВ рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рджреБрдирд┐рдпрд╛ рдХреЗ 95% рдХреЗ рд▓рд┐рдП рдХрдИ рдвреЗрд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдирд┐рд╡рд╛рд░реНрдп рдХрд╛рд░рдг рдирд╣реАрдВ рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдкреНрд░рджрд░реНрд╢рди рдбреЗрд▓реНрдЯрд╛), рдФрд░ рдЕрдиреНрдп 5% рдХреЛ рд╢рд╛рдпрдж рдЕрдкрдирд╛ рдЦреБрдж рдХрд╛ рд▓рд┐рдЦрдирд╛ рд╣реЛрдЧрд╛ред

  3. рдЖрдИ рдкреНрд░рд╛рдпреЛрд░рд┐рдЯреА рдХреНрдпреВ рдХрд╛ рдкрд░рд┐рдЪрдп рджреЗрдВ? <-- рдореБрдЭреЗ рднреА рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдЗрд╕рдХреА рдЬрд░реВрд░рдд рд╣реИред рдореИрдВ рдорд╛рди рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рдЕрдиреНрдп рднрд╛рд╖рд╛рдПрдВ рдФрд░ рдврд╛рдВрдЪреЗ рдЗрди рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЗ рдмрд┐рдирд╛ рдЙрдирдХреЗ рдорд╛рдирдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдореЗрдВ рдареАрдХ рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВред рдореБрдЭреЗ рдмрддрд╛рдПрдВ рдХрд┐ рдХреНрдпрд╛ рдпрд╣ рдЧрд▓рдд рд╣реИред

  4. рдЪрдпрдирдХрд░реНрддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ (рдореВрд▓реНрдп рдХреЗ рдЕрдВрджрд░ рд╕рдВрдЧреНрд░рд╣реАрдд рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрд╛) рдпрд╛ рдирд╣реАрдВ (5 рдПрдкреАрдЖрдИ рдЕрдВрддрд░) <- рдореБрдЭреЗ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрддрд╛рд░ рдореЗрдВ рдЪрдпрдирдХрд░реНрддрд╛рдУрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреЗ рдкрдХреНрд╖ рдореЗрдВ рдПрдХ рдордЬрдмреВрдд рддрд░реНрдХ рдирд╣реАрдВ рджрд┐рдЦ рд░рд╣рд╛ рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдЗрдЯрдо рдкреНрд░рд╛рдердорд┐рдХрддрд╛рдУрдВ рдХреА рддреБрд▓рдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП IComparer<> рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рдЕрдЪреНрдЫрд╛ рдиреНрдпреВрдирддрдо рдПрдХреНрд╕реНрдЯреЗрдВрд╕рд┐рдмрд┐рд▓рд┐рдЯреА рддрдВрддреНрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдЪрдпрдирдХрд░реНрддрд╛ рдХреЛрдИ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╕реБрдзрд╛рд░ рдкреНрд░рджрд╛рди рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд▓реЛрдЧреЛрдВ рдХреЛ рднреНрд░рдорд┐рдд рд╣реЛрдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ рдХрд┐ рдЪрдпрдирдХрд░реНрддрд╛рдУрдВ рдХреЛ рдкрд░рд┐рд╡рд░реНрддрдиреАрдп рдкреНрд░рд╛рдердорд┐рдХрддрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдХреИрд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдП (рдпрд╛ рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдП)ред

  5. рдЯреБрдкрд▓реНрд╕ (TElement рддрддреНрд╡, TP рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдкреНрд░рд╛рдердорд┐рдХрддрд╛) рдмрдирд╛рдо KeyValuePair рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ<- рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ KeyValuePair рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрддрд╛рд░ рдХреЗ рд▓рд┐рдП рдкрд╕рдВрджреАрджрд╛ рд╡рд┐рдХрд▓реНрдк рд╣реИ рдЬрд╣рд╛рдВ рд╡рд╕реНрддреБрдУрдВ рдХреА рдЕрджреНрдпрддрди рдХрд░рдиреЗ рдпреЛрдЧреНрдп рдкреНрд░рд╛рдердорд┐рдХрддрд╛рдПрдВ рд╣реЛрддреА рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдЖрдЗрдЯрдо рдХреЛ рд╕реЗрдЯ/рд╢рдмреНрджрдХреЛрд╢ рдореЗрдВ рдХреБрдВрдЬреА рдХреЗ рд░реВрдк рдореЗрдВ рдорд╛рдирд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИред

  6. рдХреНрдпрд╛ рдкреАрдХ рдФрд░ рдбреЗрдХреНрдпреВ рдХреЛ рдЯрдкрд▓ рдХреЗ рдмрдЬрд╛рдп рддрд░реНрдХ рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдП? <- рдореИрдВ рд╕рднреА рдкреЗрд╢реЗрд╡рд░реЛрдВ рдФрд░ рд╡рд┐рдкрдХреНрд╖реЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реВрдВ, рдЦрд╛рд╕рдХрд░ рдкреНрд░рджрд░реНрд╢рдиред рдХреНрдпрд╛ рд╣рдореЗрдВ рдХреЗрд╡рд▓ рд╡рд╣реА рдЪреБрдирдирд╛ рдЪрд╛рд╣рд┐рдП рдЬреЛ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдмреЗрдВрдЪрдорд╛рд░реНрдХ рдЯреЗрд╕реНрдЯ рдореЗрдВ рдмреЗрд╣рддрд░ рдкреНрд░рджрд░реНрд╢рди рдХрд░рддрд╛ рд╣реИ?

  7. рдХреНрдпрд╛ рдкреАрдХ рдФрд░ рдбреЗрдХреНрдпреВ рдлреЗрдВрдХрдирд╛ рдЙрдкрдпреЛрдЧреА рд╣реИ? <- рд╣рд╛рдБ... рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреЗ рд▓рд┐рдП рдпрд╣реА рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдЬреЛ рдЧрд▓рдд рддрд░реАрдХреЗ рд╕реЗ рдорд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдХрддрд╛рд░ рдореЗрдВ рдЕрднреА рднреА рдЖрдЗрдЯрдо рд╣реИрдВ ред рдпрджрд┐ рдЖрдк рдирд╣реАрдВ рдЪрд╛рд╣рддреЗ рдХрд┐ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХрднреА рднреА рдпрд╣ рдорд╛рди рд▓реЗрдВ, рддреЛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫреА рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдкреАрдХ рдФрд░ рдбреЗрдХреНрдпреВ рдПрдкрд┐рд╕ рдмрд┐рд▓реНрдХреБрд▓ рднреА рдкреНрд░рджрд╛рди рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдмрд▓реНрдХрд┐ рдХреЗрд╡рд▓ рдЯреНрд░рд╛рдИрдкреАрдХ рдФрд░ рдЯреНрд░рд╛рдИрдбреЗрдХреНрдпреВ рдкреНрд░рджрд╛рди рдХрд░реЗрдВред [рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдРрд╕реЗ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рд╣реИрдВ рдЬреЛ рдХреБрдЫ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рдкреАрдХ рдпрд╛ рдбреЗрдХреНрдпреВ рдХреЛ рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рдХреЙрд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдкреАрдХ/рдбреЗрдХреНрдпреВ рд╣реЛрдиреЗ рд╕реЗ рдЙрдирдХреЗ рд▓рд┐рдП рдереЛрдбрд╝рд╛ рд╕рд╛ рдкреНрд░рджрд░реНрд╢рди + рдЙрдкрдпреЛрдЧрд┐рддрд╛ рд╕реБрдзрд╛рд░ рд╣реЛрддрд╛ рд╣реИред]

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдореЗрд░реЗ рдкрд╛рд╕ рд╡рд┐рдЪрд╛рд░рд╛рдзреАрди рдкреНрд░рд╕реНрддрд╛рд╡ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рд╕реБрдЭрд╛рд╡ рднреА рд╣реИрдВ:

  1. рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрддрд╛рд░рдХреЗрд╡рд▓ рдЕрджреНрд╡рд┐рддреАрдп рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЬреЛ рдЙрдирдХреЗ рдЕрдкрдиреЗ рд╣реИрдВрдбрд▓ рд╣реИрдВред рдЗрд╕реЗ рдХрд╕реНрдЯрдо IEqualityComparer рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдпрджрд┐ рд╡рд╣ рдЧреИрд░-рдПрдХреНрд╕рдЯреЗрдВрд╕рд┐рдмрд▓ рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ (рдЬреИрд╕реЗ рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕) рдХреА рддреБрд▓рдирд╛ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢рд┐рд╖реНрдЯ рддрд░реАрдХреЛрдВ рд╕реЗ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИред

  2. рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрддрд╛рд░рдЧреНрд░рд╛рдлрд╝ рдЦреЛрдЬ рдкрд░рд┐рджреГрд╢реНрдпреЛрдВ рдХреЛ рдХреБрд╢рд▓рддрд╛рдкреВрд░реНрд╡рдХ рдФрд░ рд╕рд░рд▓рддрд╛ рд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП 'рдирд┐рдХрд╛рд▓реЗрдВ', 'рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрдо рдХрд░реЗрдВ рдпрджрд┐ рдЫреЛрдЯрд╛ рд╣реЛ', рдФрд░ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ 'рдПрдирдХреНрдпреВ рдЖрдЗрдЯрдо рдпрд╛ рдЫреЛрдЯреЗ рдСрдкрд░реЗрд╢рди рд╣реЛрдиреЗ рдкрд░ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрдо рдХрд░реЗрдВ' рдЬреИрд╕реЗ рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рдВрдЪрд╛рд▓рди рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред

  3. рдпрд╣ рдЖрд▓рд╕реА рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЗ рд▓рд┐рдП рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реЛрдЧрд╛ рдпрджрд┐ рдкреНрд░рд╛рдпреЛрд░рд┐рдЯреАрдХреНрдпреВрдореМрдЬреВрджрд╛ рд╡рд╕реНрддреБрдУрдВ рдХреА рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдкреНрд░рд╛рдкреНрдд/рд╕реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрдВрдбреЗрдХреНрд╕ рдСрдкрд░реЗрдЯрд░ [] рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП O(1), рд╕реЗрдЯ рдХреЗ рд▓рд┐рдП O(log n) рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

  4. рд╕рдмрд╕реЗ рдЫреЛрдЯреА рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫреА рд╣реИред рдХреНрдпреЛрдВрдХрд┐ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрддрд╛рд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ 'рдиреНрдпреВрдирддрдо рд▓рд╛рдЧрдд' рдХреЗ рд╕рд╛рде рдЕрдиреБрдХреВрд▓рди рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

  5. рдЧрдгрдирд╛ рдХреЛ рдХреЛрдИ рдЖрджреЗрд╢ рджреЗрдиреЗ рдХреА рдЧрд╛рд░рдВрдЯреА рдирд╣реАрдВ рджреЗрдиреА рдЪрд╛рд╣рд┐рдПред

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

рдЗрд╕реЗ рддреЗрдЬреА рд╕реЗ рдЖрдЧреЗ рдмрдврд╝рд╛рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рдЪрд╛рд░, рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХреЛ "рд╕рд╛рдореБрджрд╛рдпрд┐рдХ рд╕рдВрдЧреНрд░рд╣" рдкреБрд╕реНрддрдХрд╛рд▓рдп рдореЗрдВ рд▓реЗ рдЬрд╛рдиреЗ рдХреЗ рд▓рд┐рдП https://github.com/dotnet/runtime/discussions/42205 рдореЗрдВ рдЪрд░реНрдЪрд╛ рдХреА рдЬрд╛ рд░рд╣реА рд╣реИред

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

рд╣рдо рдЗрд╕реЗ рдЬрд▓реНрдж рд╕реЗ рдЬрд▓реНрдж рдПрдкреАрдЖрдИ рд╕рдореАрдХреНрд╖рд╛ рдХреЗ рд▓рд┐рдП рд▓рд╛рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░ рд░рд╣реЗ рд╣реИрдВ (рд╣рд╛рд▓рд╛рдВрдХрд┐ рд╣рдо рдЕрднреА рддрдХ .NET 6 рд╕рдордп рд╕реАрдорд╛ рдХреЗ рднреАрддрд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рддрд┐рдмрджреНрдз рдирд╣реАрдВ рд╣реИрдВ)ред

рд▓реЗрдХрд┐рди рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐ рд╣рдо рдЗрд╕реЗ рд╕рдореАрдХреНрд╖рд╛ рдХреЗ рд▓рд┐рдП рднреЗрдЬреЗрдВ, рд╣рдореЗрдВ рдХреБрдЫ рдЙрдЪреНрдЪ-рд╕реНрддрд░реАрдп рдЦреБрд▓реЗ рдкреНрд░рд╢реНрдиреЛрдВ рдХреЛ рд╣рд▓ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ @TimLovellSmith рдХрд╛ рд▓реЗрдЦрди рдЙрд╕ рд▓рдХреНрд╖реНрдп рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХреА рджрд┐рд╢рд╛ рдореЗрдВ рдПрдХ рдЕрдЪреНрдЫрд╛ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдмрд┐рдВрджреБ рд╣реИред

рдЙрди рдмрд┐рдВрджреБрдУрдВ рдкрд░ рдХреБрдЫ рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ:

  • рдкреНрд░рд╢реНрдиреЛрдВ 1-3 рдкрд░ рд╕рд╣рдорддрд┐ рд▓рдВрдмреЗ рд╕рдордп рд╕реЗ рд╕реНрдерд╛рдкрд┐рдд рд╣реИ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рдЙрдиреНрд╣реЗрдВ рд╣рд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

  • _рдЪрдпрдирдХрд░реНрддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ (рдореВрд▓реНрдп рдХреЗ рдЕрдВрджрд░ рд╕рдВрдЧреНрд░рд╣реАрдд рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрд╛) рдпрд╛ рдирд╣реАрдВ_ -- рдЖрдкрдХреА рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рд╕реЗ рд╕рд╣рдордд рд╣реВрдВред рдЙрд╕ рдбрд┐рдЬрд╝рд╛рдЗрди рдХреЗ рд╕рд╛рде рдПрдХ рдФрд░ рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдЪрдпрдирдХрд░реНрддрд╛ рд╡реИрдХрд▓реНрдкрд┐рдХ рд╣реИрдВ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рд╕рд╛рд╡рдзрд╛рди рд░рд╣рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдЧрд▓рдд Enqueue рдУрд╡рд░рд▓реЛрдб (рдпрд╛ InvalidOperationException рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХрд╛ рдЬреЛрдЦрд┐рдо) рди рдХрд╣реЗрдВред

  • рдореИрдВ KeyValuePair рд╕реЗ рдЕрдзрд┐рдХ рдЯрдкрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдкрдХреНрд╖ рд▓реЗрддрд╛ рд╣реВрдВред рдПрдХ .Key рд╕рдВрдкрддреНрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ TPriority рдореВрд▓реНрдп рддрдХ рдкрд╣реБрдБрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдореБрдЭреЗ рдЕрдЬреАрдм рд▓рдЧрддрд╛ рд╣реИред рдПрдХ рдЯрдкрд▓ рдЖрдкрдХреЛ .Priority рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рджреЗрддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдмреЗрд╣рддрд░ рд╕реНрд╡-рджрд╕реНрддрд╛рд╡реЗрдЬреАрдХрд░рдг рдЧреБрдг рд╣реЛрддреЗ рд╣реИрдВред

  • _рдХреНрдпрд╛ рдкреАрдХ рдФрд░ рдбреЗрдХреНрдпреВ рдХреЛ рдЯрдкрд▓ рдХреЗ рдмрдЬрд╛рдп рддрд░реНрдХ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП?_ - рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдореЗрдВ рдЕрдиреНрдп рдЬрдЧрд╣реЛрдВ рдкрд░ рдЗрд╕реА рддрд░рд╣ рдХреЗ рддрд░реАрдХреЛрдВ рдореЗрдВ рд╕реНрдерд╛рдкрд┐рдд рд╕рдореНрдореЗрд▓рди рдХрд╛ рдкрд╛рд▓рди рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рддреЛ рд╢рд╛рдпрдж out рддрд░реНрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред

  • _рдХреНрдпрд╛ рдкреАрдХ рдФрд░ рдбреЗрдХреНрдпреВ рдлреЗрдВрдХрдирд╛ рдмрд┐рд▓реНрдХреБрд▓ рдЙрдкрдпреЛрдЧреА рд╣реИ?_ -- рдЖрдкрдХреА рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рд╕реЗ 100% рд╕рд╣рдордд рд╣реИрдВред

  • _рд╕рдмрд╕реЗ рдЫреЛрдЯреА рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫреА рд╣реИ_ -- рд╕рд╣рдорддред

  • _рдЧрдгрдирд╛ рдХреЛ рдХреЛрдИ рдЖрджреЗрд╢ рджреЗрдиреЗ рдХреА рдЧрд╛рд░рдВрдЯреА рдирд╣реАрдВ рджреЗрдиреА рдЪрд╛рд╣рд┐рдП_ -- рдХреНрдпрд╛ рдпрд╣ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреА рдЕрдкреЗрдХреНрд╖рд╛рдУрдВ рдХрд╛ рдЙрд▓реНрд▓рдВрдШрди рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИ? рд╕реМрджреЗрдмрд╛рдЬреА рдХреНрдпрд╛ рд╣реИрдВ? рдПрдирдмреА рд╣рдо рд╢рд╛рдпрдж рдПрдкреАрдЖрдИ рд╕рдореАрдХреНрд╖рд╛ рдЪрд░реНрдЪрд╛ рдХреЗ рд▓рд┐рдП рдЗрд╕ рддрд░рд╣ рдХреЗ рд╡рд┐рд╡рд░рдг рдХреЛ рд╕реНрдердЧрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдореИрдВ рдХреБрдЫ рдЕрдиреНрдп рдЦреБрд▓реЗ рдкреНрд░рд╢реНрдиреЛрдВ рдХреЛ рднреА рджреЛрд╣рд░рд╛рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛:

  • рдХреНрдпрд╛ рд╣рдо PriorityQueue<T> , PriorityQueue<TElement, TPriority> рдпрд╛ рджреЛрдиреЛрдВ рдХреЛ рд╢рд┐рдк рдХрд░рддреЗ рд╣реИрдВ? - рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдореЗрдВ рдХреЗрд╡рд▓ рдмрд╛рдж рд╡рд╛рд▓реЗ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдХреНрдпреЛрдВрдХрд┐ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рдХреНрд▓реАрдирд░ рдФрд░ рдЕрдзрд┐рдХ рд╕рд╛рдорд╛рдиреНрдп-рдЙрджреНрджреЗрд╢реНрдп рд╕рдорд╛рдзрд╛рди рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрддрд╛рд░рдмрджреНрдз рддрддреНрд╡ рдХреА рдЖрдВрддрд░рд┐рдХ рд╕рдВрдкрддреНрддрд┐ рдирд╣реАрдВ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП, рдЗрд╕рд▓рд┐рдП рд╣рдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдЗрд╕реЗ рдЖрд╡рд░рдг рдкреНрд░рдХрд╛рд░реЛрдВ рдореЗрдВ рд╕рдорд╛рд╣рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╛рдзреНрдп рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред

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

    1. рдореВрд▓ рддрддреНрд╡ (рд╕рдорд╛рдирддрд╛ рддрдХ) рдХреЛ рдкрд╛рд░рд┐рдд рдХрд░рдХреЗ рд╡рд┐рд╢рд┐рд╖реНрдЯрддрд╛/рд╕рдорд╛рдирддрд╛ рдФрд░ рд╕рдорд░реНрдерди рдЕрджреНрдпрддрди рдкрд░рд┐рджреГрд╢реНрдп рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
    2. рд╣реИрдВрдбрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╡рд┐рд╢рд┐рд╖реНрдЯрддрд╛/рд╕рдорд╛рдирддрд╛ рдФрд░ рд╕рдорд░реНрдерди рдЕрджреНрдпрддрди рдкрд░рд┐рджреГрд╢реНрдп рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдЗрдиреНрд╣реЗрдВ рдЙрди рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рд╡реИрдХрд▓реНрдкрд┐рдХ Enqueue рд╡рд┐рдзрд┐ рд░реВрдкреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдЬрд┐рдиреНрд╣реЗрдВ рдЗрдирдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдпрджрд┐ рд╣реИрдВрдбрд▓ рдЖрд╡рдВрдЯрди рдПрдХ рдмрдбрд╝реА рдЪрд┐рдВрддрд╛ рд╣реИ, рддреЛ рдореИрдВ рд╕реЛрдЪ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рдХреНрдпрд╛ рдЙрдиреНрд╣реЗрдВ рд▓рд╛ рд╡реИрд▓реНрдпреВ рдЯрд╛рд╕реНрдХ рдореЗрдВ рдкрд░рд┐рд╢реЛрдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ?
    3. рд╡рд┐рд╢рд┐рд╖реНрдЯрддрд╛/рд╕рдорд╛рдирддрд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ рдФрд░ рдЕрджреНрдпрддрди рдкреНрд░рд╛рдердорд┐рдХрддрд╛рдУрдВ рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред
  • рдХреНрдпрд╛ рд╣рдо рдХрддрд╛рд░реЛрдВ рдХреЛ рдорд░реНрдЬ рдХрд░рдиреЗ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддреЗ рд╣реИрдВ? - рдЖрдо рд╕рд╣рдорддрд┐ рдирд╣реАрдВ рд▓рдЧрддреА рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рдХреЗрд╡рд▓ рдПрдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди (рд╕рдВрднрд╡рддрдГ рд╕рд░рдгреА рдвреЗрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ) рд╢рд┐рдкрд┐рдВрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдЬрд╣рд╛рдВ рд╡рд┐рд▓рдп рдХреБрд╢рд▓ рдирд╣реАрдВ рд╣реИред

  • рдЗрд╕реЗ рдХрд┐рд╕ рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП? -- рдореИрдВрдиреЗ IQueue<T> рдХреА рдЕрдиреБрд╢рдВрд╕рд╛ рдХрд░рддреЗ рд╣реБрдП рдХреБрдЫ рдкреНрд░рд╕реНрддрд╛рд╡ рджреЗрдЦреЗ, рд▓реЗрдХрд┐рди рдпрд╣ рдПрдХ рдЯрдкрдХрд╛ рд╣реБрдЖ рд╕рд╛рд░ рдЬреИрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИред рдореИрдВ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рдЗрд╕реЗ рд╕рд░рд▓ рд░рдЦрдирд╛ рдкрд╕рдВрдж рдХрд░реВрдВрдЧрд╛ рдФрд░ рдХреЗрд╡рд▓ ICollection<T> рд▓рд╛рдЧреВ рдХрд░реВрдВрдЧрд╛ред

cc @layomia @safern

@eiriktsarpalis рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд - рдЕрдкрдбреЗрдЯ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╛рдзрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рднреА рдХреГрддреНрд░рд┐рдо рдирд╣реАрдВ рд╣реИ!

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

рд╕рд╛рде рд╣реА рдпрд╣ рджрд╛рд░реНрд╢рдирд┐рдХ рдкреНрд░рд╢реНрди рдкреВрд░реЗ рдХрд╛рд░рдг рд╕реЗ рд╣реИ рдХрд┐ рдХреЛрдИ рднреА рдПрдХ рдХрддрд╛рд░ рдЪрд╛рд╣реЗрдЧрд╛ рдЬреЛ _рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рд╕реЗ рдЯреНрд░реИрдХ рдХрд░реЗ_ рдЗрд╕ рддрд░рд╣ рд╕реЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП: рдПрдХ рд╣реА рд╡рд╕реНрддреБ (рд╕рддреНрдп рд░рд┐рдЯрд░реНрди рдХреЗ рдмрд░рд╛рдмрд░) рдореЗрдВ рджреЛ _рднрд┐рдиреНрди_ рдкреНрд░рд╛рдердорд┐рдХрддрд╛рдПрдВ рдХреНрдпреЛрдВ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП? рдЕрдЧрд░ рдЙрдиреНрд╣реЗрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдкреНрд░рд╛рдердорд┐рдХрддрд╛рдПрдВ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЙрдиреНрд╣реЗрдВ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдХреНрдпреЛрдВ рдирд╣реАрдВ рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ? (рдпрд╛ рдбрд┐рдлрд░реЗрдВрд╢рд┐рдпрд▓ рдХреЗ рд╕рд╛рде рдЯреБрдкрд▓реНрд╕ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд?)

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рд╣реИрдВрдбрд▓ рдХреЗ рд▓рд┐рдП, рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрддрд╛рд░ рдореЗрдВ рд╣реИрдВрдбрд▓ рдХреА рдХреБрдЫ рдЖрдВрддрд░рд┐рдХ рддрд╛рд▓рд┐рдХрд╛ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП рддрд╛рдХрд┐ рд╣реИрдВрдбрд▓ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХрд╛рдо рдХрд░ рд╕рдХреЗрдВред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХрддрд╛рд░ рдореЗрдВ рд╡рд╕реНрддреБрдУрдВ рдХреЛ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╢рдмреНрджрдХреЛрд╢ рд░рдЦрдиреЗ рдХреЗ рдмрд░рд╛рдмрд░ рдХрд╛рдо рд╣реИред

рдкреБрдирд╢реНрдЪ: рдкреНрд░рддреНрдпреЗрдХ .net рдСрдмреНрдЬреЗрдХреНрдЯ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕рдорд╛рдирддрд╛/рд╡рд┐рд╢рд┐рд╖реНрдЯрддрд╛ рдХреА рдЕрд╡рдзрд╛рд░рдгрд╛рдУрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕рдХреА 'рдЖрд╡рд╢реНрдпрдХрддрд╛' рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдмрдбрд╝реА рдмрд╛рдд рдирд╣реАрдВ рд╣реИред

KeyValuePair , рдореИрдВ рд╕рд╣рдордд рд╣реВрдВ рдХрд┐ рдпрд╣ рдЖрджрд░реНрд╢ рдирд╣реАрдВ рд╣реИ (рд╣рд╛рд▓рд╛рдВрдХрд┐ рдкреНрд░рд╕реНрддрд╛рд╡ рдореЗрдВ, Key рддрддреНрд╡ рдХреЗ рд▓рд┐рдП рд╣реИ, Value рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХреЗ рд▓рд┐рдП рд╣реИ, рдЬреЛ рд╡рд┐рднрд┐рдиреНрди Sorted рдЕрдиреБрд░реВрдк рд╣реИ struct рдкрд╕рдВрдж рдХрд░реВрдВрдЧрд╛, рдЦрд╛рд╕рдХрд░ рдЗрдирдкреБрдЯ рдХреЗ рд▓рд┐рдПред

рд╡рд┐рд╢рд┐рд╖реНрдЯрддрд╛ рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ, рдпрд╣ рдПрдХ рдореМрд▓рд┐рдХ рдЪрд┐рдВрддрд╛ рд╣реИ, рдФрд░ рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рддрдм рддрдХ рдХреБрдЫ рдФрд░ рддрдп рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдореИрдВ (рд╡реИрдХрд▓реНрдкрд┐рдХ) рддреБрд▓рдирд┐рддреНрд░ (рдореМрдЬреВрджрд╛ рдкреНрд░рд╕реНрддрд╛рд╡реЛрдВ рдФрд░ рд╕реБрдЭрд╛рд╡ i рджреЛрдиреЛрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░) рджреНрд╡рд╛рд░рд╛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рддрддреНрд╡ рд╡рд┐рд╢рд┐рд╖реНрдЯрддрд╛ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░реВрдВрдЧрд╛ рдпрджрд┐ рд▓рдХреНрд╖реНрдп рдПрдХ рдЙрдкрдпреЛрдЧ рдореЗрдВ рдЖрд╕рд╛рди рдФрд░ рд╕рд╛рдорд╛рдиреНрдп рдЙрджреНрджреЗрд╢реНрдп рдПрдкреАрдЖрдИ рд╣реИред рдЕрджреНрд╡рд┐рддреАрдп рдмрдирд╛рдо рдЧреИрд░-рдЕрджреНрд╡рд┐рддреАрдп рдПрдХ рдмрдбрд╝реА рджрд░рд╛рд░ рд╣реИ, рдФрд░ рдореИрдВ рд╡рд┐рднрд┐рдиреНрди рдЙрджреНрджреЗрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рджреЛрдиреЛрдВ рдкреНрд░рдХрд╛рд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВред рдкреВрд░реНрд╡ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП 'рдХрдард┐рди' рд╣реИ, рдФрд░ рдЧрд▓рдд рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдХрдард┐рди рд╣реЛрдиреЗ рдХреЗ рджреМрд░рд╛рди рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ (рдФрд░ рдЕрдзрд┐рдХ рд╕рд╛рдорд╛рдиреНрдп) рдЙрдкрдпреЛрдЧ рдорд╛рдорд▓реЛрдВ (рдХреЗрд╡рд▓ рдореЗрд░рд╛ рдЕрдиреБрднрд╡) рдХреЛ рдХрд╡рд░ рдХрд░рддрд╛ рд╣реИред рд╡реЗ рдорд╛рдорд▓реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ _require_ рдЧреИрд░-рд╡рд┐рд╢рд┐рд╖реНрдЯрддрд╛ (рдЖрдИрдПрдордУ) рдХреЛ рдПрдХ рдЕрд▓рдЧ рдкреНрд░рдХрд╛рд░ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд╛рджрд╛ рдкреБрд░рд╛рдирд╛ рдмрд╛рдЗрдирд░реА рдвреЗрд░) рджреНрд╡рд╛рд░рд╛ рд╕реЗрд╡рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдФрд░ рдореИрдВ рджреЛрдиреЛрдВ рдЙрдкрд▓рдмреНрдз рд╣реЛрдиреЗ рдХреА рд╕рд░рд╛рд╣рдирд╛ рдХрд░рддрд╛ рд╣реВрдВред рдпрд╣ рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ @pgolebiowski рджреНрд╡рд╛рд░рд╛ рд▓рд┐рдВрдХ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдореВрд▓ рдкреНрд░рд╕реНрддрд╛рд╡ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ (рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВ рдЗрд╕реЗ рд╕рдордЭрддрд╛ рд╣реВрдВ) рдореЙрдбреНрдпреВрд▓реЛ рдП (рд╕рд░рд▓) рд░реИрдкрд░ред _рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: рдирд╣реАрдВ, рдпрд╣ рдмрдВрдзреА рд╣реБрдИ рдкреНрд░рд╛рдердорд┐рдХрддрд╛рдУрдВ рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░реЗрдЧрд╛_

рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд - рдЕрдкрдбреЗрдЯ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╛рдзрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рднреА рдХреГрддреНрд░рд┐рдо рдирд╣реАрдВ рд╣реИ!

рдореБрдЭреЗ рдЦреЗрдж рд╣реИ, рдореЗрд░рд╛ рдпрд╣ рдорддрд▓рдм рдирд╣реАрдВ рдерд╛ рдХрд┐ рдЕрдкрдбреЗрдЯ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рдХреГрддреНрд░рд┐рдо рд╣реИ; рдмрд▓реНрдХрд┐ рдЕрджреНрдпрддрдиреЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢рд┐рд╖реНрдЯрддрд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЛ рдХреГрддреНрд░рд┐рдо рд░реВрдк рд╕реЗ рдкреЗрд╢ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

рдкреБрдирд╢реНрдЪ: рдкреНрд░рддреНрдпреЗрдХ .net рдСрдмреНрдЬреЗрдХреНрдЯ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕рдорд╛рдирддрд╛/рд╡рд┐рд╢рд┐рд╖реНрдЯрддрд╛ рдХреА рдЕрд╡рдзрд╛рд░рдгрд╛рдУрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕рдХреА 'рдЖрд╡рд╢реНрдпрдХрддрд╛' рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдмрдбрд╝реА рдмрд╛рдд рдирд╣реАрдВ рд╣реИ

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

@eiriktsarpalis рдЗрд╕реЗ рд╕реНрдкрд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рдпрд╣ рд╡рд╛рдХрдИ рдХреГрддреНрд░рд┐рдо рд╣реИ? рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдпрд╣ рд╣реИред рдпрд╣ рд╕рд┐рд░реНрдл рдПрдХ рдФрд░ рдкреНрд░рд╛рдХреГрддрд┐рдХ рд╕рдорд╛рдзрд╛рди рд╣реИред

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

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

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

рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдХреЗрд╡рд▓ рдСрдмреНрдЬреЗрдХреНрдЯ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЖрдкрдХреЛ рдХреБрдЫ рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЙрдЪреНрдЪ-рд╕реНрддрд░реАрдп API рд╡рд┐рдзрд┐рдпреЛрдВ рдХреА рд╕рдВрдкрддреНрддрд┐ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдЬреИрд╕реЗ 'EnqueueIfNotExists' рдпрд╛ 'EnqueueOrDecreasePriroity(item)' - рд╡реЗ рд╣реИрдВрдбрд▓-рдХреЗрдВрджреНрд░рд┐рдд рдбрд┐рдЬрд╝рд╛рдЗрди рдореЗрдВ рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рдорддрд▓рдм рдирд╣реАрдВ рд░рдЦрддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдЖрдк рдпрд╣ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдХреНрдпрд╛ рдЖрдЗрдЯрдо рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХрддрд╛рд░ рдореЗрдВ рдореМрдЬреВрдж рд╣реИ (рдЪреВрдВрдХрд┐ рдпрд╣ рдЖрдкрдХрд╛ рдХрд╛рдо рд╣реИ, рдЙрд╕ рдкрд░ рдирдЬрд╝рд░ рд░рдЦрдирд╛, рд╣реИрдВрдбрд▓ рдХреЗ рд╕рд╛рде)ред

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

рдЬреИрд╕реЗ

  1. рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрддрд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрд╕рдВрджреЗрд╢реЛрдВ/рднрд╛рд╡рдирд╛рдУрдВ/рдЯреИрдЧ/рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд╛рдо рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рддрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП рдЬреЛ рдКрдкрд░/рд╕реНрдХреЛрд░рдЕрдкрдбреЗрдЯреЗрдб рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВ, рдЕрджреНрд╡рд┐рддреАрдп рдорд╛рдиреЛрдВ рдХреА рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдмрджрд▓ рд░рд╣реА рд╣реИ
  2. рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрддрд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ, рдбрдмрд▓> рдЕрджреНрд╡рд┐рддреАрдп рдЯреБрдкрд▓реНрд╕ рдХреЛ рдСрд░реНрдбрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП [рдЪрд╛рд╣реЗ рдЙрдирдХреА рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдореЗрдВ рдмрджрд▓рд╛рд╡ рд╣реЛ рдпрд╛ рдирд╣реАрдВ] - рдХрд╣реАрдВ рди рдХрд╣реАрдВ рдЕрддрд┐рд░рд┐рдХреНрдд рд╣реИрдВрдбрд▓ рдХрд╛ рдЯреНрд░реИрдХ рд░рдЦрдирд╛ рдЪрд╛рд╣рд┐рдП
  3. PriroityQueue рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреНрд░рд╛рдл рдЗрдВрдбреЗрдХреНрд╕, рдпрд╛ рдбреЗрдЯрд╛рдмреЗрд╕ рдСрдмреНрдЬреЗрдХреНрдЯ рдЖрдИрдбреА рдХреЛ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП, рдЕрдм рдЖрдкрдХреЛ рдЕрдкрдиреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╣реИрдВрдбрд▓ рдЫрд┐рдбрд╝рдХрдирд╛ рд╣реЛрдЧрд╛

рдкреА.рдПрд╕.

рдЬрд╝рд░реВрд░, рд▓реЗрдХрд┐рди рдХрднреА-рдХрднреА рд╕рдорд╛рдирддрд╛ рд╢рдмреНрджрд╛рд░реНрде рдЬреЛ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рд╛рде рдЖрддреЗ рд╣реИрдВ рд╡реЗ рд╡рд╛рдВрдЫрдиреАрдп рдирд╣реАрдВ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ

IEqualityComparer рдЬреИрд╕реЗ рдПрд╕реНрдХреЗрдк рд╣реИрдЪ рд╣реЛрдВрдЧреЗ, рдпрд╛ рдПрдХ рд╕рдореГрджреНрдз рдкреНрд░рдХрд╛рд░ рдореЗрдВ рдЕрдкрд╡рд░реНрддрди рд╣реЛрдВрдЧреЗред

рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж рд╕рднреА рдирдП рдЗрдирдкреБрдЯ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрддреЗ рд╣реБрдП, рд╕рдкреНрддрд╛рд╣рд╛рдВрдд рдореЗрдВ рдкреНрд░рд╕реНрддрд╛рд╡ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░реЗрдЧрд╛, рдФрд░ рджреВрд╕рд░реЗ рджреМрд░ рдХреЗ рд▓рд┐рдП рдПрдХ рдирдпрд╛ рд╕рдВрд╢реЛрдзрди рд╕рд╛рдЭрд╛ рдХрд░реЗрдЧрд╛ред рдИрдЯреАрдП 2020-09-20ред

рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрддрд╛рд░ рдкреНрд░рд╕реНрддрд╛рд╡ (v2.0)

рд╕рд╛рд░рд╛рдВрд╢

.NET рдХреЛрд░ рд╕рдореБрджрд╛рдп рд╕рд┐рд╕реНрдЯрдо рд▓рд╛рдЗрдмреНрд░реЗрд░реА _priority queue_ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдореЗрдВ рдЬреЛрдбрд╝рдиреЗ рдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рдХрд░рддрд╛ рд╣реИ, рдПрдХ рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛ рдЬрд┐рд╕рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рддрддреНрд╡ рдХреА рдЗрд╕рдХреЗ рд╕рд╛рде рдПрдХ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рднреА рдЬреБрдбрд╝реА рд╣реЛрддреА рд╣реИред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рд╣рдо PriorityQueue<TElement, TPriority> рдХреЛ System.Collections.Generic рдиреЗрдорд╕реНрдкреЗрд╕ рдореЗрдВ рдЬреЛрдбрд╝рдиреЗ рдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рдХрд░рддреЗ рд╣реИрдВред

рд╕рд┐рджреНрдзрд╛рдВрддреЛрдВ

рд╣рдорд╛рд░реЗ рдбрд┐рдЬрд╛рдЗрди рдореЗрдВ, рд╣рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рд┐рджреНрдзрд╛рдВрддреЛрдВ рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрджреЗрд╢рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ (рдЬрдм рддрдХ рдХрд┐ рдЖрдк рдмреЗрд╣рддрд░ рдирд╣реАрдВ рдЬрд╛рдирддреЗ):

  • рд╡рд┐рд╕реНрддреГрдд рдХрд╡рд░реЗрдЬред рд╣рдо .NET рдХреЛрд░ рдЧреНрд░рд╛рд╣рдХреЛрдВ рдХреЛ рдПрдХ рдореВрд▓реНрдпрд╡рд╛рди рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛ рдХреА рдкреЗрд╢рдХрд╢ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдЬреЛ рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рдХрд╛рд░ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рдмрд╣реБрдореБрдЦреА рд╣реИред
  • рдЬреНрдЮрд╛рдд рдЧрд▓рддрд┐рдпреЛрдВ рд╕реЗ рд╕реАрдЦреЗрдВред рд╣рдо рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрддрд╛рд░ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рдЕрдиреНрдп рдврд╛рдВрдЪреЗ рдФрд░ рднрд╛рд╖рд╛рдУрдВ, рдЬреИрд╕реЗ рдЬрд╛рд╡рд╛, рдкрд╛рдпрдерди, рд╕реА ++, рдЬрдВрдЧ рдореЗрдВ рдореМрдЬреВрдж рдЧреНрд░рд╛рд╣рдХ-рд╕рд╛рдордирд╛ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдореБрджреНрджреЛрдВ рд╕реЗ рдореБрдХреНрдд рд╣реЛрдЧреАред рд╣рдо рдРрд╕реЗ рдбрд┐рдЬрд╝рд╛рдЗрди рд╡рд┐рдХрд▓реНрдк рдмрдирд╛рдиреЗ рд╕реЗ рдмрдЪреЗрдВрдЧреЗ рдЬреЛ рдЧреНрд░рд╛рд╣рдХреЛрдВ рдХреЛ рдирд╛рдЦреБрд╢ рдХрд░рдиреЗ рдФрд░ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рд╡рд╛рд▓реА рдХрддрд╛рд░реЛрдВ рдХреА рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдХреЛ рдХрдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд╛рдиреЗ рдЬрд╛рддреЗ рд╣реИрдВред
  • рдПрдХрддрд░рдлрд╛ рдирд┐рд░реНрдгрдп рдХреЗ рд╕рд╛рде рдЕрддреНрдпрдзрд┐рдХ рд╕рд╛рд╡рдзрд╛рдиреАред рдПрдХ рдмрд╛рд░ рдПрдкреАрдЖрдИ рдкреЗрд╢ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдЗрд╕реЗ рд╕рдВрд╢реЛрдзрд┐рдд рдпрд╛ рд╣рдЯрд╛рдпрд╛ рдирд╣реАрдВ рдЬрд╛ рд╕рдХрддрд╛, рдХреЗрд╡рд▓ рдмрдврд╝рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд╣рдо рдЙрдк-рдЗрд╖реНрдЯрддрдо рд╕рдорд╛рдзрд╛рдиреЛрдВ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХрд╛ рд╕рд╛рд╡рдзрд╛рдиреАрдкреВрд░реНрд╡рдХ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░реЗрдВрдЧреЗ, рдЬрд┐рд╕рд╕реЗ рд╣рдорд╛рд░реЗ рдЧреНрд░рд╛рд╣рдХ рд╣рдореЗрд╢рд╛ рдХреЗ рд▓рд┐рдП рдлрдВрд╕ рдЬрд╛рдПрдВрдЧреЗред
  • рдбрд┐рдЬрд╛рдЗрди рдкрдХреНрд╖рд╛рдШрд╛рдд рд╕реЗ рдмрдЪреЗрдВред рд╣рдо рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдХреЛрдИ рднреА рд╕рд╣реА рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рд╣рдо рдЯреНрд░реЗрдб-рдСрдл рдХреЛ рд╕рдВрддреБрд▓рд┐рдд рдХрд░реЗрдВрдЧреЗ рдФрд░ рдбрд┐рд▓реАрд╡рд░реА рдХреЗ рд╕рд╛рде рдЖрдЧреЗ рдмрдврд╝реЗрдВрдЧреЗ, рдЕрдВрдд рдореЗрдВ рдЕрдкрдиреЗ рдЧреНрд░рд╛рд╣рдХреЛрдВ рдХреЛ рд╡рд╣ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рд╕рдХрд╛ рд╡реЗ рд╡рд░реНрд╖реЛрдВ рд╕реЗ рдЗрдВрддрдЬрд╛рд░ рдХрд░ рд░рд╣реЗ рдереЗред

рдкреГрд╖реНрдарднреВрдорд┐

рдПрдХ рдЧреНрд░рд╛рд╣рдХ рдХреЗ рдирдЬрд░рд┐рдП рд╕реЗ

рд╕рдВрдХрд▓реНрдкрдирд╛рддреНрдордХ рд░реВрдк рд╕реЗ, рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрддрд╛рд░ рддрддреНрд╡реЛрдВ рдХрд╛ рдПрдХ рд╕рдВрдЧреНрд░рд╣ рд╣реИ, рдЬрд╣рд╛рдВ рдкреНрд░рддреНрдпреЗрдХ рддрддреНрд╡ рдХреА рдПрдХ рд╕рдВрдмрджреНрдз рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рд╣реЛрддреА рд╣реИред рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрддрд╛рд░ рдХреА рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рд╕рдВрдЧреНрд░рд╣ рдореЗрдВ рд╕рд░реНрд╡реЛрдЪреНрдЪ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рд╡рд╛рд▓реЗ рддрддреНрд╡ рддрдХ рдХреБрд╢рд▓ рдкрд╣реБрдВрдЪ рдкреНрд░рджрд╛рди рдХрд░рддреА рд╣реИ, рдФрд░ рдЙрд╕ рддрддреНрд╡ рдХреЛ рд╣рдЯрд╛рдиреЗ рдХрд╛ рд╡рд┐рдХрд▓реНрдк рдкреНрд░рджрд╛рди рдХрд░рддреА рд╣реИред рдЕрдкреЗрдХреНрд╖рд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ рдпрд╣ рднреА рд╢рд╛рдорд┐рд▓ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ: 1) рдХрд┐рд╕реА рддрддреНрд╡ рдХреА рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдЬреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕рдВрдЧреНрд░рд╣ рдореЗрдВ рд╣реИ; 2) рдПрдХрд╛рдзрд┐рдХ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрддрд╛рд░реЛрдВ рдХреЛ рдорд░реНрдЬ рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ред

рдХрдВрдкреНрдпреВрдЯрд░ рд╡рд┐рдЬреНрдЮрд╛рди рдкреГрд╖реНрдарднреВрдорд┐

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

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

рдЕрджреНрдпрддрди рддрдВрддреНрд░ рдкреНрд░рдореБрдЦ рдбрд┐рдЬрд╛рдЗрди рдЪреБрдиреМрддреА рд╣реИ

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

рдЗрд╕ рддрд░рд╣ рдХреА рдХреНрд╖рдорддрд╛ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдЬреИрд╕реЗ рджрд┐рдЬреНрдХреНрд╕реНрдЯреНрд░рд╛ рдХрд╛ рд╕рдмрд╕реЗ рдЫреЛрдЯрд╛ рдкрде рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдпрд╛ рдПрдХ рдиреМрдХрд░реА рдЕрдиреБрд╕реВрдЪрдХ рдЬрд┐рд╕реЗ рдмрджрд▓рддреА рдкреНрд░рд╛рдердорд┐рдХрддрд╛рдУрдВ рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдЬрд╛рд╡рд╛ рдореЗрдВ рдЕрджреНрдпрддрди рддрдВрддреНрд░ рдЧрд╛рдпрдм рд╣реИ, рдЬреЛ рдЗрдВрдЬреАрдирд┐рдпрд░реЛрдВ рдХреЗ рд▓рд┐рдП рдирд┐рд░рд╛рд╢рд╛рдЬрдирдХ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдЗрди рддреАрди рд╕реНрдЯреИрдХ рдУрд╡рд░рдлреНрд▓реЛ рдкреНрд░рд╢реНрдиреЛрдВ рдореЗрдВ 32k рд╕реЗ рдЕрдзрд┐рдХ рдмрд╛рд░ рджреЗрдЦрд╛ рдЧрдпрд╛: рдЙрджрд╛рд╣рд░рдг , рдЙрджрд╛рд╣рд░рдг , рдЙрджрд╛рд╣рд░рдг ред рдЗрд╕ рддрд░рд╣ рдХреЗ рд╕реАрдорд┐рдд рдореВрд▓реНрдп рдХреЗ рд╕рд╛рде рдПрдкреАрдЖрдИ рд╢реБрд░реВ рдХрд░рдиреЗ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдорд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рд╣рдорд╛рд░реЗ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрддрд╛рд░ рдХреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рдореМрд▓рд┐рдХ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╕рдВрдЧреНрд░рд╣ рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рдореМрдЬреВрдж рддрддреНрд╡реЛрдВ рдХреЗ рд▓рд┐рдП рдкреНрд░рд╛рдердорд┐рдХрддрд╛рдУрдВ рдХреЛ рдЕрджреНрдпрддрди рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред

рдЕрджреНрдпрддрди рддрдВрддреНрд░ рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдЧреНрд░рд╛рд╣рдХ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╣реЛ рд╕рдХреЗрдВ рдХрд┐ рд╡реЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреНрдпрд╛ рдЕрдкрдбреЗрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рд╣рдордиреЗ рдЗрд╕реЗ рд╡рд┐рддрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рджреЛ рддрд░реАрдХреЛрдВ рдХреА рдкрд╣рдЪрд╛рди рдХреА рд╣реИ: рдХ) рд╣реИрдВрдбрд▓ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ; рдФрд░ рдмреА) рд╕рдВрдЧреНрд░рд╣ рдореЗрдВ рддрддреНрд╡реЛрдВ рдХреА рд╡рд┐рд╢рд┐рд╖реНрдЯрддрд╛ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗред рдЗрдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рд╡рд┐рднрд┐рдиреНрди рд▓рд╛рднреЛрдВ рдФрд░ рд▓рд╛рдЧрддреЛрдВ рдХреЗ рд╕рд╛рде рдЖрддрд╛ рд╣реИред

рд╡рд┐рдХрд▓реНрдк (рдП): рд╣реИрдВрдбрд▓ред рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдореЗрдВ, рд╣рд░ рдмрд╛рд░ рдХрддрд╛рд░ рдореЗрдВ рдПрдХ рддрддреНрд╡ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛ рдЕрдкрдирд╛ рдЕрдиреВрдард╛ рд╣реИрдВрдбрд▓ рдкреНрд░рджрд╛рди рдХрд░рддреА рд╣реИред рдпрджрд┐ рдЧреНрд░рд╛рд╣рдХ рдЕрджреНрдпрддрди рддрдВрддреНрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИ, рддреЛ рдЙрдиреНрд╣реЗрдВ рдРрд╕реЗ рд╣реИрдВрдбрд▓ рдХрд╛ рдЯреНрд░реИрдХ рд░рдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рддрд╛рдХрд┐ рд╡реЗ рдмрд╛рдж рдореЗрдВ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рд╕рдХреЗрдВ рдХрд┐ рд╡реЗ рдХрд┐рд╕ рддрддреНрд╡ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдЗрд╕ рд╕рдорд╛рдзрд╛рди рдХреА рдкреНрд░рд╛рдердорд┐рдХ рд▓рд╛рдЧрдд рдпрд╣ рд╣реИ рдХрд┐ рдЧреНрд░рд╛рд╣рдХреЛрдВ рдХреЛ рдЗрди рд╕рдВрдХреЗрддрдХреЛрдВ рдХреЛ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрддрд╛рд░ рдХреЗ рднреАрддрд░ рд╣реИрдВрдбрд▓ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рд╕реА рднреА рдЖрдВрддрд░рд┐рдХ рдЖрд╡рдВрдЯрди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ - рдХреЛрдИ рднреА рдЧреИрд░-рд╕рд░рдгреА-рдЖрдзрд╛рд░рд┐рдд рдвреЗрд░ рдиреЛрдбреНрд╕ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реЛрддрд╛ рд╣реИ, рдЬрд╣рд╛рдВ рдкреНрд░рддреНрдпреЗрдХ рдиреЛрдб рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдЕрдкрдирд╛ рд╕реНрд╡рдпрдВ рдХрд╛ рд╣реИрдВрдбрд▓ рд╣реЛрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рддреМрд░ рдкрд░, PairingHeap.Update рд╡рд┐рдзрд┐ рдХрд╛ API рджреЗрдЦреЗрдВред

рд╡рд┐рдХрд▓реНрдк (рдмреА): рд╡рд┐рд╢рд┐рд╖реНрдЯрддрд╛ред рдпрд╣ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдЧреНрд░рд╛рд╣рдХ рдкрд░ рджреЛ рдЕрддрд┐рд░рд┐рдХреНрдд рдмрд╛рдзрд╛рдПрдВ рдбрд╛рд▓рддрд╛ рд╣реИ: i) рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрддрд╛рд░ рдХреЗ рддрддреНрд╡реЛрдВ рдХреЛ рдХреБрдЫ рд╕рдорд╛рдирддрд╛ рд╢рдмреНрджрд╛рд░реНрде рдХреЗ рдЕрдиреБрд░реВрдк рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдЬреЛ рд╕рдВрднрд╛рд╡рд┐рдд рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдмрдЧ рдХрд╛ рдПрдХ рдирдпрд╛ рд╡рд░реНрдЧ рд▓рд╛рддрд╛ рд╣реИ; ii) рджреЛ рд╕рдорд╛рди рддрддреНрд╡реЛрдВ рдХреЛ рдПрдХ рд╣реА рдХрддрд╛рд░ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕ рд▓рд╛рдЧрдд рдХрд╛ рднреБрдЧрддрд╛рди рдХрд░рдХреЗ, рд╣рдо рд╣реИрдВрдбрд▓ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рд╕рд╣рд╛рд░рд╛ рд▓рд┐рдП рдмрд┐рдирд╛ рдЕрджреНрдпрддрди рддрдВрддреНрд░ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХрд╛ рд▓рд╛рдн рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЕрджреНрдпрддрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддрддреНрд╡ рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢рд┐рд╖реНрдЯрддрд╛/рд╕рдорд╛рдирддрд╛ рдХрд╛ рд▓рд╛рдн рдЙрдард╛рдиреЗ рд╡рд╛рд▓реЗ рдХрд┐рд╕реА рднреА рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд▓рд┐рдП рдЕрддрд┐рд░рд┐рдХреНрдд рдЖрдВрддрд░рд┐рдХ рдореИрдкрд┐рдВрдЧ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА, рддрд╛рдХрд┐ рдпрд╣ рдУ (1) рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗ рдФрд░ рдУ (рдПрди) рдореЗрдВ рдирд╣реАрдВред

рдЕрдиреБрд╢рдВрд╕рд╛

рд╣рдо рд╕рд┐рд╕реНрдЯрдо рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдореЗрдВ рдПрдХ PriorityQueue<TElement, TPriority> рд╡рд░реНрдЧ рдЬреЛрдбрд╝рдиреЗ рдХреА рдЕрдиреБрд╢рдВрд╕рд╛ рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рд╣реИрдВрдбрд▓ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЕрджреНрдпрддрди рддрдВрддреНрд░ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдПрдХ рдЬреЛрдбрд╝реА рдвреЗрд░ рд╣реЛрдЧрд╛ред

public class PriorityQueueNode<TElement, TPriority>
{
    public TElement Element { get; }
    public TPriority Priority { get; }
}

public class PriorityQueue<TElement, TPriority> :
    IEnumerable<PriorityQueueNode<TElement, TPriority>>
{
    public PriorityQueue();
    public PriorityQueue(IComparer<TPriority> comparer);

    public IComparer<TPriority> Comparer { get; }
    public int Count { get; }

    public bool IsEmpty { get; }
    public void Clear();
    public bool Contains(TElement element); // O(n)
    public bool TryGetNode(TElement element, out PriorityQueueNode<TElement, TPriority> node); // O(n)

    public PriorityQueueNode<TElement, TPriority> Enqueue(TElement element, TPriority priority); //O(log n)

    public PriorityQueueNode<TElement, TPriority> Peek(); // O(1)
    public bool TryPeek(out PriorityQueueNode<TElement, TPriority> node); // O(1)

    public void Dequeue(out TElement element); // O(log n)
    public bool TryDequeue(out TElement element, out TPriority priority); // O(log n)

    public void Update(PriorityQueueNode<TElement, TPriority> node, TPriority priority); // O(log n)
    public void Remove(PriorityQueueNode<TElement, TPriority> node); // O(log n)

    public void Merge(PriorityQueue<TElement, TPriority> other) // O(1)

    public IEnumerator<PriorityQueueNode<TElement, TPriority>> GetEnumerator();
    IEnumerator IEnumerable.GetEnumerator();

    public struct Enumerator : IEnumerator<PriorityQueueNode<TElement, TPriority>>
    {
        public PriorityQueueNode<TElement, TPriority> Current { get; }
        object IEnumerator.Current { get; }
        public bool MoveNext() => throw new NotImplementedException();
        public void Reset() => throw new NotImplementedException();
        public void Dispose() => throw new NotImplementedException();
    }
}

рдЙрджрд╛рд╣рд░рдг рдЙрдкрдпреЛрдЧ

1) рдЧреНрд░рд╛рд╣рдХ рдЬреЛ рдЕрджреНрдпрддрди рддрдВрддреНрд░ рдХреА рдкрд░рд╡рд╛рд╣ рдирд╣реАрдВ рдХрд░рддрд╛

var queue = new PriorityQueue<Job, double>();
queue.Enqueue(firstJob, 10);
queue.Enqueue(secondJob, 5);
queue.Enqueue(thirdJob, 40);

var withHighestPriority = queue.Peek(); // { element: secondJob, priority: 5 }

2) рдЧреНрд░рд╛рд╣рдХ рдЬреЛ рдЕрджреНрдпрддрди рддрдВрддреНрд░ рдХреА рдкрд░рд╡рд╛рд╣ рдХрд░рддрд╛ рд╣реИ

var queue = new PriorityQueue<Job, double>();
var mapping = new Dictionary<Job, PriorityQueueNode<Job, double>>();

mapping[job] = queue.Enqueue(job, priority);

queue.Update(mapping[job], newPriority);

рд╕рд╛рдорд╛рдиреНрдп рдкреНрд░рд╢реНрди

рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрддрд╛рд░ рдХрд┐рд╕ рдХреНрд░рдо рдореЗрдВ рддрддреНрд╡реЛрдВ рдХреА рдЧрдгрдирд╛ рдХрд░рддреА рд╣реИ?

рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рдХреНрд░рдо рдореЗрдВ, рддрд╛рдХрд┐ рдЧрдгрдирд╛ рдУ (рдПрди) рдореЗрдВ рд╣реЛ рд╕рдХреЗ, рдЗрд╕реА рддрд░рд╣ HashSet ред рдХреЛрдИ рднреА рдХреБрд╢рд▓ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддреЗ рд╣реБрдП рд░реИрдЦрд┐рдХ рд╕рдордп рдореЗрдВ рдПрдХ рдвреЗрд░ рдХреА рдЧрдгрдирд╛ рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдкреНрд░рджрд╛рди рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ рдХрд┐ рддрддреНрд╡реЛрдВ рдХреА рдЧрдгрдирд╛ рдХреНрд░рдо рдореЗрдВ рдХреА рдЧрдИ рд╣реИ - рдЗрд╕рдХреЗ рд▓рд┐рдП O (n рд▓реЙрдЧ n) рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред рдХреНрдпреЛрдВрдХрд┐ рд╕рдВрдЧреНрд░рд╣ рдкрд░ рдСрд░реНрдбрд░ рдХрд░рдирд╛ .OrderBy(x => x.Priority) рд╕рд╛рде рдорд╛рдореВрд▓реА рд░реВрдк рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рдЧреНрд░рд╛рд╣рдХ рдЗрд╕ рдЖрджреЗрд╢ рдХреЗ рд╕рд╛рде рдЧрдгрдирд╛ рдХреА рдкрд░рд╡рд╛рд╣ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рд╣рдо рдорд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рдЧрдгрдирд╛ рдЖрджреЗрд╢ рдкреНрд░рджрд╛рди рдХрд░рдирд╛ рдмреЗрд╣рддрд░ рд╣реИред

рдкрд░рд┐рд╢рд┐рд╖реНрдЯ

рдкрд░рд┐рд╢рд┐рд╖реНрдЯ рдП: рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрддрд╛рд░ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рд╡рд╛рд▓реА рдЕрдиреНрдп рднрд╛рд╖рд╛рдПрдВ

| рднрд╛рд╖рд╛ | рдкреНрд░рдХрд╛рд░ | рдиреЛрдЯреНрд╕ |
|:-:|:-:|:-:|
| рдЬрд╛рд╡рд╛ | рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрддрд╛рд░ | рдЕрдореВрд░реНрдд рд╡рд░реНрдЧ AbstractQueue рдФрд░ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ Queue рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИред |
| рдЬрдВрдЧ | рдмрд╛рдЗрдирд░реАрд╣реАрдк | |
| рд╕реНрд╡рд┐рдлреНрдЯ | рд╕реАрдПрдлрдмреАрдирд░реАрд╣реАрдк | |
| рд╕реА++ | рдкреНрд░рд╛рдердорд┐рдХрддрд╛_рдХреНрдпреВ | |
| рдЕрдЬрдЧрд░ | рдвреЗрд░ | |
| рдЬрд╛рдУ | рдвреЗрд░ | рдПрдХ рдвреЗрд░ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╣реИред |

рдкрд░рд┐рд╢рд┐рд╖реНрдЯ рдмреА: рдЦреЛрдЬ рдпреЛрдЧреНрдпрддрд╛

рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛рдУрдВ рдкрд░ рдЪрд░реНрдЪрд╛ рдХрд░рддреЗ рд╕рдордп, _heap_ рд╢рдмреНрдж рдХрд╛ рдЙрдкрдпреЛрдЧ _priority queue_ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ 4 рдЧреБрдирд╛ рдЕрдзрд┐рдХ рдмрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

  • "array" AND "data structure" тАФ 17.400,000 рдкрд░рд┐рдгрд╛рдо
  • "stack" AND "data structure" тАФ 12.100.000 рдкрд░рд┐рдгрд╛рдо
  • "queue" AND "data structure" тАФ 3.850.000 рдкрд░рд┐рдгрд╛рдо
  • "heap" AND "data structure" тАФ 1.830.000 рдкрд░рд┐рдгрд╛рдо
  • "priority queue" AND "data structure" тАФ 430.000 рдкрд░рд┐рдгрд╛рдо
  • "trie" AND "data structure" тАФ 335.000 рдкрд░рд┐рдгрд╛рдо

рдХреГрдкрдпрд╛ рд╕рдореАрдХреНрд╖рд╛ рдХрд░реЗрдВ, рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдФрд░ рдкреБрдирд░рд╛рд╡реГрддрд┐ рдХрд░рдиреЗ рдореЗрдВ рдкреНрд░рд╕рдиреНрдирддрд╛ рд╣реЛ рд░рд╣реА рд╣реИ :) рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рдЕрднрд┐рд╕рд░рдг рдХрд░ рд░рд╣реЗ рд╣реИрдВ! рдкреНрд░рд╢реНрди рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдореЗрдВ рднреА рдкреНрд░рд╕рдиреНрдирддрд╛ рд╣реЛ рд░рд╣реА рд╣реИ - рдЙрдиреНрд╣реЗрдВ рдЕрдХреНрд╕рд░ рдкреВрдЫреЗ рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдкреНрд░рд╢реНрдиреЛрдВ рдореЗрдВ рдЬреЛрдбрд╝ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛!

@pgolebiowski рдореИрдВ рд╣реИрдВрдбрд▓-рдЖрдзрд╛рд░рд┐рдд рдПрдкреАрдЖрдИ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реВрдВ (рдореИрдВ рдЙрджрд╛рд╣рд░рдг 2 рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдЗрд╕реЗ рд▓рдкреЗрдЯрдиреЗ рдХреА рдЙрдореНрдореАрдж рдХрд░рддрд╛ рд╣реВрдВ, рдХреНрдпрд╛ рдореИрдВ рдХрд┐рд╕реА рдореМрдЬреВрджрд╛ рдХреЛрдб рдХреЛ рд░рд┐рдлрд┐рдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛) рд▓реЗрдХрд┐рди рдпрд╣ рдЬреНрдпрд╛рджрд╛рддрд░ рдореЗрд░реЗ рд▓рд┐рдП рдЕрдЪреНрдЫрд╛ рджрд┐рдЦрддрд╛ рд╣реИред рдореБрдЭреЗ рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдмрддрд╛рдП рдЧрдП рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд╕рд╛рде рдЬрд╛рдирд╛ рдкрдбрд╝ рд╕рдХрддрд╛ рд╣реИ рдпрд╣ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдпрд╣ рдХреИрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣рд╛рдВ рдмрд▓реНрд▓реЗ рд╕реЗ рдХреБрдЫ рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдВ рджреА рдЧрдИ рд╣реИрдВ:

  • рдпрд╣ рдЕрдЬреАрдм рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ TryDequeue рдПрдХ рдиреЛрдб рд▓реМрдЯрд╛рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЙрд╕ рдмрд┐рдВрджреБ рдкрд░ рдПрдХ рд╣реИрдВрдбрд▓ рдирд╣реАрдВ рд╣реИ (рдореИрдВ рджреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдкреИрд░рд╛рдореАрдЯрд░ рдкрд╕рдВрдж рдХрд░реВрдВрдЧрд╛)
  • рдХреНрдпрд╛ рдпрд╣ рд╕реНрдерд┐рд░ рд╣реЛрдЧрд╛ рдХрд┐ рдпрджрд┐ рджреЛ рддрддреНрд╡реЛрдВ рдХреЛ рдПрдХ рд╣реА рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХреЗ рд╕рд╛рде рдХрддрд╛рд░рдмрджреНрдз рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рддреЛ рд╡реЗ рдПрдХ рдЕрдиреБрдорд╛рдирд┐рдд рдХреНрд░рдо рдореЗрдВ рдХрдо рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВ? (рдкреБрдирд░реБрддреНрдкрд╛рджрди рдХреЗ рд▓рд┐рдП рдЕрдЪреНрдЫрд╛ рд╣реИ; рдЕрдиреНрдпрдерд╛ рдЙрдкрднреЛрдХреНрддрд╛ рджреНрд╡рд╛рд░рд╛ рдЖрд╕рд╛рдиреА рд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ)
  • Merge рд▓рд┐рдП рдкреИрд░рд╛рдореАрдЯрд░ PriorityQueue'2 рдирд╣реАрдВ PriorityQueueNode'2 , рдФрд░ рдХреНрдпрд╛ рдЖрдк рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рд╕реНрдкрд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ? рдореИрдВ рдпреБрдЧреНрдорди рдвреЗрд░ рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рдирд╣реАрдВ рд╣реВрдБ, рд▓реЗрдХрд┐рди рд╕рдВрднрд╡рддрдГ рджреЛ рдвреЗрд░ рдЙрд╕рдХреЗ рдмрд╛рдж рдУрд╡рд░рд▓реИрдк рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВ
  • рдореИрдВ 2-рдкреИрд░рд╛рдореАрдЯрд░ рд╡рд┐рдзрд┐ рдХреЗ рд▓рд┐рдП Contains рдирд╛рдо рдХрд╛ рдкреНрд░рд╢рдВрд╕рдХ рдирд╣реАрдВ рд╣реВрдВ: рдпрд╣ рдПрдХ рдРрд╕рд╛ рдирд╛рдо рдирд╣реАрдВ рд╣реИ рдЬрд┐рд╕рдХрд╛ рдЕрдиреБрдорд╛рди рдореИрдВ TryGet рд╢реИрд▓реА рдкрджреНрдзрддрд┐ рдХреЗ рд▓рд┐рдП рд▓рдЧрд╛рдКрдВрдЧрд╛
  • рд╡рд░реНрдЧ рдПрдХ рдХрд╕реНрдЯрдо рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП IEqualityComparer<TElement> рдХреЗ рдкреНрд░рдпреЛрдЬрди рдХреЗ рд▓рд┐рдП Contains ?
  • рдРрд╕рд╛ рдкреНрд░рддреАрдд рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рдХреЛрдИ рдиреЛрдб рдЕрднреА рднреА рдвреЗрд░ рдореЗрдВ рд╣реИ рдпрд╛ рдирд╣реАрдВ (рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реИ рдХрд┐ рдореИрдВ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрдм рдХрд░реВрдВрдЧрд╛, рд╕реЛрдЪрд╛)
  • рдпрд╣ рдЕрдЬреАрдм рд╣реИ рдХрд┐ Remove рд░рд┐рдЯрд░реНрди рдПрдХ bool ; рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдЗрд╕реЗ TryRemove рдХрд╣рд╛ рдЬрд╛рддрд╛ рдерд╛ рдпрд╛ рдЗрд╕реЗ рдлреЗрдВрдХ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рдерд╛ (рдЬреЛ рдореИрдВ Update рдорд╛рди рд░рд╣рд╛ рд╣реВрдВ рдпрджрд┐ рдиреЛрдб рдвреЗрд░ рдореЗрдВ рдирд╣реАрдВ рд╣реИ)ред

@VisualMelon рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдмрд╣реБрдд рдзрдиреНрдпрд╡рд╛рдж! рдЗрдирдХрд╛ рд╢реАрдШреНрд░ рд╕рдорд╛рдзрд╛рди рдХрд░реЗрдВрдЧреЗ, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рд╕рд╣рдордд:

  • рдпрд╣ рдЕрдЬреАрдм рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ TryDequeue рдПрдХ рдиреЛрдб рд▓реМрдЯрд╛рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЙрд╕ рдмрд┐рдВрджреБ рдкрд░ рдПрдХ рд╣реИрдВрдбрд▓ рдирд╣реАрдВ рд╣реИ (рдореИрдВ рджреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдкреИрд░рд╛рдореАрдЯрд░ рдкрд╕рдВрдж рдХрд░реВрдВрдЧрд╛)
  • Merge рд▓рд┐рдП рдкреИрд░рд╛рдореАрдЯрд░ PriorityQueue'2 рдирд╣реАрдВ PriorityQueueNode'2 , рдФрд░ рдХреНрдпрд╛ рдЖрдк рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рд╕реНрдкрд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ? рдореИрдВ рдпреБрдЧреНрдорди рдвреЗрд░ рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рдирд╣реАрдВ рд╣реВрдБ, рд▓реЗрдХрд┐рди рд╕рдВрднрд╡рддрдГ рджреЛ рдвреЗрд░ рдЙрд╕рдХреЗ рдмрд╛рдж рдУрд╡рд░рд▓реИрдк рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВ
  • рдпрд╣ рдЕрдЬреАрдм рд╣реИ рдХрд┐ Remove рд░рд┐рдЯрд░реНрди рдПрдХ bool ; рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдЗрд╕реЗ TryRemove рдХрд╣рд╛ рдЬрд╛рддрд╛ рдерд╛ рдпрд╛ рдЗрд╕реЗ рдлреЗрдВрдХ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рдерд╛ (рдЬреЛ рдореИрдВ рдорд╛рди рд░рд╣рд╛ рд╣реВрдВ Update рдЕрдЧрд░ рдиреЛрдб рдвреЗрд░ рдореЗрдВ рдирд╣реАрдВ рд╣реИ)ред
  • рдореИрдВ 2-рдкреИрд░рд╛рдореАрдЯрд░ рд╡рд┐рдзрд┐ рдХреЗ рд▓рд┐рдП Contains рдирд╛рдо рдХрд╛ рдкреНрд░рд╢рдВрд╕рдХ рдирд╣реАрдВ рд╣реВрдВ: рдпрд╣ рдПрдХ рдРрд╕рд╛ рдирд╛рдо рдирд╣реАрдВ рд╣реИ рдЬрд┐рд╕рдХрд╛ рдЕрдиреБрдорд╛рди рдореИрдВ TryGet рд╢реИрд▓реА рдкрджреНрдзрддрд┐ рдХреЗ рд▓рд┐рдП рд▓рдЧрд╛рдКрдВрдЧрд╛

рдЗрди рджреЛрдиреЛрдВ рдХреЗ рд▓рд┐рдП рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг:

  • рдХреНрдпрд╛ рдпрд╣ рд╕реНрдерд┐рд░ рд╣реЛрдЧрд╛ рдХрд┐ рдпрджрд┐ рджреЛ рддрддреНрд╡реЛрдВ рдХреЛ рдПрдХ рд╣реА рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХреЗ рд╕рд╛рде рдХрддрд╛рд░рдмрджреНрдз рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рддреЛ рд╡реЗ рдПрдХ рдЕрдиреБрдорд╛рдирд┐рдд рдХреНрд░рдо рдореЗрдВ рдХрдо рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВ? (рдкреБрдирд░реБрддреНрдкрд╛рджрди рдХреЗ рд▓рд┐рдП рдЕрдЪреНрдЫрд╛ рд╣реИ; рдЕрдиреНрдпрдерд╛ рдЙрдкрднреЛрдХреНрддрд╛ рджреНрд╡рд╛рд░рд╛ рдЖрд╕рд╛рдиреА рд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ)
  • рдРрд╕рд╛ рдкреНрд░рддреАрдд рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рдХреЛрдИ рдиреЛрдб рдЕрднреА рднреА рдвреЗрд░ рдореЗрдВ рд╣реИ рдпрд╛ рдирд╣реАрдВ (рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реИ рдХрд┐ рдореИрдВ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрдм рдХрд░реВрдВрдЧрд╛, рд╕реЛрдЪрд╛)

рдкрд╣рд▓реЗ рдмрд┐рдВрджреБ рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рд▓рдХреНрд╖реНрдп рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдпреЛрдЧреНрдп рд╣реИ, рддреЛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдирд┐рдпрддрд╛рддреНрдордХ рд╣реЛрдЧрд╛, рд╣рд╛рдБред рдпрджрд┐ рд▓рдХреНрд╖реНрдп _if рджреЛ рддрддреНрд╡ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рд╕рдорд╛рди рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХреЗ рд╕рд╛рде рдХрддрд╛рд░ рдореЗрдВ рд░рдЦрд╛ рдЧрдпрд╛ рд╣реИ, рддреЛ рдпрд╣ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ рдХрд┐ рд╡реЗ рдЙрд╕реА рдХреНрд░рдо рдореЗрдВ рдмрд╛рд╣рд░ рдЖрдПрдВрдЧреЗ рдЬрд┐рд╕рдореЗрдВ рдЙрдиреНрд╣реЗрдВ рдХрддрд╛рд░ рдореЗрдВ рд░рдЦрд╛ рдЧрдпрд╛ рдерд╛_ - рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рд╕рдорд╛рдпреЛрдЬрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВ рдЗрд╕ рд╕рдВрдкрддреНрддрд┐ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдПрдХ рддреНрд╡рд░рд┐рдд рдЙрддреНрддрд░ "рд╢рд╛рдпрдж рдирд╣реАрдВ" рд╣реЛрдЧрд╛ред

рджреВрд╕рд░реЗ рдмрд┐рдВрджреБ рдХреЗ рд▓рд┐рдП, рд╣рд╛рдБ, рд╕рдВрдЧреНрд░рд╣ рдореЗрдВ рдХреЛрдИ рддрддреНрд╡ рдореМрдЬреВрдж рд╣реИ рдпрд╛ рдирд╣реАрдВ, рдпрд╣ рдЬрд╛рдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдвреЗрд░ рдЕрдЪреНрдЫреЗ рдирд╣реАрдВ рд╣реИрдВ, рдЧреНрд░рд╛рд╣рдХ рдХреЛ рдУ (1) рдореЗрдВ рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрд▓рдЧ рд╕реЗ рдЗрд╕рдХрд╛ рдЯреНрд░реИрдХ рд░рдЦрдирд╛ рд╣реЛрдЧрд╛ рдпрд╛ рдореИрдкрд┐рдВрдЧ рдХрд╛ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдЬреЛ рд╡реЗ рд╣реИрдВрдбрд▓ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдпрджрд┐ рд╡реЗ рдЕрджреНрдпрддрди рддрдВрддреНрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рдЕрдиреНрдпрдерд╛, рдУ (рдПрди)ред

  • рдХреНрдпрд╛ рдХрдХреНрд╖рд╛ рдХреЛ Contains рдХреЗ рдЙрджреНрджреЗрд╢реНрдп рд╕реЗ рдПрдХ рдХрд╕реНрдЯрдо IEqualityComparer<TElement> рд╕рдорд░реНрдерди рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП?

рд╣рдореНрдо ... рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╢рд╛рдпрдж Contains рдХреЛ рдЗрд╕ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрддрд╛рд░ рдХреА рдЬрд╝рд┐рдореНрдореЗрджрд╛рд░реА рдореЗрдВ рдбрд╛рд▓рдирд╛ рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ Linq рд╕реЗ рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдкрд░реНрдпрд╛рдкреНрдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИ ( Contains рд╡реИрд╕реЗ рднреА рдЧрдгрдирд╛ рдкрд░ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рд╣реИ)ред

@pgolebiowski рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж

рдкрд╣рд▓реЗ рдмрд┐рдВрджреБ рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рд▓рдХреНрд╖реНрдп рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдпреЛрдЧреНрдп рд╣реИ, рддреЛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдирд┐рдпрддрд╛рддреНрдордХ рд╣реЛрдЧрд╛, рд╣рд╛рдБ

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

рджреВрд╕рд░реЗ рдмрд┐рдВрджреБ рдХреЗ рд▓рд┐рдП, рд╣рд╛рдБ, рд╕рдВрдЧреНрд░рд╣ рдореЗрдВ рдХреЛрдИ рддрддреНрд╡ рдореМрдЬреВрдж рд╣реИ рдпрд╛ рдирд╣реАрдВ, рдпрд╣ рдЬрд╛рдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдвреЗрд░ рдЕрдЪреНрдЫреЗ рдирд╣реАрдВ рд╣реИрдВ, рдЧреНрд░рд╛рд╣рдХ рдХреЛ рдУ (1) рдореЗрдВ рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрд▓рдЧ рд╕реЗ рдЗрд╕рдХрд╛ рдЯреНрд░реИрдХ рд░рдЦрдирд╛ рд╣реЛрдЧрд╛ рдпрд╛ рдореИрдкрд┐рдВрдЧ рдХрд╛ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдЬреЛ рд╡реЗ рд╣реИрдВрдбрд▓ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдпрджрд┐ рд╡реЗ рдЕрджреНрдпрддрди рддрдВрддреНрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рдЕрдиреНрдпрдерд╛, рдУ (рдПрди)ред

рдХреНрдпрд╛ рдЗрд╕реЗ Remove рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдХрд╛рд░реНрдп рдХреЗ рд╕рдмрд╕реЗрдЯ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ? рдореИрдВ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рдерд╛: рдореЗрд░рд╛ рдорддрд▓рдм PriorityQueueNode , рдпрд╣ рдЬрд╛рдВрдЪ рд░рд╣рд╛ рдерд╛ рдХрд┐ рдпрд╣ рдвреЗрд░ рдореЗрдВ рд╣реИ рдпрд╛ рдирд╣реАрдВ ( TElement )ред

рд╣рдореНрдо ... рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╢рд╛рдпрдж рдЗрд╕ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрддрд╛рд░ рдХреА рдЬрд╝рд┐рдореНрдореЗрджрд╛рд░реА рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реЛрдирд╛ рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ

рдЕрдЧрд░ Contains рдирд╣реАрдВ рд╣реЛрддрд╛ рддреЛ рдореИрдВ рд╢рд┐рдХрд╛рдпрдд рдирд╣реАрдВ рдХрд░рддрд╛: рдпрд╣ рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рднреА рдПрдХ рдЬрд╛рд▓ рд╣реИ рдЬреЛ рдирд╣реАрдВ рдЬрд╛рдирддреЗ рдХрд┐ рдЙрдиреНрд╣реЗрдВ рд╣реИрдВрдбрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред

@pgolebiowski рдЖрдк рд╣реИрдВрдбрд▓ рдХреЗ рдкрдХреНрд╖ рдореЗрдВ рдмрд╣реБрдд рджреГрдврд╝рддрд╛ рд╕реЗ рдкреНрд░рддреАрдд рд╣реЛрддреЗ рд╣реИрдВ, рдХреНрдпрд╛ рдореИрдВ рдЗрд╕реЗ рджрдХреНрд╖рддрд╛ рдХрд╛рд░рдгреЛрдВ рд╕реЗ рд╕реЛрдЪрдиреЗ рдореЗрдВ рд╕рд╣реА рд╣реВрдВ?

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

рдмрд┐рд▓рдХреБрд▓:
рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рддрддреНрд╡ рд╢рд╛рдпрдж рд╣реА рдХрднреА рдореИрдВ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рдЬреЛ рдЕрднреА рднреА рдореБрдЭреЗ рдЖрд╢реНрдЪрд░реНрдпрдЪрдХрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдпрд╣ рджреЛрдиреЛрдВ рдореЙрдбрд▓реЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдврд╛рдВрдЪреЗ рдХреЗ рд▓рд┐рдП рдореВрд▓реНрдпрд╡рд╛рди рд╣реИред рд▓реЗрдХрд┐рди... рдПрдХ рдЕрджреНрд╡рд┐рддреАрдп-рддрддреНрд╡-рдЕрдиреБрдХреВрд▓ "рдкреНрд░рд╛рдердорд┐рдХрддрд╛рд╕реЗрдЯ" рд╡рд░реНрдЧ рдХрдо рд╕реЗ рдХрдо рдмрд╛рдж рдореЗрдВ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд PriorityQueue рд▓рд┐рдП рдПрдХ рдЖрд╡рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рдЬреЛрдбрд╝рдирд╛ рдЖрд╕рд╛рди рд╣реЛрдЧрд╛, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдзрд┐рдХ рдЕрдиреБрдХреВрд▓ рдПрдкреАрдЖрдИ рдХреА рдирд┐рд░рдВрддрд░ рдорд╛рдВрдЧ рдХреЗ рдЬрд╡рд╛рдм рдореЗрдВред (рдпрджрд┐ рдорд╛рдВрдЧ рдореМрдЬреВрдж рд╣реИред рдЬреИрд╕рд╛ рдХрд┐ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ!)

рд╡рд░реНрддрдорд╛рди рдПрдкреАрдЖрдИ рдХреЗ рд▓рд┐рдП рдЦреБрдж рдХреЛ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдХрд┐рдпрд╛, рдХреБрдЫ рд╡рд┐рдЪрд╛рд░/рдкреНрд░рд╢реНрди:

  • TryPeek(out TElement element, out TPriority priority) рдХрд╛ рдЕрдзрд┐рднрд╛рд░ рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреИрд╕реЗ?
  • рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдЕрджреНрдпрддрди рдХрд░рдиреЗ рдпреЛрдЧреНрдп рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдХреБрдВрдЬрд┐рдпрд╛рдБ рд╣реИрдВ, рддреЛ рдореБрдЭреЗ рдПрдХ рдЪрд┐рдВрддрд╛ рд╣реИ рдХрд┐ рдпрджрд┐ 'рдбреЗрдХреНрдпреВ' рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрддрд╛рд░ рдиреЛрдб рд╡рд╛рдкрд╕ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рддреЛ рдЖрдк рдЕрдкрдиреЗ рд╣реИрдВрдбрд▓ рдЯреНрд░реИрдХрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рд╕реЗ рд╕рд╣реА рд╕рдЯреАрдХ рдиреЛрдб рдХреЛ рдХреИрд╕реЗ рд╣рдЯрд╛ рд░рд╣реЗ рд╣реИрдВ, рдЗрд╕рдХреА рдЬрд╛рдВрдЪ рдХреИрд╕реЗ рдХрд░реЗрдВрдЧреЗ? рдЪреВрдВрдХрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рд╕рдорд╛рди рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рд╡рд╛рд▓реЗ рддрддреНрд╡ рдХреА рдПрдХ рд╕реЗ рдЕрдзрд┐рдХ рдкреНрд░рддрд┐ рд╣реЛ рд╕рдХрддреА рд╣реИред
  • рдХреНрдпрд╛ рдиреЛрдб рдирд╣реАрдВ рдорд┐рд▓рдиреЗ рдкрд░ Remove(PriorityQueueNode) рдлреЗрдВрдХ рджреЗрддрд╛ рд╣реИ? рдпрд╛ рдЭреВрдареА рд╡рд╛рдкрд╕реА?
  • рдХреНрдпрд╛ рдХреЛрдИ TryRemove() рд╕рдВрд╕реНрдХрд░рдг рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдЬреЛ рдлреЗрдВрдХрддрд╛ рд╣реИ рддреЛ рдлреЗрдВрдХрддрд╛ рдирд╣реАрдВ рд╣реИ?
  • рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ Contains() рдПрдкреАрдЖрдИ рдЬреНрдпрд╛рджрд╛рддрд░ рд╕рдордп рдЙрдкрдпреЛрдЧреА рд╣реИ? рджреЗрдЦрдиреЗ рд╡рд╛рд▓реЗ рдХреА рдирдЬрд╝рд░ рдореЗрдВ 'рдХрдВрдЯреЗрдиреНрд╕' рд▓рдЧрддрд╛ рд╣реИ, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкреНрд░рд╛рдердорд┐рдХрддрд╛рдУрдВ рд╡рд╛рд▓реЗ 'рдбреБрдкреНрд▓рд┐рдХреЗрдЯ' рддрддреНрд╡реЛрдВ рдпрд╛ рдЕрдиреНрдп рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рд╡рд╛рд▓реЗ рдкрд░рд┐рджреГрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП! рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдЕрдВрддрд┐рдо рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рд╢рд╛рдпрдж рд╡реИрд╕реЗ рднреА рдЕрдкрдиреА рдЦреБрдж рдХреА рдЦреЛрдЬ рдХрд░рдиреА рдЪрд╛рд╣рд┐рдПред рд▓реЗрдХрд┐рди рдХрдо рд╕реЗ рдХрдо рдпрд╣ рдмрд┐рдирд╛ рдХрд┐рд╕реА рдбреБрдкреНрд▓реАрдХреЗрдЯ рд╡рд╛рд▓реЗ рдкрд░рд┐рджреГрд╢реНрдп рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

@pgolebiowski рдирдП рдкреНрд░рд╕реНрддрд╛рд╡ рдХрд╛ рдорд╕реМрджрд╛ рддреИрдпрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдордп рдирд┐рдХрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж! рдореЗрд░реА рддрд░рдл рд╕реЗ рдХреБрдЫ рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ:

  • @TimLovellSmith рдХреА рдЯрд┐рдкреНрдкрдгреА рдХреЛ рдкреНрд░рддрд┐рдзреНрд╡рдирд┐рдд Contains() рдпрд╛ TryGetNode() рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рд░реВрдк рдореЗрдВ рдПрдкреАрдЖрдИ рдореЗрдВ рдореМрдЬреВрдж рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдЙрдирдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ TElement рд▓рд┐рдП рд╕рдорд╛рдирддрд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ, рдЬреЛ рд╕рдВрднрд╡рдд: рдЙрди рдЪреАрдЬреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИ рдЬреЛ рдПрдХ рд╣реИрдВрдбрд▓-рдЖрдзрд╛рд░рд┐рдд рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ рдмрдЪрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рдерд╛ред
  • рдореИрдВ рд╢рд╛рдпрдж public void Dequeue(out TElement element); рдХреЛ public TElement Dequeue(); рд░реВрдк рдореЗрдВ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦреВрдВрдЧрд╛
  • TryDequeue() рд╡рд┐рдзрд┐ рдХреЛ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпреЛрдВ рд╣реИ?
  • рдХреНрдпрд╛ рдХрдХреНрд╖рд╛ рдХреЛ ICollection<T> рдпрд╛ IReadOnlyCollection<T> рднреА рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП?
  • рдпрджрд┐ рдореИрдВ рдХрд┐рд╕реА рднрд┐рдиреНрди рдкреНрд░рд╛рдпреЛрд░рд┐рдЯреА рдХреНрдпреВ рдЗрдВрд╕реНрдЯреЗрдВрд╕ рд╕реЗ рд▓реМрдЯрд╛рдП рдЧрдП рдкреНрд░рд╛рдпреЛрд░рд┐рдЯреА рдХреНрдпреВрдпреВрдПрдирдУрдбреА рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддрд╛ рд╣реВрдВ рддреЛ рдХреНрдпрд╛ рд╣реЛрдЧрд╛?
  • рдХреНрдпрд╛ рд╣рдо рдПрдХ рдХреБрд╢рд▓ рдорд░реНрдЬ рдСрдкрд░реЗрд╢рди рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ? AFAICT рдЗрд╕рдХрд╛ рддрд╛рддреНрдкрд░реНрдп рд╣реИ рдХрд┐ рд╣рдо рд╕рд░рдгреА-рдЖрдзрд╛рд░рд┐рдд рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рдЖрд╡рдВрдЯрди рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рдХреИрд╕реЗ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░реЗрдЧрд╛?

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

рдмрд╛рдж рдХреЗ рддрд░реАрдХреЛрдВ рдХреЛ рдЪреБрдирдиреЗ рдХреЗ рд▓рд┐рдП рдЯреНрд░реЗрдб-рдСрдл рдХреНрдпрд╛ рд╣реИрдВ? рдХреНрдпрд╛ рдЙрдирдХреЗ рд▓рд┐рдП рд╕рд░рдгреА-рдЖрдзрд╛рд░рд┐рдд рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ?

рдпрд╣ ICollection<T> рдпрд╛ IReadOnlyCollection<T> рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рдЬрдм рдЙрд╕рдХреЗ рдкрд╛рд╕ 'рдЬреЛрдбрд╝реЗрдВ' рдФрд░ 'рдирд┐рдХрд╛рд▓реЗрдВ' рдЖрджрд┐ рдХреЗ рд▓рд┐рдП рд╕рд╣реА рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдирд╣реАрдВ рд╣реИрдВред

рдпрд╣ рдЖрддреНрдорд╛/рдЖрдХрд╛рд░ рдореЗрдВ ICollection<KeyValuePair<T,Priority>> . рдХреЗ рдмрд╣реБрдд рдХрд░реАрдм рд╣реИ

рдпрд╣ рдЖрддреНрдорд╛/рдЖрдХрд╛рд░ рдореЗрдВ ICollection<KeyValuePair<T,Priority>> . рдХреЗ рдмрд╣реБрдд рдХрд░реАрдм рд╣реИ

рдХреНрдпрд╛ рдпрд╣ KeyValuePair<TPriority, TElement> , рдХреНрдпреЛрдВрдХрд┐ рдЖрджреЗрд╢ TP рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рджреНрд╡рд╛рд░рд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдкреНрд░рднрд╛рд╡реА рд░реВрдк рд╕реЗ рдПрдХ рдХреБрдВрдЬреАрдпрди рддрдВрддреНрд░ рд╣реИ?

рдареАрдХ рд╣реИ, рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рдХреБрд▓ рдорд┐рд▓рд╛рдХрд░ Contains рдФрд░ TryGet рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рдЫреЛрдбрд╝рдиреЗ рдХреЗ рдкрдХреНрд╖ рдореЗрдВ рд╣реИрдВред рдЕрдЧрд▓реЗ рд╕рдВрд╢реЛрдзрди рдореЗрдВ рдЙрдиреНрд╣реЗрдВ рд╣рдЯрд╛ рджреЗрдВрдЧреЗ рдФрд░ рдЕрдХреНрд╕рд░ рдкреВрдЫреЗ рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдкреНрд░рд╢реНрди рдореЗрдВ рдирд┐рд╖реНрдХрд╛рд╕рди рдХрд╛ рдХрд╛рд░рдг рдмрддрд╛рдПрдВрдЧреЗред

рд▓рд╛рдЧреВ рдХрд┐рдП рдЧрдП рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЗ рд▓рд┐рдП тАФ рдХреНрдпрд╛ IEnumerable<PriorityQueueNode<TElement, TPriority>> рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рд╣реИ? рдХрд┐рд╕ рдкреНрд░рдХрд╛рд░ рдХреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдЧреБрдо рд╣реИ?

KeyValuePair - рдХреБрдЫ рдЖрд╡рд╛рдЬреЗрдВ рдереАрдВ рдХрд┐ .Element рдФрд░ .Priority рд╕рд╛рде рдПрдХ рдЯрдкрд▓ рдпрд╛ рдПрдХ рд╕рдВрд░рдЪрдирд╛ рдЕрдзрд┐рдХ рд╡рд╛рдВрдЫрдиреАрдп рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореИрдВ рдЗрдирдХреЗ рдкрдХреНрд╖ рдореЗрдВ рд╣реВрдВред

рдХреНрдпрд╛ рдпрд╣ KeyValuePair<TPriority, TElement> , рдХреНрдпреЛрдВрдХрд┐ рдЖрджреЗрд╢ TP рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рджреНрд╡рд╛рд░рд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдкреНрд░рднрд╛рд╡реА рд░реВрдк рд╕реЗ рдПрдХ рдХреБрдВрдЬреАрдпрди рддрдВрддреНрд░ рд╣реИ?

рджреЛрдиреЛрдВ рдкрдХреНрд╖реЛрдВ рдХреЗ рд▓рд┐рдП рдЕрдЪреНрдЫреЗ рддрд░реНрдХ рд╣реИрдВред рдПрдХ рдУрд░, рд╣рд╛рдБ, рдареАрдХ рд╡рд╣реА рдЬреЛ рдЖрдкрдиреЗ рдЕрднреА рдХрд╣рд╛ред рджреВрд╕рд░реА рдУрд░, рдХреЗрд╡реАрдкреА рд╕рдВрдЧреНрд░рд╣ рдореЗрдВ рдЪрд╛рдмрд┐рдпреЛрдВ рдХреЗ рдЕрджреНрд╡рд┐рддреАрдп рд╣реЛрдиреЗ рдХреА рдЕрдкреЗрдХреНрд╖рд╛ рдХреА рдЬрд╛рддреА рд╣реИ, рдФрд░ рд╕рдорд╛рди рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рд╡рд╛рд▓реЗ рдХрдИ рддрддреНрд╡реЛрдВ рдХрд╛ рд╣реЛрдирд╛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдорд╛рдиреНрдп рд╣реИред

рджреВрд╕рд░реА рдУрд░, рдХреЗрд╡реАрдкреА рд╕рдВрдЧреНрд░рд╣ рдореЗрдВ рдЪрд╛рдмрд┐рдпреЛрдВ рдХреЗ рдЕрджреНрд╡рд┐рддреАрдп рд╣реЛрдиреЗ рдХреА рдЕрдкреЗрдХреНрд╖рд╛ рдХреА рдЬрд╛рддреА рд╣реИ

рдореИрдВ рдЗрд╕ рдХрдерди рд╕реЗ рдЕрд╕рд╣рдордд рд╣реВрдВ - рдХреБрдВрдЬреА-рдореВрд▓реНрдп рдЬреЛрдбрд╝реЗ рдХрд╛ рд╕рдВрдЧреНрд░рд╣ рдмрд╕ рдпрд╣реА рд╣реИ; рдХрд┐рд╕реА рднреА рд╡рд┐рд╢рд┐рд╖реНрдЯрддрд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдЙрд╕рдХреЗ рдКрдкрд░ рд╕реНрддрд░рд┐рдд рд╣реЛрддреА рд╣реИред

IEnumerable<PriorityQueueNode<TElement, TPriority>> рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рд╣реИ? рдХрд┐рд╕ рдкреНрд░рдХрд╛рд░ рдХреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдЧреБрдо рд╣реИ?

рдореИрдВ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ IReadOnlyCollection<PQN<TElement, TPriority>> рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдЕрдкреЗрдХреНрд╖рд╛ рдХрд░рддрд╛ рд╣реВрдВ, рдХреНрдпреЛрдВрдХрд┐ рдкреНрд░рджрд╛рди рдХрд┐рдпрд╛ рдЧрдпрд╛ рдПрдкреАрдЖрдИ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЙрд╕ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рд╕рдВрддреБрд╖реНрдЯ рдХрд░рддрд╛ рд╣реИред рд╕рд╛рде рд╣реА, рдпрд╣ рдЕрдиреНрдп рд╕рдВрдЧреНрд░рд╣ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рдЕрдиреБрд░реВрдк рд╣реЛрдЧрд╛ред

рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ:

```
рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдмреВрд▓ TryGetNode (TElement рддрддреНрд╡, рдкреНрд░рд╛рдпреЛрд░рд┐рдЯреА рдХреНрдпреВрдпреВрдПрдиреЛрдб рд╕реЗ рдмрд╛рд╣рд░)рдиреЛрдб); // рдкрд░)

What's the point of it if I can just do enumerate collection and do comparison of elements? And why only Try version?

public PriorityQueueNode<TElement, TPriority> Peek(); // O(1)
public void Dequeue(out TElement element); // O(log n)
I find it a bit strange to have discrepancy between Dequeue and Peek. They do pretty much same thing expect one is removing element from queue and other is not, it's looks weird for me if one returns priority and element and other just element.

public void Remove(PriorityQueueNode<TElement, TPriority> node); // O(log n)
`Queue` doesn't have `Remove` method, why `PriorityQueue` should ?


I would also like to see constructor

рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрддрд╛рд░(IEnumerable> рд╕рдВрдЧреНрд░рд╣);
```

рдореИрдВ PriorityQueue рдХреЛ IReadonlyCollection<> рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рднреА рдЪрд╛рд╣реВрдВрдЧрд╛ред

рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдПрдкреАрдЖрдИ рд╕рддрд╣ рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдЕрдиреНрдп рдЪреАрдЬреЛрдВ рдкрд░ рдХреВрджрдирд╛ред

рдЗрд╕ рддрд░рд╣ рдХреА рдХреНрд╖рдорддрд╛ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдЬреИрд╕реЗ рджрд┐рдЬреНрдХреНрд╕реНрдЯреНрд░рд╛ рдХрд╛ рд╕рдмрд╕реЗ рдЫреЛрдЯрд╛ рдкрде рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдпрд╛ рдПрдХ рдиреМрдХрд░реА рдЕрдиреБрд╕реВрдЪрдХ рдЬрд┐рд╕реЗ рдмрджрд▓рддреА рдкреНрд░рд╛рдердорд┐рдХрддрд╛рдУрдВ рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдЬрд╛рд╡рд╛ рдореЗрдВ рдЕрджреНрдпрддрди рддрдВрддреНрд░ рдЧрд╛рдпрдм рд╣реИ, рдЬреЛ рдЗрдВрдЬреАрдирд┐рдпрд░реЛрдВ рдХреЗ рд▓рд┐рдП рдирд┐рд░рд╛рд╢рд╛рдЬрдирдХ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдЗрди рддреАрди рд╕реНрдЯреИрдХ рдУрд╡рд░рдлреНрд▓реЛ рдкреНрд░рд╢реНрдиреЛрдВ рдореЗрдВ 32k рд╕реЗ рдЕрдзрд┐рдХ рдмрд╛рд░ рджреЗрдЦрд╛ рдЧрдпрд╛: рдЙрджрд╛рд╣рд░рдг, рдЙрджрд╛рд╣рд░рдг, рдЙрджрд╛рд╣рд░рдгред рдЗрд╕ рддрд░рд╣ рдХреЗ рд╕реАрдорд┐рдд рдореВрд▓реНрдп рдХреЗ рд╕рд╛рде рдПрдкреАрдЖрдИ рд╢реБрд░реВ рдХрд░рдиреЗ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдорд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рд╣рдорд╛рд░реЗ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрддрд╛рд░ рдХреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рдореМрд▓рд┐рдХ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╕рдВрдЧреНрд░рд╣ рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рдореМрдЬреВрдж рддрддреНрд╡реЛрдВ рдХреЗ рд▓рд┐рдП рдкреНрд░рд╛рдердорд┐рдХрддрд╛рдУрдВ рдХреЛ рдЕрджреНрдпрддрди рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред

рдореИрдВ рдЕрд╕рд╣рдордд рд╣реЛрдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ред рдкрд┐рдЫрд▓реА рдмрд╛рд░ рдореИрдВрдиреЗ рд╕реА ++ рдореЗрдВ рдбрд┐рдЬрд╕реНрдЯреНрд░рд╛ рд▓рд┐рдЦрд╛ рдерд╛ std::priority_queue рдкрд░реНрдпрд╛рдкреНрдд рдерд╛ рдФрд░ рдпрд╣ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдЕрджреНрдпрддрди рдХреЛ рд╕рдВрднрд╛рд▓рддрд╛ рдирд╣реАрдВ рд╣реИред рдЙрд╕ рдорд╛рдорд▓реЗ рдХреЗ рд▓рд┐рдП AFAIK рдЖрдо рд╕рд╣рдорддрд┐ рдирдХрд▓реА рддрддреНрд╡ рдХреЛ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдФрд░ рдореВрд▓реНрдп рдХреЗ рд╕рд╛рде рдХрддрд╛рд░ рдореЗрдВ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИ рдФрд░ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдореВрд▓реНрдп рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВред рдЬреЙрдм рд╢реЗрдбреНрдпреВрд▓рд░ рдХреЗ рд╕рд╛рде рднреА рдРрд╕рд╛ рд╣реА рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдИрдорд╛рдирджрд╛рд░ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рд╡рд░реНрддрдорд╛рди рдХрддрд╛рд░ рдкреНрд░рд╕реНрддрд╛рд╡ рдХреЗ рд╕рд╛рде рджрд┐рдЬреНрдХреНрд╕реНрдЯреНрд░рд╛ рдХреИрд╕рд╛ рджрд┐рдЦреЗрдЧрд╛ред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдиреЛрдбреНрд╕ рдХрд╛ рдЯреНрд░реИрдХ рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдореБрдЭреЗ рдЕрджреНрдпрддрди рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ? TryGetNode () рдХреЗ рд╕рд╛рде? рдпрд╛ рдиреЛрдбреНрд╕ рдХрд╛ рдПрдХ рдФрд░ рд╕рдВрдЧреНрд░рд╣ рд╣реИ? рд╡рд░реНрддрдорд╛рди рдкреНрд░рд╕реНрддрд╛рд╡ рдХреЗ рд▓рд┐рдП рдХреЛрдб рджреЗрдЦрдирд╛ рдЕрдЪреНрдЫрд╛ рд▓рдЧреЗрдЧрд╛ред

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

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

рдореИрдВрдиреЗ рдХрд╛рдЧрдЬ рдореЗрдВ рджреЗрдЦрд╛ рд╣реИ рдФрд░ рдпрд╣ рдЙрд╕рдореЗрдВ рд╕реЗ рдЙрджреНрдзрд░рдг рд╣реИ:

рдкрд░рд┐рдгрд╛рдо рдмрддрд╛рддреЗ рд╣реИрдВ рдХрд┐ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛ рдЗрд╖реНрдЯрддрдо рд╡рд┐рдХрд▓реНрдк рдЕрддреНрдпрдзрд┐рдХ рдЗрдирдкреБрдЯ-рдирд┐рд░реНрднрд░ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрд╣ рджрд░реНрд╢рд╛рддрд╛ рд╣реИ рдХрд┐ рдХреИрд╢ рдкреНрд░рджрд░реНрд╢рди рдХреЗ рдЕрдиреБрдХреВрд▓рди рдХреЗ рд▓рд┐рдП рджреЗрдЦрднрд╛рд▓ рдХреА рдЬрд╛рдиреА рдЪрд╛рд╣рд┐рдП, рдореБрдЦреНрдп рд░реВрдк рд╕реЗ L1-L2 рдмреИрд░рд┐рдпрд░ рдкрд░ред рдЗрд╕рд╕реЗ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рдХрд┐ рдЬрдЯрд┐рд▓, рдХреИрд╢реЗ-рдЕрдирднрд┐рдЬреНрдЮ рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреЗ рд╕рд░рд▓, рдХреИрд╢реЗ-рдЬрд╛рдЧрд░реВрдХ рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЕрдЪреНрдЫрд╛ рдкреНрд░рджрд░реНрд╢рди рдХрд░рдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдирд╣реАрдВ рд╣реИред

рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╡рд░реНрддрдорд╛рди рдХрддрд╛рд░ рдкреНрд░рд╕реНрддрд╛рд╡ рд╕рд░рдгреА рдХреЗ рдмрдЬрд╛рдп рдкреЗрдбрд╝ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рдкреАрдЫреЗ рдмрдВрдж рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдФрд░ рдХреБрдЫ рдореБрдЭреЗ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ рд╕реНрдореГрддрд┐ рдХреЗ рдЪрд╛рд░реЛрдВ рдУрд░ рдмрд┐рдЦрд░реЗ рд╣реБрдП рдкреЗрдбрд╝ рдиреЛрдбреНрд╕ рддрддреНрд╡реЛрдВ рдХреА рд╕рд░рдгреА рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рджрд░реНрд╢рдирдХрд╛рд░реА рдирд╣реАрдВ рд╣реЛрдВрдЧреЗред

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

рдХрд┐рд╕реА рдЕрдиреНрдп рд╡рд┐рд╖рдп рдкрд░ рдЬрд╛рддреЗ рд╣реБрдП, рдореИрдВ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ KeyValuePair рд░рдЦрдирд╛ рдкрд╕рдВрдж рдХрд░реВрдВрдЧрд╛рдирдП рдХрд╕реНрдЯрдо рд╡рд░реНрдЧ рдХреА рддреБрд▓рдирд╛ рдореЗрдВред

  • рдХрдо рдПрдкреАрдЖрдИ рд╕рддрд╣
  • рдореИрдВ рдРрд╕рд╛ рдХреБрдЫ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ: 'рдирдИ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрддрд╛рд░'(рдирдпрд╛ рд╢рдмреНрджрдХреЛрд╢() {{ 1, 1}, {2, 2}, {3, 3}, {4, 4}, {5, 5}}); рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХреБрдВрдЬреА рдХреА рд╡рд┐рд╢рд┐рд╖реНрдЯрддрд╛ рд╕реЗ рд╕реАрдорд┐рдд рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ IDictionary рдЖрдзрд╛рд░рд┐рдд рд╕рдВрдЧреНрд░рд╣реЛрдВ рдХрд╛ рдЙрдкрднреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдЪреНрдЫрд╛ рддрд╛рд▓рдореЗрд▓ рд▓рд╛рдПрдЧрд╛ред
  • рдпрд╣ рд╡рд░реНрдЧ рдХреЗ рдмрдЬрд╛рдп рдПрдХ рд╕рдВрд░рдЪрдирд╛ рд╣реИ рдЗрд╕рд▓рд┐рдП рдХреЛрдИ NullReference рдЕрдкрд╡рд╛рдж рдирд╣реАрдВ рд╣реИ
  • рдХрд┐рд╕реА рдмрд┐рдВрджреБ рдкрд░ PrioirtyQueue рдХреЛ рдХреНрд░рдордмрджреНрдз/deserialized рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА рдФрд░ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдкрд╣рд▓реЗ рд╕реЗ рдореМрдЬреВрдж рд╡рд╕реНрддреБ рдХреЗ рд╕рд╛рде рдРрд╕рд╛ рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реЛрдЧрд╛ред

рдирдХрд╛рд░рд╛рддреНрдордХ рдкрдХреНрд╖ TPriority Key рдкрд░ рдорд┐рд╢реНрд░рд┐рдд рднрд╛рд╡рдирд╛рдПрдВ рд╣реИрдВ рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЕрдЪреНрдЫрд╛ рджрд╕реНрддрд╛рд╡реЗрдЬ рдЗрд╕реЗ рд╣рд▓ рдХрд░ рд╕рдХрддрд╛ рд╣реИред
`

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

рдореИрдВ IReadOnlyCollection рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдирд╣реАрдВ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЧрд▓рдд рдерд╛, рдпрд╣ рдареАрдХ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдЙрд╕ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдореЗрдВ рдХреЛрдИ рдЬреЛрдбрд╝реЗрдВ() рдФрд░ рдирд┐рдХрд╛рд▓реЗрдВ() рдирд╣реАрдВ, рд╣реИрд╣! (рдореИрдВ рдХреНрдпрд╛ рд╕реЛрдЪ рд░рд╣рд╛ рдерд╛...)

@ Ivanidzo4ka рдЖрдкрдХреА рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдВ рдореБрдЭреЗ рдФрд░ рднреА рдЕрдзрд┐рдХ рдЖрд╢реНрд╡рд╕реНрдд рдХрд░рддреА рд╣реИрдВ рдХрд┐ рдпрд╣ рджреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ: рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдмрд╛рдЗрдирд░реА рдвреЗрд░ (рдпрд╛рдиреА рдмрд┐рдирд╛ рдХрд┐рд╕реА рдЕрджреНрдпрддрди рдХреЗ), рдФрд░ рдкреНрд░рд╕реНрддрд╛рд╡реЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рджреНрд╡рд╛рд░рд╛ рд╡рд░реНрдгрд┐рдд рджреВрд╕рд░рд╛:

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

рдЕрддреАрдд рдореЗрдВ, рдореИрдВ рдЬреНрдпрд╛рджрд╛рддрд░ рдПрдХ рджреНрд╡рд┐рдЖрдзрд╛рд░реА рдвреЗрд░ рд╕реЗ рджреВрд░ рд╣реЛ рдЧрдпрд╛ рд╣реВрдВ рдЬрд┐рд╕реЗ рдореИрдВрдиреЗ рдПрдХ рджрд╢рдХ рдкрд╣рд▓реЗ рд▓рд┐рдЦрд╛ рдерд╛, рдФрд░ рдПрдХ SortedSet / Dictionary рд╕рдВрдпреЛрдЬрди, рдФрд░ рдРрд╕реЗ рдкрд░рд┐рджреГрд╢реНрдп рд╣реИрдВ рдЬрд╣рд╛рдВ рдореИрдВрдиреЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рд╣реИ рджреЛрдиреЛрдВ рдкреНрд░рдХрд╛рд░ рдЕрд▓рдЧ-рдЕрд▓рдЧ рднреВрдорд┐рдХрд╛рдУрдВ рдореЗрдВ (рдХреЗрдПрд╕рдПрд╕рдкреА рд╕реНрдкреНрд░рд┐рдВрдЧреНрд╕ рдЯреВ рдорд╛рдЗрдВрдб)ред

рдпрд╣ рд╡рд░реНрдЧ рдХреЗ рдмрдЬрд╛рдп рдПрдХ рд╕рдВрд░рдЪрдирд╛ рд╣реИ рдЗрд╕рд▓рд┐рдП рдХреЛрдИ NullReference рдЕрдкрд╡рд╛рдж рдирд╣реАрдВ рд╣реИ

рдореИрдВ рддрд░реНрдХ рджреВрдВрдЧрд╛ рдХрд┐ рдпрд╣ рджреВрд╕рд░реА рддрд░рдл рд╣реИ: рдЕрдЧрд░ рдХреЛрдИ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдорд╛рди рдкрд╛рд╕ рдХрд░ рд░рд╣рд╛ рд╣реИ, рддреЛ рдореИрдВ рдЙрдиреНрд╣реЗрдВ рдПрдирдЖрд░рдИ рджреЗрдЦрдирд╛ рдкрд╕рдВрдж рдХрд░реВрдВрдЧрд╛; рд╣рд╛рд▓рд╛рдВрдХрд┐, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдореЗрдВ рд╕реНрдкрд╖реНрдЯ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рд╣рдо рдЗрди рдЪреАрдЬреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдкреЗрдХреНрд╖рд╛ рдХрд░рддреЗ рд╣реИрдВ: рдиреЛрдбреНрд╕/рд╣реИрдВрдбрд▓ рд╢рд╛рдпрдж рдХрдХреНрд╖рд╛рдПрдВ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП, рд▓реЗрдХрд┐рди рдЕрдЧрд░ рд╣рдо рд╕рд┐рд░реНрдл рдПрдХ рдЬреЛрдбрд╝реА рдкрдврд╝ рд░рд╣реЗ рд╣реИрдВ/рд╡рд╛рдкрд╕ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдореИрдВ рдорд╛рдирддрд╛ рд╣реВрдВ рдХрд┐ рдпрд╣ рдПрдХ рд╕рдВрд░рдЪрдирд╛ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред


рдореИрдВ рд╕реБрдЭрд╛рд╡ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рд▓рд▓рдЪрд╛ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рддрддреНрд╡ рдХреЗ рд╕рд╛рде-рд╕рд╛рде рд╣реИрдВрдбрд▓ рдЖрдзрд╛рд░рд┐рдд рдкреНрд░рд╕реНрддрд╛рд╡ рдореЗрдВ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдЖрдк рдХреЗрд╡рд▓ рдПрдХ рд╣реИрдВрдбрд▓ рдХреЛ рд╣рдЯрд╛рдХрд░ рдФрд░ рдПрдХ рдирдпрд╛ рдЬреЛрдбрд╝рдХрд░ рд╕рдорд╛рди рдкреНрд░рднрд╛рд╡ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рдПрдХ рдЙрдкрдпреЛрдЧреА рдСрдкрд░реЗрд╢рди рд╣реИ, рдФрд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдкреНрд░рджрд░реНрд╢рди рд▓рд╛рдн рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдвреЗрд░ рдЕрдкреЗрдХреНрд╖рд╛рдХреГрдд рд╕рд╕реНрддреЗ рдореЗрдВ рдХреБрдЫ рдХреА рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХреЛ рдХрдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ)ред рдЗрд╕ рддрд░рд╣ рдХреЗ рдмрджрд▓рд╛рд╡ рд╕реЗ рдХрдИ рдЪреАрдЬреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реЛ рдЬрд╛рдПрдЧрд╛ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдореМрдЬреВрджрд╛ AlgoKit ParingHeap рдкрд░ рдЖрдзрд╛рд░рд┐рдд рдпрд╣ рдХреБрдЫ рд╣рдж рддрдХ рджреБрдГрд╕реНрд╡рдкреНрди рдЙрддреНрдкреНрд░реЗрд░рдг рдЙрджрд╛рд╣рд░рдг), рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рд╡реЗ рдЬреЛ рд░рд╛рдЬреНрдп рдЕрдВрддрд░рд┐рдХреНрд╖ рдХреЗ рдЕрдЬреНрдЮрд╛рдд рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВред

рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрддрд╛рд░ рдкреНрд░рд╕реНрддрд╛рд╡ (v2.1)

рд╕рд╛рд░рд╛рдВрд╢

.NET рдХреЛрд░ рд╕рдореБрджрд╛рдп рд╕рд┐рд╕реНрдЯрдо рд▓рд╛рдЗрдмреНрд░реЗрд░реА _priority queue_ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдореЗрдВ рдЬреЛрдбрд╝рдиреЗ рдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рдХрд░рддрд╛ рд╣реИ, рдПрдХ рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛ рдЬрд┐рд╕рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рддрддреНрд╡ рдХреА рдЗрд╕рдХреЗ рд╕рд╛рде рдПрдХ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рднреА рдЬреБрдбрд╝реА рд╣реЛрддреА рд╣реИред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рд╣рдо PriorityQueue<TElement, TPriority> рдХреЛ System.Collections.Generic рдиреЗрдорд╕реНрдкреЗрд╕ рдореЗрдВ рдЬреЛрдбрд╝рдиреЗ рдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рдХрд░рддреЗ рд╣реИрдВред

рд╕рд┐рджреНрдзрд╛рдВрддреЛрдВ

рд╣рдорд╛рд░реЗ рдбрд┐рдЬрд╛рдЗрди рдореЗрдВ, рд╣рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рд┐рджреНрдзрд╛рдВрддреЛрдВ рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрджреЗрд╢рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ (рдЬрдм рддрдХ рдХрд┐ рдЖрдк рдмреЗрд╣рддрд░ рдирд╣реАрдВ рдЬрд╛рдирддреЗ):

  • рд╡рд┐рд╕реНрддреГрдд рдХрд╡рд░реЗрдЬред рд╣рдо .NET рдХреЛрд░ рдЧреНрд░рд╛рд╣рдХреЛрдВ рдХреЛ рдПрдХ рдореВрд▓реНрдпрд╡рд╛рди рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛ рдХреА рдкреЗрд╢рдХрд╢ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдЬреЛ рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рдХрд╛рд░ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рдмрд╣реБрдореБрдЦреА рд╣реИред
  • рдЬреНрдЮрд╛рдд рдЧрд▓рддрд┐рдпреЛрдВ рд╕реЗ рд╕реАрдЦреЗрдВред рд╣рдо рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрддрд╛рд░ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рдЕрдиреНрдп рдврд╛рдВрдЪреЗ рдФрд░ рднрд╛рд╖рд╛рдУрдВ, рдЬреИрд╕реЗ рдЬрд╛рд╡рд╛, рдкрд╛рдпрдерди, рд╕реА ++, рдЬрдВрдЧ рдореЗрдВ рдореМрдЬреВрдж рдЧреНрд░рд╛рд╣рдХ-рд╕рд╛рдордирд╛ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдореБрджреНрджреЛрдВ рд╕реЗ рдореБрдХреНрдд рд╣реЛрдЧреАред рд╣рдо рдРрд╕реЗ рдбрд┐рдЬрд╝рд╛рдЗрди рд╡рд┐рдХрд▓реНрдк рдмрдирд╛рдиреЗ рд╕реЗ рдмрдЪреЗрдВрдЧреЗ рдЬреЛ рдЧреНрд░рд╛рд╣рдХреЛрдВ рдХреЛ рдирд╛рдЦреБрд╢ рдХрд░рдиреЗ рдФрд░ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рд╡рд╛рд▓реА рдХрддрд╛рд░реЛрдВ рдХреА рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдХреЛ рдХрдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд╛рдиреЗ рдЬрд╛рддреЗ рд╣реИрдВред
  • рдПрдХрддрд░рдлрд╛ рдирд┐рд░реНрдгрдп рдХреЗ рд╕рд╛рде рдЕрддреНрдпрдзрд┐рдХ рд╕рд╛рд╡рдзрд╛рдиреАред рдПрдХ рдмрд╛рд░ рдПрдкреАрдЖрдИ рдкреЗрд╢ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдЗрд╕реЗ рд╕рдВрд╢реЛрдзрд┐рдд рдпрд╛ рд╣рдЯрд╛рдпрд╛ рдирд╣реАрдВ рдЬрд╛ рд╕рдХрддрд╛, рдХреЗрд╡рд▓ рдмрдврд╝рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд╣рдо рдЙрдк-рдЗрд╖реНрдЯрддрдо рд╕рдорд╛рдзрд╛рдиреЛрдВ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХрд╛ рд╕рд╛рд╡рдзрд╛рдиреАрдкреВрд░реНрд╡рдХ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░реЗрдВрдЧреЗ, рдЬрд┐рд╕рд╕реЗ рд╣рдорд╛рд░реЗ рдЧреНрд░рд╛рд╣рдХ рд╣рдореЗрд╢рд╛ рдХреЗ рд▓рд┐рдП рдлрдВрд╕ рдЬрд╛рдПрдВрдЧреЗред
  • рдбрд┐рдЬрд╛рдЗрди рдкрдХреНрд╖рд╛рдШрд╛рдд рд╕реЗ рдмрдЪреЗрдВред рд╣рдо рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдХреЛрдИ рднреА рд╕рд╣реА рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рд╣рдо рдЯреНрд░реЗрдб-рдСрдл рдХреЛ рд╕рдВрддреБрд▓рд┐рдд рдХрд░реЗрдВрдЧреЗ рдФрд░ рдбрд┐рд▓реАрд╡рд░реА рдХреЗ рд╕рд╛рде рдЖрдЧреЗ рдмрдврд╝реЗрдВрдЧреЗ, рдЕрдВрдд рдореЗрдВ рдЕрдкрдиреЗ рдЧреНрд░рд╛рд╣рдХреЛрдВ рдХреЛ рд╡рд╣ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рд╕рдХрд╛ рд╡реЗ рд╡рд░реНрд╖реЛрдВ рд╕реЗ рдЗрдВрддрдЬрд╛рд░ рдХрд░ рд░рд╣реЗ рдереЗред

рдкреГрд╖реНрдарднреВрдорд┐

рдПрдХ рдЧреНрд░рд╛рд╣рдХ рдХреЗ рдирдЬрд░рд┐рдП рд╕реЗ

рд╕рдВрдХрд▓реНрдкрдирд╛рддреНрдордХ рд░реВрдк рд╕реЗ, рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрддрд╛рд░ рддрддреНрд╡реЛрдВ рдХрд╛ рдПрдХ рд╕рдВрдЧреНрд░рд╣ рд╣реИ, рдЬрд╣рд╛рдВ рдкреНрд░рддреНрдпреЗрдХ рддрддреНрд╡ рдХреА рдПрдХ рд╕рдВрдмрджреНрдз рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рд╣реЛрддреА рд╣реИред рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрддрд╛рд░ рдХреА рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рд╕рдВрдЧреНрд░рд╣ рдореЗрдВ рд╕рд░реНрд╡реЛрдЪреНрдЪ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рд╡рд╛рд▓реЗ рддрддреНрд╡ рддрдХ рдХреБрд╢рд▓ рдкрд╣реБрдВрдЪ рдкреНрд░рджрд╛рди рдХрд░рддреА рд╣реИ, рдФрд░ рдЙрд╕ рддрддреНрд╡ рдХреЛ рд╣рдЯрд╛рдиреЗ рдХрд╛ рд╡рд┐рдХрд▓реНрдк рдкреНрд░рджрд╛рди рдХрд░рддреА рд╣реИред рдЕрдкреЗрдХреНрд╖рд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ рдпрд╣ рднреА рд╢рд╛рдорд┐рд▓ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ: 1) рдХрд┐рд╕реА рддрддреНрд╡ рдХреА рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдЬреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕рдВрдЧреНрд░рд╣ рдореЗрдВ рд╣реИ; 2) рдПрдХрд╛рдзрд┐рдХ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрддрд╛рд░реЛрдВ рдХреЛ рдорд░реНрдЬ рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ред

рдХрдВрдкреНрдпреВрдЯрд░ рд╡рд┐рдЬреНрдЮрд╛рди рдкреГрд╖реНрдарднреВрдорд┐

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

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

рдЕрджреНрдпрддрди рддрдВрддреНрд░ рдкреНрд░рдореБрдЦ рдбрд┐рдЬрд╛рдЗрди рдЪреБрдиреМрддреА рд╣реИ

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

рдЗрд╕ рддрд░рд╣ рдХреА рдХреНрд╖рдорддрд╛ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдЬреИрд╕реЗ рджрд┐рдЬреНрдХреНрд╕реНрдЯреНрд░рд╛ рдХрд╛ рд╕рдмрд╕реЗ рдЫреЛрдЯрд╛ рдкрде рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдпрд╛ рдПрдХ рдиреМрдХрд░реА рдЕрдиреБрд╕реВрдЪрдХ рдЬрд┐рд╕реЗ рдмрджрд▓рддреА рдкреНрд░рд╛рдердорд┐рдХрддрд╛рдУрдВ рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдЬрд╛рд╡рд╛ рдореЗрдВ рдЕрджреНрдпрддрди рддрдВрддреНрд░ рдЧрд╛рдпрдм рд╣реИ, рдЬреЛ рдЗрдВрдЬреАрдирд┐рдпрд░реЛрдВ рдХреЗ рд▓рд┐рдП рдирд┐рд░рд╛рд╢рд╛рдЬрдирдХ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдЗрди рддреАрди рд╕реНрдЯреИрдХ рдУрд╡рд░рдлреНрд▓реЛ рдкреНрд░рд╢реНрдиреЛрдВ рдореЗрдВ 32k рд╕реЗ рдЕрдзрд┐рдХ рдмрд╛рд░ рджреЗрдЦрд╛ рдЧрдпрд╛: рдЙрджрд╛рд╣рд░рдг , рдЙрджрд╛рд╣рд░рдг , рдЙрджрд╛рд╣рд░рдг ред рдЗрд╕ рддрд░рд╣ рдХреЗ рд╕реАрдорд┐рдд рдореВрд▓реНрдп рдХреЗ рд╕рд╛рде рдПрдкреАрдЖрдИ рд╢реБрд░реВ рдХрд░рдиреЗ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдорд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рд╣рдорд╛рд░реЗ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрддрд╛рд░ рдХреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рдореМрд▓рд┐рдХ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╕рдВрдЧреНрд░рд╣ рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рдореМрдЬреВрдж рддрддреНрд╡реЛрдВ рдХреЗ рд▓рд┐рдП рдкреНрд░рд╛рдердорд┐рдХрддрд╛рдУрдВ рдХреЛ рдЕрджреНрдпрддрди рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред

рдЕрджреНрдпрддрди рддрдВрддреНрд░ рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдЧреНрд░рд╛рд╣рдХ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╣реЛ рд╕рдХреЗрдВ рдХрд┐ рд╡реЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреНрдпрд╛ рдЕрдкрдбреЗрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рд╣рдордиреЗ рдЗрд╕реЗ рд╡рд┐рддрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рджреЛ рддрд░реАрдХреЛрдВ рдХреА рдкрд╣рдЪрд╛рди рдХреА рд╣реИ: рдХ) рд╣реИрдВрдбрд▓ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ; рдФрд░ рдмреА) рд╕рдВрдЧреНрд░рд╣ рдореЗрдВ рддрддреНрд╡реЛрдВ рдХреА рд╡рд┐рд╢рд┐рд╖реНрдЯрддрд╛ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗред рдЗрдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рд╡рд┐рднрд┐рдиреНрди рд▓рд╛рднреЛрдВ рдФрд░ рд▓рд╛рдЧрддреЛрдВ рдХреЗ рд╕рд╛рде рдЖрддрд╛ рд╣реИред

рд╡рд┐рдХрд▓реНрдк (рдП): рд╣реИрдВрдбрд▓ред рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдореЗрдВ, рд╣рд░ рдмрд╛рд░ рдХрддрд╛рд░ рдореЗрдВ рдПрдХ рддрддреНрд╡ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛ рдЕрдкрдирд╛ рдЕрдиреВрдард╛ рд╣реИрдВрдбрд▓ рдкреНрд░рджрд╛рди рдХрд░рддреА рд╣реИред рдпрджрд┐ рдЧреНрд░рд╛рд╣рдХ рдЕрджреНрдпрддрди рддрдВрддреНрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИ, рддреЛ рдЙрдиреНрд╣реЗрдВ рдРрд╕реЗ рд╣реИрдВрдбрд▓ рдХрд╛ рдЯреНрд░реИрдХ рд░рдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рддрд╛рдХрд┐ рд╡реЗ рдмрд╛рдж рдореЗрдВ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рд╕рдХреЗрдВ рдХрд┐ рд╡реЗ рдХрд┐рд╕ рддрддреНрд╡ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдЗрд╕ рд╕рдорд╛рдзрд╛рди рдХреА рдкреНрд░рд╛рдердорд┐рдХ рд▓рд╛рдЧрдд рдпрд╣ рд╣реИ рдХрд┐ рдЧреНрд░рд╛рд╣рдХреЛрдВ рдХреЛ рдЗрди рд╕рдВрдХреЗрддрдХреЛрдВ рдХреЛ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрддрд╛рд░ рдХреЗ рднреАрддрд░ рд╣реИрдВрдбрд▓ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рд╕реА рднреА рдЖрдВрддрд░рд┐рдХ рдЖрд╡рдВрдЯрди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ - рдХреЛрдИ рднреА рдЧреИрд░-рд╕рд░рдгреА-рдЖрдзрд╛рд░рд┐рдд рдвреЗрд░ рдиреЛрдбреНрд╕ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реЛрддрд╛ рд╣реИ, рдЬрд╣рд╛рдВ рдкреНрд░рддреНрдпреЗрдХ рдиреЛрдб рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдЕрдкрдирд╛ рд╕реНрд╡рдпрдВ рдХрд╛ рд╣реИрдВрдбрд▓ рд╣реЛрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рддреМрд░ рдкрд░, PairingHeap.Update рд╡рд┐рдзрд┐ рдХрд╛ API рджреЗрдЦреЗрдВред

рд╡рд┐рдХрд▓реНрдк (рдмреА): рд╡рд┐рд╢рд┐рд╖реНрдЯрддрд╛ред рдпрд╣ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдЧреНрд░рд╛рд╣рдХ рдкрд░ рджреЛ рдЕрддрд┐рд░рд┐рдХреНрдд рдмрд╛рдзрд╛рдПрдВ рдбрд╛рд▓рддрд╛ рд╣реИ: i) рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрддрд╛рд░ рдХреЗ рддрддреНрд╡реЛрдВ рдХреЛ рдХреБрдЫ рд╕рдорд╛рдирддрд╛ рд╢рдмреНрджрд╛рд░реНрде рдХреЗ рдЕрдиреБрд░реВрдк рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдЬреЛ рд╕рдВрднрд╛рд╡рд┐рдд рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдмрдЧ рдХрд╛ рдПрдХ рдирдпрд╛ рд╡рд░реНрдЧ рд▓рд╛рддрд╛ рд╣реИ; ii) рджреЛ рд╕рдорд╛рди рддрддреНрд╡реЛрдВ рдХреЛ рдПрдХ рд╣реА рдХрддрд╛рд░ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕ рд▓рд╛рдЧрдд рдХрд╛ рднреБрдЧрддрд╛рди рдХрд░рдХреЗ, рд╣рдо рд╣реИрдВрдбрд▓ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рд╕рд╣рд╛рд░рд╛ рд▓рд┐рдП рдмрд┐рдирд╛ рдЕрджреНрдпрддрди рддрдВрддреНрд░ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХрд╛ рд▓рд╛рдн рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЕрджреНрдпрддрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддрддреНрд╡ рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢рд┐рд╖реНрдЯрддрд╛/рд╕рдорд╛рдирддрд╛ рдХрд╛ рд▓рд╛рдн рдЙрдард╛рдиреЗ рд╡рд╛рд▓реЗ рдХрд┐рд╕реА рднреА рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд▓рд┐рдП рдЕрддрд┐рд░рд┐рдХреНрдд рдЖрдВрддрд░рд┐рдХ рдореИрдкрд┐рдВрдЧ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА, рддрд╛рдХрд┐ рдпрд╣ рдУ (1) рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗ рдФрд░ рдУ (рдПрди) рдореЗрдВ рдирд╣реАрдВред

рдЕрдиреБрд╢рдВрд╕рд╛

рд╣рдо рд╕рд┐рд╕реНрдЯрдо рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдореЗрдВ рдПрдХ PriorityQueue<TElement, TPriority> рд╡рд░реНрдЧ рдЬреЛрдбрд╝рдиреЗ рдХреА рдЕрдиреБрд╢рдВрд╕рд╛ рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рд╣реИрдВрдбрд▓ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЕрджреНрдпрддрди рддрдВрддреНрд░ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдПрдХ рдЬреЛрдбрд╝реА рдвреЗрд░ рд╣реЛрдЧрд╛ред

public class PriorityQueueNode<TElement, TPriority>
{
    public TElement Element { get; }
    public TPriority Priority { get; }
}

public class PriorityQueue<TElement, TPriority> :
    IEnumerable<PriorityQueueNode<TElement, TPriority>>,
    IReadOnlyCollection<PriorityQueueNode<TElement, TPriority>>
{
    public PriorityQueue();
    public PriorityQueue(IComparer<TPriority> comparer);

    public IComparer<TPriority> Comparer { get; }
    public int Count { get; }

    public bool IsEmpty { get; }
    public void Clear();

    public PriorityQueueNode<TElement, TPriority> Enqueue(TElement element, TPriority priority); //O(log n)

    public PriorityQueueNode<TElement, TPriority> Peek(); // O(1)
    public bool TryPeek(out PriorityQueueNode<TElement, TPriority> node); // O(1)
    public bool TryPeek(out TElement element, out TPriority priority); // O(1)
    public bool TryPeek(out TElement element); // O(1)

    public PriorityQueueNode<TElement, TPriority> Dequeue(); // O(log n)
    public void Dequeue(out TElement element, out TPriority priority); // O(log n)
    public bool TryDequeue(out PriorityQueueNode<TElement, TPriority> node); // O(log n)
    public bool TryDequeue(out TElement element, out TPriority priority); // O(log n)
    public bool TryDequeue(out TElement element); // O(log n)

    public void Update(PriorityQueueNode<TElement, TPriority> node, TPriority priority); // O(log n)
    public void Remove(PriorityQueueNode<TElement, TPriority> node); // O(log n)

    public void Merge(PriorityQueue<TElement, TPriority> other) // O(1)

    public IEnumerator<PriorityQueueNode<TElement, TPriority>> GetEnumerator();
    IEnumerator IEnumerable.GetEnumerator();

    public struct Enumerator : IEnumerator<PriorityQueueNode<TElement, TPriority>>
    {
        public PriorityQueueNode<TElement, TPriority> Current { get; }
        object IEnumerator.Current { get; }
        public bool MoveNext() => throw new NotImplementedException();
        public void Reset() => throw new NotImplementedException();
        public void Dispose() => throw new NotImplementedException();
    }
}

рдЙрджрд╛рд╣рд░рдг рдЙрдкрдпреЛрдЧ

1) рдЧреНрд░рд╛рд╣рдХ рдЬреЛ рдЕрджреНрдпрддрди рддрдВрддреНрд░ рдХреА рдкрд░рд╡рд╛рд╣ рдирд╣реАрдВ рдХрд░рддрд╛

var queue = new PriorityQueue<Job, double>();
queue.Enqueue(firstJob, 10);
queue.Enqueue(secondJob, 5);
queue.Enqueue(thirdJob, 40);

var withHighestPriority = queue.Peek(); // { element: secondJob, priority: 5 }

2) рдЧреНрд░рд╛рд╣рдХ рдЬреЛ рдЕрджреНрдпрддрди рддрдВрддреНрд░ рдХреА рдкрд░рд╡рд╛рд╣ рдХрд░рддрд╛ рд╣реИ

var queue = new PriorityQueue<Job, double>();
var mapping = new Dictionary<Job, PriorityQueueNode<Job, double>>();

mapping[job] = queue.Enqueue(job, priority);

queue.Update(mapping[job], newPriority);

рд╕рд╛рдорд╛рдиреНрдп рдкреНрд░рд╢реНрди

1. рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрддрд╛рд░ рдХрд┐рд╕ рдХреНрд░рдо рдореЗрдВ рддрддреНрд╡реЛрдВ рдХреА рдЧрдгрдирд╛ рдХрд░рддреА рд╣реИ?

рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рдХреНрд░рдо рдореЗрдВ, рддрд╛рдХрд┐ рдЧрдгрдирд╛ рдУ (рдПрди) рдореЗрдВ рд╣реЛ рд╕рдХреЗ, рдЗрд╕реА рддрд░рд╣ HashSet ред рдХреЛрдИ рднреА рдХреБрд╢рд▓ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддреЗ рд╣реБрдП рд░реИрдЦрд┐рдХ рд╕рдордп рдореЗрдВ рдПрдХ рдвреЗрд░ рдХреА рдЧрдгрдирд╛ рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдкреНрд░рджрд╛рди рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ рдХрд┐ рддрддреНрд╡реЛрдВ рдХреА рдЧрдгрдирд╛ рдХреНрд░рдо рдореЗрдВ рдХреА рдЧрдИ рд╣реИ - рдЗрд╕рдХреЗ рд▓рд┐рдП O (n рд▓реЙрдЧ n) рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред рдХреНрдпреЛрдВрдХрд┐ рд╕рдВрдЧреНрд░рд╣ рдкрд░ рдСрд░реНрдбрд░ рдХрд░рдирд╛ .OrderBy(x => x.Priority) рд╕рд╛рде рдорд╛рдореВрд▓реА рд░реВрдк рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рдЧреНрд░рд╛рд╣рдХ рдЗрд╕ рдЖрджреЗрд╢ рдХреЗ рд╕рд╛рде рдЧрдгрдирд╛ рдХреА рдкрд░рд╡рд╛рд╣ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рд╣рдо рдорд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рдЧрдгрдирд╛ рдЖрджреЗрд╢ рдкреНрд░рджрд╛рди рдХрд░рдирд╛ рдмреЗрд╣рддрд░ рд╣реИред

2. рдХреЛрдИ Contains рдпрд╛ TryGet рдкрджреНрдзрддрд┐ рдХреНрдпреЛрдВ рдирд╣реАрдВ рд╣реИ?

рдРрд╕реА рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рдкреНрд░рджрд╛рди рдХрд░рдирд╛ рдирдЧрдгреНрдп рдореВрд▓реНрдп рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдвреЗрд░ рдореЗрдВ рдПрдХ рддрддреНрд╡ рдЦреЛрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдкреВрд░реЗ рд╕рдВрдЧреНрд░рд╣ рдХреА рдЧрдгрдирд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдХреЛрдИ рднреА Contains рдпрд╛ TryGet рд╡рд┐рдзрд┐ рдЧрдгрдирд╛ рдХреЗ рдЪрд╛рд░реЛрдВ рдУрд░ рдПрдХ рдЖрд╡рд░рдг рд╣реЛрдЧреАред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрд╣ рдЬрд╛рдБрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдХреНрдпрд╛ рд╕рдВрдЧреНрд░рд╣ рдореЗрдВ рдХреЛрдИ рддрддреНрд╡ рдореМрдЬреВрдж рд╣реИ, рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрддрд╛рд░ рдХреЛ рдЗрд╕ рдмрд╛рдд рдХреА рдЬрд╛рдирдХрд╛рд░реА рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП рдХрд┐ TElement рд╡рд╕реНрддреБрдУрдВ рдХреА рд╕рдорд╛рдирддрд╛ рдЬрд╛рдБрдЪ рдХреИрд╕реЗ рдХреА рдЬрд╛рддреА рд╣реИ, рдЬреЛ рдХрд┐ рдРрд╕рд╛ рдХреБрдЫ рдирд╣реАрдВ рд╣реИ рдЬрд┐рд╕реЗ рд╣рдо рдорд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрддрд╛рд░ рдХреА рдЬрд┐рдореНрдореЗрджрд╛рд░реА рдореЗрдВ рдЖрдирд╛ рдЪрд╛рд╣рд┐рдПред

3. Dequeue рдФрд░ TryDequeue рдУрд╡рд░рд▓реЛрдб рдХреНрдпреЛрдВ рд╣реИрдВ рдЬреЛ PriorityQueueNode рд▓реМрдЯрд╛рддреЗ рд╣реИрдВ?

рдпрд╣ рдЙрди рдЧреНрд░рд╛рд╣рдХреЛрдВ рдХреЗ рд▓рд┐рдП рд╣реИ рдЬреЛ Update рдпрд╛ Remove рдкрджреНрдзрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдФрд░ рд╣реИрдВрдбрд▓ рдХрд╛ рдЯреНрд░реИрдХ рд░рдЦрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрддрд╛рд░ рд╕реЗ рдПрдХ рддрддреНрд╡ рдХреЛ рд╣рдЯрд╛рдиреЗ рдХреЗ рджреМрд░рд╛рди, рдЙрдиреНрд╣реЗрдВ рдПрдХ рд╣реИрдВрдбрд▓ рдкреНрд░рд╛рдкреНрдд рд╣реЛрдЧрд╛ рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рд╡реЗ рдЕрдкрдиреЗ рд╣реИрдВрдбрд▓ рдЯреНрд░реИрдХрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдХреА рд╕реНрдерд┐рддрд┐ рдХреЛ рд╕рдорд╛рдпреЛрдЬрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

4. рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИ рдЬрдм Update рдпрд╛ Remove рд╡рд┐рдзрд┐ рдПрдХ рдЕрд▓рдЧ рдХрддрд╛рд░ рд╕реЗ рдПрдХ рдиреЛрдб рдкреНрд░рд╛рдкреНрдд рдХрд░рддреА рд╣реИ?

рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрддрд╛рд░ рдПрдХ рдЕрдкрд╡рд╛рдж рдлреЗрдВрдХ рджреЗрдЧреАред рдкреНрд░рддреНрдпреЗрдХ рдиреЛрдб рдЙрд╕ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрддрд╛рд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирддрд╛ рд╣реИ рдЬрд┐рд╕рд╕реЗ рд╡рд╣ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИ, рдЙрд╕реА рддрд░рд╣ рдЬреИрд╕реЗ LinkedListNode<T> рдХреЛ LinkedList<T> рдмрд╛рд░реЗ рдореЗрдВ рдкрддрд╛ рд╣реЛрддрд╛ рд╣реИред

рдкрд░рд┐рд╢рд┐рд╖реНрдЯ

рдкрд░рд┐рд╢рд┐рд╖реНрдЯ рдП: рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрддрд╛рд░ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рд╡рд╛рд▓реА рдЕрдиреНрдп рднрд╛рд╖рд╛рдПрдВ

| рднрд╛рд╖рд╛ | рдкреНрд░рдХрд╛рд░ | рдиреЛрдЯреНрд╕ |
|:-:|:-:|:-:|
| рдЬрд╛рд╡рд╛ | рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрддрд╛рд░ | рдЕрдореВрд░реНрдд рд╡рд░реНрдЧ AbstractQueue рдФрд░ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ Queue рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИред |
| рдЬрдВрдЧ | рдмрд╛рдЗрдирд░реАрд╣реАрдк | |
| рд╕реНрд╡рд┐рдлреНрдЯ | рд╕реАрдПрдлрдмреАрдирд░реАрд╣реАрдк | |
| рд╕реА++ | рдкреНрд░рд╛рдердорд┐рдХрддрд╛_рдХреНрдпреВ | |
| рдЕрдЬрдЧрд░ | рдвреЗрд░ | |
| рдЬрд╛рдУ | рдвреЗрд░ | рдПрдХ рдвреЗрд░ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╣реИред |

рдкрд░рд┐рд╢рд┐рд╖реНрдЯ рдмреА: рдЦреЛрдЬ рдпреЛрдЧреНрдпрддрд╛

рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛рдУрдВ рдкрд░ рдЪрд░реНрдЪрд╛ рдХрд░рддреЗ рд╕рдордп, _heap_ рд╢рдмреНрдж рдХрд╛ рдЙрдкрдпреЛрдЧ _priority queue_ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ 4 рдЧреБрдирд╛ рдЕрдзрд┐рдХ рдмрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

  • "array" AND "data structure" тАФ 17.400,000 рдкрд░рд┐рдгрд╛рдо
  • "stack" AND "data structure" тАФ 12.100.000 рдкрд░рд┐рдгрд╛рдо
  • "queue" AND "data structure" тАФ 3.850.000 рдкрд░рд┐рдгрд╛рдо
  • "heap" AND "data structure" тАФ 1.830.000 рдкрд░рд┐рдгрд╛рдо
  • "priority queue" AND "data structure" тАФ 430.000 рдкрд░рд┐рдгрд╛рдо
  • "trie" AND "data structure" тАФ 335.000 рдкрд░рд┐рдгрд╛рдо

рдЖрдкрдХреЗ рд╕рднреА рдлрд╝реАрдбрдмреИрдХ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж! рдореИрдВрдиреЗ рдкреНрд░рд╕реНрддрд╛рд╡ рдХреЛ v2.1 рдореЗрдВ рдЕрдкрдбреЗрдЯ рдХрд░ рджрд┐рдпрд╛ рд╣реИред рдЪреЗрдВрдЬрд▓реЙрдЧ:

  • Contains рдФрд░ TryGet рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рд╣рдЯрд╛ рджрд┐рдпрд╛ред
  • рдПрдХ рдПрдлрдПрдХреНрдпреВ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ #2: _рдХреЛрдИ Contains рдпрд╛ TryGet рд╡рд┐рдзрд┐ рдХреНрдпреЛрдВ рдирд╣реАрдВ рд╣реИ?_
  • рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ IReadOnlyCollection<PriorityQueueNode<TElement, TPriority>> ред
  • bool TryPeek(out TElement element, out TPriority priority) рдХрд╛ рдПрдХ рдЕрдзрд┐рднрд╛рд░ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ред
  • bool TryPeek(out TElement element) рдХрд╛ рдПрдХ рдЕрдзрд┐рднрд╛рд░ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ред
  • void Dequeue(out TElement element, out TPriority priority) рдХрд╛ рдПрдХ рдЕрдзрд┐рднрд╛рд░ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ред
  • void Dequeue(out TElement element) рд╕реЗ PriorityQueueNode<TElement, TPriority> Dequeue() рдмрджрд▓рд╛ рдЧрдпрд╛ред
  • bool TryDequeue(out TElement element) рдХрд╛ рдПрдХ рдЕрдзрд┐рднрд╛рд░ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ред
  • bool TryDequeue(out PriorityQueueNode<TElement, TPriority> node) рдХрд╛ рдПрдХ рдЕрдзрд┐рднрд╛рд░ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ред
  • рдПрдХ рдПрдлрдПрдХреНрдпреВ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ #3: _ Dequeue рдФрд░ TryDequeue рдУрд╡рд░рд▓реЛрдб рдХреНрдпреЛрдВ рд╣реИрдВ рдЬреЛ PriorityQueueNode рд▓реМрдЯрд╛рддреЗ рд╣реИрдВ?_
  • рдПрдХ рдПрдлрдПрдХреНрдпреВ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ #4: _рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИ рдЬрдм Update рдпрд╛ Remove рд╡рд┐рдзрд┐ рдПрдХ рдЕрд▓рдЧ рдХрддрд╛рд░ рд╕реЗ рдПрдХ рдиреЛрдб рдкреНрд░рд╛рдкреНрдд рдХрд░рддреА рд╣реИ?_

рдиреЛрдЯ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж;)

рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рдХреЗ рд▓рд┐рдП рдЫреЛрдЯреЗ рдЕрдиреБрд░реЛрдз:

  • рдХреНрдпрд╛ рд╣рдо рдЕрдХреНрд╕рд░ рдкреВрдЫреЗ рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдкреНрд░рд╢реНрди 4 рдХреЛ рдЕрд░реНрд╣рддрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреИрд╕реЗ рдХрд┐ рдпрд╣ рдЙрди рддрддреНрд╡реЛрдВ рдХреЗ рд▓рд┐рдП рд╣реИ рдЬреЛ рдХрддрд╛рд░ рдореЗрдВ рдирд╣реАрдВ рд╣реИрдВ? (рдЕрд░реНрдерд╛рдд рд╣рдЯрд╛рдП рдЧрдП)
  • рдХреНрдпрд╛ рд╣рдо рд╕реНрдерд┐рд░рддрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдХреНрд╕рд░ рдкреВрдЫреЗ рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдкреНрд░рд╢реНрди рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╛рдиреА рдЧрд╛рд░рдВрдЯреА (рдпрджрд┐ рдХреЛрдИ рд╣реЛ) рдЬрдм рд╕рдорд╛рди рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рд╡рд╛рд▓реЗ рддрддреНрд╡реЛрдВ рдХреЛ рд╣рдЯрд╛рддреЗ рд╣реИрдВ (рдореЗрд░реА рд╕рдордЭ рдпрд╣ рд╣реИ рдХрд┐ рдХреЛрдИ рдЧрд╛рд░рдВрдЯреА рджреЗрдиреЗ рдХреА рдХреЛрдИ рдпреЛрдЬрдирд╛ рдирд╣реАрдВ рд╣реИ, рдЬрд┐рд╕реЗ рдЬрд╛рдирдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рд╢реЗрдбреНрдпреВрд▓рд┐рдВрдЧ)ред

@pgolebiowski рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд Merge рд╡рд┐рдзрд┐ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ:

public void Merge(PriorityQueue<TElement, TPriority> other); // O(1)

рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рдСрдкрд░реЗрд╢рди рдореЗрдВ рдХреЙрдкреА рд╕реЗрдореЗрдиреНрдЯрд┐рдХреНрд╕ рдирд╣реАрдВ рд╣реЛрдЧрд╛, рдЗрд╕рд▓рд┐рдП рдореИрдВ рд╕реЛрдЪ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рдХреНрдпрд╛ this рдФрд░ other _after_ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдЧреЙрдЪрд╛рд╕ рд╣реЛрдЧрд╛ рдПрдХ рд╡рд┐рд▓рдп рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдпрд╛ рддреЛ рдЙрджрд╛рд╣рд░рдг рд╡рд┐рдлрд▓ рдвреЗрд░ рд╕рдВрдкрддреНрддрд┐ рдХреЛ рд╕рдВрддреБрд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП)ред

@eiriktsarpalis @VisualMelon - рдзрдиреНрдпрд╡рд╛рдж! рдЙрдард╛рдП рдЧрдП рдмрд┐рдВрджреБрдУрдВ рдХреЛ рд╕рдВрдмреЛрдзрд┐рдд рдХрд░реЗрдВрдЧреЗ, рдИрдЯреАрдП 2020-10-04ред

рдпрджрд┐ рджреВрд╕рд░реЛрдВ рдХреЗ рдкрд╛рд╕ рдХреЛрдИ рдФрд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛/рдкреНрд░рд╢реНрди/рдЪрд┐рдВрддрд╛/рд╡рд┐рдЪрд╛рд░ рд╣реИрдВ - рдХреГрдкрдпрд╛ рд╕рд╛рдЭрд╛ рдХрд░реЗрдВ

рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрддрд╛рд░ рдкреНрд░рд╕реНрддрд╛рд╡ (v2.2)

рд╕рд╛рд░рд╛рдВрд╢

.NET рдХреЛрд░ рд╕рдореБрджрд╛рдп рд╕рд┐рд╕реНрдЯрдо рд▓рд╛рдЗрдмреНрд░реЗрд░реА _priority queue_ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдореЗрдВ рдЬреЛрдбрд╝рдиреЗ рдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рдХрд░рддрд╛ рд╣реИ, рдПрдХ рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛ рдЬрд┐рд╕рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рддрддреНрд╡ рдХреА рдЗрд╕рдХреЗ рд╕рд╛рде рдПрдХ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рднреА рдЬреБрдбрд╝реА рд╣реЛрддреА рд╣реИред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рд╣рдо PriorityQueue<TElement, TPriority> рдХреЛ System.Collections.Generic рдиреЗрдорд╕реНрдкреЗрд╕ рдореЗрдВ рдЬреЛрдбрд╝рдиреЗ рдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рдХрд░рддреЗ рд╣реИрдВред

рд╕рд┐рджреНрдзрд╛рдВрддреЛрдВ

рд╣рдорд╛рд░реЗ рдбрд┐рдЬрд╛рдЗрди рдореЗрдВ, рд╣рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рд┐рджреНрдзрд╛рдВрддреЛрдВ рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрджреЗрд╢рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ (рдЬрдм рддрдХ рдХрд┐ рдЖрдк рдмреЗрд╣рддрд░ рдирд╣реАрдВ рдЬрд╛рдирддреЗ):

  • рд╡рд┐рд╕реНрддреГрдд рдХрд╡рд░реЗрдЬред рд╣рдо .NET рдХреЛрд░ рдЧреНрд░рд╛рд╣рдХреЛрдВ рдХреЛ рдПрдХ рдореВрд▓реНрдпрд╡рд╛рди рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛ рдХреА рдкреЗрд╢рдХрд╢ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдЬреЛ рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рдХрд╛рд░ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рдмрд╣реБрдореБрдЦреА рд╣реИред
  • рдЬреНрдЮрд╛рдд рдЧрд▓рддрд┐рдпреЛрдВ рд╕реЗ рд╕реАрдЦреЗрдВред рд╣рдо рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрддрд╛рд░ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рдЕрдиреНрдп рдврд╛рдВрдЪреЗ рдФрд░ рднрд╛рд╖рд╛рдУрдВ, рдЬреИрд╕реЗ рдЬрд╛рд╡рд╛, рдкрд╛рдпрдерди, рд╕реА ++, рдЬрдВрдЧ рдореЗрдВ рдореМрдЬреВрдж рдЧреНрд░рд╛рд╣рдХ-рд╕рд╛рдордирд╛ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдореБрджреНрджреЛрдВ рд╕реЗ рдореБрдХреНрдд рд╣реЛрдЧреАред рд╣рдо рдРрд╕реЗ рдбрд┐рдЬрд╝рд╛рдЗрди рд╡рд┐рдХрд▓реНрдк рдмрдирд╛рдиреЗ рд╕реЗ рдмрдЪреЗрдВрдЧреЗ рдЬреЛ рдЧреНрд░рд╛рд╣рдХреЛрдВ рдХреЛ рдирд╛рдЦреБрд╢ рдХрд░рдиреЗ рдФрд░ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рд╡рд╛рд▓реА рдХрддрд╛рд░реЛрдВ рдХреА рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдХреЛ рдХрдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд╛рдиреЗ рдЬрд╛рддреЗ рд╣реИрдВред
  • рдПрдХрддрд░рдлрд╛ рдирд┐рд░реНрдгрдп рдХреЗ рд╕рд╛рде рдЕрддреНрдпрдзрд┐рдХ рд╕рд╛рд╡рдзрд╛рдиреАред рдПрдХ рдмрд╛рд░ рдПрдкреАрдЖрдИ рдкреЗрд╢ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдЗрд╕реЗ рд╕рдВрд╢реЛрдзрд┐рдд рдпрд╛ рд╣рдЯрд╛рдпрд╛ рдирд╣реАрдВ рдЬрд╛ рд╕рдХрддрд╛, рдХреЗрд╡рд▓ рдмрдврд╝рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд╣рдо рдЙрдк-рдЗрд╖реНрдЯрддрдо рд╕рдорд╛рдзрд╛рдиреЛрдВ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХрд╛ рд╕рд╛рд╡рдзрд╛рдиреАрдкреВрд░реНрд╡рдХ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░реЗрдВрдЧреЗ, рдЬрд┐рд╕рд╕реЗ рд╣рдорд╛рд░реЗ рдЧреНрд░рд╛рд╣рдХ рд╣рдореЗрд╢рд╛ рдХреЗ рд▓рд┐рдП рдлрдВрд╕ рдЬрд╛рдПрдВрдЧреЗред
  • рдбрд┐рдЬрд╛рдЗрди рдкрдХреНрд╖рд╛рдШрд╛рдд рд╕реЗ рдмрдЪреЗрдВред рд╣рдо рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдХреЛрдИ рднреА рд╕рд╣реА рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рд╣рдо рдЯреНрд░реЗрдб-рдСрдл рдХреЛ рд╕рдВрддреБрд▓рд┐рдд рдХрд░реЗрдВрдЧреЗ рдФрд░ рдбрд┐рд▓реАрд╡рд░реА рдХреЗ рд╕рд╛рде рдЖрдЧреЗ рдмрдврд╝реЗрдВрдЧреЗ, рдЕрдВрдд рдореЗрдВ рдЕрдкрдиреЗ рдЧреНрд░рд╛рд╣рдХреЛрдВ рдХреЛ рд╡рд╣ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рд╕рдХрд╛ рд╡реЗ рд╡рд░реНрд╖реЛрдВ рд╕реЗ рдЗрдВрддрдЬрд╛рд░ рдХрд░ рд░рд╣реЗ рдереЗред

рдкреГрд╖реНрдарднреВрдорд┐

рдПрдХ рдЧреНрд░рд╛рд╣рдХ рдХреЗ рдирдЬрд░рд┐рдП рд╕реЗ

рд╕рдВрдХрд▓реНрдкрдирд╛рддреНрдордХ рд░реВрдк рд╕реЗ, рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрддрд╛рд░ рддрддреНрд╡реЛрдВ рдХрд╛ рдПрдХ рд╕рдВрдЧреНрд░рд╣ рд╣реИ, рдЬрд╣рд╛рдВ рдкреНрд░рддреНрдпреЗрдХ рддрддреНрд╡ рдХреА рдПрдХ рд╕рдВрдмрджреНрдз рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рд╣реЛрддреА рд╣реИред рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрддрд╛рд░ рдХреА рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рд╕рдВрдЧреНрд░рд╣ рдореЗрдВ рд╕рд░реНрд╡реЛрдЪреНрдЪ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рд╡рд╛рд▓реЗ рддрддреНрд╡ рддрдХ рдХреБрд╢рд▓ рдкрд╣реБрдВрдЪ рдкреНрд░рджрд╛рди рдХрд░рддреА рд╣реИ, рдФрд░ рдЙрд╕ рддрддреНрд╡ рдХреЛ рд╣рдЯрд╛рдиреЗ рдХрд╛ рд╡рд┐рдХрд▓реНрдк рдкреНрд░рджрд╛рди рдХрд░рддреА рд╣реИред рдЕрдкреЗрдХреНрд╖рд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ рдпрд╣ рднреА рд╢рд╛рдорд┐рд▓ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ: 1) рдХрд┐рд╕реА рддрддреНрд╡ рдХреА рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдЬреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕рдВрдЧреНрд░рд╣ рдореЗрдВ рд╣реИ; 2) рдПрдХрд╛рдзрд┐рдХ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрддрд╛рд░реЛрдВ рдХреЛ рдорд░реНрдЬ рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ред

рдХрдВрдкреНрдпреВрдЯрд░ рд╡рд┐рдЬреНрдЮрд╛рди рдкреГрд╖реНрдарднреВрдорд┐

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

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

рдЕрджреНрдпрддрди рддрдВрддреНрд░ рдкреНрд░рдореБрдЦ рдбрд┐рдЬрд╛рдЗрди рдЪреБрдиреМрддреА рд╣реИ

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

рдЗрд╕ рддрд░рд╣ рдХреА рдХреНрд╖рдорддрд╛ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдЬреИрд╕реЗ рджрд┐рдЬреНрдХреНрд╕реНрдЯреНрд░рд╛ рдХрд╛ рд╕рдмрд╕реЗ рдЫреЛрдЯрд╛ рдкрде рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдпрд╛ рдПрдХ рдиреМрдХрд░реА рдЕрдиреБрд╕реВрдЪрдХ рдЬрд┐рд╕реЗ рдмрджрд▓рддреА рдкреНрд░рд╛рдердорд┐рдХрддрд╛рдУрдВ рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдЬрд╛рд╡рд╛ рдореЗрдВ рдЕрджреНрдпрддрди рддрдВрддреНрд░ рдЧрд╛рдпрдм рд╣реИ, рдЬреЛ рдЗрдВрдЬреАрдирд┐рдпрд░реЛрдВ рдХреЗ рд▓рд┐рдП рдирд┐рд░рд╛рд╢рд╛рдЬрдирдХ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдЗрди рддреАрди рд╕реНрдЯреИрдХ рдУрд╡рд░рдлреНрд▓реЛ рдкреНрд░рд╢реНрдиреЛрдВ рдореЗрдВ 32k рд╕реЗ рдЕрдзрд┐рдХ рдмрд╛рд░ рджреЗрдЦрд╛ рдЧрдпрд╛: рдЙрджрд╛рд╣рд░рдг , рдЙрджрд╛рд╣рд░рдг , рдЙрджрд╛рд╣рд░рдг ред рдЗрд╕ рддрд░рд╣ рдХреЗ рд╕реАрдорд┐рдд рдореВрд▓реНрдп рдХреЗ рд╕рд╛рде рдПрдкреАрдЖрдИ рд╢реБрд░реВ рдХрд░рдиреЗ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдорд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рд╣рдорд╛рд░реЗ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрддрд╛рд░ рдХреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рдореМрд▓рд┐рдХ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╕рдВрдЧреНрд░рд╣ рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рдореМрдЬреВрдж рддрддреНрд╡реЛрдВ рдХреЗ рд▓рд┐рдП рдкреНрд░рд╛рдердорд┐рдХрддрд╛рдУрдВ рдХреЛ рдЕрджреНрдпрддрди рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред

рдЕрджреНрдпрддрди рддрдВрддреНрд░ рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдЧреНрд░рд╛рд╣рдХ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╣реЛ рд╕рдХреЗрдВ рдХрд┐ рд╡реЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреНрдпрд╛ рдЕрдкрдбреЗрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рд╣рдордиреЗ рдЗрд╕реЗ рд╡рд┐рддрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рджреЛ рддрд░реАрдХреЛрдВ рдХреА рдкрд╣рдЪрд╛рди рдХреА рд╣реИ: рдХ) рд╣реИрдВрдбрд▓ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ; рдФрд░ рдмреА) рд╕рдВрдЧреНрд░рд╣ рдореЗрдВ рддрддреНрд╡реЛрдВ рдХреА рд╡рд┐рд╢рд┐рд╖реНрдЯрддрд╛ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗред рдЗрдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рд╡рд┐рднрд┐рдиреНрди рд▓рд╛рднреЛрдВ рдФрд░ рд▓рд╛рдЧрддреЛрдВ рдХреЗ рд╕рд╛рде рдЖрддрд╛ рд╣реИред

рд╡рд┐рдХрд▓реНрдк (рдП): рд╣реИрдВрдбрд▓ред рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдореЗрдВ, рд╣рд░ рдмрд╛рд░ рдХрддрд╛рд░ рдореЗрдВ рдПрдХ рддрддреНрд╡ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛ рдЕрдкрдирд╛ рдЕрдиреВрдард╛ рд╣реИрдВрдбрд▓ рдкреНрд░рджрд╛рди рдХрд░рддреА рд╣реИред рдпрджрд┐ рдЧреНрд░рд╛рд╣рдХ рдЕрджреНрдпрддрди рддрдВрддреНрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИ, рддреЛ рдЙрдиреНрд╣реЗрдВ рдРрд╕реЗ рд╣реИрдВрдбрд▓ рдХрд╛ рдЯреНрд░реИрдХ рд░рдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рддрд╛рдХрд┐ рд╡реЗ рдмрд╛рдж рдореЗрдВ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рд╕рдХреЗрдВ рдХрд┐ рд╡реЗ рдХрд┐рд╕ рддрддреНрд╡ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдЗрд╕ рд╕рдорд╛рдзрд╛рди рдХреА рдкреНрд░рд╛рдердорд┐рдХ рд▓рд╛рдЧрдд рдпрд╣ рд╣реИ рдХрд┐ рдЧреНрд░рд╛рд╣рдХреЛрдВ рдХреЛ рдЗрди рд╕рдВрдХреЗрддрдХреЛрдВ рдХреЛ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрддрд╛рд░ рдХреЗ рднреАрддрд░ рд╣реИрдВрдбрд▓ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рд╕реА рднреА рдЖрдВрддрд░рд┐рдХ рдЖрд╡рдВрдЯрди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ - рдХреЛрдИ рднреА рдЧреИрд░-рд╕рд░рдгреА-рдЖрдзрд╛рд░рд┐рдд рдвреЗрд░ рдиреЛрдбреНрд╕ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реЛрддрд╛ рд╣реИ, рдЬрд╣рд╛рдВ рдкреНрд░рддреНрдпреЗрдХ рдиреЛрдб рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдЕрдкрдирд╛ рд╕реНрд╡рдпрдВ рдХрд╛ рд╣реИрдВрдбрд▓ рд╣реЛрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рддреМрд░ рдкрд░, PairingHeap.Update рд╡рд┐рдзрд┐ рдХрд╛ API рджреЗрдЦреЗрдВред

рд╡рд┐рдХрд▓реНрдк (рдмреА): рд╡рд┐рд╢рд┐рд╖реНрдЯрддрд╛ред рдпрд╣ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдЧреНрд░рд╛рд╣рдХ рдкрд░ рджреЛ рдЕрддрд┐рд░рд┐рдХреНрдд рдмрд╛рдзрд╛рдПрдВ рдбрд╛рд▓рддрд╛ рд╣реИ: i) рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрддрд╛рд░ рдХреЗ рддрддреНрд╡реЛрдВ рдХреЛ рдХреБрдЫ рд╕рдорд╛рдирддрд╛ рд╢рдмреНрджрд╛рд░реНрде рдХреЗ рдЕрдиреБрд░реВрдк рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдЬреЛ рд╕рдВрднрд╛рд╡рд┐рдд рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдмрдЧ рдХрд╛ рдПрдХ рдирдпрд╛ рд╡рд░реНрдЧ рд▓рд╛рддрд╛ рд╣реИ; ii) рджреЛ рд╕рдорд╛рди рддрддреНрд╡реЛрдВ рдХреЛ рдПрдХ рд╣реА рдХрддрд╛рд░ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕ рд▓рд╛рдЧрдд рдХрд╛ рднреБрдЧрддрд╛рди рдХрд░рдХреЗ, рд╣рдо рд╣реИрдВрдбрд▓ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рд╕рд╣рд╛рд░рд╛ рд▓рд┐рдП рдмрд┐рдирд╛ рдЕрджреНрдпрддрди рддрдВрддреНрд░ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХрд╛ рд▓рд╛рдн рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЕрджреНрдпрддрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддрддреНрд╡ рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢рд┐рд╖реНрдЯрддрд╛/рд╕рдорд╛рдирддрд╛ рдХрд╛ рд▓рд╛рдн рдЙрдард╛рдиреЗ рд╡рд╛рд▓реЗ рдХрд┐рд╕реА рднреА рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд▓рд┐рдП рдЕрддрд┐рд░рд┐рдХреНрдд рдЖрдВрддрд░рд┐рдХ рдореИрдкрд┐рдВрдЧ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА, рддрд╛рдХрд┐ рдпрд╣ рдУ (1) рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗ рдФрд░ рдУ (рдПрди) рдореЗрдВ рдирд╣реАрдВред

рдЕрдиреБрд╢рдВрд╕рд╛

рд╣рдо рд╕рд┐рд╕реНрдЯрдо рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдореЗрдВ рдПрдХ PriorityQueue<TElement, TPriority> рд╡рд░реНрдЧ рдЬреЛрдбрд╝рдиреЗ рдХреА рдЕрдиреБрд╢рдВрд╕рд╛ рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рд╣реИрдВрдбрд▓ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЕрджреНрдпрддрди рддрдВрддреНрд░ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдПрдХ рдЬреЛрдбрд╝реА рдвреЗрд░ рд╣реЛрдЧрд╛ред

public class PriorityQueueNode<TElement, TPriority>
{
    public TElement Element { get; }
    public TPriority Priority { get; }
}

public class PriorityQueue<TElement, TPriority> :
    IEnumerable<PriorityQueueNode<TElement, TPriority>>,
    IReadOnlyCollection<PriorityQueueNode<TElement, TPriority>>
{
    public PriorityQueue();
    public PriorityQueue(IComparer<TPriority> comparer);

    public IComparer<TPriority> Comparer { get; }
    public int Count { get; }

    public bool IsEmpty { get; }
    public void Clear();

    public PriorityQueueNode<TElement, TPriority> Enqueue(TElement element, TPriority priority); //O(log n)

    public PriorityQueueNode<TElement, TPriority> Peek(); // O(1)
    public bool TryPeek(out PriorityQueueNode<TElement, TPriority> node); // O(1)
    public bool TryPeek(out TElement element, out TPriority priority); // O(1)
    public bool TryPeek(out TElement element); // O(1)

    public PriorityQueueNode<TElement, TPriority> Dequeue(); // O(log n)
    public void Dequeue(out TElement element, out TPriority priority); // O(log n)
    public bool TryDequeue(out PriorityQueueNode<TElement, TPriority> node); // O(log n)
    public bool TryDequeue(out TElement element, out TPriority priority); // O(log n)
    public bool TryDequeue(out TElement element); // O(log n)

    public void Update(PriorityQueueNode<TElement, TPriority> node, TPriority priority); // O(log n)
    public void Remove(PriorityQueueNode<TElement, TPriority> node); // O(log n)

    public IEnumerator<PriorityQueueNode<TElement, TPriority>> GetEnumerator();
    IEnumerator IEnumerable.GetEnumerator();

    public struct Enumerator : IEnumerator<PriorityQueueNode<TElement, TPriority>>
    {
        public PriorityQueueNode<TElement, TPriority> Current { get; }
        object IEnumerator.Current { get; }
        public bool MoveNext() => throw new NotImplementedException();
        public void Reset() => throw new NotImplementedException();
        public void Dispose() => throw new NotImplementedException();
    }
}

рдЙрджрд╛рд╣рд░рдг рдЙрдкрдпреЛрдЧ

1) рдЧреНрд░рд╛рд╣рдХ рдЬреЛ рдЕрджреНрдпрддрди рддрдВрддреНрд░ рдХреА рдкрд░рд╡рд╛рд╣ рдирд╣реАрдВ рдХрд░рддрд╛

var queue = new PriorityQueue<Job, double>();
queue.Enqueue(firstJob, 10);
queue.Enqueue(secondJob, 5);
queue.Enqueue(thirdJob, 40);

var withHighestPriority = queue.Peek(); // { element: secondJob, priority: 5 }

2) рдЧреНрд░рд╛рд╣рдХ рдЬреЛ рдЕрджреНрдпрддрди рддрдВрддреНрд░ рдХреА рдкрд░рд╡рд╛рд╣ рдХрд░рддрд╛ рд╣реИ

var queue = new PriorityQueue<Job, double>();
var mapping = new Dictionary<Job, PriorityQueueNode<Job, double>>();

mapping[job] = queue.Enqueue(job, priority);

queue.Update(mapping[job], newPriority);

рд╕рд╛рдорд╛рдиреНрдп рдкреНрд░рд╢реНрди

1. рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрддрд╛рд░ рдХрд┐рд╕ рдХреНрд░рдо рдореЗрдВ рддрддреНрд╡реЛрдВ рдХреА рдЧрдгрдирд╛ рдХрд░рддреА рд╣реИ?

рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рдХреНрд░рдо рдореЗрдВ, рддрд╛рдХрд┐ рдЧрдгрдирд╛ рдУ (рдПрди) рдореЗрдВ рд╣реЛ рд╕рдХреЗ, рдЗрд╕реА рддрд░рд╣ HashSet ред рдХреЛрдИ рднреА рдХреБрд╢рд▓ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддреЗ рд╣реБрдП рд░реИрдЦрд┐рдХ рд╕рдордп рдореЗрдВ рдПрдХ рдвреЗрд░ рдХреА рдЧрдгрдирд╛ рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдкреНрд░рджрд╛рди рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ рдХрд┐ рддрддреНрд╡реЛрдВ рдХреА рдЧрдгрдирд╛ рдХреНрд░рдо рдореЗрдВ рдХреА рдЧрдИ рд╣реИ - рдЗрд╕рдХреЗ рд▓рд┐рдП O (n рд▓реЙрдЧ n) рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред рдХреНрдпреЛрдВрдХрд┐ рд╕рдВрдЧреНрд░рд╣ рдкрд░ рдСрд░реНрдбрд░ рдХрд░рдирд╛ .OrderBy(x => x.Priority) рд╕рд╛рде рдорд╛рдореВрд▓реА рд░реВрдк рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рдЧреНрд░рд╛рд╣рдХ рдЗрд╕ рдЖрджреЗрд╢ рдХреЗ рд╕рд╛рде рдЧрдгрдирд╛ рдХреА рдкрд░рд╡рд╛рд╣ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рд╣рдо рдорд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рдЧрдгрдирд╛ рдЖрджреЗрд╢ рдкреНрд░рджрд╛рди рдХрд░рдирд╛ рдмреЗрд╣рддрд░ рд╣реИред

2. рдХреЛрдИ Contains рдпрд╛ TryGet рдкрджреНрдзрддрд┐ рдХреНрдпреЛрдВ рдирд╣реАрдВ рд╣реИ?

рдРрд╕реА рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рдкреНрд░рджрд╛рди рдХрд░рдирд╛ рдирдЧрдгреНрдп рдореВрд▓реНрдп рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдвреЗрд░ рдореЗрдВ рдПрдХ рддрддреНрд╡ рдЦреЛрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдкреВрд░реЗ рд╕рдВрдЧреНрд░рд╣ рдХреА рдЧрдгрдирд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдХреЛрдИ рднреА Contains рдпрд╛ TryGet рд╡рд┐рдзрд┐ рдЧрдгрдирд╛ рдХреЗ рдЪрд╛рд░реЛрдВ рдУрд░ рдПрдХ рдЖрд╡рд░рдг рд╣реЛрдЧреАред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрд╣ рдЬрд╛рдБрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдХреНрдпрд╛ рд╕рдВрдЧреНрд░рд╣ рдореЗрдВ рдХреЛрдИ рддрддреНрд╡ рдореМрдЬреВрдж рд╣реИ, рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрддрд╛рд░ рдХреЛ рдЗрд╕ рдмрд╛рдд рдХреА рдЬрд╛рдирдХрд╛рд░реА рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП рдХрд┐ TElement рд╡рд╕реНрддреБрдУрдВ рдХреА рд╕рдорд╛рдирддрд╛ рдЬрд╛рдБрдЪ рдХреИрд╕реЗ рдХреА рдЬрд╛рддреА рд╣реИ, рдЬреЛ рдХрд┐ рдРрд╕рд╛ рдХреБрдЫ рдирд╣реАрдВ рд╣реИ рдЬрд┐рд╕реЗ рд╣рдо рдорд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрддрд╛рд░ рдХреА рдЬрд┐рдореНрдореЗрджрд╛рд░реА рдореЗрдВ рдЖрдирд╛ рдЪрд╛рд╣рд┐рдПред

3. Dequeue рдФрд░ TryDequeue рдУрд╡рд░рд▓реЛрдб рдХреНрдпреЛрдВ рд╣реИрдВ рдЬреЛ PriorityQueueNode рд▓реМрдЯрд╛рддреЗ рд╣реИрдВ?

рдпрд╣ рдЙрди рдЧреНрд░рд╛рд╣рдХреЛрдВ рдХреЗ рд▓рд┐рдП рд╣реИ рдЬреЛ Update рдпрд╛ Remove рдкрджреНрдзрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдФрд░ рд╣реИрдВрдбрд▓ рдХрд╛ рдЯреНрд░реИрдХ рд░рдЦрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрддрд╛рд░ рд╕реЗ рдПрдХ рддрддреНрд╡ рдХреЛ рд╣рдЯрд╛рдиреЗ рдХреЗ рджреМрд░рд╛рди, рдЙрдиреНрд╣реЗрдВ рдПрдХ рд╣реИрдВрдбрд▓ рдкреНрд░рд╛рдкреНрдд рд╣реЛрдЧрд╛ рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рд╡реЗ рдЕрдкрдиреЗ рд╣реИрдВрдбрд▓ рдЯреНрд░реИрдХрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдХреА рд╕реНрдерд┐рддрд┐ рдХреЛ рд╕рдорд╛рдпреЛрдЬрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

4. рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИ рдЬрдм Update рдпрд╛ Remove рд╡рд┐рдзрд┐ рдПрдХ рдЕрд▓рдЧ рдХрддрд╛рд░ рд╕реЗ рдПрдХ рдиреЛрдб рдкреНрд░рд╛рдкреНрдд рдХрд░рддреА рд╣реИ?

рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрддрд╛рд░ рдПрдХ рдЕрдкрд╡рд╛рдж рдлреЗрдВрдХ рджреЗрдЧреАред рдкреНрд░рддреНрдпреЗрдХ рдиреЛрдб рдЙрд╕ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрддрд╛рд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирддрд╛ рд╣реИ рдЬрд┐рд╕рд╕реЗ рд╡рд╣ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИ, рдЙрд╕реА рддрд░рд╣ рдЬреИрд╕реЗ LinkedListNode<T> рдХреЛ LinkedList<T> рдмрд╛рд░реЗ рдореЗрдВ рдкрддрд╛ рд╣реЛрддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрджрд┐ рдПрдХ рдиреЛрдб рдХреЛ рдХрддрд╛рд░ рд╕реЗ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рддреЛ рдЙрд╕ рдкрд░ Update рдпрд╛ Remove рдХрд╛ рдЖрд╣реНрд╡рд╛рди рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рднреА рдПрдХ рдЕрдкрд╡рд╛рдж рдХреЗ рд╕рд╛рде рд╣реЛрдЧрд╛ред

5. рдХреЛрдИ Merge рдкрджреНрдзрддрд┐ рдХреНрдпреЛрдВ рдирд╣реАрдВ рд╣реИ?

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

рдлрд┐рд░ рднреА, Merge рдкрджреНрдзрддрд┐ рдХреЛ рд╢рд╛рдорд┐рд▓ рди рдХрд░рдирд╛ рдЕрдм рдПрдХ рджреЛ-рддрд░рдлрд╛ рджрд░рд╡рд╛рдЬрд╛ рд╣реИ - рдпрджрд┐ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдЧреНрд░рд╛рд╣рдХ рдорд░реНрдЬ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдореЗрдВ рд░реБрдЪрд┐ рд╡реНрдпрдХреНрдд рдХрд░рддреЗ рд╣реИрдВ, рддреЛ PriorityQueue рдкреНрд░рдХрд╛рд░ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реЛрдЧрд╛ред рдЗрд╕рд▓рд┐рдП, рд╣рдо рдЕрдиреБрд╢рдВрд╕рд╛ рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдЕрднреА рддрдХ Merge рдкрджреНрдзрддрд┐ рдХреЛ рд╢рд╛рдорд┐рд▓ рди рдХрд░реЗрдВ, рдФрд░ рд▓реЙрдиреНрдЪ рдХреЗ рд╕рд╛рде рдЖрдЧреЗ рдмрдврд╝реЗрдВред

6. рдХреНрдпрд╛ рд╕рдВрдЧреНрд░рд╣ рд╕реНрдерд┐рд░рддрд╛ рдХреА рдЧрд╛рд░рдВрдЯреА рджреЗрддрд╛ рд╣реИ?

рд╕рдВрдЧреНрд░рд╣ рдмреЙрдХреНрд╕ рд╕реЗ рдмрд╛рд╣рд░ рдПрдХ рд╕реНрдерд┐рд░рддрд╛ рдЧрд╛рд░рдВрдЯреА рдкреНрд░рджрд╛рди рдирд╣реАрдВ рдХрд░реЗрдЧрд╛, рдЕрд░реНрдерд╛рдд рдпрджрд┐ рджреЛ рддрддреНрд╡ рд╕рдорд╛рди рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХреЗ рд╕рд╛рде рдХрддрд╛рд░рдмрджреНрдз рд╣реИрдВ, рддреЛ рдЧреНрд░рд╛рд╣рдХ рдпрд╣ рдорд╛рдирдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдирд╣реАрдВ рд╣реЛрдЧрд╛ рдХрд┐ рдЙрдиреНрд╣реЗрдВ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдХреНрд░рдо рдореЗрдВ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрджрд┐ рдХреЛрдИ рдЧреНрд░рд╛рд╣рдХ рд╣рдорд╛рд░реЗ PriorityQueue рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕реНрдерд┐рд░рддрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИ, рддреЛ рд╡реЗ TPriority рдФрд░ рд╕рдВрдмрдВрдзрд┐рдд IComparer<TPriority> рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдЗрд╕реЗ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдЧрд╛ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдбреЗрдЯрд╛ рд╕рдВрдЧреНрд░рд╣ рдирд┐рдпрддрд╛рддреНрдордХ рд╣реЛрдЧрд╛, рдЕрд░реНрдерд╛рдд рд╕рдВрдЪрд╛рд▓рди рдХреЗ рджрд┐рдП рдЧрдП рдЕрдиреБрдХреНрд░рдо рдХреЗ рд▓рд┐рдП, рдпрд╣ рд╣рдореЗрд╢рд╛ рдЙрд╕реА рддрд░рд╣ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░реЗрдЧрд╛, рдЬрд┐рд╕рд╕реЗ рдкреБрдирд░реБрддреНрдкрд╛рджрди рдХреА рдЕрдиреБрдорддрд┐ рдорд┐рд▓рддреА рд╣реИред

рдкрд░рд┐рд╢рд┐рд╖реНрдЯ

рдкрд░рд┐рд╢рд┐рд╖реНрдЯ рдП: рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрддрд╛рд░ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рд╡рд╛рд▓реА рдЕрдиреНрдп рднрд╛рд╖рд╛рдПрдВ

| рднрд╛рд╖рд╛ | рдкреНрд░рдХрд╛рд░ | рдиреЛрдЯреНрд╕ |
|:-:|:-:|:-:|
| рдЬрд╛рд╡рд╛ | рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрддрд╛рд░ | рдЕрдореВрд░реНрдд рд╡рд░реНрдЧ AbstractQueue рдФрд░ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ Queue рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИред |
| рдЬрдВрдЧ | рдмрд╛рдЗрдирд░реАрд╣реАрдк | |
| рд╕реНрд╡рд┐рдлреНрдЯ | рд╕реАрдПрдлрдмреАрдирд░реАрд╣реАрдк | |
| рд╕реА++ | рдкреНрд░рд╛рдердорд┐рдХрддрд╛_рдХреНрдпреВ | |
| рдЕрдЬрдЧрд░ | рдвреЗрд░ | |
| рдЬрд╛рдУ | рдвреЗрд░ | рдПрдХ рдвреЗрд░ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╣реИред |

рдкрд░рд┐рд╢рд┐рд╖реНрдЯ рдмреА: рдЦреЛрдЬ рдпреЛрдЧреНрдпрддрд╛

рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛рдУрдВ рдкрд░ рдЪрд░реНрдЪрд╛ рдХрд░рддреЗ рд╕рдордп, _heap_ рд╢рдмреНрдж рдХрд╛ рдЙрдкрдпреЛрдЧ _priority queue_ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ 4 рдЧреБрдирд╛ рдЕрдзрд┐рдХ рдмрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

  • "array" AND "data structure" тАФ 17.400,000 рдкрд░рд┐рдгрд╛рдо
  • "stack" AND "data structure" тАФ 12.100.000 рдкрд░рд┐рдгрд╛рдо
  • "queue" AND "data structure" тАФ 3.850.000 рдкрд░рд┐рдгрд╛рдо
  • "heap" AND "data structure" тАФ 1.830.000 рдкрд░рд┐рдгрд╛рдо
  • "priority queue" AND "data structure" тАФ 430.000 рдкрд░рд┐рдгрд╛рдо
  • "trie" AND "data structure" тАФ 335.000 рдкрд░рд┐рдгрд╛рдо

рдЪреЗрдВрдЬрд▓реЙрдЧ:

  • void Merge(PriorityQueue<TElement, TPriority> other) // O(1) рд╡рд┐рдзрд┐ рдХреЛ рд╣рдЯрд╛ рджрд┐рдпрд╛ред
  • рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдкреНрд░рд╢реНрди рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ #5: рдХреЛрдИ Merge рдкрджреНрдзрддрд┐ рдХреНрдпреЛрдВ рдирд╣реАрдВ рд╣реИ?
  • рд╕рдВрд╢реЛрдзрд┐рдд рдПрдлрдПрдХреНрдпреВ #4 рдЙрди рдиреЛрдбреНрд╕ рдХреЗ рд▓рд┐рдП рднреА рд╣реИ рдЬрд┐рдиреНрд╣реЗрдВ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрддрд╛рд░ рд╕реЗ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
  • рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдкреНрд░рд╢реНрди рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ #6: рдХреНрдпрд╛ рд╕рдВрдЧреНрд░рд╣ рд╕реНрдерд┐рд░рддрд╛ рдХреА рдЧрд╛рд░рдВрдЯреА рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ?

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

рдРрд╕рд╛ рдХрд░рдиреЗ рд╕реЗ рдореБрдЭреЗ рдЬреЛ рдПрдХ рдЫреЛрдЯреА рд╕реА рд╕реАрдЦ рдорд┐рд▓реА рд╡рд╣ рдпрд╣ рдереА рдХрд┐ рд╡рд┐рдзрд┐ рдирд╛рдо/рдЕрдзрд┐рднрд╛рд░ рдХрд╛ рд╡рд░реНрддрдорд╛рди рд╕реЗрдЯ out рдЪрд░ рдХреЗ рдирд┐рд╣рд┐рдд рдЯрд╛рдЗрдкрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдЗрддрдиреА рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдХреНрдпрд╛ рдореИрдВ рд╕реА # рдХреЛрдб рдХреЗ рд╕рд╛рде рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ TryDequeue(out var node) - рд▓реЗрдХрд┐рди рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ рдореИрдВ рдХрд╛ рд╕реНрдкрд╖реНрдЯ рдкреНрд░рдХрд╛рд░ рджреЗрдиреЗ рдХреА рдЬрд░реВрд░рдд out рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд░ PriorityQueueNode<> рдЕрдиреНрдпрдерд╛ рд╕рдВрдХрд▓рдХ рдирд╣реАрдВ рдкрддрд╛ рдерд╛ рдХрд┐ рдЕрдЧрд░ рдореИрдВ рдПрдХ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрддрд╛рд░ рдиреЛрдб рдпрд╛ рдПрдХ рддрддреНрд╡ рдЪрд╛рд╣рддрд╛ рдерд╛ред

    var shortestDistances = new Dictionary<int, int>();
    var queue = new PriorityQueue<int, int>();
    var handles = new Dictionary<int, PriorityQueueNode<int, int>>();
    handles[startNode] = queue.Enqueue(startNode, 0);
    while (queue.TryDequeue(out PriorityQueueNode<int, int> nextQueueNode))
    {
        int nodeToExploreFrom = nextQueueNode.Element, minDistance = nextQueueNode.Priority;
        shortestDistances.Add(nodeToExploreFrom, minDistance);
        handles[nodeToExploreFrom] = null; // so it is clearly already visited
        foreach (int nextNode in nodes)
        {
            int candidatePathDistance = minDistance + edgeDistances[nodeToExploreFrom, nextNode];
            if (handles.TryGetValue(nextNode, out var nextNodeHandle))
            {
                if (nextNodeHandle != null && candidatePathDistance < nextNodeHandle.Priority)
                {
                    queue.Update(nextNodeHandle, candidatePathDistance);
                }
                // or else... we already got there
            }
            else
            {
                handles[nextNode] = queue.Enqueue(nextNode, candidatePathDistance);
            }
        }
    }

рдореЗрд░реЗ рд╡рд┐рдЪрд╛рд░ рдореЗрдВ рдореБрдЦреНрдп рдЕрдирд╕реБрд▓рдЭрд╛ рдбрд┐рдЬрд╝рд╛рдЗрди рдкреНрд░рд╢реНрди рдпрд╣ рд╣реИ рдХрд┐ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдЕрджреНрдпрддрдиреЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдпрд╛ рдирд╣реАрдВред рдореИрдВ рдпрд╣рд╛рдВ рддреАрди рд╕рдВрднрд╛рд╡рд┐рдд рдкрде рджреЗрдЦ рд╕рдХрддрд╛ рд╣реВрдВ:

  1. рдореВрд▓ рддрддреНрд╡ рдХреЛ рдкрд╛рд░рд┐рдд рдХрд░рдХреЗ рд╡рд┐рд╢рд┐рд╖реНрдЯрддрд╛/рд╕рдорд╛рдирддрд╛ рдФрд░ рд╕рдорд░реНрдерди рдЕрдкрдбреЗрдЯ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
  2. рд╣реИрдВрдбрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдЕрдкрдбреЗрдЯ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░реЗрдВред
  3. рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдЕрдкрдбреЗрдЯ рдХрд╛ рд╕рдорд░реНрдерди рди рдХрд░реЗрдВред

рдпреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдкрд░рд╕реНрдкрд░ рдЕрдирдиреНрдп рд╣реИрдВ рдФрд░ рдХреНрд░рдорд╢рдГ рдЯреНрд░реЗрдб-рдСрдл рдХреЗ рдЕрдкрдиреЗ рд╕реЗрдЯ рд╣реИрдВ:

  1. рд╕рдорд╛рдирддрд╛ рдЖрдзрд╛рд░рд┐рдд рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╡рд┐рд╢рд┐рд╖реНрдЯрддрд╛ рдХреЛ рдордЬрдмреВрд░ рдХрд░рдХреЗ рдПрдкреАрдЖрдИ рдЕрдиреБрдмрдВрдз рдХреЛ рдЬрдЯрд┐рд▓ рдмрдирд╛рддрд╛ рд╣реИ рдФрд░ рд╣реБрдб рдХреЗ рддрд╣рдд рдЕрддрд┐рд░рд┐рдХреНрдд рдмреБрдХ-рдХреАрдкрд┐рдВрдЧ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдРрд╕рд╛ рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдЕрдкрдбреЗрдЯ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВред
  2. рд╣реИрдВрдбрд▓ рдЖрдзрд╛рд░рд┐рдд рджреГрд╖реНрдЯрд┐рдХреЛрдг рдкреНрд░рддрд┐ рд╕рдВрд▓рдЧреНрди рддрддреНрд╡ рдореЗрдВ рдХрдо рд╕реЗ рдХрдо рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рдЖрд╡рдВрдЯрди рдХрд╛ рд╕рдВрдХреЗрдд рджреЗрдЧрд╛ред рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рд╡рд┐рд╢рд┐рд╖реНрдЯрддрд╛ рдХреЛ рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдореЗрд░реА рдзрд╛рд░рдгрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдЬрд┐рди рдкрд░рд┐рджреГрд╢реНрдпреЛрдВ рдХреЛ рдЕрдкрдбреЗрдЯ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдЙрдирдХреЗ рд▓рд┐рдП рдпрд╣ рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп рд▓рдЧрднрдЧ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдирд┐рд╣рд┐рдд рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдКрдкрд░ рд╕реВрдЪреАрдмрджреНрдз рджреЛрдиреЛрдВ рдЙрджрд╛рд╣рд░рдг рддрддреНрд╡реЛрдВ рджреНрд╡рд╛рд░рд╛ рдЕрдиреБрдХреНрд░рдорд┐рдд рдмрд╛рд╣рд░реА рд╢рдмреНрджрдХреЛрд╢реЛрдВ рдореЗрдВ рдХреИрд╕реЗ рд╕рдВрднрд╛рд▓рддреЗ рд╣реИрдВ)ред
  3. рдЕрджреНрдпрддрди рдпрд╛ рддреЛ рдмрд┐рд▓реНрдХреБрд▓ рд╕рдорд░реНрдерд┐рдд рдирд╣реАрдВ рд╣реИрдВ, рдпрд╛ рдвреЗрд░ рдХреЗ рд░реИрдЦрд┐рдХ рдЯреНрд░реИрд╡рд░реНрд╕рд▓ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рддрддреНрд╡реЛрдВ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЕрдкрдбреЗрдЯ рдЕрд╕реНрдкрд╖реНрдЯ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред

рд╕рд╛рдорд╛рдиреНрдп рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрддрд╛рд░ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреА рдкрд╣рдЪрд╛рди рдХрд░рдирд╛

рдпрд╣ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХрд┐ рд╣рдо рдпрд╣ рдкрд╣рдЪрд╛рдиреЗрдВ рдХрд┐ рдЙрдкрд░реЛрдХреНрдд рдореЗрдВ рд╕реЗ рдХреМрди рд╕рд╛ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╣рдорд╛рд░реЗ рдЕрдзрд┐рдХрд╛рдВрд╢ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рд╕рд░реНрд╡реЛрддреНрддрдо рдореВрд▓реНрдп рдкреНрд░рджрд╛рди рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП рдореИрдВ рд╕рдмрд╕реЗ рдЖрдо рдЙрдкрдпреЛрдЧ рдкреИрдЯрд░реНрди рдХреНрдпрд╛ рд╣реИрдВ, рдпрд╣ рдмреЗрд╣рддрд░ рдврдВрдЧ рд╕реЗ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рд╣реАрдк/рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХреНрдпреВ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП, рдорд╛рдЗрдХреНрд░реЛрд╕реЙрдлреНрдЯ рдЖрдВрддрд░рд┐рдХ рдФрд░ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рджреЛрдиреЛрдВ, .NET рдХреЛрдбрдмреЗрд╕ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЬрд╛ рд░рд╣рд╛ рд╣реВрдВ:

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

рдЙрд╕реА рд╕рдордп, рдкрд╛рдпрдерди, рдЬрд╛рд╡рд╛, рд╕реА ++, рдЧреЛ, рд╕реНрд╡рд┐рдлреНрдЯ, рдпрд╛ рд░рд╕реНрдЯ рдХреЛрд░ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдореЗрдВ рд╕реЗ рдХреЛрдИ рднреА рд╣реАрдк/рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХреНрдпреВ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЙрдирдХреЗ рдПрдкреАрдЖрдИ рдореЗрдВ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдЕрдкрдбреЗрдЯ рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред

рд╕рд┐рдлрд╛рд░рд┐рд╢реЛрдВ

рдЗрд╕ рдбреЗрдЯрд╛ рдХреЗ рдкреНрд░рдХрд╛рд╢ рдореЗрдВ, рдореЗрд░реЗ рд▓рд┐рдП рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ .╬Э╬Х╬д рдХреЛ рдПрдХ рдЖрдзрд╛рд░рднреВрдд рдкреНрд░рд╛рдпреЛрд░рд┐рдЯреА рдХреНрдпреВ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬреЛ рдЖрд╡рд╢реНрдпрдХ рдПрдкреАрдЖрдИ (рд╣реЗрдкрд┐рдлрд╛рдИ/рдкреБрд╢/рдкреАрдХ/рдкреЙрдк) рдХреЛ рдЙрдЬрд╛рдЧрд░ рдХрд░рддрд╛ рд╣реИ, рдХреБрдЫ рдкреНрд░рджрд░реНрд╢рди рдЧрд╛рд░рдВрдЯреА рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдкреНрд░рддрд┐ рдПрдирдХреНрдпреВ рдореЗрдВ рдХреЛрдИ рдЕрддрд┐рд░рд┐рдХреНрдд рдЖрд╡рдВрдЯрди рдирд╣реАрдВ) рдФрд░ рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рд╡рд┐рд╢рд┐рд╖реНрдЯрддрд╛ рдХреА рдХрдореАред рдЗрд╕рдХрд╛ рддрд╛рддреНрдкрд░реНрдп рд╣реИ рдХрд┐ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди _O(log n) рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдЕрджреНрдпрддрди_ рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред

рд╣рдореЗрдВ рдПрдХ рдЕрд▓рдЧ рдвреЗрд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд╕рд╛рде рдЕрдиреБрд╕рд░рдг рдХрд░рдиреЗ рдкрд░ рднреА рд╡рд┐рдЪрд╛рд░ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдЬреЛ _O(log n)_ рдЕрдкрдбреЗрдЯ/рдирд┐рд╖реНрдХрд╛рд╕рди рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ, рдФрд░ рд╕рдорд╛рдирддрд╛-рдЖрдзрд╛рд░рд┐рдд рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рдЪреВрдВрдХрд┐ рдпрд╣ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдкреНрд░рдХрд╛рд░ рдХрд╛ рд╣реЛрдЧрд╛, рдЗрд╕рд▓рд┐рдП рд╡рд┐рд╢рд┐рд╖реНрдЯрддрд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдЕрдзрд┐рдХ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред

рдореИрдВ рджреЛрдиреЛрдВ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрдиреЛрдВ рдХреЗ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдкрд░ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рдФрд░ рд╢реАрдШреНрд░ рд╣реА рдПрдХ рдПрдкреАрдЖрдИ рдкреНрд░рд╕реНрддрд╛рд╡ рдХрд╛ рдкрд╛рд▓рди рдХрд░реВрдВрдЧрд╛ред

рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд-рдмрд╣реБрдд рдзрдиреНрдпрд╡рд╛рдж, @eiriktsarpalis! рдореИрдВ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЛрдВ рдХреЛ рдЦреЛрдЬрдиреЗ рдФрд░ рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рд╣рдорд╛рд░реА рдЪрд░реНрдЪрд╛ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдВрддрд░рд┐рдХ Microsoft рдХреЛрдбрдмреЗрд╕ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдордп рдХреА рд╕рд░рд╛рд╣рдирд╛ рдХрд░рддрд╛ рд╣реВрдВред

рд╣реИрдВрдбрд▓ рдЖрдзрд╛рд░рд┐рдд рджреГрд╖реНрдЯрд┐рдХреЛрдг рдкреНрд░рддрд┐ рд╕рдВрд▓рдЧреНрди рддрддреНрд╡ рдореЗрдВ рдХрдо рд╕реЗ рдХрдо рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рдЖрд╡рдВрдЯрди рдХрд╛ рд╕рдВрдХреЗрдд рджреЗрдЧрд╛ред

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

80 рдкреНрд░рд╛рдпреЛрд░рд┐рдЯреА рдХреНрдпреВ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрдиреЛрдВ рдХреА рдЬрд╛рдБрдЪ рдХреА рдЧрдИ, рдЙрдирдореЗрдВ рд╕реЗ рдХреЗрд╡рд▓ 9 рдХреЛ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдЕрджреНрдпрддрдиреЛрдВ рдХреЗ рдХрд┐рд╕реА рди рдХрд┐рд╕реА рд░реВрдк рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреЗ рдкрд╛рдпрд╛ рдЧрдпрд╛ред

рдпрд╣рд╛рдВ рддрдХ тАЛтАЛтАЛтАЛрдХрд┐ рдЗрд╕ рдЫреЛрдЯреЗ рд╕реЗ рдирдореВрдиреЗ рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП, рдпрд╣ рд╕рднреА рдЙрдкрдпреЛрдЧреЛрдВ рдХрд╛ 11-12% рд╣реИред рд╕рд╛рде рд╣реА, рдЗрд╕реЗ рдХреБрдЫ рдбреЛрдореЗрди рдЬреИрд╕реЗ рд╡реАрдбрд┐рдпреЛ рдЧреЗрдо рдореЗрдВ рдХрдо рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬрд╣рд╛рдВ рдореИрдВ рдЗрд╕ рдкреНрд░рддрд┐рд╢рдд рдХреЗ рдЕрдзрд┐рдХ рд╣реЛрдиреЗ рдХреА рдЕрдкреЗрдХреНрд╖рд╛ рдХрд░рддрд╛ рд╣реВрдВред

рдЗрди рдЖрдВрдХрдбрд╝реЛрдВ рдХреЗ рдЖрд▓реЛрдХ рдореЗрдВ, рдореЗрд░реЗ рд▓рд┐рдП рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ [тАж]

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

рдореВрд▓ рд░реВрдк рд╕реЗ:

| | 11-12% рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ | 88-89% рдорд╛рдорд▓реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ |
|:-:|:-:|:-:|
| рдЕрдкрдбреЗрдЯ рдХреА рдкрд░рд╡рд╛рд╣ рдХрд░рддрд╛ рд╣реИ | рд╣рд╛рдБ | рдирд╣реАрдВ |
| рд╣реИрдВрдбрд▓ рд╕реЗ рдирдХрд╛рд░рд╛рддреНрдордХ рд░реВрдк рд╕реЗ рдкреНрд░рднрд╛рд╡рд┐рдд рд╣реЛрддрд╛ рд╣реИ | рдПрди/рдП (рд╡реЗ рд╡рд╛рдВрдЫрд┐рдд рд╣реИрдВ) | рдирд╣реАрдВ |
| рд╣реИрдВрдбрд▓ рд╕реЗ рд╕рдХрд╛рд░рд╛рддреНрдордХ рд░реВрдк рд╕реЗ рдкреНрд░рднрд╛рд╡рд┐рдд рд╣реИ | рд╣рд╛рдБ | рдирд╣реАрдВ |

рдореЗрд░реЗ рд▓рд┐рдП, рдпрд╣ рдХреЗрд╡рд▓ 88-89% рд╣реА рдирд╣реАрдВ, 100% рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреЗ рдкрдХреНрд╖ рдореЗрдВ рд╣реИред

рдпрд╣ рдзрд╛рд░рдгрд╛ рдЧрд▓рдд рд╣реИ, рдЖрдкрдХреЛ рдиреЛрдб-рдЖрдзрд╛рд░рд┐рдд рдвреЗрд░ рдореЗрдВ рдЕрддрд┐рд░рд┐рдХреНрдд рдЖрд╡рдВрдЯрди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ

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

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

рдореИрдВ рдХрд╣ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рд╣рдо рдХрд┐рд╕реА рднреА рдПрдирдХреНрдпреВ рдСрдкрд░реЗрд╢рди рд╕реЗ рдмрдЪрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдЖрд╡рдВрдЯрди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдЪрд╛рд╣реЗ рд╡рд╣ рдХреЙрд▓рд░ рдХреА рдУрд░ рд╕реЗ рд╣реЛ рдпрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд╣рд┐рд╕реНрд╕реЗ рдореЗрдВ (рдЕрдореВрд░реНрдд рдЖрдВрддрд░рд┐рдХ рдЖрд╡рдВрдЯрди рдареАрдХ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рд╕рд░рдгреА рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдирд╛)ред рдореИрдВ рдпрд╣ рд╕рдордЭрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рдиреЛрдб-рдЖрдзрд╛рд░рд┐рдд рдвреЗрд░ рдХреЗ рд╕рд╛рде рдпрд╣ рдХреИрд╕реЗ рд╕рдВрднрд╡ рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдпрджрд┐ рдЙрди рдиреЛрдб рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХреЛ рдХреЙрд▓рд░ рдХреЗ рд╕рдВрдкрд░реНрдХ рдореЗрдВ рд▓рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдЕрдиреБрдЪрд┐рдд рдкреБрди: рдЙрдкрдпреЛрдЧ/рдПрд▓рд┐рдпрд╛рд╕рд┐рдВрдЧ рдХреЗ рдЖрд╕рдкрд╛рд╕ рдХреА рдЪрд┐рдВрддрд╛рдУрдВ рдХреЗ рдХрд╛рд░рдг рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рджреНрд╡рд╛рд░рд╛ рдкреВрд▓рд┐рдВрдЧ рдХреЛ рдкреНрд░рддрд┐рдмрдВрдзрд┐рдд рдХрд░рддрд╛ рд╣реИ)ред рдореИрдВ рд▓рд┐рдЦрдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдБ:
C# pq.Enqueue(42, 84);
рдФрд░ рдХреНрдпрд╛ рд╡рд╣ рдЖрд╡рдВрдЯрд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЖрдк рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХреИрд╕реЗ рдХрд░рддреЗ рд╣реИрдВ?

рдпрд╛ рдмрд╕ рд╡рд╣реА рдХрд╣реЛ рдЬреЛ рддреБрдо рдХрд╣рдирд╛ рдЪрд╛рд╣ рд░рд╣реЗ рд╣реЛ

рдореИрдВрдиреЗ рд╕реЛрдЪрд╛ рдореИрдВ рдерд╛ред

рд╣рдо рдЖрд╡рдВрдЯрди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╡рд╛рд▓реЗ рдХрд┐рд╕реА рднреА рдПрдирдХреНрдпреВ рдСрдкрд░реЗрд╢рди рд╕реЗ рдмрдЪрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ [...] рдореИрдВ рд▓рд┐рдЦрдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ: pq.Enqueue(42, 84); рдФрд░ рдЗрд╕реЗ рдЖрд╡рдВрдЯрд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИред

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

рд╣рдо 0.1% рдЧреНрд░рд╛рд╣рдХреЛрдВ рдХреЗ рд▓рд┐рдП рдЕрдиреБрдХреВрд▓рди рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдбрд┐рдЬрд╝рд╛рдЗрди рд╡рд┐рдХрд▓реНрдк рдирд╣реАрдВ рдмрдирд╛ рд░рд╣реЗ рд╣реИрдВ рдпрджрд┐ рдпреЗ рдХрд┐рд╕реА рдЕрдиреНрдп рдЖрдпрд╛рдо рдореЗрдВ 12% рдЧреНрд░рд╛рд╣рдХреЛрдВ рдХреЛ рдирдХрд╛рд░рд╛рддреНрдордХ рд░реВрдк рд╕реЗ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рддреЗ рд╣реИрдВред "рдмрд┐рдирд╛ рдЖрд╡рдВрдЯрди рдХреА рдкрд░рд╡рд╛рд╣ рдХрд░рдирд╛" + "рджреЛ рдореВрд▓реНрдп рдкреНрд░рдХрд╛рд░реЛрдВ рд╕реЗ рдирд┐рдкрдЯрдирд╛" рдПрдХ рдмрдврд╝рдд рдХрд╛ рдорд╛рдорд▓рд╛ рд╣реИред

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

рдпрд╣ рдЗрдЪреНрдЫрд╛ рдХрд╣рд╛рдБ рд╕реЗ рдЖрддреА рд╣реИ?

рдкреНрд░рджрд░реНрд╢рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрд░рд╡рд╛рд╣ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдкрд░рд┐рджреГрд╢реНрдпреЛрдВ рдореЗрдВ рдореБрдЦреНрдп рд╕рдВрдЧреНрд░рд╣ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЛ рдкреНрд░рдпреЛрдЧ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рдмрдирд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдЖрдк рдХрд╣рддреЗ рд╣реИрдВ рдХрд┐ рдиреЛрдб-рдЖрдзрд╛рд░рд┐рдд рд╕рдорд╛рдзрд╛рди 100% рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░реЗрдЧрд╛: рдРрд╕рд╛ рдирд╣реАрдВ рд╣реИ рдпрджрд┐ рдкреНрд░рддреНрдпреЗрдХ рдПрдирдХреНрдпреВ рдЖрд╡рдВрдЯрд┐рдд рдХрд░рддрд╛ рд╣реИ, рдЬреИрд╕реЗ List<T> , Dictionary<TKey, TValue> , HashSet<T> , рдФрд░ рдЗрд╕реА рддрд░рд╣ рдЪрд╛рд▓реВ рдХрдИ рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдореЗрдВ рдЕрдиреБрдкрдпреЛрдЧреА рд╣реЛ рдЬрд╛рдПрдЧрд╛ рдпрджрд┐ рд╡реЗ рдкреНрд░рддреНрдпреЗрдХ рдРрдб рдкрд░ рдЖрд╡рдВрдЯрд┐рдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред

рдЖрдк рдХреНрдпреЛрдВ рдорд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдХреЗрд╡рд▓ "0.1%" рд╣реИ рдЬреЛ рдЗрди рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рдЖрд╡рдВрдЯрди рдУрд╡рд░рд╣реЗрдбреНрд╕ рдХреА рдкрд░рд╡рд╛рд╣ рдХрд░рддрд╛ рд╣реИ? рд╡рд╣ рдбреЗрдЯрд╛ рдХрд╣рд╛рдВ рд╕реЗ рдЖ рд░рд╣рд╛ рд╣реИ?

"рдмрд┐рдирд╛ рдЖрд╡рдВрдЯрди рдХреА рдкрд░рд╡рд╛рд╣ рдХрд░рдирд╛" + "рджреЛ рдореВрд▓реНрдп рдкреНрд░рдХрд╛рд░реЛрдВ рд╕реЗ рдирд┐рдкрдЯрдирд╛" рдПрдХ рдмрдврд╝рдд рдХрд╛ рдорд╛рдорд▓рд╛ рд╣реИ

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

@eiriktsarpalis
рдЗрд╕рд▓рд┐рдП рдЖрдк рдХрд┐рд╕реА рднреА рд╡рд┐рдХрд▓реНрдк рдХреЛ рди рднреВрд▓реЗрдВ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреА рд╕реВрдЪреА рдореЗрдВ рд╡рд┐рдХрд▓реНрдк 1, 2, рдФрд░ 3 рдореЗрдВ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡реНрдпрд╡рд╣рд╛рд░реНрдп рд╡рд┐рдХрд▓реНрдк 4 рд╣реИ рдЬреЛ рдПрдХ рд╕рдордЭреМрддрд╛ рд╣реИ:

  1. рдПрдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЬреЛ 12% рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ, рдЬрдмрдХрд┐ рдЕрдиреНрдп 88% рдХреЗ рд▓рд┐рдП рд▓рдЧрднрдЧ-рдЕрдиреБрдХреВрд▓рди рдХрд░рдиреЗ рдпреЛрдЧреНрдп рддрддреНрд╡реЛрдВ рдХреЛ рдЕрджреНрдпрддрди рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдФрд░ рдХреЗрд╡рд▓ _lazily_ рдЙрди рдЕрджреНрдпрддрдиреЛрдВ рдХреЛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд▓реБрдХрдЕрдк рддрд╛рд▓рд┐рдХрд╛ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдкрд╣рд▓реА рдмрд╛рд░ рдЕрджреНрдпрддрди рд╡рд┐рдзрд┐ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ ( рдФрд░ рдмрд╛рдж рдХреЗ рдЕрдкрдбреЗрдЯ + рдирд┐рд╖реНрдХрд╛рд╕рди рдкрд░ рдЗрд╕реЗ рдЕрдкрдбреЗрдЯ рдХрд░рдирд╛)ред рдЗрд╕рд▓рд┐рдП рдЙрди рдРрдкреНрд╕ рдХреЗ рд▓рд┐рдП рдХрдо рд▓рд╛рдЧрдд рдЦрд░реНрдЪ рдХрд░рдирд╛ рдЬреЛ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред

рд╣рдо рдЕрднреА рднреА рдпрд╣ рддрдп рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХреНрдпреЛрдВрдХрд┐ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╕реЗ 88% рдпрд╛ 12% рдХреЗ рд▓рд┐рдП рдЕрддрд┐рд░рд┐рдХреНрдд рдкреНрд░рджрд░реНрд╢рди рдЙрдкрд▓рдмреНрдз рд╣реИ, рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдЕрджреНрдпрддрди рдХрд░рдиреЗ рдпреЛрдЧреНрдп рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдпрд╛ рдкрд╣рд▓реА рдЬрдЧрд╣ рдореЗрдВ рдПрдХ рдХреЗ рд▓рд┐рдП рдЕрдиреБрдХреВрд▓рд┐рдд рд╣реИ, рд╡рд┐рдХрд▓реНрдк 2 рдФрд░ 3 рдкреНрд░рджрд╛рди рдХрд░рдирд╛ рдмреЗрд╣рддрд░ рд╣реИред рд╡рд┐рдХрд▓реНрдк 4. рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ рд╕реЛрдЪрд╛ рдХрд┐ рд╣рдореЗрдВ рдпрд╣ рдирд╣реАрдВ рднреВрд▓рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдПрдХ рдФрд░ рд╡рд┐рдХрд▓реНрдк рдореМрдЬреВрдж рд╣реИред

[рдпрд╛ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдЗрд╕реЗ рдХреЗрд╡рд▓ рдПрдХ рдмреЗрд╣рддрд░ рд╡рд┐рдХрд▓реНрдк 1 рдХреЗ рд░реВрдк рдореЗрдВ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдпрд╣ рдХрд╣рдиреЗ рдХреЗ рд▓рд┐рдП 1 рдХреЗ рд╡рд┐рд╡рд░рдг рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдмрд╣реАрдЦрд╛рддрд╛ рдкрджреНрдзрддрд┐ рдордЬрдмреВрд░ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдЖрд▓рд╕реА, рдФрд░ рд╕рд╣реА рд╕рдорд╛рди рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЗрд╡рд▓ рддрднреА рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдЬрдм рдЕрдкрдбреЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ ...]

@stephentoub рдареАрдХ рдпрд╣реА рдХрд╣рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдореЗрд░реЗ рдорди рдореЗрдВ рдерд╛ рдХрд┐ рдЖрдк рдХреНрдпрд╛ рдХрд╣рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдзрдиреНрдпрд╡рд╛рдж :)

рдЖрдк рдХреНрдпреЛрдВ рдорд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдХреЗрд╡рд▓ 0.1% рд╣реИ рдЬреЛ рдЗрди рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рдЖрд╡рдВрдЯрди рдУрд╡рд░рд╣реЗрдбреНрд╕ рдХреА рдкрд░рд╡рд╛рд╣ рдХрд░рддрд╛ рд╣реИ? рд╡рд╣ рдбреЗрдЯрд╛ рдХрд╣рд╛рдВ рд╕реЗ рдЖ рд░рд╣рд╛ рд╣реИ?

рдЕрдВрддрд░реНрдЬреНрдЮрд╛рди рд╕реЗ, рдпрд╛рдиреА рд╡рд╣реА рд╕реНрд░реЛрдд рдЬрд┐рд╕рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЖрдк рдорд╛рдирддреЗ рд╣реИрдВ рдХрд┐ "рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛" рдкрд░ "рдХреЛрдИ рдЕрддрд┐рд░рд┐рдХреНрдд рдЖрд╡рдВрдЯрди рдирд╣реАрдВ" рдХреЛ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рджреЗрдирд╛ рдЕрдзрд┐рдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред рдХрдо рд╕реЗ рдХрдо рдЕрджреНрдпрддрди рддрдВрддреНрд░ рдХреЗ рд▓рд┐рдП, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдбреЗрдЯрд╛ рд╣реИ рдХрд┐ 11-12% рдЧреНрд░рд╛рд╣рдХреЛрдВ рдХреЛ рдЗрд╕ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рджреВрд░ рд╕реЗ рдХрд░реАрдмреА рдЧреНрд░рд╛рд╣рдХ "рдХреЛрдИ рдЕрддрд┐рд░рд┐рдХреНрдд рдЖрд╡рдВрдЯрди рдирд╣реАрдВ" рдХреА рдкрд░рд╡рд╛рд╣ рдХрд░реЗрдВрдЧреЗред

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

рдЖрдЗрдП рдПрдХ рдХрджрдо рдкреАрдЫреЗ рд╣рдЯреЗрдВ рдФрд░ рдЗрд╕ рдмрд╛рдд рдкрд░ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдЧреНрд░рд╛рд╣рдХ рдХреНрдпрд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдбрд┐рдЬрд╝рд╛рдЗрди рд╡рд┐рдХрд▓реНрдк рд╣реИ рдЬреЛ 12% рдЧреНрд░рд╛рд╣рдХреЛрдВ рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛ рдХреЛ рдЕрдиреБрдкрдпреЛрдЧреА рдмрдирд╛ рд╕рдХрддрд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВ рднреА рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдореЗрдВ рдЗрдирдХрд╛ рд╕рдорд░реНрдерди рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╛рд░рдг рдмрддрд╛рдиреЗ рдореЗрдВ рдмрд╣реБрдд рд╕рд╛рд╡рдзрд╛рдиреА рдмрд░рддрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред

"рдХреЛрдИ рдЕрддрд┐рд░рд┐рдХреНрдд рдЖрд╡рдВрдЯрди рдирд╣реАрдВ" рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдПрдХ рд╕рд░рдгреА-рдЖрдзрд╛рд░рд┐рдд рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдиреЛрдб-рдЖрдзрд╛рд░рд┐рдд рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╕реЗ рдзреАрдорд╛ рд╣реЛрдЧрд╛ред

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

рдХреГрдкрдпрд╛ рдЙрди рджреЛ рд╕реА # рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрдиреЛрдВ рдХреЛ рд╕рд╛рдЭрд╛ рдХрд░реЗрдВ рдЬрд┐рдирдХрд╛ рдЙрдкрдпреЛрдЧ рдЖрдк рдЙрд╕ рддреБрд▓рдирд╛ рдХреЛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдФрд░ рдмреЗрдВрдЪрдорд╛рд░реНрдХ рдЙрд╕ рдирд┐рд╖реНрдХрд░реНрд╖ рдкрд░ рдЖрдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ

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

@pgolebiowski рдореБрдЭреЗ рдЖрдкрдХреА рдЖрдкрддреНрддрд┐ рдХреА рдкреНрд░рдХреГрддрд┐ рдХреЛ рдмреЗрд╣рддрд░ рдврдВрдЧ рд╕реЗ рд╕рдордЭрдиреЗ рдореЗрдВ рджрд┐рд▓рдЪрд╕реНрдкреА рд╣реЛрдЧреАред рдкреНрд░рд╕реНрддрд╛рд╡ рджреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреА рд╡рдХрд╛рд▓рдд рдХрд░рддрд╛ рд╣реИ, рдХреНрдпрд╛ рдпрд╣ рдЖрдкрдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЛ рдкреВрд░рд╛ рдирд╣реАрдВ рдХрд░реЗрдЧрд╛?

  1. рдПрдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЬреЛ 12% рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ, рдЬрдмрдХрд┐ рдЕрдиреНрдп 88% рдХреЗ рд▓рд┐рдП рд▓рдЧрднрдЧ-рдЕрдиреБрдХреВрд▓рди рдХрд░рдиреЗ рдпреЛрдЧреНрдп рддрддреНрд╡реЛрдВ рдХреЛ рдЕрджреНрдпрддрди рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдФрд░ рдХреЗрд╡рд▓ рдЖрд▓рд╕реА рд░реВрдк рд╕реЗ рдЙрди рдЕрджреНрдпрддрдиреЛрдВ рдХреЛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд▓реБрдХрдЕрдк рддрд╛рд▓рд┐рдХрд╛ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдкрд╣рд▓реА рдмрд╛рд░ рдЕрджреНрдпрддрди рд╡рд┐рдзрд┐ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ ( рдФрд░ рдмрд╛рдж рдХреЗ рдЕрдкрдбреЗрдЯ + рдирд┐рд╖реНрдХрд╛рд╕рди рдкрд░ рдЗрд╕реЗ рдЕрдкрдбреЗрдЯ рдХрд░рдирд╛)ред рдЗрд╕рд▓рд┐рдП рдЙрди рдРрдкреНрд╕ рдХреЗ рд▓рд┐рдП рдХрдо рд▓рд╛рдЧрдд рдЦрд░реНрдЪ рдХрд░рдирд╛ рдЬреЛ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред

рдореИрдВ рд╢рд╛рдпрдж рдЗрд╕реЗ рд╡рд┐рдХрд▓реНрдк 1 рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдЕрдиреБрдХреВрд▓рди рдХреЗ рд░реВрдк рдореЗрдВ рд╡рд░реНрдЧреАрдХреГрдд рдХрд░реВрдВрдЧрд╛, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореБрдЭреЗ рдЙрд╕ рд╡рд┐рд╢реЗрд╖ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рд╕рд╛рде рдХреБрдЫ рд╕рдорд╕реНрдпрд╛рдПрдВ рджрд┐рдЦрд╛рдИ рджреЗрддреА рд╣реИрдВ:

  • рдЕрдкрдбреЗрдЯ рдЕрдм _O(n)_ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдЙрдкрдпреЛрдЧ рдкреИрдЯрд░реНрди рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рдкреНрд░рджрд░реНрд╢рди рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
  • рдЕрджреНрд╡рд┐рддреАрдпрддрд╛ рдХреА рдкреБрд╖реНрдЯрд┐ рдХреЗ рд▓рд┐рдП рд▓реБрдХрдЕрдк рдЯреЗрдмрд▓ рдХреА рднреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдПрдХ рд╣реА рддрддреНрд╡ рдХреЛ рджреЛ рдмрд╛рд░ _before_ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рдЕрдкрдбреЗрдЯ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдФрд░ рдпрдХреАрдирди рдХрддрд╛рд░ рдХреЛ рдЕрд╕рдВрдЧрдд рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд▓рд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

@eiriktsarpalis рдЗрд╕рдХрд╛ рдХреЗрд╡рд▓ рдУ (рдПрди) рдПрдХ рдмрд╛рд░, рдФрд░ рдУ (1) рдмрд╛рдж рдореЗрдВ, рдЬреЛ рдУ (1) рдкрд░рд┐рд╢реЛрдзрд┐рдд рд╣реИред рдФрд░ рдЖрдк рдкрд╣рд▓реЗ рдЕрдкрдбреЗрдЯ рддрдХ рд╡реИрд▓рд┐рдбреЗрдЯрд┐рдВрдЧ рдпреВрдирд┐рдХрдиреЗрд╕ рдХреЛ рд╕реНрдердЧрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рд╢рд╛рдпрдж рдпрд╣ рдЕрддрд┐ рдЪрддреБрд░ рд╣реИред рджреЛ рд╡рд░реНрдЧреЛрдВ рдХреА рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИред

рдореИрдВрдиреЗ рдкрд┐рдЫрд▓реЗ рдХреБрдЫ рджрд┐рдиреЛрдВ рдореЗрдВ рджреЛ рдкреНрд░рд╛рдпреЛрд░рд┐рдЯреАрдХреНрдпреВ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрдиреЛрдВ рдХреЛ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдХрд┐рдпрд╛ рд╣реИ: рдЕрджреНрдпрддрди рд╕рдорд░реНрдерди рдХреЗ рдмрд┐рдирд╛ рдПрдХ рдмреБрдирд┐рдпрд╛рджреА рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдФрд░ рдПрдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЬреЛ рддрддреНрд╡ рд╕рдорд╛рдирддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрджреНрдпрддрдиреЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред рдореИрдВрдиреЗ рдкреВрд░реНрд╡ рдХрд╛ рдирд╛рдо PriorityQueue рдФрд░ рдмрд╛рдж рд╡рд╛рд▓реЗ рдХреЛ, рдмреЗрд╣рддрд░ рдирд╛рдо рдХреА рдХрдореА рдХреЗ рд▓рд┐рдП, PrioritySet ред рдореЗрд░рд╛ рд▓рдХреНрд╖реНрдп рдПрдкреАрдЖрдИ рдПрд░реНрдЧреЛрдиреЙрдорд┐рдХреНрд╕ рдХреЛ рдорд╛рдкрдирд╛ рдФрд░ рдкреНрд░рджрд░реНрд╢рди рдХреА рддреБрд▓рдирд╛ рдХрд░рдирд╛ рд╣реИред

рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЗрд╕ рд░реЗрдкреЛ рдореЗрдВ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рджреЛрдиреЛрдВ рд╡рд░реНрдЧреЛрдВ рдХреЛ рд╕рд░рдгреА-рдЖрдзрд╛рд░рд┐рдд рдХреНрд╡рд╛рдб рд╣реАрдкреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЕрджреНрдпрддрди рдХрд░рдиреЗ рдпреЛрдЧреНрдп рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдПрдХ рд╢рдмреНрджрдХреЛрд╢ рдХрд╛ рднреА рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ рдЬреЛ рддрддреНрд╡реЛрдВ рдХреЛ рдЖрдВрддрд░рд┐рдХ рдвреЗрд░ рд╕реВрдЪрдХрд╛рдВрдХреЛрдВ рдореЗрдВ рдореИрдк рдХрд░рддрд╛ рд╣реИред

рдореВрд▓ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрддрд╛рд░

namespace System.Collections.Generic
{
    public class PriorityQueue<TElement, TPriority> : IReadOnlyCollection<(TElement Element, TPriority Priority)>
    {
        // Constructors
        public PriorityQueue();
        public PriorityQueue(int initialCapacity);
        public PriorityQueue(IComparer<TPriority>? comparer);
        public PriorityQueue(int initialCapacity, IComparer<TPriority>? comparer);
        public PriorityQueue(IEnumerable<(TElement Element, TPriority Priority)> values);
        public PriorityQueue(IEnumerable<(TElement Element, TPriority Priority)> values, IComparer<TPriority>? comparer);

        // Properties
        public int Count { get; }
        public IComparer<TPriority> Comparer { get; }

        // O(log(n)) push operation
        public void Enqueue(TElement element, TPriority priority);
        // O(1) peek operations
        public TElement Peek();
        public bool TryPeek(out TElement element, out TPriority priority);
        // O(log(n)) pop operations
        public TElement Dequeue();
        public bool TryDequeue(out TElement element, out TPriority priority);
        // Combined push/pop, generally more efficient than sequential Enqueue();Dequeue() calls.
        public TElement EnqueueDequeue(TElement element, TPriority priority);

        public void Clear();

        public Enumerator GetEnumerator();
        public struct Enumerator : IEnumerator<(TElement Element, TPriority Priority)>, IEnumerator;
    }
}

рдпрд╣рд╛рдБ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рдПрдХ рдореВрд▓ рдирдореВрдирд╛ рд╣реИ

var queue = new PriorityQueue<string, int>();

queue.Enqueue("John", 1940);
queue.Enqueue("Paul", 1942);
queue.Enqueue("George", 1943);
queue.Enqueue("Ringo", 1940);

Assert.Equal("John", queue.Dequeue());
Assert.Equal("Ringo", queue.Dequeue());
Assert.Equal("Paul", queue.Dequeue());
Assert.Equal("George", queue.Dequeue());

рдЕрджреНрдпрддрди рдХрд░рдиреЗ рдпреЛрдЧреНрдп рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрддрд╛рд░

namespace System.Collections.Generic
{
    public class PrioritySet<TElement, TPriority> : IReadOnlyCollection<(TElement Element, TPriority Priority)> where TElement : notnull
    {
        // Constructors
        public PrioritySet();
        public PrioritySet(int initialCapacity);
        public PrioritySet(IComparer<TPriority> comparer);
        public PrioritySet(int initialCapacity, IComparer<TPriority>? priorityComparer, IEqualityComparer<TElement>? elementComparer);
        public PrioritySet(IEnumerable<(TElement Element, TPriority Priority)> values);
        public PrioritySet(IEnumerable<(TElement Element, TPriority Priority)> values, IComparer<TPriority>? comparer, IEqualityComparer<TElement>? elementComparer);

        // Members shared with baseline PriorityQueue implementation
        public int Count { get; }
        public IComparer<TPriority> Comparer { get; }
        public void Enqueue(TElement element, TPriority priority);
        public TElement Peek();
        public bool TryPeek(out TElement element, out TPriority priority);
        public TElement Dequeue();
        public bool TryDequeue(out TElement element, out TPriority priority);
        public TElement EnqueueDequeue(TElement element, TPriority priority);

        // Update methods and friends
        public bool Contains(TElement element); // O(1)
        public bool TryRemove(TElement element); // O(log(n))
        public bool TryUpdate(TElement element, TPriority priority); // O(log(n))
        public void EnqueueOrUpdate(TElement element, TPriority priority); // O(log(n))

        public void Clear();
        public Enumerator GetEnumerator();
        public struct Enumerator : IEnumerator<(TElement Element, TPriority Priority)>, IEnumerator;
    }
}

рдкреНрд░рджрд░реНрд╢рди рддреБрд▓рдирд╛

рдореИрдВрдиреЗ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рд╣реАрдкрд╕реЙрд░реНрдЯ рдмреЗрдВрдЪрдорд╛рд░реНрдХ рд▓рд┐рдЦрд╛ рд╣реИ рдЬреЛ рджреЛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрдиреЛрдВ рдХреА рддреБрд▓рдирд╛ рдЙрдирдХреЗ рд╕рдмрд╕реЗ рдмреБрдирд┐рдпрд╛рджреА рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдореЗрдВ рдХрд░рддрд╛ рд╣реИред рдореИрдВрдиреЗ рдПрдХ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдмреЗрдВрдЪрдорд╛рд░реНрдХ рднреА рд╢рд╛рдорд┐рд▓ рдХрд┐рдпрд╛ рд╣реИ рдЬреЛ рддреБрд▓рдирд╛ рдХреЗ рд▓рд┐рдП рд▓рд┐рдВрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ:

BenchmarkDotNet=v0.12.1, OS=ubuntu 20.04
AMD EPYC 7452, 1 CPU, 4 logical and 2 physical cores
.NET Core SDK=5.0.100-rc.2.20479.15
  [Host]     : .NET Core 5.0.0 (CoreCLR 5.0.20.47505, CoreFX 5.0.20.47505), X64 RyuJIT
  DefaultJob : .NET Core 5.0.0 (CoreCLR 5.0.20.47505, CoreFX 5.0.20.47505), X64 RyuJIT

| рд╡рд┐рдзрд┐ | рдЖрдХрд╛рд░ | рдорддрд▓рдм | рддреНрд░реБрдЯрд┐ | рдПрд╕рдЯреАрдбреАрджреЗрд╡ | рдЕрдиреБрдкрд╛рдд | рдЕрдиреБрдкрд╛рдд рдПрд╕рдбреА | рдЬрдирд░рд▓ 0 | рдЬрдирд░рд▓ 1 | рдЬрдирд░рд▓ 2 | рдЖрд╡рдВрдЯрд┐рдд |
|-------------- |------ |---------------:|----------: |----------:|------:|----------:|--------:|-------- :|----------:|----------:|
| рд▓рд┐рдВрдХрд╕реЙрд░реНрдЯ | 30 | 1.439 рдпреВрдПрд╕ | 0.0072 рдпреВрдПрд╕ | 0.0064 рдпреВрдПрд╕ | 1.00 | 0.00 | 0.0095 | - | - | 672 рдмреА |
| рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрддрд╛рд░ | 30 | 1.450 рдпреВрдПрд╕ | 0.0085 рдпреВрдПрд╕ | 0.0079 рд╣рдореЗрдВ | 1.01 | 0.01 | - | - | - | - |
| рдкреНрд░рд╛рдпреЛрд░рд┐рдЯреАрд╕реЗрдЯ | 30 | 2.778 рдпреВрдПрд╕ | 0.0217 рд╣рдореЗрдВ | 0.0192 рдпреВрдПрд╕ | 1.93 | 0.02 | - | - | - | - |
| | | | | | | | | | | |
| рд▓рд┐рдВрдХрд╕реЙрд░реНрдЯ | 300 | 24.727 рдпреВрдПрд╕ | 0.1032 рдпреВрдПрд╕ | 0.0915 рд╣рдореЗрдВ | 1.00 | 0.00 | 0.0305 | - | - | 3912 рдмреА |
| рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрддрд╛рд░ | 300 | 29.510 рд╣рдореЗрдВ | 0.0995 рд╣рдореЗрдВ | 0.0882 рд╣рдореЗрдВ | 1.19 | 0.01 | - | - | - | - |
| рдкреНрд░рд╛рдпреЛрд░рд┐рдЯреАрд╕реЗрдЯ | 300 | 47.715 рд╣рдореЗрдВ | 0.4455 рд╣рдореЗрдВ | 0.4168 рд╣рдореЗрдВ | 1.93 | 0.02 | - | - | - | - |
| | | | | | | | | | | |
| рд▓рд┐рдВрдХрд╕реЙрд░реНрдЯ | 3000 | 412.015 рд╣рдореЗрдВ | 1.5495 рдпреВрдПрд╕ | 1.3736 рдпреВрдПрд╕ | 1.00 | 0.00 | 0.4883 | - | - | 36312 рдмреА |
| рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрддрд╛рд░ | 3000 | 491.722 рд╣рдореЗрдВ | 4.1463 рд╣рдореЗрдВ | 3.8785 рдпреВрдПрд╕ | 1.19 | 0.01 | - | - | - | - |
| рдкреНрд░рд╛рдпреЛрд░рд┐рдЯреАрд╕реЗрдЯ | 3000 | 677.959 рдпреВрдПрд╕ | 3.1996 рд╣рдореЗрдВ | 2.4981 рдпреВрдПрд╕ | 1.64 | 0.01 | - | - | - | - |
| | | | | | | | | | | |
| рд▓рд┐рдВрдХрд╕реЙрд░реНрдЯ | 30000 | 5,223.560 рдпреВрдПрд╕ | 11.9077 рдпреВрдПрд╕ | 9.9434 рдпреВрдПрд╕ | 1.00 | 0.00 | 93.7500 | 93.7500 | 93.7500 | 360910 рдмреА |
| рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрддрд╛рд░ | 30000 | 5,688.625 рд╣рдореЗрдВ | 53.0746 рдпреВрдПрд╕ | 49.6460 рдпреВрдПрд╕ | 1.09 | 0.01 | - | - | - | 2 рдмреА |
| рдкреНрд░рд╛рдпреЛрд░рд┐рдЯреАрд╕реЗрдЯ | 30000 | 8,124.306 рдпреВрдПрд╕ | 39.9498 рдпреВрдПрд╕ | 37.3691 рдпреВрдПрд╕ | 1.55 | 0.01 | - | - | - | 4 рдмреА |

рдЬреИрд╕рд╛ рдХрд┐ рдЙрдореНрдореАрдж рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИ, рдЯреНрд░реИрдХрд┐рдВрдЧ рддрддреНрд╡ рд╕реНрдерд╛рдиреЛрдВ рдХрд╛ рдУрд╡рд░рд╣реЗрдб рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдкреНрд░рджрд░реНрд╢рди рд╣рд┐рдЯ рдЬреЛрдбрд╝рддрд╛ рд╣реИ, рдмреЗрд╕рд▓рд╛рдЗрди рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рд▓рдЧрднрдЧ 40-50% рдзреАрдорд╛ред

рдореИрдВ рд╕рднреА рдкреНрд░рдпрд╛рд╕реЛрдВ рдХреА рд╕рд░рд╛рд╣рдирд╛ рдХрд░рддрд╛ рд╣реВрдВ, рдореИрдВ рджреЗрдЦрддрд╛ рд╣реВрдВ рдХрд┐ рдЗрд╕рдореЗрдВ рдмрд╣реБрдд рд╕рдордп рдФрд░ рдКрд░реНрдЬрд╛ рд▓рдЧреА рд╣реИред

  1. рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ 2 рд▓рдЧрднрдЧ рд╕рдорд╛рди рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХрд╛ рдХрд╛рд░рдг рдирд╣реАрдВ рджреЗрдЦрддрд╛, рдЬрд╣рд╛рдВ рдПрдХ рджреВрд╕рд░реЗ рдХрд╛ рдирд┐рдореНрди рд╕рдВрд╕реНрдХрд░рдг рд╣реИред
  2. рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрджрд┐ рдЖрдк рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрддрд╛рд░ рдХреЗ рдРрд╕реЗ 2 рд╕рдВрд╕реНрдХрд░рдг рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рднреА рдореИрдВ рдпрд╣ рдирд╣реАрдВ рджреЗрдЦрддрд╛ рдХрд┐ 20 рджрд┐рди рдкрд╣рд▓реЗ рдХреЗ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрддрд╛рд░ рдкреНрд░рд╕реНрддрд╛рд╡ (v2.2) рд╕реЗ "рдмреЗрд╣рддрд░" рд╕рдВрд╕реНрдХрд░рдг рдХреИрд╕реЗ рдмреЗрд╣рддрд░ рд╣реИред

рдЯреАрдПрд▓; рдбреЙ:

  • рдпрд╣ рдкреНрд░рд╕реНрддрд╛рд╡ рд░реЛрдорд╛рдВрдЪрдХ рд╣реИ !! рд▓реЗрдХрд┐рди рдпрд╣ рдЕрднреА рддрдХ рдореЗрд░реЗ рдЙрдЪреНрдЪ-рдкреВрд░реНрдг рдЙрдкрдпреЛрдЧ-рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдлрд┐рдЯ рдирд╣реАрдВ рд╣реИред
  • > рдореЗрд░реЗ рдХрдВрдкреНрдпреВрдЯреЗрд╢рдирд▓ рдЬреНрдпреЛрдореЗрдЯреНрд░реА/рдореЛрд╢рди рдкреНрд▓рд╛рдирд┐рдВрдЧ рдкрд░рдлреЙрд░реНрдореЗрдВрд╕ рд▓реЛрдб рдХрд╛ 90% PQ рдПрдирдХреНрдпреВ/рдбреЗрдХреНрдпреВ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдПрд▓реНрдЧреЛрд░рд┐рдердо рдореЗрдВ рдкреНрд░рдореБрдЦ N^m LogN рд╣реИред
  • рдореИрдВ рдЕрд▓рдЧ рдкреАрдХреНрдпреВ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рдкрдХреНрд╖ рдореЗрдВ рд╣реВрдВред рдореБрдЭреЗ рдЖрдорддреМрд░ рдкрд░ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдЕрдкрдбреЗрдЯ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИ, рдФрд░ 2x рдмрджрддрд░ perf рдЕрд╕реНрд╡реАрдХрд╛рд░реНрдп рд╣реИред
  • рдкреНрд░рд╛рдпреЛрд░рд┐рдЯреАрд╕реЗрдЯ рдПрдХ рднреНрд░рдорд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдирд╛рдо рд╣реИ рдФрд░ рдкреНрд░рд╛рдпреЛрд░рд┐рдЯреА рдХреНрдпреВ рдмрдирд╛рдо рдЦреЛрдЬрдиреЗ рдпреЛрдЧреНрдп рдирд╣реАрдВ рд╣реИ
  • рджреЛ рдмрд╛рд░ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рд╕рдВрдЧреНрд░рд╣рд┐рдд рдХрд░рдирд╛ (рдПрдХ рдмрд╛рд░ рдореЗрд░реЗ рддрддреНрд╡ рдореЗрдВ, рдПрдХ рдмрд╛рд░ рдХрддрд╛рд░ рдореЗрдВ) рдорд╣рдВрдЧрд╛ рд▓рдЧрддрд╛ рд╣реИред рд╕реНрдЯреНрд░рдХреНрдЪрд░ рдХреЙрдкреА рдФрд░ рдореЗрдореЛрд░реА рдЙрдкрдпреЛрдЧред
  • рдпрджрд┐ рдХрдВрдкреНрдпреВрдЯрд┐рдВрдЧ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдорд╣рдВрдЧреА рд╣реЛрддреА, рддреЛ рдореИрдВ рдмрд╕ рдПрдХ рдЯрдкрд▓ (priority: ComputePriority(element), element) рдХреЛ рдПрдХ PQ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддрд╛, рдФрд░ рдореЗрд░рд╛ рдкреНрд░рд╛рдердорд┐рдХрддрд╛-рдкреНрд░рд╛рдкреНрддрдХрд░реНрддрд╛ рдлрд╝рдВрдХреНрд╢рди рдХреЗрд╡рд▓ tuple => tuple.priority ред
  • рдкреНрд░рджрд░реНрд╢рди рдХреЛ рдкреНрд░рддрд┐-рдСрдкрд░реЗрд╢рди рдпрд╛ рд╡реИрдХрд▓реНрдкрд┐рдХ рд░реВрдк рд╕реЗ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рджреБрдирд┐рдпрд╛ рдХреЗ рдЙрдкрдпреЛрдЧ-рдорд╛рдорд▓реЛрдВ рдкрд░ рдмреЗрдВрдЪрдорд╛рд░реНрдХ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдЧреНрд░рд╛рдлрд╝ рдкрд░ рдЕрдиреБрдХреВрд▓рд┐рдд рдорд▓реНрдЯреА-рд╕реНрдЯрд╛рд░реНрдЯ рдорд▓реНрдЯреА-рдПрдВрдб рд╕рд░реНрдЪ)
  • рдЕрдирд┐рдпрдВрддреНрд░рд┐рдд рдЧрдгрдирд╛ рд╡реНрдпрд╡рд╣рд╛рд░ рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рд╣реИред рдХрддрд╛рд░-рдЬреИрд╕реА Dequeue () - рдСрд░реНрдбрд░ рд╕реЗрдореЗрдиреНрдЯрд┐рдХреНрд╕ рдХреЛ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рджреЗрдВ?
  • рдХреНрд▓реЛрди рдСрдкрд░реЗрд╢рди рдФрд░ рдорд░реНрдЬ рдСрдкрд░реЗрд╢рди рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред
  • рд╕реНрдерд┐рд░-рдЕрд╡рд╕реНрдерд╛ рдХреЗ рдЙрдкрдпреЛрдЧ рдореЗрдВ рдореВрд▓ рд╕рдВрдЪрд╛рд▓рди 0-рдЖрд╡рдВрдЯрди рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдореИрдВ рдЗрди рдХрддрд╛рд░реЛрдВ рдХреЛ рдкреВрд▓ рдХрд░реВрдВрдЧрд╛ред
  • EnqueueMany рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ рдЬреЛ рдкреВрд▓рд┐рдВрдЧ рдореЗрдВ рд╕рд╣рд╛рдпрддрд╛ рдХреЗ рд▓рд┐рдП рд╣реАрдкрд┐рдлрд╛рдИ рдХрд░рддрд╛ рд╣реИред

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

рджреЛ-рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди (рд╣рд╛рдБ рдмрдирд╛рдо рдирд╣реАрдВ рдЕрджреНрдпрддрди рд╕рдорд░реНрдерди) рдмрд╣рд╕ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ред

рдирд╛рдордХрд░рдг:

  • рдкреНрд░рд╛рдпреЛрд░рд┐рдЯреАрд╕реЗрдЯ рдХрд╛ рдЕрд░реНрде рд╣реИ рд╕реЗрдЯ рд╕реЗрдореЗрдиреНрдЯрд┐рдХреНрд╕, рд▓реЗрдХрд┐рди рдХреНрдпреВ рдЖрдИрд╕реЗрдЯ рдХреЛ рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред
  • рдЖрдк UpdatablePriorityQueue рдирд╛рдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдЬрд┐рд╕реЗ рдЦреЛрдЬрдирд╛ рдЖрд╕рд╛рди рд╣реИ рдпрджрд┐ рдореИрдВ рдкреНрд░рд╛рдпреЛрд░рд┐рдЯреА рдХреНрдпреВ рдЦреЛрдЬрддрд╛ рд╣реВрдБред

рдкреНрд░рджрд░реНрд╢рди:

  • рдореЗрд░реА рдЬреНрдпрд╛рдорд┐рддрд┐/рдпреЛрдЬрдирд╛ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдореЗрдВ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрддрд╛рд░ рдХрд╛ рдкреНрд░рджрд░реНрд╢рди рд▓рдЧрднрдЧ рд╣рдореЗрд╢рд╛ рдореЗрд░рд╛ рдкреНрд░рджрд░реНрд╢рди рдЕрдбрд╝рдЪрди (>90%) рд╣реЛрддрд╛ рд╣реИ
  • Func . рдкрд╛рд╕ рдХрд░рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВрдпрд╛ рддреБрд▓рдирд╛TP рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХреЛ рдХреЙрдкреА рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп (рдорд╣рдВрдЧрд╛!) рдпрджрд┐ рдХрдВрдкреНрдпреВрдЯрд┐рдВрдЧ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдорд╣рдВрдЧреА рд╣реИ, рддреЛ рдореИрдВ рдПрдХ рдкреАрдХреНрдпреВ рдореЗрдВ (рдкреНрд░рд╛рдердорд┐рдХрддрд╛, рддрддреНрд╡) рдбрд╛рд▓реВрдВрдЧрд╛ рдФрд░ рдПрдХ рддреБрд▓рдирд╛ рдкрд╛рд╕ рдХрд░реВрдВрдЧрд╛ рдЬреЛ рдореЗрд░реА рдХреИрд╢реНрдб рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХреЛ рджреЗрдЦрддрд╛ рд╣реИред
  • рдореЗрд░реЗ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреА рдПрдХ рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдХреЛ PQ рдЕрдкрдбреЗрдЯ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдореИрдВ рдПрдХ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдкреАрдХреНрдпреВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рддрд╛ рд╣реВрдВ рдЬреЛ рдЕрдкрдбреЗрдЯ рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдХрд┐рд╕реА рдРрд╕реА рд╕реБрд╡рд┐рдзрд╛ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП 2x perf рд▓рд╛рдЧрдд рд╣реИ рдЬрд┐рд╕рдХреА рдореБрдЭреЗ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ (рдЕрдкрдбреЗрдЯ рдХрд░рдирд╛) рддреЛ рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рдмреЗрдХрд╛рд░ рд╣реИред
  • рдкреНрд░рджрд░реНрд╢рди рд╡рд┐рд╢реНрд▓реЗрд╖рдг/ рдЯреНрд░реЗрдбрдСрдл рдХреЗ рд▓рд┐рдП, рдкреНрд░рддрд┐ рдСрдкрд░реЗрд╢рди рдбреЗрдХреНрдпреВ рдХреА рд╕рд╛рдкреЗрдХреНрд╖ рджреАрд╡рд╛рд░-рд╕рдордп рд▓рд╛рдЧрдд рдЬрд╛рдирдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реЛрдЧрд╛
  • рдЖрдкрдХреЗ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░реНрд╕ рдХреЛ Heapify рдХрд░рддреЗ рд╣реБрдП рджреЗрдЦрдХрд░ рдореБрдЭреЗ рдЦреБрд╢реА рд╣реБрдИред рдПрдХ рдирд┐рд░реНрдорд╛рддрд╛ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ рдЬреЛ рдЧрдгрдирд╛ рдЖрд╡рдВрдЯрди рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ IList, рд╕реВрдЪреА рдпрд╛ рд╕рд░рдгреА рд▓реЗрддрд╛ рд╣реИред
  • рдПрдХ EnqueueMany рдХреЛ рдЙрдЬрд╛рдЧрд░ рдХрд░рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ рдЬреЛ PQ рд╢реБрд░реВ рдореЗрдВ рдЦрд╛рд▓реА рд╣реЛрдиреЗ рдкрд░ Heapify рдХрд░рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╣рд╛рдИ-рдкрд░рдл рдореЗрдВ рдпрд╣ рдкреВрд▓ рд╕рдВрдЧреНрд░рд╣ рдХреЗ рд▓рд┐рдП рдЖрдо рд╣реИред
  • рдпрджрд┐ рддрддреНрд╡реЛрдВ рдореЗрдВ рд╕рдВрджрд░реНрдн рдирд╣реАрдВ рд╣реИрдВ, рддреЛ рд╕реНрдкрд╖реНрдЯ рд╢реВрдиреНрдп рдирд╣реАрдВ рд╕рд░рдгреА рдмрдирд╛рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред
  • рдПрдирдХреНрдпреВ/рдбреЗрдХреНрдпреВ рдореЗрдВ рдЖрд╡рдВрдЯрди рдЕрд╕реНрд╡реАрдХрд╛рд░реНрдп рд╣реИрдВред рдкреВрд▓ рдХрд┐рдП рдЧрдП рдереНрд░реЗрдб-рд╕реНрдерд╛рдиреАрдп рд╕рдВрдЧреНрд░рд╣ рдХреЗ рд╕рд╛рде, рдореЗрд░реЗ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдкреНрд░рджрд░реНрд╢рди рдХрд╛рд░рдгреЛрдВ рд╕реЗ рд╢реВрдиреНрдп-рдЖрд╡рдВрдЯрд┐рдд рд╣реИрдВред

рдПрдкреАрдЖрдИ:

  • рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрддрд╛рд░ рдХреЛ рдХреНрд▓реЛрди рдХрд░рдирд╛ рдЖрдкрдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд╕рд╛рде рдПрдХ рдЫреЛрдЯрд╛ рдСрдкрд░реЗрд╢рди рд╣реИ рдФрд░ рдЕрдХреНрд╕рд░ рдЙрдкрдпреЛрдЧреА рд╣реЛрддрд╛ рд╣реИред

    • рд╕рдВрдмрдВрдзрд┐рдд: рдХреНрдпрд╛ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрддрд╛рд░ рдХреА рдЧрдгрдирд╛ рдореЗрдВ рдХрддрд╛рд░ рдХреА рддрд░рд╣ рд╢рдмреНрджрд╛рд░реНрде рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП? рдореИрдВ рдХрддрд╛рд░ рдХреЗ рд╕рдорд╛рди рдПрдХ рдбреЗрдХреНрдпреВ-рдСрд░реНрдбрд░ рд╕рдВрдЧреНрд░рд╣ рдХреА рдЕрдкреЗрдХреНрд╖рд╛ рдХрд░рддрд╛ рд╣реВрдВред рдореИрдВ рдЙрдореНрдореАрдж рдХрд░рддрд╛ рд╣реВрдВ рдХрд┐ рдирдИ рд╕реВрдЪреА (myPriorityQueue) рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХреНрдпреВ рдХреЛ рди рдмрджрд▓реЗрдВ, рд▓реЗрдХрд┐рди рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдЕрднреА рд╡рд░реНрдгрди рдХрд┐рдпрд╛ рд╣реИ, рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред

  • рдЬреИрд╕рд╛ рдХрд┐ рдКрдкрд░ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХреЗ рд╕рд╛рде рдбрд╛рд▓рдиреЗ рдХреЗ рдмрдЬрд╛рдп Func<TElement, TPriority> рд▓реЗрдирд╛ рдмреЗрд╣рддрд░ рд╣реИред рдпрджрд┐ рдХрдВрдкреНрдпреВрдЯрд┐рдВрдЧ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдорд╣рдВрдЧреА рд╣реИ, рддреЛ рдореИрдВ рдмрд╕ (priority, element) рд╕рдореНрдорд┐рд▓рд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ рдФрд░ рдПрдХ func tuple => tuple.priority рдкреНрд░рджрд╛рди рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ
  • рджреЛ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрддрд╛рд░реЛрдВ рдХреЛ рдорд┐рд▓рд╛рдирд╛ рдХрднреА-рдХрднреА рдЙрдкрдпреЛрдЧреА рд╣реЛрддрд╛ рд╣реИред
  • рдпрд╣ рдЕрдЬреАрдм рдмрд╛рдд рд╣реИ рдХрд┐ рдкреАрдХ рдПрдХ рдЯреАрдЖрдЗрдЯрдо рд▓реМрдЯрд╛рддрд╛ рд╣реИ рд▓реЗрдХрд┐рди рдПрдиреНрдпреВрдорд░реЗрд╢рди рдПрдВрдб рдПрдирдХреНрдпреВ рдореЗрдВ (рдЯреАрдЖрдЗрдЯрдо, рдЯреАрдкреНрд░рд┐рдпреЛрд░рд┐рдЯреА) рд╣реИред

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

рдЕрдВрдд рдореЗрдВ, рдпрд╣ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐ рдореИрдВ рдЕрдХреНрд╕рд░ рд╕рд░рдгреА рддрддреНрд╡реЛрдВ рдХреЗ рдмрдЬрд╛рдп рдПрдХ рд╕рд░рдгреА рдХреЗ рд╕реВрдЪрдХрд╛рдВрдХреЛрдВ рдХреЛ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрддрд╛рд░ рдореЗрдВ рд╕рдореНрдорд┐рд▓рд┐рдд рдХрд░рддрд╛ (x, isStartElseEnd, intervalId) рдФрд░ x рджреНрд╡рд╛рд░рд╛ рдСрд░реНрдбрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдлрд┐рд░ isStartElseEnd рджреНрд╡рд╛рд░рд╛ред рдРрд╕рд╛ рдЕрдХреНрд╕рд░ рдЗрд╕рд▓рд┐рдП рд╣реЛрддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдореЗрд░реЗ рдкрд╛рд╕ рдЕрдиреНрдп рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛рдПрдВ рд╣реЛрддреА рд╣реИрдВ рдЬреЛ рдХрд┐рд╕реА рдЗрдВрдбреЗрдХреНрд╕ рд╕реЗ рдХреБрдЫ рдЧрдгрдирд╛ рдХрд┐рдП рдЧрдП рдбреЗрдЯрд╛ рдкрд░ рдореИрдк рдХрд░рддреА рд╣реИрдВред

@pgolebiowski рдореИрдВрдиреЗ рдЖрдкрдХреЗ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдпреБрдЧреНрдорди рдвреЗрд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рдмреЗрдВрдЪрдорд╛рд░реНрдХ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд░рдиреЗ рдХреА рд╕реНрд╡рддрдВрддреНрд░рддрд╛ рд▓реА, рдмрд╕ рдЗрд╕рд▓рд┐рдП рд╣рдо рд╕реАрдзреЗ рддреАрдиреЛрдВ рджреГрд╖реНрдЯрд┐рдХреЛрдгреЛрдВ рдХреЗ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреА рддреБрд▓рдирд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣рд╛рдБ рдкрд░рд┐рдгрд╛рдо рд╣реИрдВ:

| рд╡рд┐рдзрд┐ | рдЖрдХрд╛рд░ | рдорддрд▓рдм | рддреНрд░реБрдЯрд┐ | рдПрд╕рдЯреАрдбреАрджреЗрд╡ | рдорд╛рдзреНрдпрд┐рдХрд╛ | рдЬрдирд░рд▓ 0 | рдЬрдирд░рд▓ 1 | рдЬрдирд░рд▓ 2 | рдЖрд╡рдВрдЯрд┐рдд |
|-------------- |---------- |---------------------:|---- -------------:|-----------------:|---------------- ---:|----------:|------:|------:|-----------:|
| рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрддрд╛рд░ | 10 | 774.7 рдПрдирдПрд╕ | 3.30 рдПрдирдПрд╕ | 3.08 рдПрдирдПрд╕ | 773.2 рдПрдирдПрд╕ | - | - | - | - |
| рдкреНрд░рд╛рдпреЛрд░рд┐рдЯреАрд╕реЗрдЯ | 10 | 1,643.0 рдПрдирдПрд╕ | 3.89 рдПрдирдПрд╕ | 3.45 рдПрдирдПрд╕ | 1,642.8 рдПрдирдПрд╕ | - | - | - | - |
| рдкреЗрдпрд░рд┐рдВрдЧрд╣реАрдк | 10 | 1,660.2 рдПрдирдПрд╕ | 14.11 рдПрдирдПрд╕ | 12.51 рдПрдирдПрд╕ | 1,657.2 рдПрдирдПрд╕ | 0.0134 | - | - | 960 рдмреА |
| рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрддрд╛рд░ | 50 | 6,413.0 рдПрдирдПрд╕ | 14.95 рдПрдирдПрд╕ | 13.99 рдПрдирдПрд╕ | 6,409.5 рдПрдирдПрд╕ | - | - | - | - |
| рдкреНрд░рд╛рдпреЛрд░рд┐рдЯреАрд╕реЗрдЯ | 50 | 12,193.1 рдПрдирдПрд╕ | 35.41 рдПрдирдПрд╕ | 29.57 рдПрдирдПрд╕ | 12,188.3 рдПрдирдПрд╕ | - | - | - | - |
| рдкреЗрдпрд░рд┐рдВрдЧрд╣реАрдк | 50 | 13,955.8 рдПрдирдПрд╕ | 193.36 рдПрдирдПрд╕ | 180.87 рдПрдирдПрд╕ | 13,989.2 рдПрдирдПрд╕ | 0.0610 | - | - | 4800 рдмреА |
| рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрддрд╛рд░ | 150 | 27,402.5 рдПрдирдПрд╕ | 76.52 рдПрдирдПрд╕ | 71.58 рдПрдирдПрд╕ | 27,410.2 рдПрдирдПрд╕ | - | - | - | - |
| рдкреНрд░рд╛рдпреЛрд░рд┐рдЯреАрд╕реЗрдЯ | 150 | 48,485.8 рдПрдирдПрд╕ | 160.22 рдПрдирдПрд╕ | 149.87 рдПрдирдПрд╕ | 48,476.3 рдПрдирдПрд╕ | - | - | - | - |
| рдкреЗрдпрд░рд┐рдВрдЧрд╣реАрдк | 150 | 56,951.2 рдПрдирдПрд╕ | 190.52 рдПрдирдПрд╕ | 168.89 рдПрдирдПрд╕ | 56,953.6 рдПрдирдПрд╕ | 0.1831 | - | - | 14400 рдмреА |
| рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрддрд╛рд░ | 500 | 124,933.7 рдПрдирдПрд╕ | 429.20 рдПрдирдПрд╕ | 380.48 рдПрдирдПрд╕ | 124,824.4 рдПрдирдПрд╕ | - | - | - | - |
| рдкреНрд░рд╛рдпреЛрд░рд┐рдЯреАрд╕реЗрдЯ | 500 | 206,310.0 рдПрдирдПрд╕ | 433.97 рдПрдирдПрд╕ | 338.81 рдПрдирдПрд╕ | 206,319.0 рдПрдирдПрд╕ | - | - | - | - |
| рдкреЗрдпрд░рд┐рдВрдЧрд╣реАрдк | 500 | 229,423.9 рдПрдирдПрд╕ | 3,213.33 рдПрдирдПрд╕ | 2,848.53 рдПрдирдПрд╕ | 230,398.7 рдПрдирдПрд╕ | 0.4883 | - | - | 48000 рдмреА |
| рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрддрд╛рд░ | 1000 | 284,481.8 рдПрдирдПрд╕ | 475.91 рдПрдирдПрд╕ | 445.16 рдПрдирдПрд╕ | 284,445.6 рдПрдирдПрд╕ | - | - | - | - |
| рдкреНрд░рд╛рдпреЛрд░рд┐рдЯреАрд╕реЗрдЯ | 1000 | 454,989.4 рдПрдирдПрд╕ | 3,712.11 рдПрдирдПрд╕ | 3,472.31 рдПрдирдПрд╕ | 455,354.0 рдПрдирдПрд╕ | - | - | - | - |
| рдкреЗрдпрд░рд┐рдВрдЧрд╣реАрдк | 1000 | 459,049.3 рдПрдирдПрд╕ | 1,706.28 рдПрдирдПрд╕ | 1,424.82 рдПрдирдПрд╕ | 459,364.9 рдПрдирдПрд╕ | 0.9766 | - | - | 96000 рдмреА |
| рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрддрд╛рд░ | 10000 | 3,788,802.4 рдПрдирдПрд╕ | 11,715.81 рдПрдирдПрд╕ | 10,958.98 рдПрдирдПрд╕ | 3,787,811.9 рдПрдирдПрд╕ | - | - | - | 1 рдмреА |
| рдкреНрд░рд╛рдпреЛрд░рд┐рдЯреАрд╕реЗрдЯ | 10000 | 5,963,100.4 рдПрдирдПрд╕ | 26,669.04 рдПрдирдПрд╕ | 22,269.86 рдПрдирдПрд╕ | 5,950,915.5 рдПрдирдПрд╕ | - | - | - | 2 рдмреА |
| рдкреЗрдпрд░рд┐рдВрдЧрд╣реАрдк | 10000 | 6,789,719.0 рдПрдирдПрд╕ | 134,453.01 рдПрдирдПрд╕ | 265,397.13 рдПрдирдПрд╕ | 6,918,392.9 рдПрдирдПрд╕ | 7.8125 | - | - | 960002 рдмреА |
| рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрддрд╛рд░ | 1000000 | 595,059,170.7 рдПрдирдПрд╕ | 4,001,349.38 рдПрдирдПрд╕ | 3,547,092.00 рдПрдирдПрд╕ | 595,716,610.5 рдПрдирдПрд╕ | - | - | - | 4376 рдмреА |
| рдкреНрд░рд╛рдпреЛрд░рд┐рдЯреАрд╕реЗрдЯ | 1000000 | 1,592,037,780.9 рдПрдирдПрд╕ | 13,925,896.05 рдПрдирдПрд╕ | 12,344,944.12 рдПрдирдПрд╕ | 1,591,051,886.5 рдПрдирдПрд╕ | - | - | - | 288 рдмреА |
| рдкреЗрдпрд░рд┐рдВрдЧрд╣реАрдк | 1000000 | 1,858,670,560.7 рдПрдирдПрд╕ | 36,405,433.20 рдПрдирдПрд╕ | 59,815,170.76 рдПрдирдПрд╕ | 1,838,721,629.0 рдПрдирдПрд╕ | 1000000 | - | - | 96000376 рдмреА |

рдЪрд╛рдмреА рдЫреАрди рд▓реЗрдирд╛

  • ~ рдкреЗрдпрд░рд┐рдВрдЧ рд╣реАрдк рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЕрдкрдиреЗ рд╕рд░рдгреА-рд╕рдорд░реНрдерд┐рдд рд╕рдордХрдХреНрд╖реЛрдВ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЕрд╕рдореНрдмрджреНрдз рд░реВрдк рд╕реЗ рдмрд╣реБрдд рдмреЗрд╣рддрд░ рдкреНрд░рджрд░реНрд╢рди рдХрд░рддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рдЫреЛрдЯреЗ рдвреЗрд░ рдЖрдХрд╛рд░реЛрдВ (<50 рддрддреНрд╡реЛрдВ) рдХреЗ рд▓рд┐рдП 2x рддрдХ рдзреАрдорд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рд▓рдЧрднрдЧ 1000 рддрддреНрд╡реЛрдВ рдХреЛ рдкрдХрдбрд╝ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдХрд╛рд░ 10^6~ рдХреЗ рдвреЗрд░ рдХреЗ рд▓рд┐рдП 2x рддрдХ рддреЗрдЬ рд╣реИред
  • рдЬреИрд╕рд╛ рдХрд┐ рдЕрдкреЗрдХреНрд╖рд┐рдд рдерд╛, рдпреБрдЧреНрдорди рдвреЗрд░ рдвреЗрд░ рдЖрд╡рдВрдЯрди рдХреА рдПрдХ рдмрдбрд╝реА рдорд╛рддреНрд░рд╛ рдХрд╛ рдЙрддреНрдкрд╛рджрди рдХрд░рддрд╛ рд╣реИред
  • "рдкреНрд░рд╛рдердорд┐рдХрддрд╛рд╕реЗрдЯ" рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд▓рдЧрд╛рддрд╛рд░ рдзреАрдорд╛ рд╣реИ ~ рддреАрдиреЛрдВ рджрд╛рд╡реЗрджрд╛рд░реЛрдВ рдореЗрдВ рд╕рдмрд╕реЗ рдзреАрдорд╛ ~, рдЗрд╕рд▓рд┐рдП рд╣рдо рдЙрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЛ рдЖрдЧреЗ рдмрдврд╝рд╛рдирд╛ рдирд╣реАрдВ рдЪрд╛рд╣рддреЗ рд╣реИрдВред

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

рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: рдореЗрд░реЗ рдмреЗрдВрдЪрдорд╛рд░реНрдХ рдореЗрдВ рдмрдЧрдлрд┐рдХреНрд╕ рдХреЗ рдмрд╛рдж рдкрд░рд┐рдгрд╛рдо рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛, рдзрдиреНрдпрд╡рд╛рдж @VisualMelon

@eiriktsarpalis PairingHeap рд▓рд┐рдП рдЖрдкрдХрд╛ рдмреЗрдВрдЪрдорд╛рд░реНрдХ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ, рдЧрд▓рдд рд╣реИ: Add рдХреЗ рдкреИрд░рд╛рдореАрдЯрд░ рдЧрд▓рдд рддрд░реАрдХреЗ рд╕реЗ рд╣реИрдВред рдЬрдм рдЖрдк рдЙрдирдХреА рдЕрджрд▓рд╛-рдмрджрд▓реА рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдПрдХ рдЕрд▓рдЧ рдХрд╣рд╛рдиреА рд╣реЛрддреА рд╣реИ: https://gist.github.com/VisualMelon/00885fe50f7ab0f4ae5cd1307312109f

(рдЬрдм рдореИрдВрдиреЗ рдЗрд╕реЗ рдкрд╣рд▓реА рдмрд╛рд░ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдерд╛ рддреЛ рдореИрдВрдиреЗ рд╡рд╣реА рдХрд┐рдпрд╛ рдерд╛)

рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпреБрдЧреНрдорди рдвреЗрд░ рддреЗрдЬ рдпрд╛ рдзреАрдорд╛ рд╣реИ, рдмрд▓реНрдХрд┐ рдпрд╣ рдЖрдкреВрд░реНрддрд┐ рдХрд┐рдП рдЧрдП рдбреЗрдЯрд╛ рдХреЗ рд╡рд┐рддрд░рдг/рдЖрджреЗрд╢ рдкрд░ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИред

@eiriktsarpalis рдлрд┐рд░ рд╕реЗ: рдкреНрд░рд╛рдпреЛрд░рд┐рдЯреАрд╕реЗрдЯ рдХреА рдЙрдкрдпреЛрдЧрд┐рддрд╛ ...
рд╣рдореЗрдВ рдЙрдореНрдореАрдж рдирд╣реАрдВ рдХрд░рдиреА рдЪрд╛рд╣рд┐рдП рдХрд┐ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рд╣реАрдкрд╕реЙрд░реНрдЯ рдХреЗ рд▓рд┐рдП рдзреАрдореЗ рд╣реЛрдиреЗ рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдХреБрдЫ рднреА рд╣реЛ, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдореЗрдВ рдкрд░рд┐рджреГрд╢реНрдп рдореЗрдВ рдХреЛрдИ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдЕрдкрдбреЗрдЯ рдирд╣реАрдВ рд╣реИред (рд╣реЗрдкрд╕реЙрд░реНрдЯ рдХреЗ рд▓рд┐рдП рднреА, рдЗрд╕рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ рдХрд┐ рдЖрдк рдбреБрдкреНрд▓реАрдХреЗрдЯ рднреА рд░рдЦрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдПрдХ рд╕реЗрдЯ рдЙрдкрдпреБрдХреНрдд рдирд╣реАрдВ рд╣реИред)

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

рдзрдиреНрдпрд╡рд╛рдж @VisualMelon , рдореИрдВрдиреЗ рдЖрдкрдХреЗ рд╕реБрдЭрд╛рдП рдЧрдП рдлрд╝рд┐рдХреНрд╕ рдХреЗ рдмрд╛рдж рдЕрдкрдиреЗ рдкрд░рд┐рдгрд╛рдо рдФрд░ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ред

рдмрд▓реНрдХрд┐ рдпрд╣ рдЖрдкреВрд░реНрддрд┐ рдХрд┐рдП рдЧрдП рдбреЗрдЯрд╛ рдХреЗ рд╡рд┐рддрд░рдг/рдЖрджреЗрд╢ рдкрд░ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИред

рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛрд╣реИ рдХрд┐ рдпрд╣ рдЗрд╕ рддрдереНрдп рд╕реЗ рд▓рд╛рднрд╛рдиреНрд╡рд┐рдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдХрддрд╛рд░рдмрджреНрдз рдкреНрд░рд╛рдердорд┐рдХрддрд╛рдПрдВ рдПрдХрд░рд╕ рдереАрдВред

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

@TimLovellSmith рдпрд╣рд╛рдВ рдореЗрд░рд╛ рд▓рдХреНрд╖реНрдп рд╕рдмрд╕реЗ рдЖрдо рдкреНрд░рд╛рдпреЛрд░рд┐рдЯреА

@miyu рдЖрдкрдХреА рд╡рд┐рд╕реНрддреГрдд рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рдЗрд╕рдХреА рдмрд╣реБрдд рд╕рд░рд╛рд╣рдирд╛ рдХреА рдЬрд╛рддреА рд╣реИ!

@TimLovellSmith рдореИрдВрдиреЗ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдмреЗрдВрдЪрдорд╛рд░реНрдХ рд▓рд┐рдЦрд╛ рд╣реИ рдЬреЛ рдЕрдкрдбреЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ:

| рд╡рд┐рдзрд┐ | рдЖрдХрд╛рд░ | рдорддрд▓рдм | рддреНрд░реБрдЯрд┐ | рдПрд╕рдЯреАрдбреАрджреЗрд╡ | рдорд╛рдзреНрдпрд┐рдХрд╛ | рдЬрдирд░рд▓ 0 | рдЬрдирд░рд▓ 1 | рдЬрдирд░рд▓ 2 | рдЖрд╡рдВрдЯрд┐рдд |
|--------------- |----------- |---------------:|---------- -----:|---------------:|---------------:|-------:| ------:|------:|-----------:|
| рдкреНрд░рд╛рдпреЛрд░рд┐рдЯреАрд╕реЗрдЯ | 10 | 1.052 рдпреВрдПрд╕ | 0.0106 рдпреВрдПрд╕ | 0.0099 рд╣рдореЗрдВ | 1.055 рдпреВрдПрд╕ | - | - | - | - |
| рдкреЗрдпрд░рд┐рдВрдЧрд╣реАрдк | 10 | 1.055 рдпреВрдПрд╕ | 0.0042 рдпреВрдПрд╕ | 0.0035 рдпреВрдПрд╕ | 1.055 рдпреВрдПрд╕ | 0.0057 | - | - | 480 рдмреА |
| рдкреНрд░рд╛рдпреЛрд░рд┐рдЯреАрд╕реЗрдЯ | 50 | 7.394 рдпреВрдПрд╕ | 0.0527 рдпреВрдПрд╕ | 0.0493 рд╣рдореЗрдВ | 7.380 рдпреВрдПрд╕ | - | - | - | - |
| рдкреЗрдпрд░рд┐рдВрдЧрд╣реАрдк | 50 | 8.587 рд╣рдореЗрдВ | 0.1678 рдпреВрдПрд╕ | 0.1570 рдпреВрдПрд╕ | 8.634 рдпреВрдПрд╕ | 0.0305 | - | - | 2400 рдмреА |
| рдкреНрд░рд╛рдпреЛрд░рд┐рдЯреАрд╕реЗрдЯ | 150 | 27.522 рдпреВрдПрд╕ | 0.0459 рдпреВрдПрд╕ | 0.0359 рдпреВрдПрд╕ | 27.523 рд╣рдореЗрдВ | - | - | - | - |
| рдкреЗрдпрд░рд┐рдВрдЧрд╣реАрдк | 150 | 32.045 рдпреВрдПрд╕ | 0.1076 рд╣рдореЗрдВ | 0.1007 рдпреВрдПрд╕ | 32.019 рдпреВрдПрд╕ | 0.0610 | - | - | 7200 рдмреА |
| рдкреНрд░рд╛рдпреЛрд░рд┐рдЯреАрд╕реЗрдЯ | 500 | 109.097 рдпреВрдПрд╕ | 0.6548 рдпреВрдПрд╕ | 0.6125 рдпреВрдПрд╕ | 109.162 рд╣рдореЗрдВ | - | - | - | - |
| рдкреЗрдпрд░рд┐рдВрдЧрд╣реАрдк | 500 | 131.647 рд╣рдореЗрдВ | 0.5401 рдпреВрдПрд╕ | 0.4510 рд╣рдореЗрдВ | 131.588 рд╣рдореЗрдВ | 0.2441 | - | - | 24000 рдмреА |
| рдкреНрд░рд╛рдпреЛрд░рд┐рдЯреАрд╕реЗрдЯ | 1000 | 238.184 рдпреВрдПрд╕ | 1.0282 рд╣рдореЗрдВ | 0.9618 рдпреВрдПрд╕ | 238.457 рдпреВрдПрд╕ | - | - | - | - |
| рдкреЗрдпрд░рд┐рдВрдЧрд╣реАрдк | 1000 | 293.236 рдпреВрдПрд╕ | 0.9396 рд╣рдореЗрдВ | 0.8889 рд╣рдореЗрдВ | 293.257 рд╣рдореЗрдВ | 0.4883 | - | - | 48000 рдмреА |
| рдкреНрд░рд╛рдпреЛрд░рд┐рдЯреАрд╕реЗрдЯ | 10000 | 3,035.982 рд╣рдореЗрдВ | 12.2952 рдпреВрдПрд╕ | 10.8994 рдпреВрдПрд╕ | 3,036.985 рдпреВрдПрд╕ | - | - | - | 1 рдмреА |
| рдкреЗрдпрд░рд┐рдВрдЧрд╣реАрдк | 10000 | 3,388.685 рд╣рдореЗрдВ | 16.0675 рдпреВрдПрд╕ | 38.1861 рдпреВрдПрд╕ | 3,374.565 рд╣рдореЗрдВ | - | - | - | 480002 рдмреА |
| рдкреНрд░рд╛рдпреЛрд░рд┐рдЯреАрд╕реЗрдЯ | 1000000 | 841,406.888 рд╣рдореЗрдВ | 16,788.4775 рдпреВрдПрд╕ | 15,703.9522 рд╣рдореЗрдВ | 840,888.389 рдпреВрдПрд╕ | - | - | - | 288 рдмреА |
| рдкреЗрдпрд░рд┐рдВрдЧрд╣реАрдк | 1000000 | 989,966.501 рдпреВрдПрд╕ | 19,722.687 рд╣рдореЗрдВ | 30,705.8191 рдпреВрдПрд╕ | 996,075.410 рдпреВрдПрд╕ | - | - | - | 48000448 рдмреА |

рдПрдХ рдЕрд▓рдЧ рдиреЛрдЯ рдкрд░, рдХреНрдпрд╛ рд╕реНрдерд┐рд░рддрд╛ рдХреА рдХрдореА рдкрд░ рд▓реЛрдЧреЛрдВ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдореБрджреНрджрд╛ (рдпрд╛ рдЧреИрд░-рдореБрджреНрджрд╛) рд╣реЛрдиреЗ рдкрд░ рдЙрдирдХреА рдЪрд░реНрдЪрд╛/рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд░рд╣реА рд╣реИ?

рд▓реЛрдЧреЛрдВ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рд╕реНрдерд┐рд░рддрд╛ рдХреА рдХрдореА (рдпрд╛ рдЧреИрд░-рдореБрджреНрджрд╛) рд╣реЛрдиреЗ рдкрд░ рдЙрдирдХреА рдЪрд░реНрдЪрд╛/рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд░рд╣реА рд╣реИ

рдХреЛрдИ рднреА рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╕реНрдерд┐рд░рддрд╛ рдХреА рдЧрд╛рд░рдВрдЯреА рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рд╕рдореНрдорд┐рд▓рди рдЖрджреЗрд╢ рдХреЗ рд╕рд╛рде рдХреНрд░рдорд┐рдХ рд╡реГрджреНрдзрд┐ рдХрд░рдХреЗ рд╕реНрдерд┐рд░рддрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдмрд╣реБрдд рд╕рд░рд▓ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП:

var pq = new PriorityQueue<string, (int priority, int insertionCount)>();
int insertionCount = 0;

foreach (string element in elements)
{
    int priority = 42;
    pq.Enqueue(element, (priority, insertionCount++));
}

рдореЗрд░реА рдкрд┐рдЫрд▓реА рдХреБрдЫ рдкреЛрд╕реНрдЯреЛрдВ рдХреЛ рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВ рдпрд╣ рдкрд╣рдЪрд╛рдирдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рдПрдХ рд▓реЛрдХрдкреНрд░рд┐рдп .NET рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрддрд╛рд░ рдХреИрд╕реА рджрд┐рдЦреЗрдЧреА, рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдбреЗрдЯрд╛ рдХрд╛ рдЕрдзреНрдпрдпрди рдХрд┐рдпрд╛:

  • .NET рд╕реНрд░реЛрдд рдХреЛрдб рдореЗрдВ рд╕рд╛рдорд╛рдиреНрдп рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрддрд╛рд░ рдЙрдкрдпреЛрдЧ рдкреИрдЯрд░реНрдиред
  • рдкреНрд░рддрд┐рд╕реНрдкрд░реНрдзреА рдврд╛рдВрдЪреЗ рдХреЗ рдореБрдЦреНрдп рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдореЗрдВ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрддрд╛рд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрдиред
  • рд╡рд┐рднрд┐рдиреНрди .NET рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрддрд╛рд░ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдХреЗ рдмреЗрдВрдЪрдорд╛рд░реНрдХред

рдЬрд┐рд╕рд╕реЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЯреЗрдХрдЕрд╡реЗ рдорд┐рд▓реЗ:

  • рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрддрд╛рд░ рдЙрдкрдпреЛрдЧ рдХреЗ 90% рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдЕрджреНрдпрддрди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИред
  • рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдЕрдкрдбреЗрдЯ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рд╕реЗ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рдПрдкреАрдЖрдИ рдЕрдиреБрдмрдВрдз рд╣реЛрддрд╛ рд╣реИ (рдпрд╛ рддреЛ рд╣реИрдВрдбрд▓ рдпрд╛ рддрддреНрд╡ рд╡рд┐рд╢рд┐рд╖реНрдЯрддрд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ)ред
  • рдореЗрд░реЗ рдмреЗрдВрдЪрдорд╛рд░реНрдХ рдореЗрдВ, рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдЕрдкрдбреЗрдЯ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЙрди рд▓реЛрдЧреЛрдВ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ 2-3x рдзреАрдореЗ рд╣реЛрддреЗ рд╣реИрдВ рдЬреЛ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред

рдЕрдЧрд▓рд╛ рдХрджрдо

рдЖрдЧреЗ рдмрдврд╝рддреЗ рд╣реБрдП, рдореЗрд░рд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рд╣реИ рдХрд┐ рд╣рдо .NET 6 рдХреЗ рд▓рд┐рдП рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХрд░реЗрдВ:

  1. рдПрдХ System.Collections.Generic.PriorityQueue рд╡рд░реНрдЧ рдХрд╛ рдкрд░рд┐рдЪрдп рджреЗрдВ рдЬреЛ рд╕рд░рд▓ рд╣реЛ, рд╣рдорд╛рд░реА рдЕрдзрд┐рдХрд╛рдВрд╢ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЛ рдкреВрд░рд╛ рдХрд░рддрд╛ рд╣реЛ рдФрд░ рдЬрд┐рддрдирд╛ рд╕рдВрднрд╡ рд╣реЛ рдЙрддрдирд╛ рдХреБрд╢рд▓ рд╣реЛред рдпрд╣ рдПрдХ рд╕рд░рдгреА-рд╕рдорд░реНрдерд┐рдд рдЪрддреБрд░реНрдзрд╛рддреБрдХ рдвреЗрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдЧрд╛ рдФрд░ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдЕрджреНрдпрддрдиреЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛ рдПрдХ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдпрд╣рд╛рдВ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛

  2. рд╣рдо рдХреБрд╢рд▓ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдЕрджреНрдпрддрдиреЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдвреЗрд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЛ рдкрд╣рдЪрд╛рдирддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдЗрд╕ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдПрдХ рд╡рд┐рд╢реЗрд╖ рд╡рд░реНрдЧ рдХреЛ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреА рджрд┐рд╢рд╛ рдореЗрдВ рдХрд╛рдо рдХрд░рдирд╛ рдЬрд╛рд░реА рд░рдЦреЗрдВрдЧреЗред рд╣рдо рдХреБрдЫ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк [ 1 , 2 ] рдХрд╛ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдЬрд┐рдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдХреЗ рдЕрдкрдиреЗ-рдЕрдкрдиреЗ рдЯреНрд░реЗрдб-рдСрдлрд╝ рд╕реЗрдЯ рд╣реИрдВред рдореЗрд░реА рд╕рд┐рдлрд╛рд░рд┐рд╢ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХреЛ рдмрд╛рдж рдХреЗ рдЪрд░рдг рдореЗрдВ рдкреЗрд╢ рдХрд░рдиреЗ рдХреА рд╣реЛрдЧреА, рдХреНрдпреЛрдВрдХрд┐ рдбрд┐рдЬрд╛рдЗрди рдХреЛ рдЕрдВрддрд┐рдо рд░реВрдк рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдФрд░ рдЕрдзрд┐рдХ рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рдЗрд╕ рд╕рдордп, рдореИрдВ рдЗрд╕ рд╕реВрддреНрд░ рдХреЗ рдпреЛрдЧрджрд╛рдирдХрд░реНрддрд╛рдУрдВ рдХреЛ рдзрдиреНрдпрд╡рд╛рдж рджреЗрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ @pgolebiowski рдФрд░ @TimLovellSmithред рдЖрдкрдХреА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдиреЗ рд╣рдорд╛рд░реА рдбрд┐рдЬрд╛рдЗрди рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд╛ рдорд╛рд░реНрдЧрджрд░реНрд╢рди рдХрд░рдиреЗ рдореЗрдВ рдмрд╣реБрдд рдмрдбрд╝реА рднреВрдорд┐рдХрд╛ рдирд┐рднрд╛рдИ рд╣реИред рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рд╣рдо рдЖрдкрдХрд╛ рдЗрдирдкреБрдЯ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд░рд╣реЗрдВрдЧреЗ рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рдЕрджреНрдпрддрди рдХрд░рдиреЗ рдпреЛрдЧреНрдп рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрддрд╛рд░ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рддреИрдпрд╛рд░ рдХрд░рддреЗ рд╣реИрдВред

рдЖрдЧреЗ рдмрдврд╝рддреЗ рд╣реБрдП, рдореЗрд░рд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рд╣реИ рдХрд┐ рд╣рдо .NET 6 рдХреЗ рд▓рд┐рдП рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХрд░реЗрдВ: [...]

рдмрдврд╝рд┐рдпрд╛ рд╣реИ :)

рдПрдХ System.Collections.Generic.PriorityQueue рд╡рд░реНрдЧ рдХрд╛ рдкрд░рд┐рдЪрдп рджреЗрдВ рдЬреЛ рд╕рд░рд▓ рд╣реЛ, рд╣рдорд╛рд░реА рдЕрдзрд┐рдХрд╛рдВрд╢ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЛ рдкреВрд░рд╛ рдХрд░рддрд╛ рд╣реЛ рдФрд░ рдЬрд┐рддрдирд╛ рд╕рдВрднрд╡ рд╣реЛ рдЙрддрдирд╛ рдХреБрд╢рд▓ рд╣реЛред рдпрд╣ рдПрдХ рд╕рд░рдгреА-рд╕рдорд░реНрдерд┐рдд рдЪрддреБрд░реНрдзрд╛рддреБрдХ рдвреЗрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдЧрд╛ рдФрд░ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдЕрджреНрдпрддрдиреЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред

рдЕрдЧрд░ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХреЛрдбрдмреЗрд╕ рдорд╛рд▓рд┐рдХреЛрдВ рдХрд╛ рдирд┐рд░реНрдгрдп рд╣реИ рдХрд┐ рдпрд╣ рджрд┐рд╢рд╛ рд╕реНрд╡реАрдХреГрдд рдФрд░ рд╡рд╛рдВрдЫрд┐рдд рд╣реИ, рддреЛ рдХреНрдпрд╛ рдореИрдВ рдЙрд╕ рдмрд┐рдЯ рдХреЗ рд▓рд┐рдП рдПрдкреАрдЖрдИ рдбрд┐рдЬрд╛рдЗрди рдХрд╛ рдиреЗрддреГрддреНрд╡ рдХрд░рдирд╛ рдЬрд╛рд░реА рд░рдЦ рд╕рдХрддрд╛ рд╣реВрдВ рдФрд░ рдЕрдВрддрд┐рдо рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкреНрд░рджрд╛рди рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ?

рдЗрд╕ рд╕рдордп, рдореИрдВ рдЗрд╕ рд╕реВрддреНрд░ рдХреЗ рдпреЛрдЧрджрд╛рдирдХрд░реНрддрд╛рдУрдВ рдХреЛ рдзрдиреНрдпрд╡рд╛рдж рджреЗрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ @pgolebiowski рдФрд░ @TimLovellSmithред рдЖрдкрдХреА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдиреЗ рд╣рдорд╛рд░реА рдбрд┐рдЬрд╛рдЗрди рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд╛ рдорд╛рд░реНрдЧрджрд░реНрд╢рди рдХрд░рдиреЗ рдореЗрдВ рдмрд╣реБрдд рдмрдбрд╝реА рднреВрдорд┐рдХрд╛ рдирд┐рднрд╛рдИ рд╣реИред рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рд╣рдо рдЖрдкрдХрд╛ рдЗрдирдкреБрдЯ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд░рд╣реЗрдВрдЧреЗ рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рдЕрджреНрдпрддрди рдХрд░рдиреЗ рдпреЛрдЧреНрдп рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрддрд╛рд░ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рддреИрдпрд╛рд░ рдХрд░рддреЗ рд╣реИрдВред

рдпрд╣ рдХрд╛рдлреА рдпрд╛рддреНрд░рд╛ рдереА :D

System.Collections.Generic.PriorityQueue<TElement, TPriority> рд▓рд┐рдП API рдХреЛ рдЕрднреА-рдЕрднреА рд╕реНрд╡реАрдХреГрдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдореИрдВрдиреЗ рдПрдХ рд╕рдВрднрд╛рд╡рд┐рдд рдвреЗрд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкрд░ рдЕрдкрдиреА рдмрд╛рддрдЪреАрдд рдЬрд╛рд░реА рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрд▓рдЧ рдореБрджреНрджрд╛ рдмрдирд╛рдпрд╛ рд╣реИ рдЬреЛ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдЕрдкрдбреЗрдЯ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред

рдореИрдВ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдмрдВрдж рдХрд░рдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реВрдБ, рдЖрдкрдХреЗ рдпреЛрдЧрджрд╛рди рдХреЗ рд▓рд┐рдП рдЖрдк рд╕рднреА рдХрд╛ рдзрдиреНрдпрд╡рд╛рдж!

рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдХреЛрдИ рдЗрд╕ рдпрд╛рддреНрд░рд╛ рдкрд░ рдХреБрдЫ рд▓рд┐рдЦ рд╕рдХреЗ! рдПрдХ рдПрдкреАрдЖрдИ рдХреЗ рд▓рд┐рдП рдкреВрд░реЗ 6 рд╕рд╛рд▓ред :) рдЧрд┐рдиреАрдЬ рдЬреАрддрдиреЗ рдХрд╛ рдХреЛрдИ рдореМрдХрд╛?

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

iCodeWebApps picture iCodeWebApps  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

omajid picture omajid  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

Timovzl picture Timovzl  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

sahithreddyk picture sahithreddyk  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

jamesqo picture jamesqo  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ