假设我有N辆出租车,N个客户等着被出租车接走.客户和出租车的初始位置是随机/任意的.
现在我想将每辆出租车分配给一个客户.
客户都是固定的,出租车都以相同的速度移动.为简单起见,我们假设没有障碍物,出租车可以直线移动到指定的客户.
我现在想要最小化直到最后一个顾客进入他/她的出租车的时间.
是否有标准算法来解决这个问题?我有成千上万的出租车/客户.解决方案不一定是最佳的,只是'好'.
该问题几乎可以建模为标准的"分配问题",可使用匈牙利算法(Kuhn-Munkres算法或Munkres分配算法)解决.但是,我希望最大限度地降低成本最高的分配成本,而不是最小化分配成本的总和.
我正在使用Android许可,如下所述:
http://developer.android.com/guide/market/licensing/index.html
(...验证我的Android应用程序的客户是否实际支付了应用程序.)我的应用程序在Web上有一个服务器组件,为了更加安全,我正在此服务器上进行许可证验证.
一切正常.现在,我的问题.由于每个新用户都占用了我的中央服务器上的资源,我实际上不愿意让非付费用户.我已经看到一些证据表明用户在获得退款后继续使用该应用程序(按照正常的15分钟宽限期).
为了遏制这种行为,如果有某种方法可以将Google Checkout上的用户付款映射到我系统中的实际用户,那就太棒了.这可能吗?
我从android许可证服务器收到的ResponseData包含一个名为"userId"的字段,但这似乎与Google Checkout中的任何信息都不对应.(有关ResponseData的定义,请参阅http://www.androidadb.com/source/skylight1-read-only/GoogleLVL/src/com/android/vending/licensing/ResponseData.java.html.)
是否可以确定Checkout中哪个付款映射到哪个应用安装?
我想设计一个支持可变迭代器的玩具容器类,但是我无法整理迭代器的生命周期及其对容器的引用.
我试图创建一个最小的非编译示例:
struct Payload {
value: i32,
}
struct Container {
val: Payload,
}
struct IterMut<'a> {
cont: &'a mut Container,
cnt: i32,
}
impl<'a> Container {
fn new() -> Container {
Container { val: Payload { value: 42 } }
}
fn iter_mut(&'a mut self) -> IterMut<'a> {
IterMut {
cont: self,
cnt: 10,
}
}
}
impl<'a> Iterator for IterMut<'a> {
type Item = &'a mut Payload;
fn next<'b>(&'b mut self) -> Option<Self::Item> {
self.cnt -= 1;
if …
Run Code Online (Sandbox Code Playgroud) 我有以下代码:
for chunk in imagebuf.chunks_mut(4) {
let temp = chunk[0];
chunk[0] = chunk[2];
chunk[2] = temp;
}
Run Code Online (Sandbox Code Playgroud)
对于40000 u8
s 的数组,我的机器需要大约2.5 ms,使用编译cargo build --release
.
以下C++代码对于完全相同的数据大约需要100 us(通过实现它并使用FFI从rust调用它来验证):
for(;imagebuf!=endbuf;imagebuf+=4) {
char c=imagebuf[0];
imagebuf[0]=imagebuf[2];
imagebuf[2]=c;
}
Run Code Online (Sandbox Code Playgroud)
我认为应该可以加速Rust实现,以便像C++版本一样快.
Rust程序是使用构建的cargo --release
,C++程序是在没有任何优化标志的情况下构建的.
任何提示?
假设我有一个用GLSL编写的opengl计算着色器,在NVidia Geforce 970上执行。
在着色器的开始处,单个调用将写入“着色器存储缓冲区对象”(SSBO)。
然后,我发出合适的屏障,例如GLSL中的memoryBarrier()。
然后,在每次调用时,我将从第一步编写的内存中读取。
第一次写入对当前计算操作中的所有调用都可见吗?
在https://www.khronos.org/opengl/wiki/Memory_Model#Ensuring_visibility上,Khronos说:
“如果您使用诸如barrier这样的机制在调用之间进行同步,请使用一致且适当的memoryBarrier *或groupMemoryBarrier调用。”
我很确定可以在工作组中以这种方式进行同步。但是,它是否适用于整个计算操作中每个工作组中的所有调用?
我不确定如何安排整个工作组。我希望它们可能按顺序运行,从而使我要问的那种同步成为不可能?
我有以下小程序:
ages=[23,23,43,54,34,22,43,23]
histogram={}
for age in ages:
if not age in histogram:
histogram[age]=1
else:
histogram[age]+=1
for age,count in sorted(histogram.items()):
print "Age: %d Number of people: %d"%(age,count)
Run Code Online (Sandbox Code Playgroud)
它创建一个列表中人员年龄的简单直方图.但是,我发现直方图哈希中的双重查找非常难看.我知道散列访问基本上是O(1),所以这并不像它看起来那么低效,但仍然......
我尝试了各种解决方法,例如尝试使用setdefault,但以下内容不会飞:
histogram.setdefault("age",0)+=1 #<- Incorrect
Run Code Online (Sandbox Code Playgroud)
我知道我可以使用defaultdict,但它改变了创建的直方图dict对象的行为,这不是我想要的.
如果我有办法将这个问题设置为"低优先级",我会这样做,因为这显然不是很重要.但是我一直在寻找这个问题的聪明和/或优雅的解决方案.
所以,问题是:如何通过dict中的键递增整数,或者如果它不存在则将其设置为1?
与使用一个线程运行时相比,使用两个线程运行时,我的程序执行时间要长两倍.
我创建了一个小例子程序有相同问题的使用scoped-pool
:
#![feature(test)]
extern crate scoped_pool;
extern crate test;
use scoped_pool::Pool;
use test::Bencher;
/// This is a minimized program exhibiting a performance problem
/// Why is this program twice as fast, when the number of threads is set to 1 instead of 2?
#[bench]
pub fn test_bench_alt(b: &mut Bencher) {
let parallellism = 1;
let data_size = 500_000;
let mut pool = Pool::new(parallellism);
{
let mut data = Vec::new();
for _ in 0..data_size {
data.push(0);
} …
Run Code Online (Sandbox Code Playgroud) rust ×3
algorithm ×1
android ×1
dictionary ×1
gpgpu ×1
lifetime ×1
opengl ×1
optimization ×1
performance ×1
python ×1