我正在尝试使用mongo db为我的食谱网站实现一个搜索引擎.我正在尝试向用户显示预先输入小部件框中的搜索建议.
我甚至试图支持错误拼写的查询(levenshtein距离).
例如:每当用户输入'pza'时,输入提前应显示'pizza'作为建议之一.
如何使用mongodb实现此类功能?
请注意,搜索应该是即时的,因为搜索结果将由提前输入小部件提取.我将运行搜索查询的集合最多有100万个条目.
我想过实施levenshtein距离算法,但这会降低性能,因为收集很大.
我在mongo 2.6中阅读FTS(全文搜索)现在相当稳定,但我的要求是近似匹配,而不是FTS.FTS不会为'pizza'返回'pza'.
请推荐我有效的方法.
我正在使用节点js mongodb本机驱动程序.
在公司采访中我问过这个问题 - 哪种数据结构对实施电梯机制有效?
即使经过大量谷歌搜索,我也无法找到有效的数据结构.
我可以想到优先级队列来实现它.优先级队列是一个有效的数据结构还是更有效的数据结构用于实现电梯机制?
谢谢!
我正在开发一个填充购物车的模块.我使用ListView并扩展BaseAdapter来填充购物车项目.对于每个项目ListView,我嵌入了两个按钮(inc和dec)来增加和减少购物车中的商品数量.
ListView 已正确更新,但快速单击/点击时的递增/递减按钮显示突然行为.
每当我快速点击任何inc或dec按钮时,将ListView自动点击当前项目旁边的项目的相应inc或dec按钮(以及当前项目btn).
换句话说,每当我快速点击第i个项目的ListViewinc btn时,ListView会自动点击第i + 1个项目的inc btn(以及第i个项目的inc btn).
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;
if (convertView == null) {
convertView = mInflater.inflate(R.layout.list_item_cart, parent, false);
holder = new ViewHolder();
holder.baseItem = (TextView) convertView.findViewById(R.id.qnt_tv);
holder.qntInc = (TextView) convertView.findViewById(R.id.inc_btn);
holder.qntDec = (TextView) convertView.findViewById(R.id.dec_btn);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
final CartModel cm = mCart.get(position);
holder.baseItem.setText(cm.getmTitle());
holder.qntSel.setText(String.valueOf(cm.getmQnt()));
holder.qntInc.setOnClickListener(new View.OnClickListener() {
@Override …Run Code Online (Sandbox Code Playgroud) 假设给出了加权图G(V,E).
该图包含N个顶点(从0到N-1编号)和M个双向边.
每个边(vi,vj)具有正距离d(即两个顶点vivj之间的距离为d)
有atmost任意两个顶点之间的一个边缘,也有没有自我循环(ie.no边缘的顶点连接到其自身.)
我们也给S是源顶点,D给目标顶点.
令Q为查询数,每个查询包含一个边e(x,y).
对于每个查询,我们必须找到从源S到目标D的最短路径,假设原始图中不存在边(x,y). 如果S到D之间不存在任何路径,那么我们必须打印否.
约束高0 <=(N,Q,M)<= 25000
如何有效地解决这个问题?
到目前为止我所做的是实现了简单的Dijakstra算法.
对于每个Query Q,每次我将(x,y)分配给Infinity 并找到Dijakstra最短路径.
但这种方法将非常缓慢,因为整体复杂性将是Q(Dijastra Shortes路径的时间复杂度)*
例::
N=6,M=9
S=0 ,D=5
(u,v,cost(u,v))
0 2 4
3 5 8
3 4 1
2 3 1
0 1 1
4 5 1
2 4 5
1 2 1
1 …Run Code Online (Sandbox Code Playgroud) 我们给出了具有N个节点(从0到N-1编号)和精确(N-1)双向边缘的图G(V,E).
图中的每条边具有正成本C(u,v)(边缘权重).
整个图形使得任何节点对之间存在唯一的路径.
我们还给出了一个节点号的列表L,在该列表中放置了炸弹.
我们的目标是从图形中损坏/移除边缘,使得在图形中损坏/移除边缘之后,炸弹之间没有连接 -
这是后损坏,有任何两弹一星之间没有路径.
损坏边缘的成本(u,v) = 边缘重量(u,v).
因此,我们必须损坏这些边缘,以便总损坏成本最小.
例:
Total Nodes=N=5
Total Bomb=Size of List L=3
List L={2,4,0}//Thats is at node number 2,4 and 0 bomb is placed...
Total Edges =N-1=4 edges are::
u v Edge-Weight
2 1 8
1 0 5
2 4 5
1 3 4
In this case the answer is ::
Total Damaging cost =(Edge Weight …Run Code Online (Sandbox Code Playgroud) 我在这里要问的问题是在堆栈溢出之前已经被问过了.但我无法正确理解Skiminok发布的解决方案.
这是链接.
我尝试使用给定的两个示例测试用例在上面的链接上发布的解决方案,但我无法得到正确的答案.
对于测试用例1 ::
N = 3且K = 2
5 4 7
DAG将::

注意:我构建了上面的DAG考虑:
让pi和pj成为两个不同的问题.然后我们将绘制从pi到pj的有向边,当且仅当pj可以在pi之后直接在同一天连续解决.即,必须满足以下条件:
我<j,因为你应该先解决较不困难的问题.
| vi - vj | > = K(评级要求).
然后我构建了二分图,考虑::
对于原始DAG的每个有向边(u,v),应该将无向边(au,bv)添加到二分图,其中{ai}和{bi}是n的两个部分.

答案=上述二分图中的最大基数匹配.
上述二分图中的最大基数匹配= 1(绿色egde)
但答案是2.
类似的样本测试案例2:
5 1
5 3 4 5 6


上图中的MAx基数超过一个,但正确的答案是1.
我想我没有正确实现它,请你能告诉我在哪里犯错误或者是否还有其他方法
谢谢!
我有一个后缀数组SA和一个数组L,它存储两个连续后缀之间的LCP长度(最长公共前缀),即
L[i]=LCP(SA[i-1],SA[i]) where 1<=i<=|SA|
Run Code Online (Sandbox Code Playgroud)
它也在这里描述.
我应该如何使用此数组L来找到给定的两个后缀x和y之间的LCP(x,y)?
以下c ++代码的输出是什么?
#include<iostream>
using namespace std;
class IndiaBix
{
int x, y;
public:
IndiaBix(int xx)
{
x = ++xx;
}
~IndiaBix()
{
cout<< x - 1 << " ";
}
void Display()
{
cout<< --x + 1 << " ";
}
};
int main()
{
IndiaBix objBix(5);
objBix.Display();
int *p = (int*) &objBix;
*p = 40;
objBix.Display();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我不明白以下一行::
int *p = (int*) &objBix;//Explicit type cast of a class object to integer pointer type
Run Code Online (Sandbox Code Playgroud) 以下问题在Facebook求职面试能力测试中被问到:
A permutation is a list of K numbers, each between 1 and K (both inclusive),
that has no duplicate elements.
Permutation X is lexicographically smaller than Permutation Y iff for some
i <= K:
All of the first i-1 elements of X are equal to first i-1 elements of Y.
ith element of X is smaller than ith element of Y.
You are given a permutation P, you can exchange some of its elements as …Run Code Online (Sandbox Code Playgroud) 我想计算给定两个日期之间的所有星期日.我试过以下代码.如果天数较少,但如果我输入更多天,它可以正常工作.它保持处理和最大执行时间超过我改变了时间,但它甚至保持处理甚至执行时间是200秒.
代码是
<?php
$one="2013-01-01";
$two="2013-02-30";
$no=0;
for($i=$one;$i<=$two;$i++)
{
$day=date("N",strtotime($i));
if($day==7)
{
$no++;
}
}
echo $no;
?>
Run Code Online (Sandbox Code Playgroud)
请帮忙.