这是一段看似非常特殊的C++代码.出于某种奇怪的原因,奇迹般地对数据进行排序使得代码几乎快了六倍.
#include <algorithm>
#include <ctime>
#include <iostream>
int main()
{
// Generate data
const unsigned arraySize = 32768;
int data[arraySize];
for (unsigned c = 0; c < arraySize; ++c)
data[c] = std::rand() % 256;
// !!! With this, the next loop runs faster.
std::sort(data, data + arraySize);
// Test
clock_t start = clock();
long long sum = 0;
for (unsigned i = 0; i < 100000; ++i)
{
// Primary loop
for (unsigned c = 0; c < arraySize; ++c) …
Run Code Online (Sandbox Code Playgroud) 我有一个简单的代码,应该是一个无限循环,因为x
它将一直在增长,并将永远保持大于j
.
int x = 5;
int y = 9;
for (int j = 0; j < x; j++) {
x = x + y;
}
System.out.println(y);
Run Code Online (Sandbox Code Playgroud)
但就像它一样,它打印y
并且不会无休止地循环.我无法弄清楚为什么.但是,当我按以下方式调整代码时:
int x = 5;
int y = 9;
for (int j = 0; j < x; j++) {
x = x + y;
System.out.println(y);
}
System.out.println(y);
Run Code Online (Sandbox Code Playgroud)
它变成了无限循环,我不明白为什么.java是否认识到它是无限循环并在第一种情况下跳过它但是必须在第二种情况下执行方法调用,以便它按预期运行?困惑:)
我需要在控制台上打印大量数据(大约100 MB).使用println在IntelliJ上惨遭失败.是否有像console.log这样的替代方案可以处理和显示这些数据而不会滞后和减速?
提前致谢!
我在控制台上打印了2行.它们都打印,但是当第二个打印时,第一个打印到第二个,所以2行是相同的.我以前从未遇到过这个.为什么第二次打印会覆盖第一次打印,我该如何解决?
public static void main(String args[]){
new MergeSort(90000);
System.out.println("Array to be mergesorted: " +Arrays.toString(array));
long start = System.currentTimeMillis();
mergeSort(array, 1, array.length);
long end = System.currentTimeMillis();
System.out.println("Result: " + Arrays.toString(array) );
}
Run Code Online (Sandbox Code Playgroud)
构造函数:
public MergeSort(int n){
Random rand = new Random();
array = new int[n];
for(int i = 0; i <array.length; i++){
array[i] = rand.nextInt(101);
}
}
Run Code Online (Sandbox Code Playgroud)
其余代码:
public static void merge(int[] A, int p, int q, int r){
//
//length of subarray 1
int n1 = q-p+1;
//length of subarray …
Run Code Online (Sandbox Code Playgroud) 当你只有一把锤子时,一切看起来都像钉子。在发现and和其他可迭代方法Array#each
的实用性、优雅性和语法乐趣之前,可以这样说Ruby 中的方法。我好奇的是:Array#map
Array#select
为什么使用更精确的可迭代方法时性能会实际提高?总体来说这是真的吗?
例如,在
require 'benchmark'
array = (1..100000).to_a
puts Benchmark.measure {
100.times do
array.map { |el| el.even? }
end
}
puts Benchmark.measure {
100.times do
new_array = []
array.each do |el|
new_array << el.even?
end
end
}
# ruby bench.rb
# 0.450598 0.015524 0.466122 ( 0.466802)
# 0.496796 0.018525 0.515321 ( 0.516196)
Run Code Online (Sandbox Code Playgroud)
Benchmark
总是表现出有利于 的时间性能差异Array#map
。在下面的代码中:
puts Benchmark.measure {
100.times do
array.select { |el| el.even? }
end
}
puts Benchmark.measure {
100.times do
new_array …
Run Code Online (Sandbox Code Playgroud) java ×3
performance ×3
batch-file ×1
c++ ×1
cygwin ×1
for-loop ×1
optimization ×1
println ×1
ruby ×1
scala ×1
windows ×1