1. 程式人生 > >RFID防碰撞 二進位制樹形搜尋演算法 C語言實現

RFID防碰撞 二進位制樹形搜尋演算法 C語言實現

本篇文章只是簡單的用C語言模擬出了二進位制搜尋演算法的實現方法,但是並沒有用到理論中的二叉樹排序理論,所以並不是一個嚴格意義上的樹形搜尋演算法

話不多說,先上一段A標籤收到讀寫器傳送的REQUEST命令的程式

if(a_val==0) //A讀卡器是否被靜默
{            //若沒有,則檢測A的UID是否小於此輪讀寫器傳送的REQUEST命令
    for(i = 0;i<8;i++)
    {
        if(a[i]<=o[i])
	{
	    a1_val++;
	}	   
    }
    if(a1_val==8)//若每一位都小於,則傳送自身的UID到模擬的公共通道【j】上
    {
         for(i=0;i<8;i++)j[i]=a[i];
    }}
而其他標籤的處理函式與A類似,但需要注意的是,在傳送自身UID到公共通道上時,需檢測一下通道的值是否與自身UID位上的值相同,若不同,則把通道的值置'X',看如下程式碼:
if(b_val==0)
{
    for(i=0;i<8;i++)
    {
	if(b[i]<=o[i])
	{
	    b1_val++;
	}
    }
    if(a1_val==8)//若通道已有標籤傳送自身的UID,則B只需與通道做比較即可,這也是因為本實驗是用程式模擬導致,真正實際是不需要的
    {
        if(b1_val==8)
        {
            for(i=0;i<8;i++)
            {
                if(j[i]!=b[i])
                j[i]='x';
            }
        }
    }
    else 
    {
        if(b1_val==8){
            for(i=0;i<8;i++)
            {
                j[i]=b[i];
            }
        }
    }
}
而讀寫器接收到信道里的資料後開始進行解釋,如下程式所示:
for(i=0;i<8;i++)
{
    if(j[i]!='x')//若通道此位不是無法檢測量,則直接當作讀寫器下一輪的命令值
    o[i]=j[i];
    else if(j[i]=='x')//若通道含有無法檢測量
    {
	o1_val=1;    //進行下一輪迴圈
	if(o_val == 0)//若'X'是最高位,則置零
	{
	o_val=1;
	o[i]='0';
	}
	else o[i]='1';    //否則置一
    }
}

程式一共由兩層do-while迴圈構成,最外層迴圈變數是檢測是否所有的標籤都已讀寫完畢,內層迴圈是是否檢測到了剩餘中最小的UID標籤

具體的程式因為我第一次寫部落格,不知道怎麼上傳檔案,所有需要的同學可以私聊我~~

第一次寫部落格,有很多不懂的地方,而且這個演算法也不是標準意義上的二進位制樹形搜尋演算法,希望對您有所啟發。

相關推薦

RFID碰撞 二進位制樹形搜尋演算法 C語言實現

本篇文章只是簡單的用C語言模擬出了二進位制搜尋演算法的實現方法,但是並沒有用到理論中的二叉樹排序理論,所以並不是一個嚴格意義上的樹形搜尋演算法話不多說,先上一段A標籤收到讀寫器傳送的REQUEST命令的程式if(a_val==0) //A讀卡器是否被靜默 {         

SHA-1演算法C語言實現

> 程式碼轉載自:https://blog.csdn.net/testcs_dn/article/details/25771377?locationNum=13&fps=1 > 感謝博主分享 #include<stdio.h> void creat_w(uns

頁面置換演算法——最近最久未使用演算法(c語言實現)

作業系統實驗:用C語言程式設計實現最近最久未使用置換演算法(LRU) 最近最久未使用置換演算法(LRU),全稱Least Recently Used,是一種頁面置換演算法。 對於在記憶體中但又不用的資料塊(記憶體塊)叫做LRU,作業系統會根據哪些資料屬於LRU而將其移出記憶體而騰出空間來載入另外

建立雙向連結串列的演算法——C語言實現

建立雙向連結串列的演算法——C語言實現 雙向連結串列也叫雙鏈表,是連結串列的一種,它的每個節點包含兩個指標,分別指向直接後繼和直接前驅(頭節點的前驅指空,尾節點的後繼指空)。所以,從雙向連結串列中的任意一個非前驅非後繼節點開始,都能很方便地訪問它的前驅和後繼節點。 實際上如果熟練掌握了單向連

差分進化演算法 C語言實現

之前的一篇中貼出了自己研究生期間C實現的基本粒子群演算法,執行速度顯然要比其他的高階語言快,這也是各個程式語言之間的差別,現在對於曾經輝煌過的差分進化演算法進行C語言實現。變異策略採用DE/rand/1,這個是最常見的。有錯誤之處請之處。 /***************D

氣泡排序演算法C語言實現

第一部分   排序方法介紹 常用的排序方法:氣泡排序,選擇排序,插入排序及希爾排序等。        氣泡排序是常用的一種排序方法,其基本方法就是逐次比較。即一次比較兩個數,若它們的順序錯誤,則交換;重複進行,知道沒有需要交換為止。 以升序排序為例:        1.

MD5加密演算法C語言實現

md5.h #ifndef MD5_H #define MD5_H typedef struct { unsigned int count[2]; unsigned int state[4]; unsigned char buffe

[leetcode]Validate Binary Search Tree (判斷有效二叉搜尋C語言實現)

Validate Binary Search Tree Given a binary tree, determine if it is a valid binary search tree (BST). Assume a BST is defined as

磁碟排程演算法C語言實現

最短尋道時間優先(SSTF)演算法。要求訪問的磁軌,與當前磁頭所在的磁軌距離最近,以使每次的尋道時間最短。掃描排程(SCAN)演算法。該演算法不僅考慮到欲訪問的磁軌與當前磁軌間的距離,更優先考慮的是磁頭當前的移動方向。例如,當磁頭正在自裡向外移動時,SCAN演算法所考慮的下一

非常值得一看—九種濾波演算法C語言實現

關注“嵌入式軟體開發學習圈”免費獲取更多學習教程 今天帶著大家學習濾波演算法c語言(九種濾波演算法)實現,以及程式碼,大家可以學習瞭解下。。。。 1.限幅濾波演算法(程式判斷濾波演算法) 方法解析: 根據經驗判斷,確定兩次取樣允許的最

作業排程之先來先服務演算法C語言實現

程式碼如下 /*    @author WellsLiu    @url liuyanzhao.com*/#include"stdio.h"#include"stdlib.h"typedef st

處理機排程演算法C語言實現(註釋得當!!)

/* created by herbert on 10 Nov */ #include <iostream> #include <queue> #include <algorithm> #include <c

最短路徑之Dijkstra演算法 C語言實現

Dijkstra演算法(單源點路徑演算法,要求:圖中不存在負權值邊): 步驟: a.  初始時,S只包含源點,即S={v},v的距離為0。U包含除v外的其他頂點,即: U={其餘頂點},若v與U中頂點u有邊,則u的距離設定為相應的權值,若u v之間不存在邊,則    

SHA-256演算法 C語言實現

#include <stdio.h> #include <stdlib.h> #define SHA256_ROTL(a,b) (((a>>(32-b))&(0x7fffffff>>(31-b)))|(a<<

哈夫曼壓縮演算法C語言實現——步驟,詳細註釋原始碼

哈夫曼壓縮演算法的詳細實現步驟: 1、定義哈夫曼樹節點,用結構體。 2、利用C語言檔案讀寫,統計字元個數。 3、根據字元個數建立哈夫曼樹(不懂haffman資料結構的自己查下資料,我這裡就不再重複了) 4、根據哈夫曼樹為每個出現的字元編碼 5、壓縮:這裡涉及到位操作,用ch

爐石傳說爆牌魚斬殺演算法C語言實現

#include <stdio.h> int main() {     printf("請輸入敵方血量:\n");     int difangxue;     scanf("%d",&difangxue);     printf("請輸入自己血量:

九大排序演算法-C語言實現及詳解

概述 排序有內部排序和外部排序,內部排序是資料記錄在記憶體中進行排序,而外部排序是因排序的資料很大,一次不能容納全部的排序記錄,在排序過程中需要訪問外存。 我們這裡說說八大排序就是內部排序。     當n較大,則應採用時間複雜度為O(nlog2n)的排序方法:快

Dijkstra演算法 c語言實現

 Dijkstra(迪傑斯特拉)演算法是典型的最短路徑路由演算法,用於計算一個節點到其他所有節點的最短路徑。主要特點是以起始點為中心向外層層擴充套件,直到擴充套件到終點為止。Dijkstra演算法能得出最短路徑的最優解,但由於它遍歷計算的節點很多,所以效率低。   Dijk

dijstra演算法 c語言實現

看來群的作用真的很大啊 剛才為了一下,發現自己的抽象思維能力簡直為0 總以為沒有辦法處理集合,然後群裡面的人說可以用bool 陣列,然後研究了一下,果然可以 演算法描述的時候說集合的並啊,減啊,在c語言裡,用個bool陣列就可以, 剛開始初始化為false 然後進來一個t