Class list {
function search(element) {
if(this.size > 100){
//ищем делением пополам например исходя из того что при добавлении мы храним отсортированный массив
}
else {
//ищем простым перебором т.к. для малого количества это будет быстре
}
}
//аналогично для добавления, удаления, используем разное поведение в зависимости от контекста
}
在我看来,在这种情况下,这意味着应该使用多种算法,例如,用于搜索:
(参考)
WFQ已经是优先级队列和加权队列的结合。也许你被要求实现这个队列。简而言之,队列的元素是一组有限的列表,这些列表具有预定义的服务权重和一个始终首先服务的列表(如果该列表为空,则其他队列列表仅按权重服务)。
一点理论:
有多种方法可以使用队列来实现工作,例如:
优先级服务 - 为最高优先级队列提供最低级别的延迟,但不对较低优先级队列的流量的平均吞吐量做出任何保证。
加权服务——提供给定的平均吞吐量分布,但不考虑延迟要求。
在这里,组合服务算法可以派上用场。在这种算法中,维护一个优先级队列,其余队列按照加权算法进行服务。通常,优先级排队用于对延迟敏感的流量,其余用于几类弹性流量(IP 网络支持的流量类型)。在拥塞期间,每一类弹性流量都会收到一些最小吞吐量。此最小值计算为优先级流量剩余带宽的百分比。
要更详细地了解这一领域,我附上了指向源 建模队列服务算法的链接...
也许来源不会 100% 属于您的任务,也不是您需要的所有这些,但描述了理解本身和工作原理。
主队列被服务直到它为空,其余时间分配给优先级队列。
优先级最高的队列首先得到服务。
对于每个操作,队列的优先级相对于其他队列降低一定的压力值,该压力值根据所有元素的总数与该队列中元素总数的比率计算,即 排队流量占比越大,压力值越低。
假设有 3 个队列(主队列除外),每单位时间流过 10、5 和 1 个元素。对应的应力值为1.6、3.2和16,即 每个队列将按流量比例进行处理。如果你填充队列 1 次,那么所有队列将在大约同一时间结束。
有一个选项可以预先设置一个固定的压力值,但是你必须限制队列之间的优先级差异。
其维护的组合算法是指必须使用混合算法来结合不同算法的优点。
例如,在通过网络传输数据时,要求优先传输重要数据。例如,网络本身需要服务的那些,关于传输的数据包等。或者取消下载的命令应该在视频到达之前发出。第二优先级是文本数据。视频中的图片可以最后下载。在这种情况下,传输图片的队列将由另一种算法单独形成,例如大的在前或小的在前。同时,用于在这些数据或不同计算机之间分配流量百分比的单独算法仍然可以工作。
示例 2:
有一种算法:“优先队列”假设需要处理的对象不是按照进入的顺序而是按照优先级从队列中取出。优先服务算法在许多计算领域非常流行,特别是在操作系统中,当在多程序混合中处理某些应用程序时,它们需要优先于其他应用程序。所有流量都分为少量类别,每个类别都分配了一个优先级。优先级服务通常应用于对延迟敏感且强度较低的一类流量。那么这个类的维护并没有过多的侵犯其余的类。例如,语音流量(敏感,但其强度通常不超过 8-16 Kbps)。加权队列是优先服务的替代方案。它们保证所有类别的流量都有一定的最小吞吐量。权重是指提供给该流量类别的带宽占出接口总带宽的百分比。与每个队列相关联的是资源过载时保证的资源吞吐量的百分比。
结合优先级和加权队列的优点可以在组合算法中获得。通常,他们对敏感流量使用一个优先级队列,其余的则根据加权算法提供服务。它们被分配了优先级队列剩余资源强度的一小部分。