Questions tagged «algorithm»

算法是定义明确的问题解决方案的一系列明确定义的步骤。当您的问题与算法设计有关时,请使用此标签。

30
如何仅使用两个指针来反转单链列表?
我想知道是否存在仅使用两个指针来反转单链列表的逻辑。 以下是用于逆转使用三个指针即单链表p,q,r: struct node { int data; struct node *link; }; void reverse() { struct node *p = first, *q = NULL, *r; while (p != NULL) { r = q; q = p; p = p->link; q->link = r; } first = q; } 还有其他替代方法可以反向链接列表吗?就时间复杂度而言,颠倒单个链表的最佳逻辑是什么?

13
快速排序:选择枢纽
实施Quicksort时,要做的一件事情是选择一个枢轴。但是当我看下面的伪代码时,不清楚如何选择支点。列表的第一个元素?还有吗 function quicksort(array) var list less, greater if length(array) ≤ 1 return array select and remove a pivot value pivot from array for each x in array if x ≤ pivot then append x to less else append x to greater return concatenate(quicksort(less), pivot, quicksort(greater)) 有人可以帮助我掌握选择支点的概念,以及不同的情况是否需要不同的策略。

20
插入排序与选择排序
我试图了解插入排序和选择排序之间的区别。 它们似乎都具有两个组成部分:未排序列表和已排序列表。他们似乎都从未排序列表中选取一个元素,并将其放入适当位置的已排序列表中。我见过一些网站/书籍说选择排序是通过一次交换一个来实现的,而插入排序只是找到合适的位置并插入它。但是,我看到其他文章说了一些话,说插入排序也会互换。因此,我感到困惑。有规范的资料吗?

10
递归与迭代
说在所有使用递归的地方for都可以使用循环是正确的吗?如果递归通常较慢,那么在for循环迭代中使用递归的技术原因是什么? 并且如果总是有可能将递归转换为for循环,是否有经验法则?



30
计算数组中的反转
我正在设计一种算法来执行以下操作:给定数组A[1... n],对于每个数组i < j,找到所有这样的反转对A[i] > A[j]。我正在使用合并排序并将数组A复制到数组B,然后比较两个数组,但是我很难看清如何使用它来查找反转数。任何提示或帮助将不胜感激。
108 algorithm 



14
重叠圆的合并区域
我最近遇到一个问题,我有四个圆(中点和半径),必须计算这些圆的并集面积。 示例图片: 对于两个圈子来说,这很容易 我可以计算出不在三角形内的每个圆面积的分数,然后计算三角形的面积。 但是,当有两个以上的圆圈时,是否可以使用一种聪明的算法?
107 algorithm  geometry  area 



9
在哪里可以获得“有用的” C ++二进制搜索算法?
我需要一个与C ++ STL容器兼容的二进制搜索算法,就像std::binary_search在标准库的<algorithm>标头中一样,但是我需要它返回指向结果的迭代器,而不是简单的布尔值告诉我元素是否存在。 (附带说明,标准委员会在为binary_search定义API时到底在想什么?!) 我主要关心的是我需要二进制搜索的速度,因此,尽管可以使用其他算法查找数据,如下所述,但我想利用这样一个事实,即我的数据经过排序以获得二进制的好处搜索,而不是线性搜索。 到目前为止lower_bound,upper_bound如果缺少基准点则失败: //lousy pseudo code vector(1,2,3,4,6,7,8,9,0) //notice no 5 iter = lower_bound_or_upper_bound(start,end,5) iter != 5 && iter !=end //not returning end as usual, instead it'll return 4 or 6 注意:只要与容器兼容,我也可以使用不属于std名称空间的算法。就像说boost::binary_search。

17
如何在两个排序数组的并集中找到第k个最小元素?
这是一个作业问题。他们说这需要O(logN + logM)在哪里N,M是数组的长度。 让我们命名的数组a和b。显然,我们可以忽略所有a[i]和b[i]其中i>ķ。 首先,我们比较a[k/2]和b[k/2]。让b[k/2]> a[k/2]。因此,我们也可以丢弃所有b[i],其中i> k / 2。 现在我们有了all a[i],其中i <k和all b[i],其中i <k / 2来找到答案。 你下一步怎么做?


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.