Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C#

การได้ค่าต่ำสุดใน SortedSet ใน C#

SortedSet<T> มี property Min และ Max คืนค่าต่ำสุดและสูงสุดตามลำดับการเรียง ทำงานใน O(1) เพราะข้อมูลเรียงลำดับอยู่แล้ว (Red-Back Tree)

ตัวอย่างโค้ดที่ 1: สตริง พร้อม Min/Max

using System;
using System.Collections.Generic;

public class Demo
{
    public static void Main()
    {
        SortedSet set1 = new SortedSet();
        set1.Add("AB");
        set1.Add("BC");
        set1.Add("CD");
        set1.Add("EF");

        Console.WriteLine("Elements in SortedSet1...");
        foreach (string res in set1)
        {
            Console.WriteLine(res);
        }
        Console.WriteLine("Maximum element in SortedSet1 = " + set1.Max);
        Console.WriteLine("Minimum element in SortedSet1 = " + set1.Min);

        SortedSet set2 = new SortedSet();
        set2.Add("BC");
        set2.Add("CD");
        set2.Add("DE");
        set2.Add("EF");
        set2.Add("AB");
        set2.Add("HI");
        set2.Add("JK");

        Console.WriteLine("Elements in SortedSet2 (Enumerator for SortedSet)...");
        SortedSet.Enumerator demoEnum = set2.GetEnumerator();
        while (demoEnum.MoveNext())
        {
            string res = demoEnum.Current;
            Console.WriteLine(res);
        }
        Console.WriteLine("Maximum element in SortedSet2 = " + set2.Max);
        Console.WriteLine("Minimum element in SortedSet2 = " + set2.Min);
    }
}

ผลลัพธ์

Elements in SortedSet1...
AB
BC
CD
EF
Maximum element in SortedSet1 = EF
Minimum element in SortedSet1 = AB
Elements in SortedSet2 (Enumerator for SortedSet)...
AB
BC
CD
DE
EF
HI
JK
Maximum element in SortedSet2 = JK
Minimum element in SortedSet2 = AB

ตัวอย่างโค้ดที่ 2: จำนวนเต็ม

using System;
using System.Collections.Generic;

public class Demo
{
    public static void Main()
    {
        SortedSet set1 = new SortedSet();
        set1.Add(5);
        set1.Add(50);
        set1.Add(20);
        set1.Add(10);
        set1.Add(70);
        set1.Add(60);
        set1.Add(55);
        set1.Add(95);

        Console.WriteLine("Elements in SortedSet...");
        foreach (int res in set1)
        {
            Console.WriteLine(res);
        }
        Console.WriteLine("Maximum element in SortedSet = " + set1.Max);
        Console.WriteLine("Minimum element in SortedSet = " + set1.Min);
    }
}

ผลลัพธ์

Elements in SortedSet...
5
10
20
50
55
60
70
95
Maximum element in SortedSet = 95
Minimum element in SortedSet = 5

ข้อสังเกตสำคัญ

  • Min และ Max ใช้ได้ก็ต่อเมื่อ Count > 0 - หากว่างจะโยน InvalidOperationException
  • ลำดับการเรียงใช้ IComparer<T> (default ใช้ Comparer<T>.Default)
  • สำหรับ string เรียงตาม ordinal (lexicographic) - "AB" < "BC" < "CD"...
  • O(1) เพราะ tree เก็บ pointer ไป node ซ้ายสุด/ขวาสุด

เมธอดเกี่ยวกับ Range Queries

SortedSet vs HashSet vs List - Min/Max

Methodคำอธิบาย
GetViewBetween(lower, upper)ดู subset ในช่วง [lower, upper]
GetViewBetween(lower, upper).Minค่าต่ำสุดในช่วง
GetViewBetween(lower, upper).Maxค่าสูงสุดในช่วง
CollectionMin/MaxComplexity
SortedSet<T>มี Min/Max propertyO(1)
HashSet<T>ไม่มี built-inO(n) ต้องวนลูป
List<T>ไม่มี built-inO(n) ต้องวนลูป
Arrayไม่มี built-inO(n) หรือ O(1) หากเรียงแล้ว

เมื่อไหร่ควรใช้ SortedSet

  • ต้องการ Min/Max บ่อย
  • ต้องการข้อมูล unique และเรียงลำดับตลอด
  • ต้องการ Range queries (GetViewBetween)
  • ต้องการ Set operations (Union, Intersect, Except)