算法与数据结构
文章平均质量分 70
qauzy
这个作者很懒,什么都没留下…
展开
-
【TIDB】拜占庭将军问题和Raft算法
1 拜占庭将军问题(from 百度百科)拜占庭将军问题是一个协议问题,拜占庭帝国军队的将军们必须全体一致的决定(数据的一致性)是否攻击某一支敌军。问题是这些将军在地理上是分隔开来的(分布式),并且将军中存在叛徒。叛徒可以任意行动以达到以下目标:欺骗某些将军采取进攻行动;促成一个不是所有将军都同意的决定,如当将军们不希望进攻时促成进攻行动;或者迷惑某些将军,使他们无法做出决定。如果叛徒达到了这些...转载 2019-11-04 10:08:03 · 1583 阅读 · 1 评论 -
KMP算法
我们要解决的问题:在指定字符串中,查找给定的子字符串的位置KMP算法本质上就一句话:做过的事情就不要重复做。KMP算法实现形象表述:首尾交集有多少我们后面慢慢理解这几句话。我们先举一个例子,一个关于翻牌的游戏。第二行每个字母代表一个人持有的牌,* 代表未知的牌。规则是对应的人在对应的位置上翻到对应的牌。比如持有牌a的人,他需要找到字母为A的牌;持有牌a,b的人,需要翻到牌A,B。情形一:现在假定只...原创 2018-05-02 08:22:07 · 173 阅读 · 0 评论 -
跳跃表以及跳跃表在redis中的实现
之前在阅读redis源码的时候了解到跳跃表这个数据结构,当时花了点时间了解了下,并做了记录;如今差不多一年过去了,被人问起,竟然一点印象都没有了。然后回头去看自己的注解,重新梳理下。1 跳跃表的原理对于普通链表的查找,即使有序,我们也不能使用二分法,需要从头开始,一个一个找,时间复杂度为O(n)。而对于跳跃表,从名字可以看出跳跃表的优势就在于可以跳跃。如何做到呢?在于其特殊的层设计。比如我们查找4...原创 2018-05-09 17:28:23 · 16689 阅读 · 7 评论 -
欧拉定理与RSA算法原理
// GenerateMultiPrimeKey generates a multi-prime RSA keypair of the given bit// size and the given random source, as suggested in [1]. Although the public// keys are compatible (actually, indist...原创 2018-07-25 20:30:07 · 2015 阅读 · 0 评论 -
K-means聚类算法
源:https://segmentfault.com/a/1190000010863236K-means算法简介K-means是机器学习中一个比较常用的算法,属于无监督学习算法,其常被用于数据的聚类,只需为它指定簇的数量即可自动将数据聚合到多类中,相同簇中的数据相似度较高,不同簇中数据相似度较低。K-menas的优缺点:优点: 原理简单 速度快 对大数据集...转载 2019-03-05 11:08:59 · 409 阅读 · 0 评论 -
前缀树Trie及代码实现(golang)
1 什么是Trie树Trie树,即字典树,又称单词查找树或键树,是一种树形结构,是一种哈希树的变种。典型应用是用于统计和排序大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计。它的优点是:最大限度地减少无谓的字符串比较,查询效率比哈希表高。小写英文字母或大写英文字母的字典数是一个26叉树。Trie树的根结点是不保存数据的,所有的数据都保存在它的孩子节点中。有字符串go, ...原创 2019-03-06 16:19:56 · 4624 阅读 · 0 评论 -
基于redis实现的延时队列
1 需求背景用户抢单成功之后,如果一定时间后没有完成任务,任务自动取消 用户提交任务审核后,如果商家一定时间后没有审核,任务自动通过类似的场景比较多 简单的处理方式就是使用定时任务 假如数据比较多的时候 有的数据可能延迟比较严重,而且越来越多的定时业务导致任务调度很繁琐不好管理。2 技术支撑Redis 有序集合和集合一样也是string类型元素的集合,且不允许重复的成员。不同的...原创 2019-03-07 16:53:14 · 3440 阅读 · 0 评论 -
【排序算法go】二分查找
1 递归实现二分查找递归实现,关键是要确定终止条件package search//递归实现func BinarySearch(arr []int,dst int) int{ mid := len(arr)/2 //递归最重要的是确定终止条件 if len(arr) == 0{ return -1 } //查找成功 if arr[mid]== dst{ ret...原创 2019-04-01 00:27:46 · 483 阅读 · 1 评论 -
【查找算法go】查找单链表倒数第m个元素
查找单链表倒数第m个元素,只需要两个标记指针间隔m个单位package searchimport "fmt"type ListItem struct{ Value int NextItem *ListItem}func Revertm(items *ListItem,m int) *ListItem{ var dst,head *ListItem head = it...原创 2019-04-03 11:22:35 · 441 阅读 · 0 评论 -
121. Best Time to Buy and Sell Stock
Say you have an array for which the ith element is the price of a given stock on day i.If you were only permitted to complete at most one transaction (ie, buy one and sell one share of the stock), d原创 2018-01-26 10:50:10 · 168 阅读 · 0 评论 -
53. Maximum Subarray
Find the contiguous subarray within an array (containing at least one number) which has the largest sum.For example, given the array [-2,1,-3,4,-1,2,1,-5,4],the contiguous subarray [4,-1,2,1] ha原创 2018-01-25 16:53:12 · 148 阅读 · 0 评论 -
10. Regular Expression Matching
Implement regular expression matching with support for '.' and '*'.'.' Matches any single character.'*' Matches zero or more of the preceding element.The matching should cover the entire inpu原创 2018-01-25 11:05:07 · 151 阅读 · 0 评论 -
Add Two Numbers(单链表处理)
You are given two non-empty linked lists representing two non-negative integers. The digits are stored in reverse order and each of their nodes contain a single digit. Add the two numbers and return it原创 2017-03-05 10:23:01 · 275 阅读 · 0 评论 -
分治思想之快速排序
基本思路是(升序为例):1.选出一个成员(一般第一个)为参考对象key,2.从最后一个成员开始找一个比key小的,找到就调换两个成员-->使后面成员都比key大3.从第一个开始找比key大的成员,找到就调换两个成员-->使前面成员都比key小4.对以key为界的两组分别做如上操作@转于百度百科void sort(int *a, int left, int right原创 2016-04-21 10:10:26 · 488 阅读 · 0 评论 -
Longest Palindromic Substring(字符串处理)
Given a string s, find the longest palindromic substring in s. You may assume that the maximum length of s is 1000.Example:Input: “babad”Output: “bab”Note: “aba” is also a valid answer. Example:Input:原创 2017-03-05 18:12:08 · 303 阅读 · 0 评论 -
分治思想之归并排序
//将有二个有序数列a[first...mid]和a[mid...last]合并。void mergearray(int a[], int first, int mid, int last, int temp[]){ int i = first, j = mid + 1; int m = mid, n = last; int k = 0; //直到其中一边的元原创 2017-03-10 00:22:42 · 628 阅读 · 0 评论 -
Reverse Integer
Reverse digits of an integer.Example1: x = 123, return 321 Example2: x = -123, return -321click to show spoilers.Note: The input is assumed to be a 32-bit signed integer. Your function should return原创 2017-03-10 01:38:10 · 712 阅读 · 0 评论 -
分治思想之二分查找
二分查找有递归实现法和普通实现法:#include<iostream>using namespace std;#define REC#ifdef REC/***************************************************************************** * 函 数 名 : binarySearch * 函数功能 : 二分查找递归原创 2017-12-03 14:15:58 · 530 阅读 · 0 评论 -
分治思想之快速排序
快速排序由C. A. R. Hoare在1962年提出。它的基本思想是:首先从待排序序列中选一个关键字作为枢轴,使枢轴左边的所有数据都小于这个枢轴,枢轴右边的数据都大于这个枢轴,再用递归的方法对这两个子序列进行快速排序,最终使得整个序列有序#include<iostream>using namespace std;void Swap(int &a, int &b){ int temp = a原创 2017-12-03 19:30:42 · 1366 阅读 · 0 评论 -
760. Find Anagram Mappings
Given two lists Aand B, and B is an anagram of A. B is an anagram of A means B is made by randomizing the order of the elements in A.We want to find an index mapping P, from A to B. A mapping P[原创 2018-01-22 14:49:18 · 326 阅读 · 0 评论 -
654. Maximum Binary Tree
Given an integer array with no duplicates. A maximum tree building on this array is defined as follow:The root is the maximum number in the array.The left subtree is the maximum tree constructed f原创 2018-01-22 16:53:36 · 142 阅读 · 0 评论 -
Merge Two Binary Trees
Given two binary trees and imagine that when you put one of them to cover the other, some nodes of the two trees are overlapped while the others are not.You need to merge them into a new binary tr原创 2018-01-22 17:48:24 · 217 阅读 · 0 评论 -
763. Partition Labels
A string S of lowercase letters is given. We want to partition this string into as many parts as possible so that each letter appears in at most one part, and return a list of integers representing原创 2018-01-23 16:17:16 · 201 阅读 · 0 评论