當前位置:首頁 » 操作系統 » 演算法題消除

演算法題消除

發布時間: 2023-04-29 17:32:06

㈠ 離散數學消解演算法C語言編程題大神們幫幫忙

IT 核心提示:IT產業涵蓋的范圍斗模拆很廣,大凡處空棗理或者應用到信碼和息技術的產業,諸如銀行,咨詢,醫院,出版,製造, 影視等等,他們共同的特點都是依賴於信息和信息系統。

㈡ 數據結構,演算法設計題。:1設計演算法實現刪除順序表中多餘重復元素,如:對於順序表(1 . 2 .3 .

先對順序表的元素進行排序,然後比較有重復則刪除

解決方法:

  • #include <stdio.h>//刪除一列數中重復的數字使之只保留一個

  • #define N 6

  • void delete(int a[],int j){int i;

  • } j=0;

  • for(i=0;i<N-1;i++)

  • { if(a[j]==a[j+1]) {

  • deletel(a,j);

  • j--;//沒刪除一個數字j減一,保證遍歷到每個數字

  • 還有一種方法的用兩個順序表,一個為源表(存原數列),一個為目標表,將源表中的元素王目標表中移(有與之相同的則刪除,沒有則保存)

㈢ 演算法問題 warning C4715: 「func」: 不是所有的控制項路徑都返回值 怎麼消除

#include "stdaf.h"
#include <iostream>
using namespace std;
/碼搭/找到第m小喚搜的數
int func(int a[] , int first ,int last , int m)
{
static int tt;
if(first == last)
{
tt = a[first];
}
if(first < last)
{
int i = first , j = last;
int t = a[i];
while(i < j)
{
while(i < j && a[j] > t)
{
--j;
}
if(i < j)
{
a[i++] = a[j];
}
while(i < j && a[i] < t)
{
++i;
}
if(i < j)
{
a[j--] = a[i];
}
}

a[i] = t;
if(i < m-1)
{
func(a , i+1 , last , m);
}
else if(i > m-1)
{
func(a , first , i-1 , m);
}
else
{
tt = a[i];

}

}

return tt;
}

int main()
{
int a[] = {2, 5, 3, 7, 2, 8, 9};
for(int i = 0 ; i != sizeof(a) / sizeof(a[0]) ; ++i)
{
cout<<a[i]<<'\t';
}
cout<< endl << "*************************" << endl;
cout<<func(a , 0 , sizeof(a) / sizeof(a[0]) - 1 , 1)<<遲鏈拿endl;
return 0;
}

㈣ 數據結構演算法編程題,刪除帶頭結點的單鏈表中最大元素或最小元素

//刪除單鏈表中最大元素
Del-max(link a){
int tmp;
element *p;
element *max;
p=a; //指針,用於遍歷鏈表,取數與當前最大結點值比較
max=a; //指針,用於記錄最大元素所在位置(未考慮有多個最大元素)
tmp=p->data; //變數,用於記錄當前最大結點值
while(a->next!=null){
p=p->next;
if(p->data>tmp){ 、//如果當前指針所指結點值大於當前tmp所保留的值,則記錄
max=p; //當前位置(放入到max),記錄當前最大值(放入tmp)
tmp=p->data;
} //end of if
} //end of while
tmp=max->next->data; //一次遍歷後max指針所指結點就是最大元素,刪除之。。。
max->data=tmp;
max->next=max->next->next; //刪除方法能看懂么?好好思考。。。
}//end of Del-max

㈤ 數據結構演算法設計題:單循環鏈表中刪除表中所有數值相同的多餘元素

//演算法設計題:單循環鏈表中刪除表中所有數值相同的多餘元素
#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
#define OK 1
#define Status int
typedef struct LNode
{
int data;
LNode *next;
}LNoed,*LinkList;
Status CreateList_L(LinkList &L)
{
int n,i;
LinkList p,q;
printf("input the length of the List\n");
scanf("%d",&n);
printf("input the data\n");
L=(LinkList)malloc(sizeof(LNode));
q=L;
scanf("%d",&L->data);
//L->next=NULL;
for(i=2;i<=n;i++)
{
p=(LinkList)malloc(sizeof(LNode));
scanf("%d",&p->data);
q->next=p;
//p->next=NULL;
q=p;
}
p->next=L;

return OK;
}
Status OutList_L(LinkList L)
{
printf("the List is\n");
LinkList p;
p=L;
do
{
printf("%4d",p->data);
p=p->next;
}while(p!=L);
printf("\n");
return OK;
}
Status ListDelete_L(LinkList &L)
{
LinkList q,r,p,p1;
q=L;
do
{ p=q;
p1=p->next;
while(p1!=L)
{

if(q->data==p1->data)
{ r=p1;
p1=p->next=r->next;
free(r);
}
else
{
p1=p1->next;
p=p->next;
}
}

q=q->next;
}while(q!=L);
return OK;
}

void main()
{
LinkList La;
CreateList_L(La);
OutList_L(La);
ListDelete_L(La);
OutList_L(La);
}

//朋友,這是我花了一個小時寫出來肢睜的,我覺得用雙向鏈表其實更好做。記住一定要自己想喲,上面的程序僅供參考!一定要在VC中運行悔橘喲,因為&是C++裡面的東碧飢團西。不過你也可以改用指針。

㈥ 常見演算法問題總結

這里我就講自己做的kaggle上的一個競賽了,關於廣告欺詐的,講了自己的數據處理,特徵工程,還有主要用xgboost模型,之後用AUC值評估

這里講了一下對數據缺失值,異常值的常見處理方式,以及對數據做離散化的操作,以及數據不平衡的處理

回答的時候差不多按照這些方向回答的:

對樣本少的進行過采樣,對樣本多的進行下采樣,或者相結合

因為我想先有lr模型擬合一下,但是lr模型對數據不平衡特別敏感,所以需要對數據進行采樣,這是好處,但是數據采樣之後會丟失一些特徵,這個只是單純的用lr看一下效果,大概的baseline

更換模型,比如我採用xgboost模型,或者nn模型就不用過薯帆多的處理不平衡的數據。

我說根據業務的需要,比如廣告欺詐里,對於欺詐產生的場景,哪些特徵是影響結果的,然後講了講我的一些特徵,還有為什麼選這個特徵的原因。

我用xgboost的特徵重要性的函數來篩選,它會給出特徵的評分。

xgboost怎麼給出評分的,以及xgboost的原理你清楚嗎

這個回答我基本是按照我的博客,手推記錄——xgboost,評分就是根據節點分割的增益,原理就從目標函數講起。然後從頭到尾基本說了一遍。

我說使用lgbm主要原因是因為lgbm處理大數據集速度更快,自己並不太清楚lgbm的原理,但是目標函數適合xgb一樣的,只是分裂節點的方式不一樣,xgboost採用的是level-wise的分裂策略,而lightGBM採用了leaf-wise的策略,區別是xgboost對每一層所有節點做無差別分裂,可能有些節點的增益非常小,對結果影響不大,但是xgboost也進行了分裂,帶來了務必要耐激的開銷。 leaft-wise的做法是在當前所有葉子節點中選擇分裂收益最大的節點進行分裂,如此遞歸進行,leaf-wise這種做法容易過擬合,因為容易陷入比較高的深度中,因此需要對最大深度做限制,從而避免過擬合。lightgbm使用了基於histogram的決策樹演算法,這一點不同與xgboost中的 exact 演算法。然後有講了一些其他的不同。

我說,auc值是roc曲線下的面積,用來評判模型結果結果的可信度,可以理解為,在樣本里抽一個正昌手襪樣本和一個負樣本,正樣本的評分高於負樣本的概率比較大。然後面試官說是不是可以理解成auc高的話精確率會高,然後這里我其實不太贊同,但是我當時又沒想到怎麼解釋auc和精確率沒有必然的聯系,沒解釋好,我們兩個討論了好久,最好面試官說,很多人都解釋不清楚。。。然後問我roc曲線怎麼畫出來。我說先把所有樣本給出的評分從高到低排序,然後依次設定閾值,每一次都算出一個真陽率和假陽率,真陽率就是召回,正樣本里有多少預測成正的,假陽率,就是負樣本裡面有多少被預測稱正的。然後以真陽率為縱坐標,假陽率為橫坐標,打點,連線。曲線就是roc曲線了。

我先說rf和gbdt/xgb不一樣,一個是bagging一個是boosting,rf是將樣本抽樣,特徵抽樣,然後訓練很多個弱分類器,然後加權求和。gbdt和xgb都是加法模型,串列的,根據上一個弱分類器的結果訓練下一個分類器,消除殘差。

往殘差的負梯度方向走,來消除殘差。面試問什麼是梯度。我說都是當你上山時,最陡峭的位置,就是梯度。面試還問了梯度下降,以及梯度下降的改進和梯度消失的概念。我就把梯低下降的優化演算法,比如adam講了一下。之後我解釋了目標函數是損失函數加正則項,面試官接著問正則。我把xgb正則的定義說了一下,他說為什麼要加正則,我說是防止過擬合,他說那為什麼加了正則可以防止過擬合,我根據xgb的原理,講了樹在分裂時的表達式,分裂的增益需要減去一個r,這個就可以防止樹瘋長,防止過擬合,然後又講了l1,l2一般化的是怎麼防止過擬合的。

我說自己打算用nn模型,因為工業界已經開始往深度學習方向走了,然後面試問我深度學習了解的怎麼樣,我說知道一點卷積。面試官問,為什麼深度學習會好一點,我說深度學習可以幫我提取特徵。

我從卷積,填充,滑步,池化講了一遍。面試官說,那你覺得卷積有什麼好的或者不足,我說卷積最大的好處是參數共享,可以減少求參。不足就是沒辦法識別大圖。就是空間信息不能捕捉,卷積之後特徵會丟失。

㈦ 消除冗餘序列演算法

main()
{
int a[100];
int i, t,b,c;
printf("please enter 100 number.");
do
{
for(i=0;i<100;i++)
{scanf("%d",a[i]);
if(a[i]!=0||a[i]!=1)
{
break;printf("error,please enter again!");
}
else
t=0;
}
} while (t=0) ;

b=strlen(a);

for(i=b,c=1;i>0;i--)
{if (a[i]==a[i-1]==1)
c+=1;
else
break;
}
if(c>=3)
{
a[b]=2;
for(i=1;i<=c;i++)
a[b-i]=0;
a[b-c]=1;
}

for(i=0,c=0;i<b;i++)
{if(a[i]==a[i+1]==1)
c+=1;
else
break;
}
if(c>=3)
{for(i=0;i<=c;i++)
{a[i+1]=a[i];a[i+1]=0;}
a[i]=1;
a[c+1]=2;
}

}
我用的是WIN-TC遍的
已經測試過
可以通過
你可以試試

㈧ 有什麼演算法可以消除相位滯後問題嗎

在同一個周期內,一個正弦量比另一個正弦量早些或晚些到達歲告零值(或最大值),前者被稱為租團超前,後者被稱為滯後.
如果兩個同頻率的正弦量同時達到最大值,則這兩個正弦量稱為同相. 如果兩個同頻率正弦量同時達到零值,但當一個達到正的最大值時,另一個達到負的最大值,則這兩個正弦量乎型明的相位互差180°, 稱為反相.

㈨ 實現刪除數組中某一元素的演算法 本題的詳細要求如下: 1) 當給定一個數

#include <stdio.h>
#include <malloc.h>
#include <string.h>
#include <assert.h>

int *remove_data(int ary[], int n,int index);
void show_arr(int *ary,int size);
int main(int argc,char **argv)
{
int n;
int i = 0;
printf("輸入n的值:");
scanf("%d",&n);
if(n <= 0)
{
printf("輸入無效");
return -1;
}
int arr[n];
int *arr_remind;
printf("輸入%d個數:",n);
for(i = 0;i < n;i++)
{
scanf("%d",&arr[i]);
}
arr_remind = remove_data(arr,n,2);
if(arr_remind == NULL)
{
printf("刪除失敗\n");
return -1;
}
else
{
printf("輸入的數為:");
show_arr(arr,n);
printf("刪除一個元素之後為:");
show_arr(arr_remind,n-1);
free(arr_remind);
}
return 0;
}

int *remove_data(int ary[], int size ,int index)
{

assert(size >= 1);
int *p = (int *)malloc((size - 1)*sizeof(int));

int i = 0;
if(p == NULL)
{
printf("malloc() failed\n");
return NULL;
}

if((index >= size) || (index <滑判 0))
{
printf("invailed index\n");
free(p);
return NULL;
}

memset(p,0,(size - 1)*sizeof(int));
int *p_ori = p;
for(i = 0;i <橡棗 size;i++)
{
if(i != index)
{
*p++ = ary[i];
}
}
return p_ori;
}

void show_arr(int ary[],int size)
{
int loop = 0;
assert(loop <信如改 size);

for(loop = 0;loop < size;loop++)
{
printf("%d ",ary[loop]);
}
printf("\n");
}

熱點內容
安卓usb在設置哪裡 發布:2024-05-20 05:03:03 瀏覽:185
綏化編程 發布:2024-05-20 04:59:44 瀏覽:989
基本原理和從頭計演算法 發布:2024-05-20 04:50:32 瀏覽:28
配置情況指的是什麼 發布:2024-05-20 04:48:14 瀏覽:495
那個程序用來編譯源文件 發布:2024-05-20 04:46:45 瀏覽:549
小程序需要資料庫嗎 發布:2024-05-20 04:35:14 瀏覽:337
鏈接sqlserver 發布:2024-05-20 04:27:53 瀏覽:209
ftp文件伺服器擴容 發布:2024-05-20 04:22:21 瀏覽:646
linux心跳包 發布:2024-05-20 04:17:52 瀏覽:970
android打開資料庫文件 發布:2024-05-20 04:16:07 瀏覽:572