哪个在运行时更好?
for(i=0;i<n;i*=c) or for(i=0;i<n;i=pow(i,c))
我发现下面的链接说pow()的复杂性是O(log(N))。
Built-in Power Function Complexity
在比较方面,我仍然不太清楚。 我最近在一次采访中遇到了这个问题。
答案 0 :(得分:3)
卑鄙的愚蠢问题,并且撇开第一个循环无限且angular.module('ELOAuthentication').factory('AuthenticationService', function ($rootScope, $scope, $http) {
var service = {};
service.Login = function (email, password, callback) {
var Url = '/api/user/GetLoginByEmailPassword';
$http.then(Url, { email: email, password: password }).success(
function (response) {
var data = response.data
callback(data);
}).catch(function (error) {
console.log('ERROR GetLoginByEmailPassword: ' + error);
});
}
service.SetCookie = function (email, password) {
};
service.ClearCookie = function () {
};
return service;
});
多次计算for (i = 0; i < n; i = pow(i, c))
的事实,因为最奇怪的原因而且很可能是无限的,我希望面试官透露pow
,i
和c
的类型,因为这很重要。
n
通常以pow(x, y)
实施。 exp(y log x)
和exp
通常都是在现代CPU上使用Newton-Raphson类型算法计算的,并且具有某些起始点。结果通常以一位数的时钟周期弹出。我不相信log
是O(log(N))的断言是正确的。
然而,出于以浮点计算为中心的原因,出现了令人惊讶的小积分值。然而, 对于许多科学计算并不重要,而且至少在我看来,计算机评估pow
的方式是计算机科学的奇迹之一。对于这样的积分值,手动滚动算法在精度方面表现更好,但是你提出的那个可以通过使用指数通过平方从天真的O(N)改进,这可能是什么面试官希望你一直说。