我们世界中的10个算法

news2024/11/23 8:02:31

下面的图表展示了我们日常生活中最常用的算法。它们被应用在互联网搜索引擎、社交网络、WiFi、手机甚至卫星等各个领域。

5180568049220ff4e38305a2f3426309.png

1.排序算法

排序算法用于将一组数据按照特定的顺序进行排列。它们被广泛应用于各种场景,如搜索引擎中的搜索结果排序、数据分析中的数据整理和展示等。

# 冒泡排序
def bubble_sort(arr):
    n = len(arr)
    for i in range(n):
        for j in range(0, n-i-1):
            if arr[j] > arr[j+1]:
                arr[j], arr[j+1] = arr[j+1], arr[j]
    return arr


data = [64, 34, 25, 12, 22, 11, 90]
sorted_data = bubble_sort(data)
print(sorted_data)  # 输出:[11, 12, 22, 25, 34, 64, 90]

2.傅里叶变换与快速傅里叶变换

傅里叶变换用于将一个函数(或信号)从时间域转换到频域,快速傅里叶变换是一种高效计算傅里叶变换的算法。它们在信号处理、图像处理、音频压缩等领域具有广泛应用。

import numpy as np


# 傅里叶变换
def fourier_transform(signal):
    fft_result = np.fft.fft(signal)
    return fft_result


# 快速傅里叶变换
def fast_fourier_transform(signal):
    fft_result = np.fft.fft(signal)
    return fft_result


signal = [0, 1, 2, 3, 4, 5, 6, 7]
fft_result = fourier_transform(signal)
print(fft_result)


fft_result_fast = fast_fourier_transform(signal)
print(fft_result_fast)

3.Dijkstra算法

Dijkstra算法是一种用于求解带权重图中最短路径的算法。它被广泛应用于路由算法、地图导航等场景,用于找到两个节点之间的最短路径。

import sys


# Dijkstra算法
def dijkstra(graph, start):
    distance = {node: sys.maxsize for node in graph}
    distance[start] = 0


    visited = set


()


    while len(visited) < len(graph):
        min_distance = sys.maxsize
        min_node = None


        for node in graph:
            if node not in visited and distance[node] < min_distance:
                min_distance = distance[node]
                min_node = node


        visited.add(min_node)


        for neighbor, weight in graph[min_node].items():
            distance[neighbor] = min(distance[neighbor], distance[min_node] + weight)


    return distance


graph = {
    'A': {'B': 1, 'C': 4},
    'B': {'A': 1, 'C': 2, 'D': 5},
    'C': {'A': 4, 'B': 2, 'D': 1},
    'D': {'B': 5, 'C': 1}
}


start_node = 'A'
shortest_distances = dijkstra(graph, start_node)
print(shortest_distances)

4.RSA算法

RSA算法是一种非对称加密算法,常用于数据加密和数字签名。它基于大整数的因式分解难题,保证了加密的安全性。

from Crypto.PublicKey import RSA
from Crypto.Cipher import PKCS1_OAEP


# 生成RSA密钥对
key = RSA.generate(2048)
private_key = key.export_key()
public_key = key.publickey().export_key()


message = b'Hello, World!'


# 使用公钥加密
cipher_rsa = PKCS1_OAEP.new(RSA.import_key(public_key))
encrypted_message = cipher_rsa.encrypt(message)


# 使用私钥解密
cipher_rsa = PKCS1_OAEP.new(RSA.import_key(private_key))
decrypted_message = cipher_rsa.decrypt(encrypted_message)


print(decrypted_message.decode())  # 输出:Hello, World!

5.安全哈希算法

安全哈希算法用于将任意长度的数据映射为固定长度的哈希值。常见的安全哈希算法有SHA-256、SHA-512等,它们被广泛应用于数据完整性校验、密码存储等场景。

import hashlib


message = b'Hello, World!'


# 计算SHA-256哈希值
hash_value = hashlib.sha256(message).hexdigest()
print(hash_value)


# 计算SHA-512哈希值
hash_value = hashlib.sha512(message).hexdigest()
print(hash_value)

6.整数因式分解

整数因式分解是将一个大整数分解为其素因子的过程。它在密码学中具有重要作用,例如RSA算法的安全性依赖于大整数的难以因式分解性质。

def factorize_integer(n):
    factors = []
    i = 2
    while i * i <= n:
        if n % i:
            i += 1
        else:
            n //= i
            factors.append(i)
    if n > 1:
        factors.append(n)
    return factors


integer = 1234567890
factors = factorize_integer(integer)
print(factors)

7.链接分析

链接分析是一种用于分析网络中节点之间链接关系的算法。它被广

泛应用于搜索引擎的网页排名算法,如PageRank算法。

# 简化的PageRank算法
def pagerank(graph, damping_factor=0.85, max_iterations=100, convergence_threshold=0.0001):
    num_nodes = len(graph)
    initial_score = 1 / num_nodes
    scores = {node: initial_score for node in graph}


    for _ in range(max_iterations):
        prev_scores = scores.copy()
        convergence = 0


        for node in graph:
            score = (1 - damping_factor) / num_nodes


            for neighbor in graph:
                if node in graph[neighbor]:
                    score += damping_factor * prev_scores[neighbor] / len(graph[neighbor])


            scores[node] = score
            convergence += abs(scores[node] - prev_scores[node])


        if convergence < convergence_threshold:
            break


    return scores


graph = {
    'A': {'B': 1, 'C': 1},
    'B': {'A': 1, 'C': 1},
    'C': {'A': 1, 'B': 1}
}


pagerank_scores = pagerank(graph)
print(pagerank_scores)

8.比例积分微分控制算法

比例积分微分(PID)控制算法是一种常用的反馈控制算法。它根据当前误差、误差积分和误差微分来调节控制器的输出,广泛应用于自动化控制系统中。

class PIDController:
    def __init__(self, kp, ki, kd):
        self.kp = kp
        self.ki = ki
        self.kd = kd
        self.previous_error = 0
        self.integral = 0


    def calculate_output(self, error, dt):
        self.integral += error * dt
        derivative = (error - self.previous_error) / dt
        output = self.kp * error + self.ki * self.integral + self.kd * derivative
        self.previous_error = error
        return output


pid_controller = PIDController(0.5, 0.1, 0.2)
setpoint = 10
dt = 0.01
time = 0
output = 0


while time < 1:
    error = setpoint - output
    output = pid_controller.calculate_output(error, dt)
    time += dt
    print(f'Time: {time}, Output: {output}')

9.数据压缩算法

数据压缩算法用于将数据表示为更紧凑的形式,以减少存储空间或传输带宽的使用。常见的数据压缩算法有Huffman编码、LZ77、LZW等,它们被广泛应用于文件压缩、图像压缩等领域。

import gzip


data = b'Hello, World!'


# 使用gzip进行压缩
compressed_data = gzip.compress(data)
print(compressed_data)


# 使用gzip进行解压缩
decompressed_data = gzip.decompress(compressed_data)
print(decompressed_data.decode())  # 输出:Hello, World!

10.随机数生成

随机数生成算法用于生成

随机的数字或数据序列。在密码学、模拟实验、游戏开发等领域中,随机数生成算法扮演着重要的角色。

import random


# 生成随机整数
random_integer = random.randint(1, 10)
print(random_integer)


# 生成随机浮点数
random_float = random.uniform(0, 1)
print(random_float)


# 从列表中随机选择元素
my_list = ['apple', 'banana', 'orange']
random_element = random.choice(my_list)
print(random_element)

以上是我们日常生活中最常用的10个算法。它们涉及了排序、变换、路径搜索、加密、哈希、压缩、控制以及随机数生成等多个领域,并在各自的应用场景中发挥着重要作用。深入理解这些算法可以帮助我们更好地理解和应用现代技术。

总结:

这些算法在计算机科学和信息技术领域扮演着重要的角色,它们为我们提供了强大的工具来解决各种问题。无论是搜索引擎的排名、数据加密的安全性,还是自动化控制系统的稳定性,这些算法都为我们的现代世界带来了巨大的影响。通过学习和应用这些算法,我们能够更好地理解和改善我们周围的技术环境。

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

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

相关文章

转转前端周刊第六十八期

转转前端周刊 本刊意在将整理业界精华文章给大家&#xff0c;期望大家一起打开视野 如果你有发现一些精华文章想和更多人分享&#xff0c;可以点击我们的公众号名称&#xff0c;将文章链接和你的解读文案发给我们&#xff01;我们会对内容进行筛选和审核&#xff0c;保留你的推…

基于TensorFlow Object Detection API实现RetinaNet目标检测网络(附源码)

文章目录 一、RetinaNet简介1. Backbone网络2. FPN网络 二、RetinaNet实现1. tf.train.CheckPoint简介2. RetinaNet的TensorFlow源码 一、RetinaNet简介 RetinaNet是作者Tsung-Yi Lin和Kaiming He于2018年发表的论文Focal Loss for Dense Object Detection中提出的网络。Retina…

运维小白必学篇之基础篇第十六集:DNS架构FTP实验

DNS架构FTP实验 目录 DNS架构FTP实验 服务端 客户端 服务端 在ftp架构了安装dns域名服务 yum -y install bind 配置主配置文件 vim /etc/named.conf listen-on port 53 { 192.168.50.1; }; allow-query { 192.168.50.0/24; }; 配置区域文件 vim /etc/named.rfc1912.zones…

深聊丨“紫东太初”大模型背后有哪些值得细读的论文(一)

原创&#xff1a;谭婧 没有人想等待&#xff0c;没有人想落伍。 新鲜论文时兴火热&#xff0c;成为大模型发展迅猛的标志之一&#xff0c;人们用“刷论文”这个游荡意味的动词替代另一个颇为严肃的动作&#xff0c;“读论文”。 论文被当作“教材”和“新知识”&#xff0c;在a…

矢量网络分析仪RS罗德与施瓦ZNB8 9KHZ至8.5GHZ德国二手

Rohde & Schwarz ZNB8网络分析仪&#xff0c;8.5 GHz&#xff0c;2 或 4 端口 ​罗德与施瓦茨 ZNB8 Rohde & Schwarz ZNB8 矢量网络分析仪具有高达 140 dB&#xff08;10 Hz IF 带宽&#xff09;的宽动态范围、低于 0.004 dB RMS&#xff08;10 kHz IF 带宽&#xff…

React--Component组件浅析

目录 一 前言二 什么是React组件&#xff1f;三 二种不同 React 组件1 class类组件2 函数组件 四 组件通信方式五 组件的强化方式六 总结 一 前言 在 React 世界里&#xff0c;一切皆组件&#xff0c;我们写的 React 项目全部起源于组件。组件可以分为两类&#xff0c;一类是类…

驱动开发:内核扫描SSDT挂钩状态

在笔者上一篇文章《驱动开发&#xff1a;内核实现SSDT挂钩与摘钩》中介绍了如何对SSDT函数进行Hook挂钩与摘钩的&#xff0c;本章将继续实现一个新功能&#xff0c;如何检测SSDT函数是否挂钩&#xff0c;要实现检测挂钩状态有两种方式&#xff0c;第一种方式则是类似于《驱动开…

【Unity-UGUI控件全面解析】| Layout自动布局组件详解

🎬【Unity-UGUI控件全面解析】| Layout自动布局组件详解一、组件介绍二、组件属性面板2.1 布局元素 (Layout Element)2.2 水平布局组 (Horizontal Layout Group)2.3 垂直布局组 (Vertical Layout Group)2.4 网格布局组 (Grid Layout Group)三、代码操作组件四、组件常用方法示…

把 AI 装进即时通讯,会发生什么?

今年以来&#xff0c;AIGC 技术以“天”为单位快速进化&#xff0c;刷足了存在感。科技公司迅速将 AI 嵌入自家的产品中&#xff0c;追逐 AI 带来的生产力变革&#xff0c;解决日益复杂的需求。从文学到音乐&#xff0c;从绘画到编程&#xff0c;无一领域不受其影响。 在这些领…

网络编程(1)

获取本网络信息相关接口 接口说明&#xff1a; QHostInfo类为主机信息&#xff0c;为主机名查找提供静态函数 QHostAddress类为主机地址类&#xff0c;管理IPV4或IPV6地址信息。 QNetworkInterface类为网络接口类&#xff0c;提供主机IP地址和网络接口的列表。 QNetworkAd…

关于人生,爱情和事业,谈谈我的人类史观(视频在最后)

前几天在知乎上回答了一个问题&#xff0c;没想到一下子好像火了&#xff0c;评论超过五百&#xff0c;也有各种质疑&#xff0c;其中有一个人的问题我觉得值得探讨&#xff0c;因为在回答中&#xff0c;我写下了一段也许值得留存的文字。 视频里面有更多的内容的扩展&#xff…

2023智源大会议程公开丨具身智能与强化学习论坛

6月9日&#xff0c;2023北京智源大会&#xff0c;将邀请这一领域的探索者、实践者、以及关心智能科学的每个人&#xff0c;共同拉开未来舞台的帷幕&#xff0c;你准备好了吗&#xff1f;与会知名嘉宾包括&#xff0c;图灵奖得主Yann LeCun、图灵奖得主Geoffrey Hinton、OpenAI创…

chatgpt赋能python:Python:填写网页内容的SEO最佳实践

Python&#xff1a;填写网页内容的SEO最佳实践 在今天的数字领域中&#xff0c;SEO&#xff08;搜索引擎优化&#xff09;已经成为成功在线业务的必要元素。其中&#xff0c;内容是SEO的核心部分。网页内容不仅仅是用户体验的关键&#xff0c;还是吸引搜索引擎注意的因素之一。…

Java 进阶 -- 集合(一)

本节描述Java集合框架。在这里&#xff0c;您将了解什么是集合&#xff0c;以及它们如何使您的工作更轻松&#xff0c;程序更好。您将了解组成Java Collections Framework的核心元素——接口、实现、聚合操作和算法。 介绍告诉您集合是什么&#xff0c;以及它们如何使您的工作…

【Python】Python系列教程-- Python3 函数(二十一)

文章目录 前言定义一个函数语法实例函数调用参数传递可更改(mutable)与不可更改(immutable)对象python 传不可变对象实例传可变对象实例参数必需参数关键字参数默认参数不定长参数匿名函数return 语句强制位置参数 前言 往期回顾&#xff1a; Python系列教程–Python3介绍&am…

第3章“程序的机器级表示”:数组分配与访问

文章目录 概述3.8.1 基本原则3.8.2 指针运算3.8.3 数组与循环3.8.4 嵌套数组3.8.4 固定大小的数组3.8.5 动态分配的数组 概述 C 中数组是一种将标量型数据聚集成更大数据类型的方式。C用来实现数组的方式非常简单&#xff0c;因此很容易翻译成机器代码。C的一个不同寻常的特点…

第十届蓝桥杯c++b组国赛题解(还在持续更新中...)

试题A&#xff1a;平方序列 解题思路&#xff1a; 直接枚举一遍x的取值&#xff0c;然后按照题目给定的式子算出y&#xff0c;每次取xy的最小值即可 答案为7020 代码实现&#xff1a; #include<iostream> #include<algorithm> #include<cmath> using namespa…

栈帧之操作数栈(Operand Stack)和动态链接(Dynamic Linking)解读

操作数栈 概念 每一个独立的栈帧除了包含局部变量表以外&#xff0c;还包含一个后进先出&#xff08;Last-In-First-Out&#xff09;的 操作数栈&#xff0c;也可以称之为表达式栈&#xff08;Expression Stack&#xff09; 操作数栈&#xff0c;在方法执行过程中&#xff0c…

浅析设计模式5 -- 责任链模式

我们在进行软件开发时要想实现可维护、可扩展&#xff0c;就需要尽量复用代码&#xff0c;并且降低代码的耦合度。设计模式就是一种可以提高代码可复用性、可维护性、可扩展性以及可读性的解决方案。大家熟知的23种设计模式&#xff0c;可以分为创建型模式、结构型模式和行为型…

【Kubernetes 架构】了解 Kubernetes 网络模型

Kubernetes 网络使您能够在 k8s 网络内配置通信。它基于扁平网络结构&#xff0c;无需在主机和容器之间映射端口。 Kubernetes 网络支持容器化组件之间的通信。这种网络模型的主要优点是不需要在主机和容器之间映射端口。然而&#xff0c;配置 Kubernetes 网络模型并不是一件容…