这里是一个简单的小顶堆数据结构的实现,使用数组表示堆结构:
```python
class MinHeap:
    def __init__(self):
        self.heap = []
        
    def insert(self, elem):
        self.heap.append(elem)
        self.sift_up(len(self.heap) - 1)
        
    def sift_up(self, idx):
        parent = (idx - 1) // 2
        if idx > 0 and self.heap[parent] > self.heap[idx]:
            self.heap[parent], self.heap[idx] = self.heap[idx], self.heap[parent] 
            self.sift_up(parent)
        
    def extract_min(self):
        if len(self.heap) == 0:
            return None 
        
        min_elem = self.heap[0]
        self.heap[0] = self.heap[-1]
        self.heap.pop()
        self.sift_down(0)
        return min_elem
        
    def sift_down(self, idx):
        left = 2 * idx + 1
        right = 2 * idx + 2
        smallest = idx
        
        if left < len(self.heap) and self.heap[left] < self.heap[smallest]:
            smallest = left 
        if right < len(self.heap) and self.heap[right] < self.heap[smallest]:
            smallest = right
            
        if smallest != idx:
            self.heap[idx], self.heap[smallest] = self.heap[smallest], self.heap[idx] 
            self.sift_down(smallest)
```

这个小顶堆支持插入元素(insert)、删除最小元素(extract_min)两种主要操作。
插入元素时,需要进行上浮(sift_up)操作,将新元素上浮到正确的位置;
删除最小元素时,需要将最后一个元素替代到第一个元素,然后进行下沉(sift_down)操作,将元素下沉到正确位置。
通过上浮和下沉操作,能够维持堆的性质不变。这个小顶堆的时间复杂度为O(logn)。
spam fails_task lang_mismatch pii not_appropriate hate_speech sexual_content quality toxicity humor helpfulness creativity violence