我目前正在学习数据结构课程,正如您所料,我们要做的一件事就是编写一些常见的排序.在编写我的插入排序算法时,我发现它的运行速度明显快于我的教师的速度(对于400000个数据点,我的算法需要大约30秒,而他的大约需要90秒).我通过电子邮件向他发送了我的代码,当他们在同一台机器上运行时,会发生相同的结果.我们设法浪费了40多分钟,慢慢地将他的排序方法改为我的,直到它完全相同,一字不差,除了一个看似随意的事情.首先,这是我的插入排序代码:
public static int[] insertionSort(int[] A){
//Check for illegal cases
if (A == null || A.length == 0){
throw new IllegalArgumentException("A is not populated");
}
for(int i = 0; i < A.length; i++){
int j = i;
while(j > 0 && A[j - 1] > A[j]){
int temp = A[j];
A[j] = A[j - 1];
A[j - 1] = temp;
j--;
}
}
return A;
}
Run Code Online (Sandbox Code Playgroud)
现在,此时他的代码与我的代码完全相同,除了我们交换的行A[j]和A[j - 1].他的代码执行了以下操作:
int temp = A[j - 1];
A[j …Run Code Online (Sandbox Code Playgroud) 我刚刚开始学习Java Runnable,我听说过Callables.但是,我非常努力解决这个问题.我想创建一个方法,它将一个函数作为参数(无论是作为a Callable,a Runnable还是其他东西,只要我可以简单地调用函数coolNewFunction(() -> otherFunction(), 100)或类似的简单方法)并且该方法将返回一个数组返回值的otherFunction.例如,假设我定义了该函数
public static int square(int x){
return x * x;
}
Run Code Online (Sandbox Code Playgroud)
然后我可以做一些事情:
coolNewFunction(() -> square(), 100)
Run Code Online (Sandbox Code Playgroud)
这将返回前100个数字及其正方形(即{{1, 1}, {2, 4}, {3, 9}...})的数组.现在,我知道这lambda () -> square()不会起作用,因为square必须传递一个值.我虽然创建了一个100 Runnable秒的数组,每个数组都有下一个参数square,但该方法仍然run()没有返回任何内容.所以,长话短说,一个方法会是什么样的,它会评估另一个函数,它作为一个参数给出,就像square在不同的x值一样,并返回一个该评估的数组?此外,我最好不要开始任何新的线程,虽然这是唯一可以实现这一点的方法.最后,我不想以square特殊方式(最好)实现(或其他)功能.
这是我第一次真正使用它之一virtualenv,当我第一次激活它时,我(并且)对我的实际项目(如代码)的位置感到有些困惑.目前(制作和激活后virtualenv)这是我的项目的样子PyCharm:
Project Name
|-project-name <= I called my virtualenv project-name
|-bin
|-Lots of stuff here
|-include
|-Lots of stuff here
|-lib
|-Lots of stuff here
|-.Python
|-pip-selfcheck.json
Run Code Online (Sandbox Code Playgroud)
在这种环境中,我应该在哪里放置我的实际代码?
python development-environment virtualenv pycharm python-3.x
我知道在NLP中确定句子主题或可能是段落是一个挑战.但是,我试图确定标题可能是什么类似维基百科的文章(当然不使用其他方法).我唯一能找到最常用的词.关于纽约市的文章,这些是最好的结果:
[('new', 429), ('city', 380), ('york', 361), ("'s", 177), ('manhattan', 90), ('world', 84), ('united', 78), ('states', 74), ('===', 70), ('island', 68), ('largest', 66), ('park', 64), ('also', 56), ('area', 52), ('american', 49)]
Run Code Online (Sandbox Code Playgroud)
从中我可以看出某种统计意义是从361急剧下降到177.无论如何,我既不是统计学家也不是NLP专家(事实上我两者都是一个完整的菜鸟)所以这是一种可行的方法来确定较长文本主题.如果是这样,我想用什么数学来计算呢?如果没有,NLP中还有其他方法可以确定更大的文本主题或标题吗?作为参考,我使用的是nltk和Python 3.
java ×2
python ×2
python-3.x ×2
algorithm ×1
callable ×1
java-8 ×1
lambda ×1
nlp ×1
nltk ×1
performance ×1
pycharm ×1
runnable ×1
sorting ×1
virtualenv ×1