我试图通过解析一长串文本来找到食谱的标签(关键字).该文本包含配方成分,方向和简短的模糊.
您认为从标签列表中删除常用单词的最有效方法是什么?
用常用词来说,我的意思是:'the','at','there','their'等等.
我有两种我可以使用的方法,你认为它们在速度方面更有效率,你知道我能做到这一点的更有效的方法吗?
方法1:
- 确定每个单词出现的次数(使用库集合)
- 有一个常用单词列表,并通过尝试从Collection对象中删除该键来删除Collection对象中的所有"公共单词"(如果存在).
- 因此速度将由变量delims的长度决定
import collections from Counter
delim = ['there','there\'s','theres','they','they\'re']
# the above will end up being a really long list!
word_freq = Counter(recipe_str.lower().split())
for delim in set(delims):
del word_freq[delim]
return freq.most_common()
Run Code Online (Sandbox Code Playgroud)
方法2:
- 对于可以是复数的常用单词,查看配方字符串中的每个单词,并检查它是否部分包含公共单词的非复数形式.例如; 对于字符串"有一个测试",检查每个单词以查看它是否包含"那里"并删除它(如果有).
delim = ['this','at','them'] # words that cant be plural
partial_delim = ['there','they',] # words that could occur in many forms
word_freq = Counter(recipe_str.lower().split())
for delim in set(delims):
del word_freq[delim]
# really slow
for delim in set(partial_delims): …Run Code Online (Sandbox Code Playgroud) 这可能听起来像一个显而易见的问题,但我只想得到一些保证.
使用Laravel的急切加载功能,根据我的理解,它将创建两个查询以返回相关结果的完整列表(例如,如果您正在使用两个表).但是,如果我错了,请纠正我,使用join语句只会留下一个查询,这样可以减少往返服务器数据库(MySQL)的次数,并且查询效率更高.
我知道你可以在Laravel中编写连接查询,这很好,所以问题是:我不正确地假设当从两个或多个表中检索相关数据时,我是否应该打扰急切加载而只是编写我自己的连接声明?
******编辑*******
回到这一年后,我个人认为,只需编写查询,原始并写好.
在上一个问题中,我问过多处理,使用多个内核使程序运行得更快,有人告诉我:
通常情况下,使用更好的代码可以获得100x +优化,而使用多处理可以获得4倍的改进和额外的复杂性
然后他们建议我应该:
使用分析器来了解什么是慢,然后专注于优化.
所以我回答了这个问题:你如何描述一个脚本?
在这里,我发现cProfile并将其实现到一些测试代码中,以了解它是如何工作的.
这是我的代码:
import cProfile
def foo():
for i in range(10000):
a = i**i
if i % 1000 == 0:
print(i)
cProfile.run('foo()')
Run Code Online (Sandbox Code Playgroud)
然而,在运行之后,这就是我得到的:
0
1000
2000
3000
4000
5000
6000
7000
8000
9000
1018 function calls in 20.773 seconds
Ordered by: standard name
ncalls tottime percall cumtime percall filename:lineno(function)
1 0.000 0.000 20.773 20.773 <string>:1(<module>)
147 0.000 0.000 0.000 0.000 rpc.py:150(debug)
21 0.000 0.000 0.050 0.002 rpc.py:213(remotecall)
21 0.000 0.000 0.002 0.000 …Run Code Online (Sandbox Code Playgroud) python performance profiling processing-efficiency python-3.x
最近在使用LIKE和通配符搜索MS SQL数据库的最有效方法上进行了辩论.我们使用的比较%abc%,%abc和abc%.有人说你应该在学期末(abc%)结束时使用通配符.因此,根据他们的说法,如果我们想要找到以"abc"结尾的东西,那么使用`reverse(column)LIKE reverse('%abc')是最有效的.
我使用SQL Server 2008(R2)设置了一个测试来比较以下每个语句:
select * from CLMASTER where ADDRESS like '%STREET'
select * from CLMASTER where ADDRESS like '%STREET%'
select * from CLMASTER where ADDRESS like reverse('TEERTS%')
select * from CLMASTER where reverse(ADDRESS) like reverse('%STREET')
Run Code Online (Sandbox Code Playgroud)
CLMASTER拥有大约500,000条记录,大约有7,400个地址以"Street"结尾,大约8,500个地址包含"Street",但不一定在最后.每次测试运行花了2秒钟,他们都返回了相同数量的行,除了%STREET%,它发现额外的900左右的结果,因为它拾取了最后有公寓号的地址.
由于SQL Server测试没有显示执行时间的任何差异,我移动到PHP,我使用以下代码,切换每个语句,快速运行多个测试:
<?php
require_once("config.php");
$connection = odbc_connect( $connection_string, $U, $P );
for ($i = 0; $i < 500; $i++) {
$m_time = explode(" ",microtime());
$m_time = $m_time[0] + $m_time[1]; …Run Code Online (Sandbox Code Playgroud) sql sql-server query-optimization processing-efficiency sql-server-2008
在某些环境(如Java)中,使用TCP/IP套接字使用"localhost"地址(IPv4中为127.0.0.1或IPv6中为:: 1)在同一主机上的进程之间传递消息是很自然的.(因为Java倾向于不在其API中公开其他IPC机制).
显然,通过管道传递消息或使用共享内存的IPC,这可能比IPC慢得多.
另一方面,如果TCP/IP网络堆栈意识到连接的两端都在环回接口上,那么它可能能够进行一些优化,这样效率可能与使用管道没有太大差别.
但是,常见的操作系统(Windows,Linux)是否在其TCP/IP堆栈中实现了这样的优化?
问题
我正在构建一系列照片拼贴画,这些照片是我放在桌面视图上的.当图像数量达到tableview单元格宽度的边界时,我想让图像换行(这样我就可以在拼贴中显示图像行).目前我得到一排.如果需要其他信息,请随时告知.我很可能不会以最有效的方式接近这一点,因为随着阵列中使用的图像数量开始增加而存在延迟.(对此的任何反馈将非常感激).
Nota Bene
我正在创建拼贴图像.它实际上是一个图像.我想通过在内存中创建一个有效的列和行矩阵来安排拼贴 .然后我用图像填充这些图像.最后,我对生成的图像进行快照,并在需要时使用它.算法写入效率不高,只产生一行图像.我需要一个轻量级替代下面使用的算法.在这种情况下,我不相信UICollectionView会是一个有用的替代品.
伪代码
使用:Swift 2.0
class func collageImage (rect:CGRect, images:[UIImage]) -> UIImage {
let maxSide = max(rect.width / CGFloat(images.count), rect.height / CGFloat(images.count))
UIGraphicsBeginImageContextWithOptions(rect.size, false, UIScreen.mainScreen().scale)
var xtransform:CGFloat = 0.0
for img in images {
let smallRect:CGRect = CGRectMake(xtransform, 0.0,maxSide, maxSide)
let rnd = arc4random_uniform(270) + 15
//draw in rect
img.drawInRect(smallRect)
//rotate img using random angle.
UIImage.rotateImage(img, radian: CGFloat(rnd))
xtransform += CGFloat(maxSide * 0.8)
}
let …Run Code Online (Sandbox Code Playgroud) 我最近在C++技术面试中,给了我一些简单的字符串操作代码,它用于获取一个字符串并返回一个由第一个和最后一个n字符组成的字符串,然后继续纠正任何错误,并使功能尽可能高效,我想出了下面的解决方案,但面试官声称有一个更快,更优化的方式:
原始代码:
std::string first_last_n(int n, std::string s)
{
std::string first_n = s.substr(0,n);
std::string last_n = s.substr(s.size()-n-1,n);
return first_n + last_n;
}
Run Code Online (Sandbox Code Playgroud)
我的代码:
bool first_last_n(const std::size_t& n, const std::string& s, std::string& r)
{
if (s.size() < n)
return false;
r.reserve(2 * n);
r.resize(0);
r.append(s.data(),s.data() + n);
r.append(s.data() + (s.size() - n), s.data() + s.size());
return true;
}
Run Code Online (Sandbox Code Playgroud)
我的更改摘要:
更改接口以获取返回字符串作为参考(假设RVO和rvalues尚不可用)
删除了通过substr构造的临时字符串
将输入字符串作为const引用传递,以便绕过输入的临时实例化
修复了last_n字符串中的off-by-1错误
减少每个角色被触及一次或两次的次数(在重叠场景的情况下)
在字符串s的大小小于n的情况下放置一个检查,对于失败返回false.
假设只允许本机C++,是否有其他方法可以更有效或最佳地完成上述操作?
注1:不修改原始输入字符串实例.
注2:所有解决方案必须通过以下测试用例,否则它们无效.
void test()
{
{
std::string s = "0123456789";
std::string r = first_last_n(10,s); …Run Code Online (Sandbox Code Playgroud) 有人告诉我,模运算符"%"和除运算符"/"在嵌入式C++中效率很低.
我怎样才能实现以下表达式:
a = b % c;
Run Code Online (Sandbox Code Playgroud)
我知道这可以使用以下逻辑来实现:
a = b - c;
while (a >= c) {
a = a - c;
}
Run Code Online (Sandbox Code Playgroud)
但我的问题是,与%运算符相比,这个代码涉及while循环是否足够有效?
谢谢,Kirti
我可以在HDD上访问运行Linux的计算机,该计算机具有20个内核,92 GB RAM和100 GB存储空间.我想将Hadoop用于涉及大量数据的任务(超过1M字,超过1B字组合).伪分布式模式或完全分布式模式是在单台计算机上利用Hadoop功能的最佳方式吗?
对于我对Hadoop的预期用途,遇到数据丢失并因节点故障而不得不重新运行作业不是大问题.
parallel-processing hadoop virtual-machine processing-efficiency linux-containers
我想知道什么是最好的:数组或二进制搜索树(插入,删除,查找最大和最小)以及如何改进它们?
performance ×3
c++ ×2
python ×2
algorithm ×1
arrays ×1
hadoop ×1
interprocess ×1
ios ×1
join ×1
laravel ×1
localhost ×1
modulo ×1
mysql ×1
optimization ×1
parsing ×1
profiling ×1
python-3.x ×1
sockets ×1
sql ×1
sql-server ×1
string ×1
swift ×1
tcp ×1