当前位置: 首页 > wzjs >正文

福田做网站价格杭州百度快照推广

福田做网站价格,杭州百度快照推广,徐州信息网最新消息,服务网站建设公司一、查找的基本概念 查找是指在一个给定的数据结构中找到满足特定条件的元素。常见的查找算法有基于线性表的查找、基于树的查找和基于哈希的查找等。 二、基于线性表的查找法 顺序查找法 顺序查找法是一种简单的查找方法,它从表的一端开始,依次将每个…

一、查找的基本概念

   查找是指在一个给定的数据结构中找到满足特定条件的元素。常见的查找算法有基于线性表的查找、基于树的查找和基于哈希的查找等。

二、基于线性表的查找法

顺序查找法

  顺序查找法是一种简单的查找方法,它从表的一端开始,依次将每个元素与目标值进行比较,直到找到目标值或遍历完整个表。

折半查找法

  折半查找法适用于有序表。它将查找区间一分为二,判断目标值在左半区间还是右半区间,然后在对应的区间继续查找,直到找到目标值或区间缩小为0。

分块查找法

   分块查找法将表分成若干块,每一块内元素不必有序,但各块之间必须有序。查找时,先确定目标值所在的块,再在块内进行查找

三、基于树的查找法

二叉排序树

   二叉排序树是一种动态查找表,它的结构在查找过程中动态变化。每个节点的左子树只包含小于该节点的元素,右子树只包含大于该节点的元素。

平衡二叉排序树

   平衡二叉排序树是在二叉排序树的基础上,通过旋转操作保持树的平衡,以保证查找效率。

B树

  B树是一种多路平衡查找树,它允许多个子节点。B树的每个节点可以存储多个键值,并且保持树的平衡。

四、计算式查找法——哈希法

哈希函数的构造方法

   哈希函数将关键字映射到哈希表的地址。常见的构造方法有直接定址法、数字分析法、平方取中法、折叠法、随机数法等。

处理冲突的方法

   当不同的关键字映射到同一个哈希地址时,就会产生冲突。常见的处理冲突的方法有开放定址法、链地址法等。

哈希表的查找过程

   哈希查找的过程包括构建哈希表和在哈希表中查找元素。查找时,通过哈希函数计算地址,然后在该地址处查找元素。

哈希法性能分析

   哈希查找的平均查找长度取决于哈希表的装填因子和处理冲突的方法。理想情况下,哈希查找的平均查找长度接近于1。

五、总结核心知识点

查找方法时间性能分析空间性能分析应用场景
顺序查找O(n)O(1)无序表的简单查找
折半查找O(log n)O(1)有序表的高效查找
分块查找O(√n)O(√n)有序分块表的查找
二叉排序树O(h)(h为树高)O(n)动态查找,需频繁插入和删除
平衡二叉树O(log n)O(n)需保持动态平衡的高效查找
B树O(log n)O(n)大规模数据的高效查找
哈希查找O(1)(理想情况)O(n)需快速查找的场景,允许一定冲突

六、代码实现

以下分别用 C 语言、C++、Java 和 Python 实现顺序查找、折半查找和哈希查找。

C 语言实现

#include <stdio.h>// 顺序查找
int SequentialSearch(int arr[], int n, int target) {for (int i = 0; i < n; i++) {if (arr[i] == target) { // 如果找到目标值return i; // 返回元素的索引}}return -1; // 未找到返回-1
}// 折半查找(要求数组有序)
int BinarySearch(int arr[], int n, int target) {int low = 0, high = n - 1;while (low <= high) {int mid = (low + high) / 2;if (arr[mid] == target) { // 如果找到目标值return mid; // 返回元素的索引} else if (arr[mid] < target) {low = mid + 1; // 在右半区间继续查找} else {high = mid - 1; // 在左半区间继续查找}}return -1; // 未找到返回-1
}// 哈希查找(简单示例)
#define HASHTABLE_SIZE 10
int HashTable[HASHTABLE_SIZE];// 哈希函数
int HashFunction(int key) {return key % HASHTABLE_SIZE;
}// 插入哈希表
void InsertHashTable(int key) {int address = HashFunction(key);HashTable[address] = key; // 插入元素
}// 在哈希表中查找
int SearchHashTable(int key) {int address = HashFunction(key);if (HashTable[address] == key) { // 如果找到目标值return address; // 返回元素的索引}return -1; // 未找到返回-1
}int main() {int arr[] = {1, 3, 5, 7, 9};int n = sizeof(arr) / sizeof(arr[0]);printf("顺序查找 5 的索引:%d\n", SequentialSearch(arr, n, 5));printf("折半查找 5 的索引:%d\n", BinarySearch(arr, n, 5));// 哈希查找示例InsertHashTable(5);InsertHashTable(15);printf("哈希查找 5 的索引:%d\n", SearchHashTable(5));printf("哈希查找 15 的索引:%d\n", SearchHashTable(15));return 0;
}

C++ 实现

​
#include <iostream>
#include <vector>
using namespace std;// 顺序查找
int SequentialSearch(vector<int> arr, int target) {for (int i = 0; i < arr.size(); i++) {if (arr[i] == target) { // 如果找到目标值return i; // 返回元素的索引}}return -1; // 未找到返回-1
}// 折半查找(要求数组有序)
int BinarySearch(vector<int> arr, int target) {int low = 0, high = arr.size() - 1;while (low <= high) {int mid = (low + high) / 2;if (arr[mid] == target) { // 如果找到目标值return mid; // 返回元素的索引} else if (arr[mid] < target) {low = mid + 1; // 在右半区间继续查找} else {high = mid - 1; // 在左半区间继续查找}}return -1; // 未找到返回-1
}// 哈希查找(简单示例)
const int HASHTABLE_SIZE = 10;
int HashTable[HASHTABLE_SIZE] = {0};// 哈希函数
int HashFunction(int key) {return key % HASHTABLE_SIZE;
}// 插入哈希表
void InsertHashTable(int key) {int address = HashFunction(key);HashTable[address] = key; // 插入元素
}// 在哈希表中查找
int SearchHashTable(int key) {int address = HashFunction(key);if (HashTable[address] == key) { // 如果找到目标值return address; // 返回元素的索引}return -1; // 未找到返回-1
}int main() {vector<int> arr = {1, 3, 5, 7, 9};cout << "顺序查找 5 的索引:" << SequentialSearch(arr, 5) << endl;cout << "折半查找 5 的索引:" << BinarySearch(arr, 5) << endl;// 哈希查找示例InsertHashTable(5);InsertHashTable(15);cout << "哈希查找 5 的索引:" << SearchHashTable(5) << endl;cout << "哈希查找 15 的索引:" << SearchHashTable(15) << endl;return 0;
}​

Java 实现

​
import java.util.Arrays;public class SearchExample {// 顺序查找public static int sequentialSearch(int[] arr, int target) {for (int i = 0; i < arr.length; i++) {if (arr[i] == target) { // 如果找到目标值return i; // 返回元素的索引}}return -1; // 未找到返回-1}// 折半查找(要求数组有序)public static int binarySearch(int[] arr, int target) {int low = 0, high = arr.length - 1;while (low <= high) {int mid = (low + high) / 2;if (arr[mid] == target) { // 如果找到目标值return mid; // 返回元素的索引} else if (arr[mid] < target) {low = mid + 1; // 在右半区间继续查找} else {high = mid - 1; // 在左半区间继续查找}}return -1; // 未找到返回-1}// 哈希查找(简单示例)private static final int HASHTABLE_SIZE = 10;private static int[] hashTable = new int[HASHTABLE_SIZE];// 哈希函数private static int hashFunction(int key) {return key % HASHTABLE_SIZE;}// 插入哈希表public static void insertHashTable(int key) {int address = hashFunction(key);hashTable[address] = key; // 插入元素}// 在哈希表中查找public static int searchHashTable(int key) {int address = hashFunction(key);if (hashTable[address] == key) { // 如果找到目标值return address; // 返回元素的索引}return -1; // 未找到返回-1}public static void main(String[] args) {int[] arr = {1, 3, 5, 7, 9};System.out.println("顺序查找 5 的索引:" + sequentialSearch(arr, 5));System.out.println("折半查找 5 的索引:" + binarySearch(arr, 5));// 哈希查找示例insertHashTable(5);insertHashTable(15);System.out.println("哈希查找 5 的索引:" + searchHashTable(5));System.out.println("哈希查找 15 的索引:" + searchHashTable(15));}
}​

Python 实现

​
# 顺序查找
def sequential_search(arr, target):for index, value in enumerate(arr):if value == target:  # 如果找到目标值return index  # 返回元素的索引return -1  # 未找到返回-1# 折半查找(要求数组有序)
def binary_search(arr, target):low, high = 0, len(arr) - 1while low <= high:mid = (low + high) // 2if arr[mid] == target:  # 如果找到目标值return mid  # 返回元素的索引elif arr[mid] < target:low = mid + 1  # 在右半区间继续查找else:high = mid - 1  # 在左半区间继续查找return -1  # 未找到返回-1# 哈希查找(简单示例)
HASHTABLE_SIZE = 10
hash_table = [None] * HASHTABLE_SIZE# 哈希函数
def hash_function(key):return key % HASHTABLE_SIZE# 插入哈希表
def insert_hash_table(key):address = hash_function(key)hash_table[address] = key  # 插入元素# 在哈希表中查找
def search_hash_table(key):address = hash_function(key)if hash_table[address] == key:  # 如果找到目标值return address  # 返回元素的索引return -1  # 未找到返回-1if __name__ == "__main__":arr = [1, 3, 5, 7, 9]print("顺序查找 5 的索引:", sequential_search(arr, 5))print("折半查找 5 的索引:", binary_search(arr, 5))# 哈希查找示例insert_hash_table(5)insert_hash_table(15)print("哈希查找 5 的索引:", search_hash_table(5))print("哈希查找 15 的索引:", search_hash_table(15))​

七、总结

   查找算法是数据结构中的重要部分,很重要哦!还有排序!不同的查找算法适用于不同的场景。通过本文的介绍,希望能帮助读者理解和掌握常见的查找算法,并能根据实际需求选择合适的查找方法。

http://www.dtcms.com/wzjs/452594.html

相关文章:

  • 网站建设的重点是什么百度搜索引擎优化案例
  • 微信营销网站建设做网站
  • 备案 网站下线成都百度
  • 什么做的网站吗网站营销策划公司
  • 程序员做网站赚钱做百度推广员赚钱吗
  • 衡阳商城网站建设最近几天发生的新闻大事
  • 保健品网站建设背景中国站长
  • 温州网站建设 seo营销推广案例
  • 网站建设 图纸网网络公司关键词排名
  • 南昌网站建设费用网站seo需要用到哪些工具
  • 沈阳企业网站制作哪家好外链在线生成
  • 苏州建设职业培训中心网站金戈枸橼酸西地那非片
  • 邯郸市出租房屋信息网深圳百度快照优化
  • 河北省住建和城乡建设厅网站搜索引擎推广案例
  • c 如何做网站四川seo哪里有
  • 上海网站建设公司怎么分辨好坏百度竞价推广代理商
  • 安徽网络优化公司排名东莞搜索优化
  • 网站源码下载视频怎么自己弄一个平台
  • 做网站找沈阳横纵网络整合营销案例
  • 深圳做营销网站新手怎么学做电商
  • 动画做视频在线观看网站企业网站推广方法
  • 微网站开发微网站建设青岛网站建设有限公司
  • 梅河口建设局网站百度咨询电话 人工
  • 自动生成前端页面工具搜狗搜索引擎优化论文
  • mvc做的网站seo网址
  • 自己做的网站 网站备案流程网站建设服务公司
  • 做区域分析的地图网站360推广登陆入口
  • 房山做网站品牌全网推广
  • 垂直b2b电子商务网站有哪些互联网推广是做什么的
  • 门户网站管理建设南宁网站建设