- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在尝试实现一个任务调度程序,其中我有 n 个任务。我的任务调度器背后的想法是,在 vector 的队列循环中,任务应该排入队列循环中最短的队列,这是通过以下代码完成的。
#include <vector>
#include <queue>
std::vector<std::queue<int> > q
int min_index = 0;
task t // implemented in the other part of the program
std::size_t size = q.size();
for( i=0; i<size; i++){ //accessing loop of queues
if(q[min_index].size() > q[i].size())
min_index = i; // Now q[min_index] is the shortest queue
}
q[min_index].push(Task);
接下来我试图扩展这个范例以减少调度程序的开销时间,而不是每次都搜索最短队列,而是在某些条件之后搜索,即。 5个任务入队到最短队列后搜索最短队列。
我需要做这样的事情
#include <vector>
#include <queue>
std::vector<std::queue<int> > q
task t // implemented in the other part of the program
while(q[min_index].size()!=q[min_index].size()+5) // check whether current min_index queue's size is increased 5 more times if not goto enqueue
{
goto enqueue;
}
int min_index = 0;
std::size_t size = q.size();
for( i=0; i<size; i++){ //accessing loop of queues
if(q[min_index].size() > q[i].size())
min_index = i; // Now q[min_index] is the shortest queue
}
enqueue:
q[min_index].push(Task);
有人可以帮助我如何正确进行吗?提前致谢
已更新我没有使用 5(一个随机数),而是想到了一个每次都可靠且近似的数字。所以我想得到队列循环的 min_value 大小和 max_value 大小的差异,并每次都将其与计数器进行比较。
// global variables
std::vector<std::queue<int> > q;
int counter = INT_MAX; //
int min_index = 0;
int max_size = -1;
void enqueue(scheduler::task new_task) {
if ( counter > diff_size ){
// look for new min and maximum
std::size_t size = q.size();
for( i=0; i<size; i++){
if(q[min_index].size() > q[i].size())
min_index = i;
if(q[i].size() > max_size)
max_size = q[i].size();
diff_size=max_size - min_index;
}
// counter reset
counter = 0;
}
// enqueue in minimum queue
q[min_index].push(new_task)
// increase counter
counter ++;
}
最佳答案
我想我会试试这个(代码确实可以编译,而且确实有效):
#include <vector>
#include <queue>
#include <cassert>
#include <iostream>
using namespace std;
class multi_queue{
private:
typedef std::vector<std::queue<int> > mq_type;
mq_type q;
int min_queue;
int min_queue_inc;
int max_inc;
void find_min_queue(){
max_inc=q[min_queue].size();
min_queue_inc=0;
min_queue=0;
for(int i=1;i<q.size();++i)
if(q[i].size()<q[min_queue].size())
min_queue=i;
}
public:
multi_queue(int n) {
assert(n>0);
min_queue=0;
min_queue_inc=0;
max_inc=5;
increase_queues(n);
}
void increase_queues(int n){
if(n<q.size()) return;
q.resize(n);
}
void push(int item){
if(min_queue_inc++==max_inc)
find_min_queue();
q[min_queue].push(item);
}
int queues() const {
return q.size();
}
int pop_from(int qnum){
assert(qnum>=0);
assert(qnum<q.size());
assert(can_pop_from(qnum));
int temp=q[qnum].front();
q[qnum].pop();
return temp;
}
bool can_pop_from(int qnum) const {
return q[qnum].size()>0;
}
int largest_queue() const {
int largest=0;
for(int i=1;i<q.size();++i)
if(q[i].size()>q[largest].size())
largest=i;
return q[largest].size();
}
};
int main(){
multi_queue q(10);
for(int i=0;i<100;++i){
cout<<"Current largest queue: "<<q.largest_queue()<<endl;
cout<<"Pushing: " <<i<<endl;
q.push(i);
}
for(int i=0;i<10;++i)
for(int j=0;j<100;++j)
if(q.can_pop_from(i))
cout<<q.pop_from(i)<<endl;
}
当然,您不会希望每次都显示 q.largest_queue()
,因为那样会破坏重点,但我在这里这样做是为了让您能够看到一切正常。
从回答问题的角度来看,重要的方法是 push()
和 find_min_queue()
。
我使用两个状态变量,min_queue
和 min_queue_inc
来跟踪正在发生的事情。
min_queue
总是指向最短队列。 min_queue_inc
跟踪已添加到该队列的项目数。
在 push()
中,我们检查当前最小队列是否有 5 个项目添加到其中;如果是这样,是时候看看是否有我们应该使用的新的最小队列,因此我们调用 find_min_queue()
。
find_min_queue()
重置 min_queue_inc
,找到最短队列,并在 min_queue
中记下该队列。
根据您想要执行的操作,调整变量 max_inc
的行为以满足您的需要。
关于c++ - 搜索并找到最短队列并在某些条件后搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15273338/
我正在努力处理查询的 WHERE 部分。查询本身包含一个基于两个表中都存在的 ID 的 LEFT JOIN。但是,我要求 where 语句仅返回其中一列中存在的最大单个结果。目前我返回连接中的所有值,
我有这个代码来改变文件系统的大小。问题是,即使满足 if 条件,它也不会进入 if 条件,而我根本没有检查 if 条件。它直接进入 else 条件。 运行代码后的结果 post-install-ray
假设我有一个包含 2 列的 Excel 表格:单元格 A1 到 A10 中的日期和 B1 到 B10 中的值。 我想对五月日期的所有值求和。我有3种可能性: {=SUM((MONTH(A1:A10)=
伪代码: SELECT * FROM 'table' WHERE ('date' row.date 或 ,我们在Stack Overflow上找到一个类似的问题: https://stackove
我有下面这行代码做一个简单的查询 if ($this->fulfilled) $criteria->addCondition('fulfilled ' . (($this->fulfilled
如果在数据库中找到用户输入的键,我将尝试显示“表”中的数据。目前我已将其设置为让数据库检查 key 是否存在,如下所示: //Select all from table if a key entry
关闭。此题需要details or clarity 。目前不接受答案。 想要改进这个问题吗?通过 editing this post 添加详细信息并澄清问题. 已关闭 5 年前。 Improve th
在MYSQL中可以吗 一共有三个表 任务(task_id、task_status、...) tasks_assigned_to(ta_id、task_id、user_id) task_suggeste
我想先根据用户的状态然后根据用户名来排序我的 sql 请求。该状态由 user_type 列设置: 1=活跃,2=不活跃,3=创始人。 我会使用此请求来执行此操作,但它不起作用,因为我想在“活跃”成员
下面两个函数中最专业的代码风格是什么? 如果函数变得更复杂和更大,例如有 20 个检查怎么办? 注意:每次检查后我都需要做一些事情,所以我不能将所有内容连接到一个 if 语句中,例如: if (veh
我在 C# 项目中使用 EntityFramework 6.1.3 和 SQL Server。我有两个查询,基本上应该执行相同的操作。 1. Exams.GroupBy(x=>x.SubjectID)
我试图在 case when 语句中放入两个条件,但我在 postgresql 中遇到语法错误 case when condition 1 and condition 2 then X else Y
我正在构建一个连接多个表的查询,一个表 prodRecipe 将包含某些行的数据,但不是全部,但是 tmp_inv1 将包含所有行的计数信息。问题是,tmp_inv1.count 取决于某个项目是否在
我有一个涉及 couples of rows which have a less-than-2-hours time-difference 的查询(~0.08333 天): SELECT mt1.*,
我有一个包含许多这样的 OR 条件的代码(工作正常)来检查其中一个值是否为空,然后我们抛出一条错误消息(所有这些都必须填写) } elsif ( !$params{'account'}
我有一个名为 spGetOrders 的存储过程,它接受一些参数:@startdate 和 @enddate。这将查询“订单”表。表中的一列称为“ClosedDate”。如果订单尚未关闭,则此列将保留
在代码中,注释部分是我需要解决的问题...有没有办法在 LINQ 中编写这样的查询?我需要这个,因为我需要根据状态进行排序。 var result = ( from contact in d
我正在尝试创建一个允许省略参数的存储过程,但如果提供了参数,则进行 AND 操作: CREATE PROCEDURE MyProcedure @LastName Varchar(30)
我正在寻找一种方法来过滤我的主机文件中的新 IP 地址。我创建了一个脚本,每次我用来自矩阵企业管理器的数据调用它时都会更新我的主机文件。它工作正常。但是我必须找到一个解决方案,只允许更新 10.XX.
所以我正在做一种 slider ,当它完全向下时隐藏向下按钮,反之亦然,当向上按钮隐藏时,我遇到了问题。 var amount = $('slide').attr('number'); $('span
我是一名优秀的程序员,十分优秀!