拥有算法标签的文章

算法笔记0015_循环单词

问题描述:如果一个单词通过循环右移获得的单词,我们称这些单词都为一种循环单词。 例如:picture 和 turepic 就是属于同一种循环单词。 现在给出n个单词,需要统计这个n个单词中有多少种循环单词。 链接:https://www.nowcoder.com/questionTerminal/9d5fbe7750a34d0b91c73943f93b2d7d来源:牛客网输入描述:输入包
阅读全文

查找算法008-深度、广度优先搜索

DFS定义DFS(Depth-First-Search)深度优先搜索算法,是搜索算法的一种。是一种在开发爬虫早期使用较多的方法。它的目的是要达到被搜索结构的叶结点 。特点每次深度优先搜索的结果必然是图的一个连通分量。深度优先搜索可以从多点发起。如果将每个节点在深度优先搜索过程中的“结束时间”排序(具体做法是创建一个list,然后在每个节点的相邻节点都已被访问的情况下,将该节点加入list结尾,然后
阅读全文

五大常用算法思想009:分治、动态规划、贪心、回溯、分支限定

转自:https://blog.csdn.net/yake827/article/details/52119469五大常用算法之一:分治一、基本概念   在计算机科学中,分治法是一种很重要的算法。字面上的解释是“分而治之”,就是把一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问题……直到最后子问题可以简单的直接求解,原问题的解即子问题的解的合并。这个技
阅读全文

查找算法007-二分查找

说明:元素必须是有序的,如果是无序的则要先进行排序操作。1、算法思想:也称为是折半查找,属于有序查找算法。用给定值k先与中间结点的关键字比较,中间结点把线形表分成两个子表,若相等则查找成功;若不相等,再根据k与该中间结点关键字的比较结果确定下一步查找哪个子表,这样递归进行,直到查找到或查找结束发现表中没有这样的结点。2、时间复杂度:O(log2n)3、C++ 实现://二分查找(折半查找),版本1
阅读全文

查找算法006-顺序查找

说明:顺序查找适合于存储结构为顺序存储或链接存储的线性表。1、基本思想:顺序查找也称为线形查找,属于无序查找算法。从数据结构线形表的一端开始,顺序扫描,依次将扫描到的结点关键字与给定值k相比较,若相等则表示查找成功;若扫描结束仍没有找到关键字等于k的结点,表示查找失败。2、时间复杂度:O(n)3、C++实现int SequenceSearch(int a[], int
阅读全文

排序算法005-插入排序

一、什么是插入排序?Java 实现:class InsertSort{     private static void insertSort(Integer[] data) {           &
阅读全文

排序算法004-归并排序

一、什么是归并排序?(稳定、O(nlogn))归并排序 (merge sort) 是一类与插入排序、交换排序、选择排序不同的另一种排序方法。归并的含义是将两个或两个以上的有序表合并成一个新的有序表。1、一趟归并需要将数组 a[]中相邻的长度为h的有序序列进行两两归并.并将结果放到temp[]中,这需要将待排序列中的所有记录扫描一遍,因此耗费O(n),而又完全二叉树的深度可知,整个归并排序
阅读全文

排序算法003-选择排序

首先要知道选择排序包括:简单选择排序,堆排序选择排序的基本思想每一趟从待排序的数据中选出最小元素,顺序放在已排好序的数据最后,直到全部数据排序完毕。
阅读全文

排序算法002-冒泡排序

冒泡排序的基本思想:每次比较两个相邻元素,如果他们的顺序错误就把它们交换过来。时间复杂度:由于每个数字都要和所有相邻的数字进行比较,即其核心部分就是双重嵌套循环,所以不难想到为O(N2),这是一个非常高的时间复杂度代码实现#include <stdio.h>   int main(int argc, const c
阅读全文

排序算法001-快速排序

首先我们要知道,快速排序是对冒泡排序的改进,通常情况下快速排序的速度最快,但是由于使用了递归,所以会占用大量内存。算法思想:从数组里挑选一个数,将其他大于这个数的数放在它的右边(假设从小到大排列),小于他的放在左边。这样的话数组被分成左右俩数组,然后重复对子数组进行上述操作。快速排序步骤:1)排序开始的时候:i=0(数组起始位置),j=N-1(数组结束位置);2)以第一个数组元素作为关键数据,ke
阅读全文
首页 123 末页 共 25 条记录