与数据开发或者数据平台搭建有关的数据结构算法(Python实现)

news2024/10/17 11:07:11

关注B站可以观看更多实战教学视频:hallo128的个人空间

与数据开发或者数据平台搭建有关的数据结构算法(Python实现)

目录

  • 与数据开发或者数据平台搭建有关的数据结构算法(Python实现)
    • 1. 哈希表 (Hash Table)
    • 2. 布隆过滤器 (Bloom Filter)
    • 3. 并查集 (Union-Find)
    • 4. Trie 树 (前缀树)
    • 5. 分布式一致性算法(如 Paxos 和 Raft)
    • 6. 堆 (Heap)
    • 7. 图的最短路径算法 (Dijkstra 和 Bellman-Ford)

1. 哈希表 (Hash Table)

  1. 场景:
  • 数据查找:数据平台中经常需要快速查找用户数据或查询日志等,哈希表可以将查找的时间复杂度降到 O(1)。
  • 缓存系统:许多分布式系统如 Redis、Memcached 使用哈希表来实现高效的缓存机制。
  1. 示例:设计简单的哈希表
class HashMap:
    def __init__(self):
        self.size = 1000
        self.table = [None] * self.size

    def _hash(self, key):
        return hash(key) % self.size

    def put(self, key, value):
        idx = self._hash(key)
        if not self.table[idx]:
            self.table[idx] = []
        for i, kv in enumerate(self.table[idx]):
            if kv[0] == key:
                self.table[idx][i] = (key, value)
                return
        self.table[idx].append((key, value))

    def get(self, key):
        idx = self._hash(key)
        if not self.table[idx]:
            return -1
        for kv in self.table[idx]:
            if kv[0] == key:
                return kv[1]
        return -1

    def remove(self, key):
        idx = self._hash(key)
        if not self.table[idx]:
            return
        for i, kv in enumerate(self.table[idx]):
            if kv[0] == key:
                del self.table[idx][i]
                return

# 测试
hash_map = HashMap()
hash_map.put("name", "Alice")
print(hash_map.get("name"))  # 输出 'Alice'
hash_map.remove("name")
print(hash_map.get("name"))  # 输出 -1

2. 布隆过滤器 (Bloom Filter)

  1. 场景:
  • 去重:用于快速检测某个数据是否存在,布隆过滤器非常适合用于防止重复数据导入。
  • 大规模数据集查询:布隆过滤器常用于大型数据系统中进行快速的存在性查询,虽然会有一定的误判率,但非常节省空间。
  1. 示例:实现一个简单的布隆过滤器
from bitarray import bitarray
import mmh3

class BloomFilter:
    def __init__(self, size, hash_count):
        self.size = size
        self.hash_count = hash_count
        self.bit_array = bitarray(size)
        self.bit_array.setall(0)

    def add(self, item):
        for i in range(self.hash_count):
            digest = mmh3.hash(item, i) % self.size
            self.bit_array[digest] = True

    def check(self, item):
        for i in range(self.hash_count):
            digest = mmh3.hash(item, i) % self.size
            if self.bit_array[digest] == False:
                return False
        return True

# 测试
bloom = BloomFilter(1000, 10)
bloom.add("data_platform")
print(bloom.check("data_platform"))  # 输出 True
print(bloom.check("other_data"))     # 输出 False

3. 并查集 (Union-Find)

  1. 场景:
  • 集群节点合并:在分布式系统中,经常需要进行动态的节点管理或节点分配,使用并查集可以高效处理集群间的连接和合并问题。
  • 社交网络中的关系图计算:用于确定两个用户是否属于同一个社交网络。
  1. 示例:实现并查集
class UnionFind:
    def __init__(self, size):
        self.parent = list(range(size))
        self.rank = [1] * size

    def find(self, p):
        if self.parent[p] != p:
            self.parent[p] = self.find(self.parent[p])
        return self.parent[p]

    def union(self, p, q):
        rootP = self.find(p)
        rootQ = self.find(q)

        if rootP != rootQ:
            if self.rank[rootP] > self.rank[rootQ]:
                self.parent[rootQ] = rootP
            elif self.rank[rootP] < self.rank[rootQ]:
                self.parent[rootP] = rootQ
            else:
                self.parent[rootQ] = rootP
                self.rank[rootP] += 1

# 测试
uf = UnionFind(10)
uf.union(1, 2)
uf.union(2, 3)
print(uf.find(1) == uf.find(3))  # 输出 True
print(uf.find(1) == uf.find(4))  # 输出 False

4. Trie 树 (前缀树)

  1. 场景:
  • 字符串匹配与前缀查询:Trie 在数据平台的搜索系统中应用广泛,用于快速检索带有相同前缀的字符串(如自动补全、关键词推荐)。
  • 日志分析:可以用于对查询日志进行前缀分析,帮助优化查询系统。
  1. 示例:Trie 的实现
class TrieNode:
    def __init__(self):
        self.children = {}
        self.is_end_of_word = False

class Trie:
    def __init__(self):
        self.root = TrieNode()

    def insert(self, word):
        node = self.root
        for char in word:
            if char not in node.children:
                node.children[char] = TrieNode()
            node = node.children[char]
        node.is_end_of_word = True

    def search(self, word):
        node = self.root
        for char in word:
            if char not in node.children:
                return False
            node = node.children[char]
        return node.is_end_of_word

    def starts_with(self, prefix):
        node = self.root
        for char in prefix:
            if char not in node.children:
                return False
            node = node.children[char]
        return True

# 测试
trie = Trie()
trie.insert("data")
trie.insert("database")
print(trie.search("data"))      # 输出 True
print(trie.search("dat"))       # 输出 False
print(trie.starts_with("dat"))  # 输出 True

5. 分布式一致性算法(如 Paxos 和 Raft)

  1. 场景:
  • 分布式系统一致性:在分布式数据平台中,需要确保多个节点在同一个时刻对于某个数据的一致性,Paxos 和 Raft 是常用的分布式一致性算法。
  • 分布式数据库管理:这些算法可以帮助多个数据库实例在数据更新时保持同步。

由于 Paxos 和 Raft 的实现比较复杂,面试中更多的是测试对这些算法的理解,而不要求实现。但可以了解它们的基本工作原理,比如:

  • Paxos:通过提出者、接受者和学习者来决定某个值在一组分布式节点中的共识。
  • Raft:通过领导选举、日志复制和一致性检查确保所有节点在分布式系统中的同步。

6. 堆 (Heap)

  1. 场景:
  • 数据流中的Top-K 问题:在流处理系统中,堆用于维护流中前 K 大或者前 K 小的元素。
  • 任务调度:堆可以高效管理任务队列,通过最小堆或最大堆管理任务的优先级。
  1. 示例:最大堆实现 Top-K 问题
import heapq

def find_top_k(nums, k):
    return heapq.nlargest(k, nums)

# 测试
nums = [3, 1, 5, 12, 2, 11]
k = 3
print(f"Top {k} numbers: {find_top_k(nums, k)}")  # 输出 [12, 11, 5]

7. 图的最短路径算法 (Dijkstra 和 Bellman-Ford)

  1. 场景:
  • 分布式网络中的路径优化:用于在分布式网络中查找不同节点间的最短路径,优化数据传输路径。
  • 物流或任务调度:在数据平台中用于优化任务调度的最优执行路径。
  1. 示例:Dijkstra 算法
import heapq

def dijkstra(graph, start):
    min_heap = [(0, start)]  # (distance, node)
    distances = {node: float('inf') for node in graph}
    distances[start] = 0
    
    while min_heap:
        current_dist, current_node = heapq.heappop(min_heap)
        
        if current_dist > distances[current_node]:
            continue
        
        for neighbor, weight in graph[current_node].items():
            distance = current_dist + weight
            
            if distance < distances[neighbor]:
                distances[neighbor] = distance
                heapq.heappush(min_heap, (distance, neighbor))

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2217005.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

YOLO11改进 | 注意力机制 | 添加SE注意力机制

秋招面试专栏推荐 &#xff1a;深度学习算法工程师面试问题总结【百面算法工程师】——点击即可跳转 &#x1f4a1;&#x1f4a1;&#x1f4a1;本专栏所有程序均经过测试&#xff0c;可成功执行&#x1f4a1;&#x1f4a1;&#x1f4a1; 本文介绍了YOLOv11添加SE注意力机制&…

双通道音频功率放大电路D2822M兼容TDA2822,全封装输出功率0.11W,用于音频产品

在某客户的便携式音频产品中&#xff0c;客户想在确保其产品的性能的前提下&#xff0c;为产品方案寻找一颗国产备份料。客户产品之前使用的是TDA2822&#xff0c;在了解客户的电路设计以及该产品的电气特性后&#xff0c;给客户寻找了一款可兼容相同电路设计使用的国产厂牌芯谷…

Nginx12-集群高可用

零、文章目录 Nginx12-集群高可用 1、Nginx实现服务器集群 &#xff08;1&#xff09;单机模式 在使用Nginx和Tomcat部署项目的时候&#xff0c;我们使用的是一台Nginx服务器和一台Tomcat服务器&#xff0c;架构图如下 &#xff08;2&#xff09;集群模式 如果Tomcat宕机了…

大语言模型实战教程首发:基于深度学习的大规模自然语言处理模型LLM详解 -Shelly

我是Shelly&#xff0c;一个专注于输出AI工具和科技前沿内容的AI应用教练&#xff0c;体验过300款以上的AI应用工具。关注科技及大模型领域对社会的影响10年。关注我一起驾驭AI工具&#xff0c;拥抱AI时代的到来。 大模型的热度&#xff0c;实在是很高&#xff0c;诺奖也颁给了…

C语言函数递归经典例题:汉诺塔和小青蛙跳台阶

目录 汉诺塔问题描述思路代码实现思考:怎么判断一共要移动几次?(时间复杂度?) 小青蛙跳台阶BC117 小乐乐走台阶问题描述递归动态规划迭代 汉诺塔 问题描述 将塔A的柱子移动到塔C 要求: 大的柱子只能在小的柱子下面一次只能移动一个柱子 思路 想把A上的n个柱子移动到C 核…

Python学习100天第11天之文件和异常

1 前言 实际开发中常常会遇到对数据进行持久化操作的场景&#xff0c;而实现数据持久化最直接简单的方式就是将数据保存到文件中。说到“文件”这个词&#xff0c;可能需要先科普一下关于文件系统的知识&#xff0c;但是这里我们并不浪费笔墨介绍这个概念&#xff0c;请大家自…

请求第三方接口有反斜杠和双引号怎么处理,且做格式校验?

如&#xff1a;接口文档要求 直接使用转义失败&#xff0c;在postman中填值请求正常。 String para "[" "\\" "\"" "预计今天白天我市多云间晴&#xff1b;" "\\" "\"]"; System.err.println(pa…

QT的文件操作类 QFile

QFile 是 Qt 框架中用于文件处理的一个类。它提供了读取和写入文件的功能&#xff0c;支持文本和二进制文 件。 QFile 继承自 QIODevice &#xff0c;因此它可以像其他IO设备一样使用。 主要功能 文件读写&#xff1a; QFile 支持打开文件进行读取或写入操作文件信息&#x…

LinkedList和链表(上)

1. 顺序表ArrayList的缺点和优点 优点: 1> 在给定下标进行查找的时候,时间复杂度是O(1) 缺点: 1> 插入数据必须移动其他数据,最坏情况下,插入到0位置,时间复杂度为O(N) 2> 删除数据也需要移动数据,最坏情况下,就是删除0位置.时间复杂度为O(N) 3> 扩容之后(1.5倍扩容…

[PHP]Undefined index错误只针对数组

1、示例一 <?php $a null; var_dump($a[name]); 结果&#xff1a;无报错 2、示例二 <?php $a []; var_dump($a[name]);结果&#xff1a;报错

v853 tina 文件系统挂载不全问题

文章目录 1、前言2、环境介绍3、解决 1、前言 正常文件系统挂载后应如下图所示&#xff1a; 但目前是这样&#xff1a; 2、环境介绍 硬件&#xff1a;韦东山v853 aicit板卡 软件&#xff1a;v853 tina sdk 3、解决 menuconfig中开启e2fsprogs&#xff1a; Utilities ---&…

C++ —— 关于继承(inheritance)

目录 1. 继承的概念及定义 1.1 继承的概念 1.2 继承的定义格式 1.3 继承基类成员访问方式的变化 1.4 类模板的继承 2.基类与派生类的转换 3. 继承中的作用域 3.1 隐藏规则 4. 派⽣类的默认成员函数 4.1 4个常见默认成员函数 4.2 实现⼀个不能被继承的类 5. 继承与友元…

房产销售系统(论文+源码)_kaic

摘 要 随着科学技术的飞速发展&#xff0c;各行各业都在努力与现代先进技术接轨&#xff0c;通过科技手段提高自身的优势&#xff1b;对于房产销售系统当然也不能排除在外&#xff0c;随着网络技术的不断成熟&#xff0c;带动了房产销售系统&#xff0c;它彻底改变了过去传统的…

wps安装教程

WPS office完整版是一款由金山推出的免费办公软件&#xff0c;软件小巧安装快&#xff0c;占用内存极小&#xff0c;启动速度快。WPS office完整版包含WPS文字、WPS表格、WPS演示三大功能模块&#xff0c;让我们轻松办公。WPS的功能是依据OFFICE用户的使用习惯而设计&#xff0…

ios局域网访问主机Xcode配置

前景&#xff1a; 公司业务是做智能家居&#xff0c;所有设备通过主机控制&#xff0c;目前有个产品需求是&#xff0c;在没有外网的情况下依然能够通过局域网控制主机的设备。 IOS开发需要做的&#xff1a; 除了业务代码之外&#xff0c;前提还要配置访问局域网功能。有以下…

专升本:开启人生新征程

在当今社会&#xff0c;学历的重要性日益凸显。对于专科生来说&#xff0c;专升本无疑是一次改变命运、开启人生新征程的重要机遇。 一、专升本的价值与意义 &#xff08;一&#xff09;学历提升当你通过专升本考试&#xff0c;成功踏入本科院校的大门&#xff0c;你将获得更高…

【Word原件测试资料合集】软件系统功能测试方案,软件测试方案(整体方案),软件测试文档-测试计划模版(功能与性能),软件测试流程

一、 前言 &#xff08;一&#xff09; 背景 &#xff08;二&#xff09; 目的 &#xff08;三&#xff09; 测试目标 &#xff08;四&#xff09; 适用范围与读者对象 &#xff08;五&#xff09; 术语与缩写 二、 软件测试实施流程 &#xff08;一&#xff09; 测试工作总体流…

【uniapp】实现触底加载数据

前言&#xff1a;实现界面触底数据加载。后端接口得支持翻页传参&#xff08;本案例使用django&#xff09; 1、后端接口 1.1 封装翻页公共方法standardPagination.py # -*- coding: utf-8 -*- # Time : 2024/10/15 13:15 # Author : super # File : standardPaginat…

idea2024年版本

最简单安装2024.2版本idea 内带安装教程 ** 下载链接&#xff1a;https://pan.quark.cn/s/ab24afbaa43f 提取码&#xff1a;KHrq

《计算机视觉》—— 基于PyCharm中的dlib库实现人脸关键点定位

文章目录 1. 安装必要的库2. 下载dlib的人脸检测器和关键点预测器模型3. 编写代码 人脸关键点定位是指通过计算机视觉技术&#xff0c;识别和定位人脸图像中的关键点&#xff0c;如眼睛、鼻子、嘴巴等特定位置。这些关键点的准确定位对于人脸识别、表情分析、姿态估计等应用具有…