<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      面試準備 - 最大堆的Csharp實現

      面試中最常見的問題之一。。。在N個數中間尋找前K大個元素

      最常見的解法就是最大堆 時間復雜度O(N*log(K)) 空間復雜度O(k)

      實現了一個最簡單的最大堆,每次有元素進來都和堆頂元素比較一下,如果新元素比較大就替換,然后就逐級更新到堆底

       

      namespace Clover.Algoritms.DataStructure
      {
          using System;
          using System.ComponentModel;
          using System.Linq.Expressions;
          using System.Reflection;
          using System.Runtime.CompilerServices;
          using System.Threading;
      
          using Clover.Algoritms.Common;
      
          public class MaxHeap
          {
              public double[] items;
      
              public int count = 0;
      
              public MaxHeap(int capacity)
              {
                  if (capacity <= 0)
                  {
                      throw new ArgumentOutOfRangeException("capacity");
                  }
                  this.items = new double[capacity];
                  for (int i = 0; i < this.items.Length; i++)
                  {
                      this.items[i] = double.MinValue;
                  }
              }
      
              public bool Validate()
              {
                  for (int i = 0; i < this.items.Length; i++)
                  {
                      int left = 2 * i + 1;
                      int right = 2 * i + 2;
                      if (left < this.items.Length)
                      {
                          if (this.items[left] > this.items[i])
                          {
                              return false;
                          }
                      }
                      if (right < this.items.Length)
                      {
                          if (this.items[right] > this.items[i])
                          {
                              return false;
                          }
                      }
                  }
                  return true;
              }
      
              public void MaxHeapify(int i, int size = -1)
              {
                  var s = size > 0 ? size : items.Length;
                  if (i >= s)
                  {
                      return;
                  }
      
                  var l = this.left(i);
                  var r = this.right(i);
                  var largest = i;
                  if (l < s && items[l] > items[i])
                  {
                      largest = l;
                  }
                  if (r < s && items[r] > items[largest])
                  {
                      largest = r;
                  }
                  if (largest != i)
                  {
                      var temp = items[i];
                      items[i] = items[largest];
                      items[largest] = temp;
                      MaxHeapify(largest);
                  }
              }
      
              public void BuildMaxHeap()
              {
                  for (int i = items.Length / 2; i >= 0; i--)
                  {
                      this.MaxHeapify(i);
                  }
              }
      
              public int left(int i)
              {
                  return i * 2 + 1;
              }
      
              public int right(int i)
              {
                  return i * 2 + 2;
              }
      
              public int parent(int i)
              {
                  return i / 2 - 1;
              }
      
              public void HeapSort()
              {
                  this.BuildMaxHeap();
                  for (int i = items.Length / 2; i >= 1; i--)
                  {
                      var temp = items[0];
                      items[0] = items[i];
                      items[i] = temp;
                      var size = items.Length - 1 - items.Length / 2 + i;
                      this.MaxHeapify(i, size);
                  }
              }
      
              //max heap is used to find top k smallest items.
              public void PickTopN(double d)
              {
                  if (count < items.Length)
                  {
                      items[count] = d;
                      count++;
                      if (count >= items.Length)
                      {
                          this.BuildMaxHeap();
                      }
                  }
                  else if (d < items[0])
                  {
                      items[0] = d;
                      this.MaxHeapify(0);
                  }
              }
      
              public double Maximun()
              {
                  if (count == 0)
                  {
                      throw new Exception("there is no any element in heap");
                  }
      
                  return items[0];
              }
      
              public double HeapExtractMax()
              {
                  if (count == 0)
                  {
                      throw new Exception("there is no any element in heap");
                  }
                  var max = items[0];
                  items[0] = items[count];
                  count--;
                  this.MaxHeapify(0);
                  return max;
              }
      
              public void MaxHeapInsnsert(double d)
              {
                  count++;
                  double[] newItems = new double[count];
                  for (int i = 0; i < count - 1; i++)
                  {
                      newItems[i] = items[i];
                  }
                  newItems[count - 1] = double.MinValue;
                  items = newItems;
                  MaxHeapIncreaseKey(count - 1, d);
              }
      
              private void MaxHeapIncreaseKey(int ind, double d)
              {
                  var i = ind;
                  if (d < items[i])
                  {
                      throw new Exception("new key is smaller than than current key");
                  }
                  items[i] = d;
                  while (i > 0 && items[this.parent(i)] < items[i])
                  {
                      ObjectExtension.Exhange(ref items[i], ref items[this.parent(i)]);
                      i = this.parent(i);
                  }
              }
          }
      }

       

      posted on 2014-02-21 08:27  聽說讀寫  閱讀(2131)  評論(0)    收藏  舉報

      導航

      主站蜘蛛池模板: 婷婷六月天在线| 一区二区亚洲人妻精品| 国产精品久久久久影院亚瑟| 国产精成人品| 国产精品成人一区二区三区| 亚洲一区成人在线视频| 久久99精品国产麻豆婷婷| 8050午夜二级无码中文字幕| 国产亚洲精品成人aa片新蒲金| 777米奇色狠狠888俺也去乱| 精品人妻午夜一区二区三区四区| 99久久久国产精品免费无卡顿| 国产精品无码成人午夜电影| 亚洲啪啪精品一区二区的| 国产精品熟女乱色一区二区| 精品人妻少妇一区二区三区在线| 国产亚洲精品久久综合阿香| 草草浮力影院| 国产成人综合色视频精品| 亚洲女人天堂| 国产偷人妻精品一区二区在线| 亚洲精品国产美女久久久| 久久夜色撩人精品国产av| 被c到高潮疯狂喷水国产| 久操热在线视频免费观看| a级国产乱理伦片在线观看al| 日韩激情一区二区三区| 99精品日本二区留学生| 国内精品久久久久影院不卡| 亚洲Av综合日韩精品久久久| 中文字幕va一区二区三区| 国产极品丝尤物在线观看| 国产精品午夜福利视频| 亚洲国产日韩一区三区| 中文字幕亚洲精品第一页| www亚洲精品| 中文字幕日韩精品东京热| 亚洲欧美高清在线精品一区二区| 丁香五月亚洲综合在线国内自拍 | 午夜大尺度福利视频一区| 亚洲欧美牲交|