`
talin2010
  • 浏览: 513099 次
  • 性别: Icon_minigender_1
  • 来自: 河北
社区版块
存档分类
最新评论

在链表中等概率选取元素

 
阅读更多

1. 在链表中等概率选取一个元素

代码:

nmatch = 0;
for (p = list; p != NULL; p = p->next)
if (rand() % ++nmatch == 0)
selected = p;

return selected;

解释:
对第 k 个节点(从 k=1 开始计数,最大为链表长度n),它被选中的情况是 selected = p; 被执行,并且后面的所有节点都不执行这一句,其概率为
1 1 1 1 1
- * (1- ---) * (1- ---) * ... * (1- -) = -
k k+1 k+2 n n

分享到:
评论

相关推荐

    删除三个链表中相同的元素

    建立三个链表,然后删除A链表中与B,C链表中相同的元素,打印出各链表中的数据元素。

    删除链表中重复元素(c语言版)

    `createNode`函数用于创建新的节点,`initList`函数用于初始化空链表,`insertNode`函数用于在链表尾部插入元素,`printList`函数用于打印链表的所有元素: ```c ListNode* createNode(int val) { ListNode* new...

    关于链表的创建和对链表的操作

    在本文中,我们将深入探讨线性单链表的创建和操作,包括链表结点的定义、链表指针类型、创建链表结点的函数、创建线性表的函数、向链表末尾追加元素、获取链表元素地址、删除链表元素以及清空链表。 首先,链表结点...

    C++实现链表模板(链表项的数据元素可以为任意类型):链表项的插入、删除、链表的打印、两个链表的连接VS2010

    在这个项目中,我们利用C++的模板类来实现一个通用的链表,允许链表项的数据元素可以是任意类型。这极大地增强了代码的复用性。 首先,我们要理解C++中的类模板。类模板是C++的一个强大特性,它允许我们创建可以...

    去除链表重复元素-Java 实现

    在遍历链表的过程中,我们将每个元素与集合中的元素进行比较,如果发现重复,则删除链表中的该元素。 在这段代码中,LinkedList类包含一个removeDuplicates方法,用于去除链表中的重复元素。我们使用一个HashSet来...

    C++使用递归来顺序和逆序输出链表的全部元素

    在顺序输出链表元素时,递归函数`printl`从链表的头部开始,先输出当前节点的值,然后递归调用自身处理下一个节点,直到链表结束。 ```cpp void printl(LIST p) { if (p == NULL) { ; } else { cout << p->data ...

    数据结构实验——链表

    2. 使用`ShowList`函数遍历链表并显示所有元素,确保它们在显示器上可见。 3. `LenList`函数用于计算链表的长度,通过遍历链表并计数节点来实现。 4. 求链表的第i个元素,`GetElem`函数接受链表和索引i作为参数,...

    删除循环双向链表中指定元素

    本小程序是对于循环双向链表中删除指定元素 考虑几种边界情况!

    c语言链表的基本操作之删除排序链表中的重复元素.zip

    在C语言中,链表是一种非常重要的数据结构,它允许我们动态地存储和管理数据,尤其是在内存分配不连续的情况下。本教程将深入探讨如何进行链表的基本操作,并特别关注一个特定的问题:如何删除排序链表中的重复元素...

    C#单向链表的实现

    通过`Add`方法可以在链表末尾添加元素,`Insert`方法允许在指定位置插入元素,`RemoveAt`方法删除指定位置的元素,`Length`属性返回链表的长度,`Contains`方法检查链表中是否包含特定值。 在实际应用中,你可能会...

    php-leetcode题解之删除排序链表中的重复元素.zip

    链表是一种线性数据结构,与数组不同,它的元素在内存中不是连续存储的。每个元素(节点)包含两个部分:数据域和指针域,指针域指向下一个元素的位置。链表可以是单向的,也可以是双向的,这里讨论的是单向链表。 ...

    C语言链表的相同元素的删除

    链表相同元素删除 TC和W-TC已运行成功

    删除排序链表中的重复元素1

    在给定的问题中,我们需要处理一个排序链表,并删除所有重复的元素,使得链表中的每个元素只出现一次。这是一个常见的链表操作问题,适用于数据结构和算法的学习。以下是关于这个问题的详细解释: 首先,链表是一种...

    按要求删除链表中的元素,并保持链表连续性

    《数据结构》作业系统题目:按要求删除链表中的元素,并保持链表连续性

    双向链表的操作

    建立一个长度为n的带头结点的双向链表,使得该链表中的数据元素递增有序排列。(必须使用双向链表完成,数据类型为整型。) Input 第一行:双向表的长度; 第二行:链表中的数据元素。 Output 输出双向链表中...

    用最快的方法取链表的中间元素

    可快速返回链表的中间元素,算法实现:同时定义两个计数器,之间有2倍的关系,即当一个计数器找到最后一个元素时,另外一个便是中间元素。不过其中有数据类型的转换、数据奇偶的判断。

    建立新链表储存两旧链表中的元素的交集

    建立新链表储存两旧链表中的元素的交集

    c++ 链表应用 链表类源代码 原创

    1. **链表的插入**:在链表中插入元素涉及到在适当位置创建新节点,并更新前一个节点的指针指向新节点。这通常在头部、尾部或特定位置进行。 2. **链表的删除**:删除操作需要找到要删除的节点,然后更新其前一个...

    数据结构来去除链表中的重复元素-java.zip

    链表去重的核心在于设计一个算法,该算法能够在遍历链表的同时识别并移除重复的元素。这里我们将探讨几种不同的方法,包括使用哈希映射、双指针以及自定义数据结构等策略。 1. 哈希映射法: 这种方法是利用Java中的...

    数据结构实验(链表)

    3. **实现元素查找**:开发功能以确定特定元素在链表中的位置,或判断该元素是否存在。 4. **实现元素的插入**:在链表的指定位置插入新元素,并验证插入操作的正确性。 5. **实现元素的删除**:移除链表中指定位置...

Global site tag (gtag.js) - Google Analytics