我正在做一个程序来比较线性探测,二次探测和哈希表中单独链接所需的平均和最大访问.
我已经为3个案例完成了元素插入部分.在从哈希表中找到元素时,我需要限制结束搜索.在单独链接的情况下,我可以在下一个指针为空时停止.对于线性探测,我可以在探测整个表时停止(即表的大小).在二次探测中我应该使用什么作为限制?表大小会吗?
我的二次探测函数是这样的
newKey = (key + i*i) % size;
Run Code Online (Sandbox Code Playgroud)
其中我从0变为无穷大.请帮我..
我一直在尝试安装 CVXOPT,它需要 LAPACK/BLAS,说实话,这简直要了我的命!
语境:
我正在尝试 SVM,因此需要 QP 求解器。CVXOPT 似乎是最好的。问题在于 LAPACK/BLAS(或 ATLAS)依赖性。
我尝试安装 ATLAS,我认为它有效,但是当尝试安装 CVXOPT 时,我仍然得到“找不到 -lblas”和“找不到 -llapack”。
所以在过去的两天里,我一直在尝试遵循http://icl.cs.utk.edu/lapack-for-windows/lapack/#libraries_mingw上的各种方法来安装LAPACK,但事实证明这是这是我曾经执行过的最困难的安装,而且我什至还没有开始尝试安装 BLAS。
问题:
有人可以:
A) 给我指点 LAPACK/BLAS 安装指南的英文翻译。或者某种简单的灌输方法(如果存在的话)。
或者
B) 给我指出一个不需要 LAPACK/BLAS 的 QP 求解器?到目前为止,我还没有找到一个更容易安装的。
谢谢!
我正在尝试使用二次曲线为游戏提供灵活的衰减评分系统.我可能会粗暴地通过它,但想知道是否有人可以帮我提出一些灵活的东西,或者可能已经有一些现成的解决方案了!
但基本上我需要能够生成a,b和c的值:
y = ax^2 + bx + c
Run Code Online (Sandbox Code Playgroud)
从3分(我知道它落在有效的二次曲线上,但是基于可配置的设置和对事件作出反应的最大时间是动态的),例如:( - 1100,0),(200,1),(1500,0) ).
所以我可以插入x的值来生成Y值,这将决定我给用户的分数.
如果我可以使用固定的二次方程式,我会得到但是得分是基于用户对特定事件(X轴)做出多少反应,y轴点总是在0和1之间,0是最小分数和1是最高分!
如果您需要更多信息,请告诉我们!
我很好奇大众通过-q参数创建交互术语的方式.
为了说明的目的,我使用这个玩具数据,称为cats.vm:
1 |a black |b small green |c numvar1:1.62 numvar2:342 |d cat |e numvar3:554
1 |a white |b large yellow |c numvar1:1.212 numvar2:562 |d cat |e numvar3:632
-1 |a black |b small green |c numvar1:12.03 numvar2:321 |d hamster |e numvar3:754
1 |a white |b large green |c numvar1:5.8 numvar2:782 |d dog |e numvar3:234
-1 |a black |b small yellow |c numvar1:2.322 numvar2:488 |d dog |e numvar3:265
1 |a black |b large yellow |c numvar1:3.99 numvar2:882 |d hamster |e numvar3:543 …Run Code Online (Sandbox Code Playgroud) 我必须编写一个程序来解决quadratics,返回一个复数的结果.
到目前为止,我已经定义了一个复数,声明它是num的一部分,所以+, - 和* - ing可以发生.
我还为二次方程定义了一种数据类型,但我现在仍然坚持二次方程式的实际求解.我的数学很差,所以任何帮助都会非常感激......
data Complex = C {
re :: Float,
im :: Float
} deriving Eq
-- Display complex numbers in the normal way
instance Show Complex where
show (C r i)
| i == 0 = show r
| r == 0 = show i++"i"
| r < 0 && i < 0 = show r ++ " - "++ show (C 0 (i*(-1)))
| r < 0 && i > 0 = show …Run Code Online (Sandbox Code Playgroud) math haskell functional-programming quadratic complex-numbers
我有一个计算C中二次方程的根的任务,应该非常简单,我知道我需要对程序做什么,但我仍然遇到了问题.当根是虚构的并且平方根内的项为零时,它工作正常.
但是当我输入系数a,b和c时会产生真正的根,它给了我错误的答案,我无法弄清楚什么是错的.(我用a = 2,b = -5和c = 1测试它)
这是我的代码,它编译并运行,但给出了错误的答案.
#include<stdio.h>
#include<math.h>
int main()
{
float a, b, c, D, x, x1, x2, y, xi;
printf("Please enter a:\n");
scanf("%f", &a);
printf("Please enter b:\n");
scanf("%f",&b);
printf("Please enter c:\n");
scanf("%f", &c);
printf("The numbers you entered are: a = %f, b = %f, c = %f\n", a, b, c);
D = b*b-4.0*a*c;
printf("D = %f\n", D);
if(D > 0){
x1 = (-b + sqrt(D))/2*a;
x2 = ((-b) - sqrt(D))/2*a;
printf("The two real roots are …Run Code Online (Sandbox Code Playgroud) 非常直截了当的问题:给定N×N对称矩阵A和N向量x,是否有内置的Matlab函数来计算x'*A*x?即,而不是y = x'*A*x,有一个功能quadraticformst y = quadraticform(A, x)?
显然我可以做y = x'*A*x,但我需要表现,似乎应该有一种方法来利用
A 是对称的如果没有一个内置函数,是否有比这更快的方法x'*A*x?或者,Matlab解析器是否足够智能优化x'*A*x?如果是这样,你能指点我在文件中的一个地方验证这个事实吗?
所以我做了一个python代码,用二次公式求解x.除了标志之外,一切都在最终解决.例如,如果你想要x ^ 2 + 10x + 25因子,当答案应该是5,5时,我的代码输出-5,-5.
def quadratic_formula():
a = int(input("a = "))
b = int(input("b = "))
c = int(input("c = "))
bsq = b * b
fourac = 4 * a * c
sqrt = (bsq - fourac) ** (.5)
oppb = -b
numerator_add = (oppb) + (sqrt)
numerator_sub = (oppb) - (sqrt)
twoa = 2 * a
addition_answer = (numerator_add) / (twoa)
subtraction_answer = (numerator_sub) / (twoa)
print(addition_answer)
print(subtraction_answer)
Run Code Online (Sandbox Code Playgroud) 我试图使用STL sort()函数按照存储在地图中的值对对象矢量进行排序.令我惊讶的是,我的算法在二次时运行.我尽可能地简化它,试图找出一个明显的错误,但无济于事.这是简化版本:
#include <map>
#include <vector>
#include <algorithm>
using namespace std;
struct a{
map<a*,float> vals;
bool operator()(a* a1, a* a2){return (vals[a1]>vals[a2]);}
void asort();
};
void a::asort(){
vector<a*> v;
map<a*,float>::iterator it = vals.begin();
for(;it!=vals.end();it++){v.push_back((*it).first);}
sort(v.begin(),v.end(),*this);
}
int main(){
a a0;
int imax=8000;
for(int i=0;i<imax;i++){a0.vals[new a]=rand();}
a0.asort();
}
Run Code Online (Sandbox Code Playgroud)
当我为imax = 2000,4000,8000运行它时,它分别需要大约1s,4s,18s.这怎么可能?为什么我没有得到预期的imax*log(imax)依赖?我对C++的经验有限,请帮忙!谢谢!
更新:谢谢Xeo,Rick和所有回复的人.正如Xeo和Rick所解释的那样,问题在于比较器(在我的情况下struct a,包含值的映射)会在每次比较时被复制,因此计算复杂性O(imax^2 log(imax)).我可以看到的一种解决方法(使我的代码更改最小)是使用指向地图的指针,即map<a*,float>* vals代替map<a*,float> vals.然后避免地图复制,并且复杂性又回到了O(imax log(imax)).非常感谢!
quadratic ×10
math ×4
python ×2
algorithm ×1
bezier ×1
blas ×1
c ×1
c++ ×1
curve ×1
hashtable ×1
haskell ×1
javascript ×1
lapack ×1
matlab ×1
performance ×1
probing ×1
redundancy ×1
sorting ×1
stl ×1
vowpalwabbit ×1