数据结构
chnhbhndchngn
这个作者很懒,什么都没留下…
展开
-
python版本 取序列中的topK最大值
创建小根堆, 使用python内部的模块 heapqimport heapqimport randomclass TopK: def __init__(self, li, k): self.minheap = [] self.capacity = k self.li = li def push(self, val): if len(self.minheap) >= self.capacity:原创 2020-08-22 21:20:22 · 585 阅读 · 0 评论 -
python版本 字典树的构造和测试
最近在看中文分词基数, 其中涉及到了字典树的知识, 研究了一下:class Trie(object): class Node: def __init__(self): self.is_word = False # 是否一个单词的结尾 self.dict = dict() def __init__(self): self.root = Trie.Node() def insert(self, w转载 2020-08-19 11:25:20 · 144 阅读 · 0 评论 -
使用列表解决约瑟夫环问题
约瑟夫环问题,这是一个很经典算法,一般都是通过单向循环链表来解决的.这里通过列表来解决问题描述:N个人围成一圈,从第一个人开始报数,报到m的人出圈,剩下的人继续从1开始报数,报到m的人出圈;如此往复,直到所有人出圈。(模拟此过程,输出出圈的人的序号)def joseph(totalNum, startNum, outNum): """ :param totalNum: 一共...原创 2019-09-21 23:00:06 · 1030 阅读 · 0 评论 -
选择排序
选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理如下。首先在未排序序列中找到最小元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。这里也给出两种方法,第一种是我自己之前一直记着的方法,每次比较都可能交换两个数,但是后来看到第二种方法,本质没有什么区别,只是每轮比较完在确定是否需要...原创 2019-08-28 15:58:41 · 99 阅读 · 0 评论 -
美团笔试题
def strSort(arr): for i in range(len(arr)): for j in range(len(arr) - i - 1): if arr[j] < arr[j+1]: if arr[j] not in arr[j+1]: arr[j]...原创 2019-08-22 19:39:48 · 499 阅读 · 0 评论 -
基数排序
基数排序其实就是使用空间来换取时间,因为有了分布式的计算,空间好像就不是问题啦,现在主要考虑的就是时间def radixSort(li): maxLen = len(str(max(li))) for i in range(maxLen): buckList = [[] for _ in range(10)] for x in li: ...原创 2019-08-16 13:34:05 · 216 阅读 · 0 评论 -
归并排序
不明白为啥Java版本的归并排序非得要传递那么多的参数,python版本的很简单啊,如果有什么错误,肯请小伙伴指出来def merge_sort(alist): if len(alist) <= 1: return alist num = len(alist) // 2 left = merge_sort(alist[:num]) rig...原创 2019-08-16 12:41:57 · 71 阅读 · 0 评论 -
快速排序
快速排序是对冒泡排序的改进def quick_sort(lists): quick_sort_rec(lists, 0, len(lists) - 1)def quick_sort_rec(lists, start, end): if start >= end: return lists mid = lists[start] low ...原创 2019-08-16 10:47:57 · 81 阅读 · 0 评论 -
冒泡排序及其改进
import random#算法一:基本冒泡排序def BubbleSort_1(arr): print("原始列表:", arr) compare = 0 for i in range(len(arr)-1,0,-1): print("") for j in range(0, i): compare +...原创 2019-08-12 16:05:41 · 746 阅读 · 0 评论 -
希尔排序的两种方法对比
上篇讲到了插入排序,而希尔排序是插入排序的升级,对应插入排序的两个版本,希尔排序也有两种,我们分别的来看一下,然后对比一下其速度的快慢,再与插入排序的速度比一下import timedef shell_sort1(li): t1 = time.time() n = len(li) gap = n // 2 while gap > 0: ...原创 2019-08-15 21:32:55 · 261 阅读 · 0 评论 -
稀疏数组与二维数据的相互转化
import numpy as np# 1.创建二维数组a = np.zeros((6, 7),dtype=np.int32)a[1, 2] = 1a[2, 3] = 2a[4, 5] = 25print("原始的二维数据:\n", a)# 2.二维数组转换成稀疏数组# 2.1 统计非零个数num = 0for row in a: for data in r...原创 2019-08-11 22:37:59 · 165 阅读 · 0 评论 -
插入排序两种方法对比
关于插入排序不多说,网上的很多直接上代码import time# 插入排序def insertSort1(li): t1 = time.time() leng = len(li) for i in range(1, leng): for j in range(i, 0, -1): if li[j - 1] > li[...原创 2019-08-15 15:02:44 · 294 阅读 · 0 评论