【C++风云录】深度剖析:人体解剖学与医学影像处理

计算机视觉与医学成像:六种工具的比较

前言

本文旨在通过详尽而深入的介绍,让读者更好地理解和使用六种重要的程序库:ITK-SNAP、Slicer、VTK、OpenCV、dcm4che以及DCMTK。每一个程序库的部分均包含了它们的简介,安装方法,应用实例以及结论和讨论。

欢迎订阅专栏:C++风云录

文章目录

  • 计算机视觉与医学成像:六种工具的比较
    • 前言
    • 1. ITK-SNAP
      • 1.1 简介
      • 1.2 安装方法
      • 1.3 应用实例
        • 1.3.1 实例一
        • 1.3.2 实例二
      • 1.4 结论和讨论
    • 2. Slicer
      • 2.1 简介
      • 2.2 安装方法
      • 2.3 应用实例
        • 2.3.1 实例一
        • 2.3.2 实例二
      • 2.4 结论和讨论
    • 3. VTK
      • 3.1 简介
      • 3.2 安装方法
      • 3.3 应用实例
        • 3.3.1 实例一 - 创建一个圆锥.
        • 3.3.2 实例二 - 使用 vtkImageReader2 读取 DICOM 图像
      • 3.4 结论和讨论
    • 4. OpenCV
      • 4.1 简介
      • 4.2 安装方法
      • 4.3 应用实例
        • 4.3.1 实例一
        • 4.3.2 实例二
      • 4.4 结论和讨论
    • 5. dcm4che
      • 5.1 简介
      • 5.2 安装方法
      • 5.3 应用实例
        • 5.3.1 实例一
        • 5.3.2 实例二
      • 5.4 结论和讨论
    • 6. DCMTK
      • 6.1 简介
      • 6.2 安装方法
      • 6.3 应用实例
        • 6.3.1 实例一
        • 6.3.2 实例二
      • 6.4 结论和讨论
    • 总结

1. ITK-SNAP

ITK-SNAP是一款用于分割结构MRI,CT和其他三维医学图像的软件。更多信息请参考ITK-SNAP官网。

1.1 简介

ITK-SNAP提供了一种快速和易于使用的界面,可以用于在3D医学图像数据上手动或自动化地进行分割。它的功能包括分割,跟踪以及可视化,并且还有一套强大的API可以方便用户进行复杂的图像处理。

1.2 安装方法

在不同的操作系统上,ITK-SNAP的安装步骤略有不同。以下是在Linux系统上的安装过程:

sudo add-apt-repository ppa:zarquon42/ppa
sudo apt-get update
sudo apt-get install snap

具体的安装指南可参考ITK-SNAP官方安装指南

1.3 应用实例

1.3.1 实例一

在这个示例中,我们加载并显示一个医学图像。

#include "itkImage.h"
#include "itkImageFileReader.h"
#include "itkImageFileWriter.h"int main(int argc, char * argv[])
{typedef itk::Image< unsigned short, 3 >   ImageType;typedef itk::ImageFileReader<ImageType>   ReaderType;ReaderType::Pointer reader = ReaderType::New();reader->SetFileName( argv[1] );try{reader->Update();}catch( itk::ExceptionObject & err ){std::cerr << "Exception caught!" << std::endl;std::cerr << err << std::endl;return EXIT_FAILURE;}return EXIT_SUCCESS;
}
1.3.2 实例二

在这个示例中,我们使用ITK-SNAP提供的工具进行图像分割。

#include "itkImage.h"
#include "itkImageFileReader.h"
#include "itkConfidenceConnectedImageFilter.h"
#include "itkImageRegionIterator.h"int main(int argc, char * argv[])
{//...typedef itk::ConfidenceConnectedImageFilter<ImageType, ImageType> ConnectedFilterType;ConnectedFilterType::Pointer connected = ConnectedFilterType::New();connected->SetMultiplier(2.5);connected->SetNumberOfIterations(5);connected->SetReplaceValue(255);//在这里设置种子位置ImageType::IndexType  index;index[0] = 123;index[1] = 234;index[2] = 345;connected->AddSeed(index);//...try{connected->Update();}catch( itk::ExceptionObject & err ){std::cerr << "Exception caught!" << std::endl;std::cerr << err << std::endl;return EXIT_FAILURE;}return EXIT_SUCCESS;
}

1.4 结论和讨论

ITK-SNAP是一个强大的医学图像处理软件,可以满足研究者、工程师和医生的各种需求。它拥有简单易用的用户界面以及强大的API,使得用户可以方便地处理3D医学图像数据。

2. Slicer

2.1 简介

Slicer,也被称为3D Slicer,是一款免费开源的软件应用程序,专门用于医学影像处理和可视化。它可以用于分析和展示医学图像,包括MRI、CT、PET等。

详细信息及最新更新可以在其官方网站上查询:3D Slicer Official Website

2.2 安装方法

您可以通过以下链接下载适用于不同操作系统的安装包:

  • Windows
  • Mac OS X
  • Linux

安装完毕后,打开软件,选择"Modules(模块)"菜单来加载需要的功能。

2.3 应用实例

2.3.1 实例一

尝试开启一个MR文件,查看其3D形态:

// 载入MR文件
vtkSmartPointer<vtkNIFTIImageReader> reader =vtkSmartPointer<vtkNIFTIImageReader>::New();
reader->SetFileName(inputFilename);
reader->Update();// 创建渲染器和窗口
vtkSmartPointer<vtkRenderer> renderer = vtkSmartPointer<vtkRenderer>::New();
vtkSmartPointer<vtkRenderWindow> renderWindow =vtkSmartPointer<vtkRenderWindow>::New();
renderWindow->AddRenderer(renderer);// 显示3D图像
vtkSmartPointer<vtkImageViewer> imageViewer = vtkSmartPointer<vtkImageViewer>::New();
imageViewer->SetInputConnection(reader->GetOutputPort());
imageViewer->Render();
2.3.2 实例二

处理并保存CT图像:

// 载入CT文件
vtkSmartPointer<vtkDICOMImageReader> reader =vtkSmartPointer<vtkDICOMImageReader>::New();
reader->SetFileName(inputFilename);
reader->Update();// 对图像进行处理(如缩放)
vtkSmartPointer<vtkImageResize> resize =vtkSmartPointer<vtkImageResize>::New();
resize->SetInputConnection(reader->GetOutputPort());
resize->SetOutputDimensions(100, 100, 1);
resize->Update();// 保存处理后的图像
vtkSmartPointer<vtkPNGWriter> writer =vtkSmartPointer<vtkPNGWriter>::New();
writer->SetFileName(outputFilename);
writer->SetInputConnection(resize->GetOutputPort());
writer->Write();

2.4 结论和讨论

Slicer是一款强大的医学影像处理软件,具有开源、免费等优点。它适合个人学习,同时也适合用于实际项目中。在未来的发展中,我们期待Slicer可以提供更丰富、更直观的操作界面和功能,让医学影像处理变得更加便捷。

3. VTK

3.1 简介

VTK(Visualization Toolkit) 是一个开放源代码的,用于数据可视化的软件系统。VTK将图形、可视化和图像处理功能集成在一个库中。

3.2 安装方法

在安装VTK之前,需要安装CMake。关于CMake的安装步骤可以参考其官方网站。VTK的安装步骤如下:

  1. 下载VTK源代码
  2. 构建VTK(使用CMake)
  3. 编译并安装VTK

以下是完成这些步骤的 C++ 示例代码:

// Step 1: Download VTK source code
// Command line: git clone https://gitlab.kitware.com/vtk/vtk.git// Step 2: Build VTK (using CMake)
// Command line: mkdir vtk-build && cd vtk-build
// Command line: cmake ../vtk// Step 3: Compile and install VTK
// Command line: make -j4
// Command line: make install

3.3 应用实例

3.3.1 实例一 - 创建一个圆锥.

以下是一个简单的C++代码示例,展示了如何使用VTK创建一个圆锥并显示它:

#include <vtkConeSource.h>
#include <vtkPolyDataMapper.h>
#include <vtkRenderWindow.h>
#include <vtkRenderWindowInteractor.h>
#include <vtkRenderer.h>
#include <vtkActor.h>int main()
{vtkNew<vtkConeSource> cone;vtkNew<vtkPolyDataMapper> mapper;mapper->SetInputConnection(cone->GetOutputPort());vtkNew<vtkActor> actor;actor->SetMapper(mapper);vtkNew<vtkRenderer> renderer;vtkNew<vtkRenderWindow> window;window->AddRenderer(renderer);vtkNew<vtkRenderWindowInteractor> interactor;interactor->SetRenderWindow(window);renderer->AddActor(actor);window->Render();interactor->Start();return EXIT_SUCCESS;
}

此代码将创建一个演员(actor),以及一个将这个演员添加到渲染窗口的渲染器(renderer)。然后,它开始交互器(interactor)的事件循环。

3.3.2 实例二 - 使用 vtkImageReader2 读取 DICOM 图像
#include <vtkDICOMImageReader.h>
#include <vtkImageViewer2.h>
#include <vtkRenderWindowInteractor.h>int main() {vtkSmartPointer<vtkDICOMImageReader> reader = vtkSmartPointer<vtkDICOMImageReader>::New();reader->SetFileName("path/to/your/dicom.dcm");reader->Update();vtkSmartPointer<vtkImageViewer2> imageViewer = vtkSmartPointer<vtkImageViewer2>::New();imageViewer->SetInputConnection(reader->GetOutputPort());vtkSmartPointer<vtkRenderWindowInteractor> renderWindowInteractor = vtkSmartPointer<vtkRenderWindowInteractor>::New();imageViewer->SetupInteractor(renderWindowInteractor);imageViewer->Render();imageViewer->GetRenderer()->ResetCamera();imageViewer->Render();renderWindowInteractor->Start();return EXIT_SUCCESS;
}

此代码将读取DICOM图像并在窗口中显示。

3.4 结论和讨论

通过VTK,我们可以实现医学图像的可视化,从而辅助我们理解人体解剖学。但是,VTK的使用存在一些挑战,例如需要深入理解其底层数据结构和算法。

更多VTK的详细信息可以查阅其官方文档。

4. OpenCV

4.1 简介

OpenCV (Open Source Computer Vision Library) 是一个开源的计算机视觉和机器学习软件库。OpenCV于1999年由Intel建立,如今在全球范围内有大量的人使用。OpenCV的目标是向公众提供一个易于使用的计算机视觉基础结构,并帮助用户快速构建商业应用。

官方网站:OpenCV

4.2 安装方法

OpenCV的安装可以参照其官方文档,这边以Linux系统下的安装为例:

$ sudo apt-get update
$ sudo apt-get install build-essential
$ sudo apt-get install cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev
$ git clone https://github.com/opencv/opencv.git
$ cd opencv
$ mkdir release
$ cd release
$ cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local ..
$ make
$ sudo make install

4.3 应用实例

4.3.1 实例一

这是一个简单的读取图像并显示的例子:

#include <opencv2/opencv.hpp>
#include <opencv2/highgui/highgui.hpp>int main()
{cv::Mat img = cv::imread("test.jpg", CV_LOAD_IMAGE_UNCHANGED);if(img.empty()) {std::cout << "Error : Image cannot be loaded..!!" << std::endl;return -1;}cv::namedWindow("window", CV_WINDOW_AUTOSIZE);cv::imshow("window", img);cv::waitKey(0); // wait for a key presscv::destroyWindow("window"); // destroy the created windowreturn 0;
}
4.3.2 实例二

以下是一个简单的C++代码,显示了如何使用OpenCV进行边缘检测:

#include <opencv2/opencv.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/highgui/highgui.hpp>int main()
{cv::Mat src, gray, edge, draw;src = cv::imread("test.jpg", cv::IMREAD_COLOR);if(src.empty()) {std::cout << "Error : Image cannot be loaded..!!" << std::endl;return -1;}cv::cvtColor(src, gray, CV_BGR2GRAY);cv::Canny(gray, edge, 50, 150, 3);edge.convertTo(draw, CV_8U);cv::namedWindow("window", CV_WINDOW_AUTOSIZE);cv::imshow("window", draw);cv::waitKey(0); // wait for a key presscv::destroyWindow("window"); // destroy the created windowreturn 0;
}

4.4 结论和讨论

OpenCV具有强大的图像处理和计算机视觉功能。通过以上的介绍和示例,我们可以看出其在处理医学影像上的潜能。但是,由于其广泛的应用领域,OpenCV的一些特性可能需要较长时间的学习和理解。无论如何,OpenCV无疑是医学影像处理领域一个值得尝试的工具。


5. dcm4che

5.1 简介

dcm4che 是一个在Java平台上的免费开源的医学影像技术软件集。包括存储、检索、横向转移以及维护DICOM(医学数字成像和通信标准)格式的图像和对象。

5.2 安装方法

$ git clone https://github.com/dcm4che/dcm4che.git
$ cd dcm4che
$ mvn install

以上是通过命令行完成dcm4che的安装。

5.3 应用实例

5.3.1 实例一

以下是一个简单的C++代码,用于打开DICOM文件并显示其元数据。

#include "dcmtk/config/osconfig.h"    
#include "dcmtk/dcmdata/dctk.h"int main(int argc, char *argv[])
{DcmFileFormat fileformat;OFCondition status = fileformat.loadFile("test.dcm");if (status.good()){OFString patientName;if (fileformat.getDataset()->findAndGetOFString(DCM_PatientName, patientName).good()){cout << "Patient's Name: " << patientName << endl;}elsecerr << "Error: cannot access Patient's Name!" << endl;}elsecerr << "Error: cannot read DICOM file (" << status.text() << ")" << endl;return 0;
}
5.3.2 实例二

这个例子展示了如何从DICOM文件中提取图像数据。

#include "dcmtk/config/osconfig.h"    
#include "dcmtk/dcmimgle/dcmimage.h"int main(int argc, char *argv[])
{DicomImage *image = new DicomImage("test.dcm");if (image != NULL){if (image->getStatus() == EIS_Normal){DiPixel *pixelData = image->getInterData();// do something with the pixel data}elsecerr << "Error: cannot load DICOM image (" << DicomImage::getString(image->getStatus()) << ")" << endl;}delete image;return 0;
}

5.4 结论和讨论

dcm4che工具集对于医学影像处理非常有价值。它能够支持我们处理和分析DICOM文件,使我们能够深入理解人体解剖学。以上我们展示了两个简单的实例,让你有一个基本的认识。

6. DCMTK

DCMTK是一个广泛使用的开源软件库,提供了对DICOM标准的全方位支持。它提供了一组兼容DICOM协议的工具,这些工具可以用于实现高级网络通信、数据交换、数据类型转换和图像处理等功能。

官方网站:https://dicom.offis.de/dcmtk

6.1 简介

DCMTK(DICOM Toolkit)是Offis e.V.所开发的一套开源DICOM库。该库包含一系列用于处理、检查和转换DICOM数据的应用程序和库函数。

6.2 安装方法

DCMTK的安装非常简单。首先,从官方网站下载源代码,然后解压缩文件。在Linux或Mac系统上,可以使用以下命令进行编译和安装:

cd dcmtk-3.6.5
mkdir build && cd build
cmake ..
make
sudo make install

在Windows系统上,可以使用CMake GUI工具来构建项目。

6.3 应用实例

6.3.1 实例一

以下是一个用DCMTK读取DICOM文件并打印其元信息的C++示例:

#include "dcmtk/config/osconfig.h"
#include "dcmtk/dcmdata/dctk.h"int main(int argc, char *argv[])
{if (argc != 2){std::cerr << "Usage: " << argv[0] << " <filename>" << std::endl;return 1;}DcmFileFormat fileformat;OFCondition status = fileformat.loadFile(argv[1]);if (status.good()){OFString patientName;if (fileformat.getDataset()->findAndGetOFString(DCM_PatientName, patientName).good()){std::cout << "Patient's Name: " << patientName << std::endl;}else{std::cerr << "Error: cannot access Patient's Name!" << std::endl;}}else{std::cerr << "Error: cannot read DICOM file (" << status.text() << ")" << std::endl;}return 0;
}
6.3.2 实例二

以下是一个用DCMTK转换DICOM图像到PNG格式的C++示例:

#include "dcmtk/config/osconfig.h"
#include "dcmtk/dcmimgle/dcmimage.h"int main(int argc, char *argv[])
{if (argc != 3){std::cerr << "Usage: " << argv[0] << " <input> <output>" << std::endl;return 1;}DicomImage *image = new DicomImage(argv[1]);if (image != NULL){if (image->getStatus() == EIS_Normal){image->writeBMP(argv[2], 8);}else{std::cerr << "Error: cannot read DICOM image (" << DicomImage::getString(image->getStatus()) << ")" << std::endl;}delete image;}return 0;
}

6.4 结论和讨论

DCMTK是一个强大的工具,可以实现多种医学影像处理任务。以上代码示例只展示了基本的读取和转换DICOM文件的功能,实际上,DCMTK提供的功能远不止这些。例如,它还可以用于创建DICOM服务器、进行网络通信、处理大量数据等。

总之,无论您是医疗影像处理初学者,还是寻求高级功能的开发者,DCMTK都将会是一个极好的工具。

总结

在这篇文章中,我们逐一审查了六种不同的程序库,并深入研究了它们的安装过程和主要应用。我们希望这些信息能够帮助读者更有效地利用这些工具,从而提高他们的工作效率。无论是初学者还是有经验的开发人员,都可以从这些内容中受益。

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

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

相关文章

转移插槽笔记

4.3.4.转移插槽 我们要将num存储到7004节点&#xff0c;因此需要先看看num的插槽是多少&#xff1a; 如上图所示&#xff0c;num的插槽为2765. 我们可以将0~3000的插槽从7001转移到7004&#xff0c;命令格式如下&#xff1a; 具体命令如下&#xff1a; 建立连接&#xff1a;…

消息 队列

使用消息队列实现的2个终端之间的互相聊天&#xff0c;并使用信号控制消息队列的读取方式。 当键盘按ctrlc的时候&#xff0c;切换消息读取方式&#xff0c;一般情况为读取指定编号的消息&#xff0c;按ctrlc之后&#xff0c;指定的编号不读取&#xff0c;读取其他所有编号的消…

【C++ 】红黑树

1.1 红黑树的概念 红黑树&#xff0c;是一种二叉搜索树&#xff0c;但在每个结点上增加一个存储位表示结点的颜色&#xff0c;可以是Red或 Black。 通过对任何一条从根到叶子的路径上各个结点着色方式的限制&#xff0c;红黑树确保没有一条路 径会比其他路径长出俩倍&#xff…

信息系统安全选择题 1-10章 汇总【太原理工大学】

第一章 1.信息未经授权不能改变的安全特性称为_D b.有效性 a.保密性 d.完整性 c.可控性 2.信息系统防止信息非法泄露的安全特性称为_D b.有效性 a.完整性 d.保密性 c.可控性 6.《国际通用信息安全评价标准ISO/IEC 15408》在安全保证要求中定义了7个评价保证等级&…

上海理工大学程序设计 D方块游戏

原题链接&#xff1a;D-方块游戏 本来以为是搜索&#xff0c;没想到是数学。 //冷静&#xff0c;冷静&#xff0c;冷静 //调不出来就重构 #pragma GCC optimize(2) #pragma GCC optimize("O3") #include<bits/stdc.h> #define endl \n using namespace std;…

R语言:肿瘤突变负荷分析

> merge_maf <- function(metadata, path){ #通过合并path,还有sample sheet前两列得到每一个文件的完整路径 filenames <- file.path(path, metadata$file_id, metadata$file_name, fsep .Platform$file.sep) message (##############…

Vulnhub-wp 获取vulnhub靶机wp搜索工具

项目地址:https://github.com/MartinxMax/vulnhub-wp 简介 搜索Vulnhub平台的解题文章,之过滤返回出正确可访问的页面 使用 $ python3 vulnhubwp.py 支持模糊搜索 [] Query: kiop 进入选项4,获取wp地址 [] Choice options: 4

DML之操作数据表

1. 插入数据 (1). 前言 前文我们实现了如果创建表&#xff0c;接下来我们将学习如何向数据表中插入数据.插入有两种方式. (2). 方式1 : 情况1 : 使用该语法一次只能向表中插入一条记录.为表中的任意字段按默认的顺序插入数据.值列表中需要为表的每一个字段指定值.并且值…

网络库-libevent介绍

1.简介 libevent是一个事件驱动的网络库&#xff0c;主要用于构建可扩展的网络服务器。它提供了跨平台的API&#xff0c;支持多种事件通知机制&#xff0c;如select、poll、epoll、kqueue等。 主要组件 event: 表示一个具体的事件&#xff0c;包括事件类型、事件回调等。eve…

视觉检测系统,是否所有产品都可以进行视觉检测?

视觉检测系统作为一种先进的质检工具&#xff0c;虽然具有广泛的应用范围&#xff0c;但并非所有产品都适合进行视觉检测。本文将探讨视觉检测系统的适用范围及其局限性。 随着机器视觉技术的快速发展&#xff0c;视觉检测系统已广泛应用于各个行业&#xff0c;为产品质检提供…

【网络安全入门】你必须要有的学习工具(附安装包)零基础入门到进阶,看这一篇就够了!

工欲善其事必先利其器 在新入门网络安全的小伙伴而言。这些工具你必须要有所了解。本文我们简单说说这些网络安全工具吧&#xff01; Web安全类 Web类工具主要是通过各种扫描工具&#xff0c;发现web站点存在的各种漏洞如sql注入、xss等。从而获取系统权限&#xff0c;常用的…

iZotope RX 11 for Mac:音频修复的终极利器

在音频制作的浩瀚星海中&#xff0c;每一份声音都是珍贵的宝石&#xff0c;但往往被各种噪音、杂音所掩盖。此刻&#xff0c;iZotope RX 11 for Mac犹如一位专业的匠人&#xff0c;以其精湛的技术&#xff0c;将每一份声音雕琢至完美。 iZotope RX 11 for Mac&#xff0c;这是…

创新点!CNN与LSTM结合,实现更准预测、更快效率、更高性能!

推荐一个能发表高质量论文的好方向&#xff1a;LSTM结合CNN。 LSTM擅长捕捉序列数据中的长期依赖关系&#xff0c;而CNN则擅长提取图像数据的局部特征。通过结合两者的优势&#xff0c;我们可以让模型同时考虑到数据的时序信息和空间信息&#xff0c;减少参数降低过拟合风险&a…

MySQL—子查询

目录 ▐ 子查询概述 ▐ 准备工作 ▐ 标量子查询 ▐ 列子查询 ▐ 表子查询 ▐ 多信息嵌套 ▐ 子查询概述 • 子查询也称嵌套查询&#xff0c;即在一个查询语句中又出现了查询语句 • 子查询可以出现在from 后面 或where后面 • 出现在 from 后称表子查询&#xff0c;结…

远程终端协议TELNET

一、概述 TELNET是一个简单的远程终端协议&#xff0c;是互联网正式标准。 实现在本地对远程计算机进行操作&#xff1b;在本地键盘输入的字符通过应用层TELNET协议传输到远程服务器上&#xff0c;同时远程服务器把字符传送过来显示在本地的显示器上&#xff1b;TELNET协议采…

B - AtCoder Amusement Park题解

文章目录 原题翻译题目大意思路代码 原题翻译 翻译我已经在上篇翻译过了&#xff0c;详情 题目大意 有 n n n个小团体需要乘坐小船&#xff0c;第 i i i个团体有 a i a_i ai​个人&#xff0c;而小船只有 k k k个座位。同时&#xff0c;小团体需要按照给出的顺序来乘坐小船&…

智能制造装备业项目数字化管理之项目模板管理

智能制造装备&#xff0c;作为工业4.0的核心组成部分&#xff0c;正日益受到全球制造业的关注。这类装备融合了信息技术和制造技术&#xff0c;旨在提高生产效率、降低成本并增强产品的个性化。然而&#xff0c;随着智能制造装备行业的飞速发展&#xff0c;项目管理复杂性也在不…

java toString方法

在Java中&#xff0c;toString()方法是Object类中的一个方法&#xff0c;它用于返回对象的字符串表示形式。当需要将对象转换为字符串时&#xff0c;Java会调用对象的toString()方法。 默认情况下&#xff0c;Object类中的toString()方法返回一个由类名和对象的哈希码组成的字…

数据结构-跳表:自己理解的通俗总结 + 使用python实现

前提&#xff1a;有序数据 基于链表 操作&#xff1a;有序数据的查询 插入 删除 时间复杂度&#xff1a;O(logn) 思想&#xff1a;将有序数据进行分层&#xff0c;最底层是存储所有的数据&#xff0c;之后每一层逐层减少数据&#xff0c;并且需要注意 每一层的数据是基于其前…

软件文档-总体测试计划书(Word原件2024)

软件资料清单列表部分文档&#xff1a; 工作安排任务书&#xff0c;可行性分析报告&#xff0c;立项申请审批表&#xff0c;产品需求规格说明书&#xff0c;需求调研计划&#xff0c;用户需求调查单&#xff0c;用户需求说明书&#xff0c;概要设计说明书&#xff0c;技术解决…